函数+进制转换器v1.0beta
1.运行成功的例子如下:(图片较多就不一 一列举)
一.
二.
三.
运行失败的例子如下:
一.
二.
三.
2.函数介绍
一.
char num2(int num)//将数字转换为字符类型,使得16进制也可以进行计算 { if (num >= 0 && num <= 9) { return (char)('0' + num); } else { return (char)('A' + num - 10); } }
二.
int changeten(char a[],int n)//将其他进制转换为10进制 { int sum = 0, len,b,i; len = strlen(a); for (i = 0; i < len; i++) { if (a[i] >= '0' && a[i] <= '9') { b = a[i] - '0'; } else if (a[i] >= 'A' && a[i] <= 'F') { b = a[i] - 'A' + 10; } sum = sum * n + b; } return sum; }
三.
void chageeverything(int b, int c)//将10进制转换为其他进制 { int count = 0, i; char a[10000]; while (b != 0) { a[count] = num2(b % c); b = b / c; count++; } for (i = count - 1;i >= 0;i--) { printf("%c", a[i]); } }
四.
int judge2,8,10(char a[], int b)//判断2,8,10进制数是否符合要求 { int len, i,c; len = strlen(a); int flag = 0; c = b - 1 + 48; for (i = 0; i < len; i++) { if (a[i] >= 48 && a[i] <= c) { flag = 1; } else { flag = 0; break; } } return flag; }
五.
int judge16(char a[]) //判断16进制数是否符合要求
{
int len, flag = 0,i;
len = strlen(a);
for (i = 0; i < len; i++)
{
if (a[i] < '0' || a[i]>'9' && a[i] < 'A' || a[i]>'F') {
return flag=0;
}
}
return flag=1;
}
3.main函数
#include <stdio.h> #include<string.h> int changeten(char a[] ,int n);//将其他进制转换为10进制 void chageeverything(int b, int c);//将十进制转换为其他进制 int judge2,8,10(char a[], int b);//裁判函数,判断二八十进制的数是否符合要求 int judge16(char a[]);//裁判函数,判断16进制是否符合要求 char num2(int num);//将数字转换为字符 int main() { int n; char a[10000]; printf("进制转换神器\n"); while (1) { printf("请输入您想要转换的数的进制数:\n"); scanf("%d", &n); printf("请输入需要转换的数字:\n"); getchar(); gets_s(a); if (n == 2) { if (judge2,8,10(a, n)) { printf("该数字的八进制数为:"); chageeverything(changeten(a, n), 8); printf("\n"); printf("该数字的十进制数为:%d\n", changeten(a, n)); printf("该数字的十六进制数为:"); chageeverything(changeten(a, n), 16); break; } else { printf("您输入的数不符合要求哦,请重新输入\n感谢您的使用"); break; } } else if (n == 8) { if (judge2,8,10(a, n)) { printf("该数字的二进制数为:"); chageeverything(changeten(a, n), 2); printf("\n"); printf("该数字的十进制数为:%d\n", changeten(a, n)); printf("该数字的十六进制数为:"); chageeverything(changeten(a, n), 16); break; } else { printf("您输入的数不符合要求哦,请重新输入\n感谢您的使用"); break; } } else if (n == 10) { if (judge2,8,10(a, n)) { printf("该数字的二进制数为:"); chageeverything(changeten(a, n), 2); printf("\n"); printf("该数字的八进制数为:"); chageeverything(changeten(a, n), 8); printf("\n"); printf("该数字的十六进制数为:"); chageeverything(changeten(a, n), 16); break; } else { printf("您输入的数不符合要求哦,请重新输入\n感谢您的使用"); break; } } else if (n == 16) { if (judge16(a)) { printf("该数字的二进制数为:"); chageeverything(changeten(a, n), 2); printf("\n"); printf("该数字的八进制数为:"); chageeverything(changeten(a, n), 8); printf("\n"); printf("该数字的十进制数为:"); chageeverything(changeten(a, n), 10); break; } else { printf("您输入的数不符合要求哦,请重新输入\n感谢您的使用"); break; } } else { printf("您输入的进制数不符合要求"); break; } } return 0; }
4.思维导图
5.遇到的问题及解决
1.一开始对进制转换如何用代码表示不太清楚,通过百度和询问同学得知方法,应先将其他进制转换成10进制,再将10进制转换成需要的进制。这样的方法简化了许多,也节省了代码长度。并且在判断2,8,10进制上也可用一个通用函数解决。
2.在头一次调用void类型函数时,出现了“不允许使用不完整的类型”的错误,询问学长后知道自己的低级错误。
3.对于数组的应用并不是很熟练,多次在函数及主函数中犯了错误,应该多看书和刷题巩固自己对数组的理解及应用。
6.代码互评(漆靖)
while(sum) { d=sum%m; c[k++]="0123456789abcdef"[d]; sum/=m; }
1. for(i=0;i<count;i++){ if(luangqibazao(x,count,sign)){ printf("你这输的啥啊,重输一遍吧\n"); goto L;
2. while(radix(n,x,count,sign))
{
if(wrong==2||flag==0)printf("你这进制写错了吧?再检查看看呗!\n");
if(wrong==3)printf("还是不对啊\n");
if(wrong==4)printf("唉又错了!你走点心啊!\n");
if(wrong==5)printf("你是认真的吗?\n");
if(wrong>5)printf("。。。。。。。。。。。。。。\n");
printf("重新输入一遍吧!>.0\n");
if(scanf("%d", &n)!=-1){
getchar();
goto H;
1.这个含义为将一个数以16进制的形式存放,而不是把它变成16进制,10以内的就不变。这种写法属实没见过,但是我会将它记住。
2.他的代码输入错误后不会退出而是可以继续输入数值,值得学习,并且他在使用界面的提示语也比我丰富多彩,更加吸引用户。
7.总结
1.通过这次的进制转换器认识到编写程序远不止刷题那么简单,需要扎实的基础知识,而这次练习使得我懂得多个函数出现错误时可以将一个个函数拉出来单独检测,而不是看着长篇代码找错误。
2.函数能够相互调用,实现函数间的嵌套,实现复杂的运算。