运行截图
一
二、函数功能介绍
1.
int step_1(char m[],int n){ int a,b=0,c,i; c=n+48; a=strlen(m); for(i=0;i<a;i++){ if(n<=10){ if(m[i]<0||m[i]>=c){ b=1; break; } }else{ if(m[i]<'0'||m[i]>'9'&&m[i]<'A'||m[i]>'F'){ b=1; break; } } } return b; }
分析所输入的数字是否符合所输入进制的格式
2
void step_2(int m,int n){ int a,b; if(n==2){ printf("八进制:"); unchange10(m,8); printf("十进制:"); printf("%d\n",m); printf("十六进制:"); unchange10(m,16); }else if(n==8){ printf("二进制:"); unchange10(m,2); printf("十进制:"); printf("%d\n",m); printf("十六进制:"); unchange10(m,16); }else if(n==10){ printf("二进制:"); unchange10(m,2); printf("八进制:"); unchange10(m,8); printf("十六进制:"); unchange10(m,16); }else if(n==16){ printf("二进制:"); unchange10(m,2); printf("八进制:"); unchange10(m,8); printf("十进制:"); printf("%d\n",m); } }
根据所输入的进制来输出所需要的进制
3
int change10(char m[],int n){ int a,i,b=0; a=strlen(m); if(n!=16){ for(i=a-1;i>=0;i--){ b += (m[i]-'0')*pow(n,i); } }else if(n==16){ for(i=a-1;i>=0;i--){ if(m[i]<10){ b += m[i]*pow(n,i); }else{ m[i]=m[i]-'A'+10; b += m[i]*pow(n,i); } } } return b; }
将所输入的数转换为十进制
4
void unchange10(int m,int n){ int b=100; int a[b],sum=0,i; for(i=0;m>0;m/=n){ a[i]=m%n; i++; } i--; for(;i>=0;i--){ if(a[i]<10){ printf("%d",a[i]); }else{ printf("%c",a[i]+55); } } printf("\n"); }
将十进制的数转换为其他进制
三.main函数
#include<stdio.h> #include<math.h> #include<string.h> int main(){ int n=100; char a[n]; int b,c,d; printf("请输入所转换数的进制数:\n"); printf("二进制 八进制 十进制 十六进制\n"); scanf("%d",&b); printf("请输入所要转换的数:\n"); scanf("%s",&a); if(step_1(a,b)==1){ printf("输入了错误的数\n"); }else{ printf("数经过转换后为:\n"); c=change10(a,b); step_2(c,b); } return 0; }
定义一个字符串数组来更好的转换进制
四.思维导图
五.问题分析
在试着运行的时候发现数值过大,原来是字符串没有理解深透,‘0’没有减去,在对于十六进制的转换和转出的时候思考耗费时间过长。
六.代码互评
网络1914 黄家雯
void decimalism_to_hexadecimal(int num) /*十进制转十六进制*/ { int op[100]; /*定义一个数组来储存每个位子上数字的位子*/ char hex[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; //定义一个标志字符串,用来将原十进制数转换成对应的字符 int i; int m; //用来存放原数除16的余数,便于后面在数组hex中对应字符的取用 int count = 0; while (num != 0) //正序求余,存放进数组op中 { op[count++] = num % 16; num /= 16; } for (i = count - 1; i >= 0; i--) //倒序取余数 { m = op[i]; printf("%c", hex[m]); //让每位子数字输出对应的字符 } printf("\n"); }
取余的思想更有利于取数。
七.总结
这次的题目让我对函数的运用和数学思维运用更上一层楼,主要还是在字符串的使用,与代码的简化和缩减上面游侠很大功夫。
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编