一.运行截图
1.
2.
3.
4.
5.
6.
7.
8.
二.函数功能介绍
1.
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; }
功能为将输入的数字通过字符串来存储,利用字符串的形式将不同的进制数转换为10进制数,并以整型将10进制数返回。
2.
void Numchange(int m, int b)//将10进制数转化为任意进制数 { int n = m; int count = 0; if (m == 0) printf("0"); while (n != 0) { n = n / b; count++; } int number; for (int i = count; i >= 1; i--) { number = m / (int)pow(b, i - 1); if (number < 10) { printf("%d", number); } else { printf("%c", number + 55); } m = m % (int)pow(b, i - 1); } }
功能为将10进制数转换为任意进制数。这个函数的思路是来自输出整数各位的数字,整数是十进制的,我改进了代码就可以实现转换成任意进制数。有用到数据类型的强制转换。
3.
int judge2810(char a[], int b)//用来判断2,8,10进制数是否正确 { int len, i; len = strlen(a); int flag = 0; int x = b - 1 + 48; for (i = 0; i < len; i++) { if (a[i] >= 48 && a[i] <= x) { flag = 1; } else { flag = 0; break; } } return flag; } int judge16(char a[]) //用来判断16进制数是否正确 { int len, i; len = strlen(a); for (i = 0; i < len; i++) { if (a[i] < '0' || a[i]>'9' &&a[i] < 'A' || a[i]>'F') { return 0; } } return 1; }
这两个函数都是用来判断所输入的进制数是否符合相应的进制。由于16进制会更难写,所以没把两个函数合并在一起。
三.main函数
#include <stdio.h> #include<string.h> #include<math.h> int main() { printf("进制转换器\n"); printf("十六进制数字母大写\n"); char a[100]; int b; printf("请输入待转换数的进制:\n"); scanf("%d", &b); printf("请输入待转换数\n"); getchar(); gets_s(a); int m; m = Tennum(a, b); if (b == 2) { if(judge2810(a,b)) { printf("八进制数:\n"); Numchange(m, 8); printf("\n"); printf("十进制数:\n"); printf("%d\n", m); printf("十六进制数:\n"); Numchange(m, 16); printf("\n"); } else { printf("Error\n请重新输入"); } } else if (b == 8) { if(judge2810(a, b)) { printf("二进制数:\n"); Numchange(m, 2); printf("\n"); printf("十进制数:\n"); printf("%d\n", m); printf("十六进制数:\n"); Numchange(m, 16); printf("\n"); }else{ printf("Error\n请重新输入"); } } else if (b == 10) { if(judge2810(a, b)) { printf("二进制数:\n"); Numchange(m, 2); printf("\n"); printf("八进制数:\n"); Numchange(m, 8); printf("\n"); printf("十六进制数:\n"); Numchange(m, 16); printf("\n"); } else { printf("Error\n请重新输入"); } } else if (b == 16) { if(judge16(a)) { printf("二进制数:\n"); Numchange(m, 2); printf("\n"); printf("八进制数:\n"); Numchange(m, 8); printf("\n"); printf("十进制数:\n"); printf("%d\n", m); } else { printf("Error\n请重新输入"); } } return 0; }
利用字符串处理输入的进制数,根据用户所选进制来判断是否有错,如果没错就输出另外三种进制数。
四.思维导图
五.问题分析
1.刚开始时,写了几个函数,在用的时候,因为没有正确使用函数,点击运行就会报错,然后就去看书,找到自己的问题,函数括号里的变量表示不明确,运用函数时,把void,int,double也写上去等问题。在做函数题时,就只有编写函数的内容,不怎么注意函数的正确使用。
2.刚开始写将进制数变为10进制数这个函数的时候,就写了很多个函数,使得代码看起来很多,而且效率不高。然后我看了CSDN里面的一篇博客,他将16进制数转换的时候,运用字符串知识,之后我就将所有进制都用字符串来表示。
六.代码互评
网络1914 林洁颖
int binaryconversion(int number) { if (number / 2 == 0) { return number % 2; } else { return number % 2 + binaryconversion(number / 2) * 10; } }
这个函数利用了递归来将二进制数转换为十进制数,而且这个思路也很不错。
int sum = 0; int product = 1; do { sum = sum + (number % 10) * product; number = number / 10; product = product * primitivesystem; } while (number);