第二次博客园作业
一 运行截图
三,函数介绍
此程序运用了三个函数,mian函数负责数据输入,suh函数负责数据检测,numbers函数负责数据运算及结果输出.
suh函数:int suh(char x[],int count,int sign)
{
int i,flag;
flag=count;
if(sign!=0)
return 0;
for(i=0;i<count;i++){
if(x[i]>='a'&&x[i]<='f')
flag--;
if(x[i]>='A'&&x[i]<='F')
flag--;
if(x[i]>='0'&&x[i]<='9')
flag--;
}
if(flag==0)
return 0;
return 1;
}
numbers函数:
void numbers_(int t,int n,char b[],int m,int count)
{
int i,j,k=0,number,sum=0,d;
char c[1001];
for(i=0;b[i]!='\0';i++)
{
if(b[i]>='0'&&b[i]<='9')
number=b[i]-'0';
else
number=b[i]-'a'+10;
sum=sum*n+number;
}
while(sum)
{
d=sum%m;
c[k++]="0123456789abcdef"[d];
sum/=m;
}
i=0;
for(i=k-1;i>=0;i--)
{
if(c[i]>='0'&&c[i]<='9')
printf("%d",c[i]-'0');
else
printf("%d",c[i]);
}
printf("\n");
}
四,mian函数展示
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void){
int m, i, count =0, among,n,flag=0,joy;
srand((unsigned) (time(NULL)));
joy=rand()%3;
int t,s;
int sign=0;
static char x[1000],ch,b[1001];
printf(" 欢迎使用进制转换器\n本进制转换器支持二,八,十,十六进制之间的相互转化 \n");
C:do{
printf("请输入需要转化的数字(敲击回车结束输入):");
for (i = 0; i < 1000; i++){
scanf("%c",&x[i]);
if (x[i]=='\n')
{
break;
}
count++;
}
}while (count == 0);
t=i;
for(i=0;i<count;i++){
if(x[i]>='A'&&x[i]<='F'){
x[i]=x[i]+32;
}
}
for(i=0;i<count;i++){
if(suh(x,count,sign)){
sign++;
printf("Error输入错误,请重新输入\n");
goto C;
}
for(i=0;i<count;i++)
b[i]=x[i];
b[i]='\0';
}
printf("请输入数字的原进制(轻敲回车结束输入):");
scanf("%d", &n);
ch=getchar();
if(n!=2&&n!=8&&n!=10&&n!=16){
printf("Error:输入错误,请重新输入(本进制转化器仅支持二,八,十,十六进制直接的转化\n");
flag=1;
}
sign=0;
printf("请输入数字需转化成的进制(轻敲回车结束输入):");
scanf("%d",&m);
if(m!=2&&m!=8&&m!=10&&m!=16){
printf("Error:输入错误,请重新输入(本进制转化器仅支持二,八,十,十六进制直接的转化\n");
}
printf("正在转换,请稍后\n");
t=x[t];
printf("%d(%d)的%d进制数为: ",t,n,m);
numbers_(t,n,b,m,count);
五,思维导图
六,代码互评
此同学通过菜单选择的方式来进行数据输入,可以使用户更为直观
而我在mian函数中通过scanf函数进行数据输入,使用户可以自由选择,并将进制作为参数加入运算中,不仅可以减少代码量,且在细微修改后可以做到16进制以内任意进制间的相互转化.