第二次作业

拥有回忆 提交于 2019-12-04 02:29:58

一、程序运行截图

1、

2、

3、

4、

5、

二、函数介绍

1、main:在此函数中,选择输入的进制数并输入该数,若输入的进制数不是二进制、八进制、十进制中的一个,直接输出error,若是,先判断该数是否合法,不合法,直接输出error,合法则选择要转化的进制数,调用相应函数

2、two(int x):将十进制转化为二进制

int two(int x)
{
    int i,count;
    for(i=0;x!=0;i++){
    a[i]=x%2;
    x=x/2;
    count=i;
    }
    for(i=count;i>=0;i--)
    printf("%d",a[i]);
} 

3、eight(int x):将十进制转化为八进制

int eight(int x)
{
    int i,count,digit;
    for(i=0;x!=0;i++){
        a[i]=x%8;
        x=x/8;
        count=i;
    }
    for(i=count;i>=0;i--)
    printf("%d",a[i]);
}

4、to_ten(int x):将二进制或八进制转为十进制

int to_ten(int x)
{
    int i,z,sum;
    sum=0;
    if(choice==2){
        for(i=0;x!=0;i++){
            z=x%2;
            sum=sum+z*pow(2,i);
            x=x/10;
        }
        return sum;
    }//二进制转十进制 
    if(choice==8){
        for(i=0;x!=0;i++){
            z=x%8;
            sum=sum+z*pow(8,i);
            x=x/8;
        }
        return sum;
    }//八进制转十进制 
}

5、pow函数:在转十进制中发挥作用,与for循环配合,将每位的数字转为十进制的表达形式,逐步相加,得到它的十进制数;将数字字符型转化为整型

三、全局变量

1、int choice:使输入的进制在所有函数中都起作用,在调用to_ten(int x)函数转十进制时可直接判断执行哪个操作
2、int a[1000]:使数组在two(int x)函数和eight(int x)函数中都可以用,无需定义两次,让代码更简洁,且利于逆序输出

四、main函数

int main()
{
    int j,x,y,t,flag;
    flag=1;
    printf("输入的进制数:");
    scanf("%d",&choice);
    switch(choice){
        case 2:{
            scanf("%d",&x);
            y=x;
            do{
                j=y%10;
                if(j==0||j==1) y=y/10;
                else {
                    flag=0;
                    break;
                }
            }while(y!=0);//判断输入是否合法 
            if(flag==0){
                printf("ERROR\n");
                break;
            }else{
            printf("要转化成的进制数:");
            scanf("%d",&t);
            x=to_ten(x);
            if(t==10) printf("%d",x);
            if(t==8) eight(x);
            break;
            }
        }
        case 8:{
            scanf("%d",&x);
            y=x;
            do{
                j=y%10;
                if(j>=0&&j<=7) y=y/10;
                else {
                    flag=0;
                    break;
                }
            }while(y!=0);
            if(flag==0){
                printf("ERROR\n");
                break;
            }else{
            printf("要转化成的进制数:");
            scanf("%d",&t);
            x=to_ten(x);
            if(t==10) printf("%d",x);
            if(t==2) two(x);
            break;
            }
        }
        case 10:{
            int i,c,sum,a[1000];
            c=sum=0;
            i=0;
            char s[1000];
            scanf("%s",s);
            for(i=0;s[i]!='\0';i++){
                if(s[i]>='0'&&s[i]<='9'){
                    c++;
                }
                else {
                    flag=0;
                    break;
                }
            }//判断输入是否合法 
            if(flag==0){
                printf("ERROR\n");
                break;
            }else{
                for(i=0;i<c;i++){
                    a[i]=s[i]-'0';
                    sum=sum+a[i]*pow(10,c-1-i); 
                }//将数字字符型转化为整型 
            printf("要转化成的进制数:");
            scanf("%d",&t);
            if(t==8) eight(sum);
            if(t==2) two(sum);
            break;
            }
        }
        default:printf("ERROR");break;//输入的进制数不属于二进制、八进制、十进制中的任意一个 
    }
    return 0;
}

五、思维导图

六、问题和解决方法

1、输入八进制时用了%o,使判断输入的八进制是否合法时出错
解决方法:将%o改为%d
2、判断输入的十进制是否合法时出错,无法正确判断有字母出现的情况
解决方法:将数以字符串数组的形式输入,判断它们是否范围都在‘0’~‘9’之间,合法再将数字字符转为整型

七、代码互评(网络1913杨涛)

int Tennum(char a[],int b)//将输入的数字转换为10进制数
{
    int len, i, num;
    int sum = 0;
    len = strlen(a);//求字符长度
    for (i = 0; i < len; i++) 
    {
        if (a[i] >= '0' && a[i] <= '9')
        {
            num = a[i] - '0';
        }
        else if (a[i] >= 'A' && a[i] <= 'F')
        {
            num = a[i] - 'A' + 10;
        }
        sum = sum * b + num;
    }
    return sum;
}

1、杨同学直接调用库函数中的strlen求字符长度,代码更简洁;而我用for语句算出最后一个字符的下标
2、杨同学用字符串输入,用了一个函数就可以完成任意进制转为十进制;而我在这里没用字符串,而是对输入的数进行取余、相加、除法计算,且无法进行十六进制的转化

八、总结

1、收获:熟悉了进制的转化;在需要逆序输出数字时,选择数组会方便一些;了解了字符型和整型之间的转化
2、函数理解:函数可提高代码的可读性;可在一个函数中调用其他的函数;若是两个函数之间有共同的变量,可以将该变量定义为全局变量,更方便简洁

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!