一、运行截图
二、函数
int mypow(int x,int n) {//一个简单的幂函数// int i, result = 1; for (i = 0; i < n; i++) { result = result * x; } return result; }
功能:一个简单的幂函数,用来计算进制转换。
void turntwo(int n) {//将十进制转换成二进制// int i = 0, a[30]; do { a[i] = n % 2;//利用数组将二进制存储// n = n / 2; i++; } while (n != 0); while (i > 0) { printf("%d", a[--i]); } printf("\n"); }
功能:将十进制转换成二进制并输出。
void menu() //菜单~// { printf("----------------------------------------------------\n"); printf("[1] 二进制 -> 八进制 [7] 十进制 -> 二进制\n"); printf("[2] 二进制 -> 十进制 [8] 十进制 -> 八进制\n"); printf("[3] 二进制 -> 十六进制 [9] 十进制 -> 十六进制\n"); printf("[4] 八进制 -> 二进制 [10] 十六进制 -> 二进制\n"); printf("[5] 八进制 -> 十进制 [11] 十六进制 -> 八进制\n"); printf("[6] 八进制 -> 十六进制 [12] 十六进制 -> 十进制\n"); printf("[0] 退出\n"); printf("----------------------------------------------------\n"); }
菜单。。嫌主函数太长。
void twoturn(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 != 0 && x != 1) { printf("输入错误!!!请重新输入。\n"); flag = 1; break; } item /= 10; } } while (flag == 1);//若输入的数不符合进制就重新循环// while (n != 0) {//将二进制转换成十进制// item = n % 10; result = result + item * mypow(2, i); i++; n /= 10; } printf("转换的数:\n"); if (choice == 1) printf("%o\n", result);//输出八进制 else if (choice == 2) printf("%d\n", result);//输出十进制 else printf("%x\n", result);//输出十六进制 printf("感谢你的使用!"); }
功能:将二进制转换成十进制在根据所作的选择输出不同进制的数。
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("感谢你的使用!"); }
功能:将八进制转换成十进制在根据所作的选择输出不同进制的数。
void tenturn(int choice) { int n; printf("输入你要转换的数:\n"); scanf("%d", &n); printf("转换的数:\n"); if (choice == 7) turntwo(n); else if (choice == 8) printf("%o\n", n); else printf("%x\n", n); printf("感谢你的使用!"); }
功能:将输入的十进制转换成其他进制。
void sixteenturn(int choice) { char n[50]; int i, length, flag, item, result = 0, j = 0; do { flag = 0; printf("输入你要转换的数:(英文要大写)\n"); scanf("%s", &n); length = strlen(n);//获取数组长度// for (i = 0; i < length; i++) {//判断输入的十六进制是否正确// if (n[i]<'0' || n[i]>'9' && n[i]<'A' || n[i]>'F') { printf("输入错误!!!请重新输入。\n"); flag = 1; break; } } } while (flag == 1); i = length-1; while (i >= 0) {//将十六进制转换成十进制// if (n[i] >= 'A' && n[i] <= 'F') { item = n[i] - 'A' + 10; } else { item = n[i] - '0'; } result = result + item * mypow(16, j); i--; j++; } printf("转换的数:\n"); if (choice == 10) turntwo(result); else if (choice == 11) printf("%o\n", result); else printf("%d\n", result); printf("感谢你的使用!"); }
功能:将十六进制转换成十进制在根据所作的选择输出不同进制的数。
三、main函数
#include<stdio.h> #include <string.h> void menu(); int mypow(int x, int n); void turntwo(int n); void twoturn(int choice); void eightturn(int choice); void tenturn(int choice); void sixteenturn(int choice); int main() { int n, choice; menu();//输出菜单// printf("输入你的选择:\n"); scanf("%d", &choice); switch (choice) {//选择进制转换// case 0: break; case 1: twoturn(choice); break; case 2: twoturn(choice); break; case 3: twoturn(choice); break; case 4: eightturn(choice); break; case 5: eightturn(choice); break; case 6: eightturn(choice); break; case 7: tenturn(choice); break; case 8: tenturn(choice); break; case 9: tenturn(choice); break; case 10: sixteenturn(choice); break; case 11: sixteenturn(choice); break; case 12: sixteenturn(choice); break; } return 0; }
四、思维导图
五、问题
1.定义函数的类型定义错
解决:多次尝试,了解不同定义之间的差别。
2.二进制不能直接像其他利用 ”%o“ 或 ”%x“ 输出
解决:写一个将十进制转换成二进制的函数。
3.十六进制的转换
解决:查阅资料和请教同学。
六、代码互评
1913 罗吉洋
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; }
他用逆序输出来将二进制输出是我没有想到的方法,这是一个不错的思路,可以是函数更加简洁易懂。
七、总结
1.更加了解函数类型和更好的使用函数,明白了函数之间的关系, 加强对字符串的利用;
2.提高代码的可读性,在代码巨大的时候也能时使代码更加简洁。