进制转换器

一、运行截图

二转其他进制

八转其他进制

十转其他进制

 

 十六转其他进制

二、函数功能介绍

1.char to num

/*将字符转换成数字*/
int char_to_num(char ch)
{
    if (ch >= '0' && ch <= '9')
        return ch - '0';  /*将数字字符转换成数字*/
    else
        return ch - 'A' + 10;  /*将字母字符转换成数字*/
}

2.num to char

/*将数字转换成字符*/
char num_to_char(int num)
{
    if (num >= 0 && num <= 9)
        return (char)('0' + num - 0);  /*将0~9之间的数字转换成字符*/
    else
        return (char)('A' + num - 10);  /*将大于10的数字转换成字符*/
}

 

3.source to decimal

/*将数值转为十进制*/
long source_to_decimal(char temp[], int source)
{
    long decimal_num = 0;  /*存储展开之后的和*/
    int length;
    int i;
    for (i = 0; temp[i] != '\0'; i++);
    length = i;
    for (i = 0; i <= length - 1; i++)  /*累加*/
        decimal_num = (decimal_num * source) + char_to_num(temp[i]);
    return decimal_num;
}

4.decimal to object

/*将十进制转为其他进制*/
int decimal_to_object(char temp[], long decimal_num, int object)
{
    int i = 0;
    while (decimal_num)
    {
        temp[i] = num_to_char(decimal_num % object);  /*求出余数并转换为字符*/
        decimal_num = decimal_num / object;  /*用十进制数除以基数*/
        i++;
    }
    temp[i] = '\0';
    return i;
}

5.output 

/*倒着输出数组数值*/
void output(char temp[], int length)
{
    int i;
    for (i = length - 1; i >= 0; i--)  /*输出temp数组中的值*/
        printf("%c", temp[i]);
    printf("\n");
}

三、展示main函数

int main()
{
    int source;  /*存储原数制*/
    int object;  /*存储目标数制*/
    int length;  /*存储转换成目标数制后字符数组的长度*/
    long decimal_num;  /*存储转换成的10进制数*/
    char temp[MAXCHAR];  /*存储待转换的数值和转换后的数值*/
    int flag = 1;  /*存储是否退出程序的标志*/
    while (flag)  /*利用输入的flag值控制循环是否结束*/
    {
        printf("请输入当前数制:");
        scanf("%d", &source);
        printf("请输入数值:");
        scanf("%s", temp);
        printf("请输入想要转换的进制:");
        scanf("%d", &object);
        printf("转换后的数值:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1\n退出请输入0\n");
        scanf("%d", &flag);
    }

    return 0;
}

四、思维导图

 

 五、过程中遇到的问题

1.刚开始比较呆板,没有思路,一个进制对应一个进制,需要12种函数,之后,询问同学,是先转为10进制,在转为其他进制,比较简易,十进制转其它进制只要除以基数,在倒着输出。

2.转为十进制,16进制需要将字母换算成对应的数值,通过网上搜索,得到了解决办法,将字符转为数字。

3.换算十进制比较繁琐,需要按权展开,利用到pow函数,运算比较麻烦,通过网上搜索,学会了,利用循环,提公因式,循环相加,比较精妙。

六、代码互评

 

 他的代码比较有趣,加入了防沉迷和评价系统,增加了用户体验,设计精妙,评价内容不符合都有无效选项提示,我应该向他多多学习,不只是呆板的编译代码,应该加入人性化的设计。

七、总结

1.此次进制转换器,思考很多,比如简化代码,加入自己的设计等等。

2.通过请教同学和网络查询,解决了很多问题,补充了自己的不足。

3.需要学习和借鉴,才能写出更好更简易丰富的程序。

 

posted @ 2019-11-10 22:32  长安某•  阅读(347)  评论(0编辑  收藏  举报