第二次博客作业

老子叫甜甜 提交于 2019-12-04 04:52:31

一.运行截图

二.所有函数

int twoToten(int a)//定义求二进制转十进制
{
    int  c;
    int sum = 0;
    int i = 0;;
    while (a != 0) {
        c = a % 10;
        sum = sum + pow(2, i) * c;//
        a /= 10;
        i++;
    }
    return sum;
}

这是一个二进制转换为十进制的函数,此函数用到了库pow,每一次循环时进行取余,然后在在除去个位,转换为十进制时从2的0次方开始相加,每一位数乘以它的对应次方直到i=0;

int eightTotwo(int a)//定义求八进制转二进制
{
    int  c;
    int sum = 0;
    int i = 0;
    while (a != 0) {
        c = a % 10;
        sum = sum + pow(8, i) * c;
        a /= 10;
        i++;
    }
    return tenToeight(sum);//八进制转十进制在转二进制,引用十进制转二进制函数
}

这是求八进制转为二进制的函数。但直接从八进制转为二进制有点困难所以,我先用此函数求出十进制的的数,在调用int tenTotwo(int n)
就可以将八进制转为二进制了,

int tenTotwo(int a)//定义十进制转二进制
{
    int   item, ret;
    int sum, count, result;
    sum = count = result = 0;
    while (a > 0)
    {
        item = a % 2;
        a = a / 2;
        sum = sum * 10 + item;//求二进制
        count++;//计算位数
    }
    do {
        ret = sum % 10;
        result = result * 10 + ret;//逆序输出
        sum = sum / 10;;
        count--;
    } while (count != 0);
    return result;
}

这是一个十进制求二进制函数,第一个while循环求二进制的正序,第二个循环将正序逆序输出,从而得到真正的二进制数;

三,main函数

int main()
{
    int n, a;
    int w = 1;//进入循环的条件
        printf("----------------------------------\n");//菜单
        printf("       进制转换器\n");
        printf("注意:(1)本进制只支持二,八,十进制转换\n");
        printf("     (2)本进制只支持正整数转换\n");
        printf("----------------------------------\n");
        printf("\n====请选择你的进制<===============\n");
        printf("    请选择相应的序号:\n");
        printf("[2]二进制\n[8]八进制\n[10]十进制\n[0]退出 \n");
        printf("==================================\n");
      while(w)
      {
        printf("你的选择是:");
        scanf("%d", &n);//输入序号

        if (n == 2)
        {
            printf("你的二进制数:");
            scanf("%d", &a);
            printf("十进制:%d\n", twoToten(a));
            printf("八进制:%o\n", twoToten(a));//十进制转成八进制
        }

        else if (n == 8)
        {
            printf("你的八进制数:");
            scanf("%o", &a);
            printf("二进制:%d\n", eightTotwo(a));
            printf("十进制:%d\n", a);//用"%d"输出十进制
        }
        else if (n == 10)
        {
            printf("你的十进制数:");
            scanf("%d", &a);
            printf("二进制:%d\n", tenToeight(a));
            printf("八进制:%o\n", a);//直接用"%o"就可以让十进制转成八进制
        }
        else if (n == 0)
        {
            printf("你已退出进制转换器...........");
            break;
        }
        else
        {
            printf("亲,要输入正确的序号哦");//错误提示
        }
    } 
    return 0;
}

四,思维导图

五,问题

1:在函数调用时,出现了一些问题,就是形参和实参应用有些模糊,形参和实参一定要跟主函数相关联,尽量要一样.这样才能保证不错,
2,再编译程序时一定要先分别写使用的函数,这样出错就可以很快改善,
3,一定要先弄清楚进制转换,在编写程序,这样才能高效率的写代码,不然会很累
4,一定要写程序注释,这样才会使程序更加清楚明了,

六,代码互评

这是王昕同学的代码

void eightturn(int choice)
{
    int n, i = 0, item, x, flag, result = 0;
    do {
        flag = 0;
        printf("输入你要转换的数:\n");
        scanf("%d", &n);
        item = n;
        while (item) {//判断输入进制
            x = item % 10;
            if (x > 9) {
                printf("输入错误!!!请重新输入。\n");
                flag = 1;
                break;
            }
            item /= 10;
        }
    } while (flag == 1);
    while (n != 0) {//转换成十进制
        item = n % 10;
        result = result + item * mypow(8, i);
        i++;
        n /= 10;
    }
    printf("转换的数:\n");
    if (choice == 4) turntwo(result);//输出二进制
    else if (choice == 5) printf("%d\n", result);
    else printf("%x\n", result);

    printf("感谢你的使用!");
}

点评:王昕同学的代码写的非常好,他先判定输入是不是八进制数,这个我一直都没想到,他用到了递归的方法,这个一直是我的弱项
我要向王昕同学学习,多请教;

七,总结

1,大作业不像平常的pta作业,一定要用心的去做,要多花时间,不要等快到结束之后在做,这样是不好,不但会让你心疲力竭,也不好
2,一定一定要向别人请教,不要害羞,不然会浪费大量的时间
3,对于函数,一直是一个难点,我认为最难的点在与函数的调用问题,因为稍不小心就会弄错,特别是和数组一起使用的时候;调用函数要进行必要的注释
不要弄错,不然很难改,最后一定要会设置断点,这会省大量的时间,我的总结结束,,

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