第二次博客作业: 函数+进制转换器

一.运行截图:

1.十进制数转二进制数:

 

 

 2.十进制数转八进制数:

 

 

 3.十进制数转十六进制数:

 

4.二进制数转十进制数:

 

5.八进制数转十进制数:

 

6.十六进制数转十进制数:

 

二.函数介绍:

1.函数声明

void two_ten();//二进制转十进制
void eight_ten();//八进制转十进制
void sixteen_ten();//十六进制转十进制
void ten_two();//十进制转二进制
void ten_eight();//十进制转八进制
void ten_sixteen();//十进制转十六进制

2.函数void ten_two();//十进制数转二进制数:

void ten_two() {
    int num, i;
    int a[20];
    printf("\n请输入一个十进制数:");
    scanf("%d", &num);
    for (i = 0; 1; i++) { 
        a[i] = num % 2;
        num = num / 2;
        if (num == 0) {
            break;
        }
    }
    printf("转换为二进制:"); 
    for (; i >= 0; i--) {
        printf("%d", a[i]);
    }
    printf("\n");
}

注:利用for循环使十进制数转为二进制数并存入数组当中。

3.函数void ten_eight();//十进制数转八进制数:

void ten_eight() {
    int number, i;
    int a[20];
    printf("\n请输入一个十进制数:");
    scanf("%d", &number);
    for (i = 0; 1; i++) {//将十进制转为八进制并存入数组
        a[i] = number % 8;
        number = number / 8;//辗转相除
        if (number == 0) {
            break;
        }
    }
    printf("转换为八进制:");
    for (; i >= 0; i--) {
        printf("%d", a[i]);
    }
    printf("\n");
}

4.函数void ten_sixteen();//十进制数转十六进制数:

void ten_sixteen() {
    int number, i;
    int a[20];
    printf("\n请输入十进制数:");
    scanf("%d", &number);
    for (i = 0; 1; i++) {//将十进制转化为十六进制并存入数组
        a[i] = number % 16;
        number = number / 16;//辗转相除
        if (number == 0) {
            break;
        }
    }
    printf("转化为十六进制数:");
    for (; i >= 0; i--) {
        switch (a[i]) {//利用switch输出各种情况下的答案
        case 10:printf("A"); break;
        case 11:printf("B"); break;
        case 12:printf("C"); break;
        case 13:printf("D"); break;
        case 14:printf("E"); break;
        case 15:printf("F"); break;
        default:printf("%d", a[i]);
        }
    }
    printf("\n");
}

 

5.函数void two_ten();//将二进制转化为十进制:

void two_ten()
{
    long number;
    int  x, y = 0, total = 0;
    printf("\n请输入一个二进制数:");//只包含0或1
    scanf("%ld", &number);
    while (number)
    {
        x = number - (int)(number / 10) * 10;
        y += x * pow(2, total);;
        total++;
        number = (int)(number / 10);
    }
    printf("转换为十进制:"); 
    printf("%d", y);
    printf("\n");
}

注:(1).输入的二进制数只包含0或1;

(2).调用pow函数计算,将二进制数转换为十进制数。

6..函数void eight_ten();//将八进制转化为十进制:

void eight_ten()
{
    int number, i;
    int a[20];
    printf("\n请输入一个八进制数:");
    scanf("%o", &number);

    printf("转换为十进制:");
    printf("%d", number);
    printf("\n");
}

注:用%o输入八进制数,%d输出十进制数。输入的八进制数范围为[0,7].

7.函数void sixteen_ten();//将十六进制转化为十进制:

void sixteen_ten()
{
    int number, i;
    int a[20];
    printf("\n请输入一个十六进制数:");
    scanf("%X", &number);

    printf("转换为十进制:"); 
    printf("%d", number);
    printf("\n");
}

注:用%x输入十六进制数,%d输出十进制数。输入的十六进制数范围为[0,9]||[A,F].

三.main函数:

void main() {
    int select;
    printf("进制转换器\n");
    printf("请输入您的选择:\n");
    do {
        printf("0 - 退出,1 - 十进制转二进制,2 - 十进制转八进制,3 - 十进制转十六进制,4 - 二进制转十进制,5 - 八进制转十进制,6 - 十六进制转十进制");
        scanf("%d", &select);
        switch (select) {
        case 1: ten_two(); break; //十进制转二进制 
        case 2: ten_eight(); break;  //十进制转八进制
        case 3: ten_sixteen(); break;  //十进制转十六进制
        case 4: two_ten(); break;  //二进制转十进制
        case 5: eight_ten(); break;  //八进制转十进制
        case 6: sixteen_ten(); break;  //十六进制转十进制
        default: printf("您的输入有误,请重新输入!"); break;
        }
        if (select == 0)
        {
            break;
        }
    } while (1);
}

四.关系图:

 

 

 

五.问题以及解决方法。

问题:

1.在使用switch多分支结构时,每个选项间的','打成了';'导致无法进行选择,程序无法运行;

2.八进制以及十六进制的输入问题;

3.main函数中do-while循环中while的条件;

4.int的大小上限;

解决方法:

1.将选项间的';'改为',‘确保程序能继续运行。

2.通过翻阅课本查询八进制数用%o输入,十六进制数用%x输入。

3.使用while(1)循环控制程序进行可保证程序不退出;

4.改用其他数据类型确保转换后的数的大小不受限。

 

六.代码互评:

互评对象: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;
}

 

将输入的进制数都转化为十进制数,再通过特定pow函数配合循环,减少了许多转化的函数,直接有效。

七.总结

 1. 通过这次博客作业我学会了各个进制数之间的转化关系,各种进制数的输入输出形式;

 2. 加深了对函数的理解以及在使用函数上更加得心应手;学会了函数配合数组进行使用;明白了在函数使用中分离的函数更容易优化和修复bug;

以及加上必要的文字说明,可以提升整体代码的可读性。

 

posted @ 2019-11-10 15:32  .余生  阅读(181)  评论(0编辑  收藏  举报