| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 462 人关注过本帖
标题:求大神将这两个程序放在一个程序里执行连在一起。然后选择1和2执行时使用哪 ...
只看楼主 加入收藏
爱上不完美
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-1-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
求大神将这两个程序放在一个程序里执行连在一起。然后选择1和2执行时使用哪个程序
1
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#define STACK_INIT_SIZE 100    //存储空间初始分配量
#define STACKINCREMENT 10    //存储空间分配增量
int e,m,x,s,t;      //x为要转换的十进制数,e 为临时用的的int型变量
int r,y,i,n;

typedef struct{         
int *base;        //栈底
int *top;        //栈顶
int stacksize;  //栈容量
}SqStack;

int InitStack(SqStack &S){     //构造一个空栈
    S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));
    if(!S.base) exit(0);    //存储空间失败
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return 0;
}

int GetTop(SqStack S, int &e){   //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1
    if(S.top==S.base) return 1;
    e=*(S.top-1);
    return 0;
}

int Push(SqStack &S , int e){       //插入元素e为新的栈顶元素
    if(S.top-S.base>=S.stacksize){   //栈满,追加存储空间
        S.base=(int *)realloc(S.base,
            (S.stacksize+STACKINCREMENT)*sizeof(int));
        if(!S.base) return 1 ;    //存储分配失败
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++=e;
    return 0;
}

int Pop(SqStack &S, int &e){    //若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1
    if(S.top==S.base) return 1;
    e=*--S.top;
    return 0;
}

int StackEmpty(SqStack S){   //若栈空,则返回1,否则返回0
    if(S.top==S.base)
        return 1;
        return 0 ;
}

int DestroyStack(SqStack &S){   //销毁栈S,栈S不再存在
    free(S.base);
    S.top=NULL;             //防止程序后面不小心使用了它
    S.base=S.top;
    return 0 ;
}

SqStack S;             //定义栈S

D2M(int a,int b)            //十进制转换成其他进制的函数D2M()
{
    while(a)
    {
        r=a%b;
        if(r>9)
            r=r+55;
        Push(S,r);      //压入栈
        a/=b;            //转换成M进制
    }
    printf("该数转换成%d进制的结果:",b);
    while(!StackEmpty(S))
    {
        Pop(S,e);       //弹出栈
        if(e>=65)
            printf("%c",e);
        else
            printf("%d",e);
    }
    return 0;
}

M2D()                //其他进制转换为十进制的函数M2D()
{
    char c[1000];
    printf("请输入需要转换的数的位数:");
    scanf("%d",&n);
    printf("请输入需要转换的数的每位并用空格隔开:");
    for(i=0;i<n;i++)
    {
        scanf("%x",&c[i]);
        Push(S,c[i]);
    }
    i=0;
    while(!StackEmpty(S))
    {
        Pop(S,e);
        y+=(int)pow(m,i)*e;
        i++;
    }
    printf("转换成10进制的结果是:");
    printf("%d",y);
    return 0;
}

void main()
{
    InitStack(S);    //构造一个空栈
    printf("请输入需要转换的进制M(2or8or10or16):");
    scanf("%d",&m);
    if(m==10)                     //十进制转换成其他进制
    {
        printf("请给定一个需要转换的10进制数:");
        scanf("%d",&x);
        printf("请输入需要转换成的进制数:");
        scanf("%d",&t);
        D2M(x,t);
    }
    if(m==2||m==8||m==16)               //其他进制转换成十进制,且其他任意进制的相互转换
    {
        M2D();
        printf("\n给定要转换成的进制M:");
        scanf("%d",&s);
        D2M(y,s);
    }
    printf("\n");
    DestroyStack(S);    //销毁栈S,栈S不再存在
   
}
2
#include<stdio.h>
#include<math.h>
#define N 1000

int i,j,y,n,s,x;
int m,r,reminder;

void D2M(int g,int h);
void M2D(int e);
void H2D(int f);
//十进制数转换为其他进制数
void D2M(int g,int h)
{
    int c[N];
    i=0;
    reminder=g%h;
    g=g/h;
    if(reminder>9)
    {
        c[i]=reminder+55;
        i++;
    }
    else
    {
        c[i]=reminder;
        i++;
    }
    if(g>0)
        D2M(g,h);
    for(j=i-1;j>=0;j--)
        if(c[j]>=65)
            printf("%c",c[j]);
        else
            printf("%d",c[j]);}



void M2D(int e)       //二进制和八进制数转换为十进制数,并这转换为其他进制数
{
    int a[N];
    printf("请输入%d进制位数:",m);
    scanf("%d",&n);
    printf("请输入%d进制的每位并使每位用空格隔开:",m);
    for(i=0;i<n;i++)
       scanf("%d",&a[i]);
    for(i=n-1;i>=0;i--)
    {
        y+=(int)pow(e,j)*a[i];    //强制类型转换,以免造成数据丢失
        j++;
    }
    printf("请输出所得的10进制的结果: ");
    printf("%d",y);
    printf("\n需要转换的进制M:");
    scanf("%d",&s);
    printf("请输出转换成%d进制的结果:",s);
    D2M(y,s);
   
}

void H2D(int f)          //十六进制数转换为十进制数,并转换为其他进制数
{
    int b[N];
    printf("请输入%d进制位数:",m);
    scanf("%d",&n);
    printf("请输入%d进制的每位并使每位用空格隔开:",m);
    for(i=0;i<n;i++)
    scanf("%x",&b[i]);
    for(i=n-1;i>=0;i--)   
    {
        y+=(int)pow(f,j)*b[i];      //强制类型转换,以免造成数据丢失
        j++;
    }
    printf("请输出所得的10进制的结果: ");
    printf("%d",y);
    printf("\n需要转换的进制M:");
    scanf("%d",&s);
    printf("请输出转换成%d进制的结果:",s);
    D2M(y,s);
   
}

void main()
{
    printf("请给定一个需转换的进制M(2or8or10or16):");
    scanf("%d",&m);
    if(m==2||m==8)         //二进制和八进制转换成十进制
        M2D(m);
    else if(m==16)        //十六进制转换成十进制
        H2D(m);
    else if(m==10)         //十进制转换成其它进制
    {
        printf("请输入一个%d进制数:",m);
        scanf("%d",&x);
        printf("请输入需要转换成的进制M(2or8or16):");
        scanf("%d",&r);
        printf("请输出转换成%d进制的结果:",r);
        D2M(x,r);
    }
    printf("\n");
}











[ 本帖最后由 爱上不完美 于 2013-1-14 22:16 编辑 ]
搜索更多相关主题的帖子: include 十进制 
2013-01-14 22:10
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:20 
好长,支持下。

www.qunxingw.wang
2013-01-14 22:55
xinglinzhang
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-1-14
收藏
得分:0 
看不懂哎,有心无力啊
2013-01-23 22:25
快速回复:求大神将这两个程序放在一个程序里执行连在一起。然后选择1和2执行时使 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017598 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved