博客园作业2

一、运行截图

1、二进制数转八进制数和十进制数。

2、八进制数转二进制数和十进制数。

3、十进制数转二进制数和八进制数。

4、若输入的进制数不是规则中的三种进制,则显示错误。

5、若输入的待转换数的进制不是上一步输入的进制,则显示错误。

二、函数介绍

1、二进制转为八进制和十进制

 

void two_to_eight_and_ten(int x) {
    int i = 0,s10=0,s8=0,y;
    //二进制转十进制
    while (x != 0) {
        //if语句用来判断输入的是否为二进制数
        if (x % 10 > 1) {
            printf("ERROR !");
            return;
        }
        s10 = s10 + x % 10 * pow(2, i);
        i++;
        x = x / 10;
    }
    //十进制转八进制
    y = s10;
    i = 0;
    while (y != 0) {
        s8 = s8 + y % 8 * pow(10, i);
        y = y / 8;
        i++;
    }
    printf("二进制数转为\n八进制数:%d\n十进制数:%d", s8, s10);
}

思路:先判断待转换数是否合法,再把二进制先转为十进制,再转为八进制。

 2、八进制转为二进制和十进制

void eight_to_two_and_ten(int x) {
    int i = 0, s10 = 0, s2 = 0,y;
    //八进制转二进制和十进制
    while (x != 0) {
        //if语句用来判断输入的是否为八进制数
        if (x % 10 > 7) {
            printf("ERROR !");
            return;
        }
        s10 = s10 + x % 10 * pow(8, i);
        i++;
        x = x / 10;
    }
    //十进制转二进制
    y = s10;
    i = 0;
    while (y!=0){
        s2 = s2 + y % 2 * pow(10, i);
        y = y/ 2;
        i++;
    }
    printf("八进制数转为\n二进制数:%d\n十进制数:%d", s2, s10);
}

思路:先判断待转换数是否合法,再把八进制先转为十进制,再转为二进制。 

3、十进制转为二进制和八进制

void ten_to_two_and_eight(int x) {
    int i = 0, s2 = 0, s8 = 0,y;
    y = x;
    //十进制转二进制
    while (x != 0) {
        s2 = s2 + x % 2 * pow(10, i);
        x = x / 2;
        i++;
    }
    //十进制转八进制
    i = 0;
    while (y!=0){
        s8 = s8 + y % 8 * pow(10, i);
        i++;
        y = y / 8;
    }
    printf("十进制数转为\n二进制数:%d\n八进制数:%d", s2, s8);
}

 思路:令y=x,再分别求出其二进制和八进制。

三、main函数

#include <stdio.h>
#include <math.h>
void two_to_eight_and_ten(int x);//二进制转八进制和十进制
void eight_to_two_and_ten(int x);//八进制转二进制和十进制
void ten_to_two_and_eight(int x);//十进制转二进制和八进制
int main() {
    int jzs,dzh;
    printf("输入'2'为二进制,输入‘8’为八进制,输入‘10’为十进制\n");
    printf("输入进制数:");
    scanf_s("%d", &jzs);
    printf("输入一个待转换数:");
    scanf_s("%d", &dzh);
    if (jzs == 2)
        two_to_eight_and_ten(dzh);
    else if (jzs == 8)
        eight_to_two_and_ten(dzh);
    else if(jzs==10)
        ten_to_two_and_eight(dzh);
    else
        printf("ERROR !");
    return 0;
}

 四、思维导图

 

 五、错误分析

 

 源代码

void two_to_eight_and_ten(int x) {
    int i = 0,s10=0,s8=0;
    //二进制转十进制
    while (x != 0) {
        //if语句用来判断输入的是否为二进制数
        if (x % 10 > 1) {
            printf("ERROR !");
            return;
        }
        s10 = s10 + x % 10 * pow(2, i);
        i++;
        x = x / 10;
    }
    //十进制转八进制
    i = 0;
    while (s10 != 0) {
        s8 = s8 + s10 % 8 * pow(10, i);
        s10 = s10 / 8;
        i++;
    }
//问题出在这,这时s10已为0,因此刚开始时要定义一个y,令y=s10,再用y去计算。 printf(
"二进制数转为\n八进制数:%d\n十进制数:%d", s8, s10); }

错误原因:没有定义一个y,令y=s10;导致最后s10的值为0;

六、代码互评

//张旭
int
mypow(int m, int n) { int sum = 1; for (int i = 0; i < n; i++) { sum *= m; } return sum; }

评价:头文件中的pow函数运行起来比较慢,这位同学自己写了个pow函数,提高了代码的运行速度,我自己写的时候并没有想到这点,这值得我学习、借鉴。

七、总结反思

1、学会自己写一些数学函数,可以提高代码的运行速度,而不是只会用头文件里的。

2、写代码的时候,尤其是语句衔接的地方,要注意变量是否需要初始化,否则容易出错。

3、学会熟练使用函数,函数可以增强代码的可读性,同时也能锻炼我们的思维能力。

 

 

 

posted @ 2019-11-10 19:37  123yj  阅读(141)  评论(0编辑  收藏  举报