第二次博客园作业

 



                                                                          函数+进制转换器v1.0beta



 

1,运行截图:

(1)输入错误进制数:

(2)输入错误转换进制数:

(3)十进制转二进制演示:

 

(4)十六进制转十进制演示:(加入了十六进制的计算)

 

 

2,代码演示:

(1)将输入数转化为10进制:

int Numberchange10(char a[], int N)
{
    int l, i, num,sum=0;
        
    l = strlen(a);//验证字符串长度
    for (i = 0; i < l; 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 * N + num;
    }
    return sum;//返回10进制值
}

(2)将10进制数转换为所求进制数:

void Numberchange(int m, int N)
{
    int n;
    if (m)
    {
        Numberchange(m / N, N);//函数循环 
        n = m % N;
        if (n < 10)
            printf("%d", n);//小于10直接输出
        else
            printf("%c", n + 55);//大于10转换成字符输出
    }
}

(3)main函数:

int main()
{
    int N, b;
    char a[20]; //定义数组(用来以字符串的形式存放转化数 )       
    printf("请输入待转换数字的进制:");

        scanf("%d", &N);         
    
        if(N!=2&&N!=8&&N!=10&&N!=16)//判断 
    {
    printf("错误!该进制无法转换。");
    return 0;
    } 
    printf("请输入待转换数字:");
    getchar();//将转化数存入数组         
    gets(a);                        //将输入的n进制数存放在数组a中
    int m = Numberchange10(a, N); //将输入数转换为10进制
    printf("请输入需转化的进制数:");
    
        scanf("%d", &b);
    
        if(b!=2&&b!=8&&b!=10&&b!=16)//判断 
    {
    printf("错误!该进制无法转换。");
    return 0;
    } 
    printf("转换的结果为:");
    Numberchange(m, b);//执行函数输出10进制转换结果
    printf("\n");
    system("pause");//暂停等待用户信号 
    return 0;
}

3,思维导图:

 

4,遇到的问题:

(1):不清楚如何编写一个函数一次性将任意进制数转化为10进制。

解决办法:百度,翻书,发现可以利用数组,将任意数的单个项分配到数组中,然后判断类型进行10进制化。

(2):不明白void与int的区别。

解决办法:百度,翻书。void类型的函数不会返回值,而int类型的函数会返回值。

(3):不知道如何将10进制数在转换成任意进制。(对进制转换还是了解甚少)

解决办法:请教度娘,运用函数内循环直接计算。(对函数内调用函数也不太了解,日后会加强理解)

 

5,代码互评

 

int main()
{
    int system1,system2,x;
    printf("输入待转换值为何进制数\n");
    printf("二进制输入2;八进制输入8;十进制输入10\n");
    printf("输入进制数:");
    scanf("%d",&system1);
    if(system1!=2&&system1!=8&&system1!=10){
        printf("ERROR!");
        return 0;
    }
    printf("输入转换后的数为何进制数\n");
    printf("二进制输入2;八进制输入8;十进制输入10\n");
    printf("输入进制数:");
    scanf("%d",&system2);
    if(system2!=2&&system2!=8&&system2!=10){
        printf("ERROR!");
        return 0;
    }
    printf("输入待转换数:");
    scanf("%d",&x);
    if(system1==2&&system2==8){
        twoTOeight(x);
    }
    if(system1==2&&system2==10){
        twoTOten(x);
    }
    if(system1==8&&system2==2){
        eightTOtwo(x);
    }
    if(system1==8&&system2==10){
        eightTOten(x);
    }
    if(system1==10&&system2==2){
        tenTOtwo(x);
    }
    if(system1==10&&system2==8){
        tenTOeight(x);
    }
    if(system1==system2){
        printf("你想这么玩吗,那答案就是%d",x);
    }
    return 0;
}

 

该代码是列举了所有进制转换的情况,写起来比较复杂。

而我的是使用两个函数直接进行进制转换,较为简便。(当然是问过度娘的,我承认。)

 但是他的代码相对与我的更为规整。在代码的格式上以及对进制转换的深度理解我还要加强

总结来说就是还是不够熟练,还是要依靠度娘。一定还要持续练习。

 

 

posted @ 2019-11-10 21:15  MIKELOVE  阅读(141)  评论(0编辑  收藏  举报