1.程序运行截图。



2.函数介绍。
一。
int erzhuanshi(char m)
{
int s=0,i=0,a,n;
while(n!=0)
{
a=m%10;
s+=a*pow(2,i);
m=m/10;
i++;
}
return s;
}
二。
int bazhuanshi(int n)
{
int s=0,i=0,a;
while(n!=0)
{
a=n%10;
s+=a*pow(8,i);
i++;
n=n/10;
}
return s;
}
void PrintN1( int m )
{
int a[100],i=0,c,count=0,t;
while(m!=0)
{
c=m%2;
a[i]=c;
m=m/2;
i++;
count++;
}
for(i=0;i<=count/2;i++)
{t=a[i];a[i]=a[count-i-1];a[count-i-1]=t;
}
printf("经转化后的数字为:");
for(i=0;i<count;i++)
printf("%d",a[i]);
}
三。
void PrintN2(int m)
{
int a[100],i=0,c,count=0,t;
while(m!=0)
{
c=m%8;
a[i]=c;
m=m/8;
i++;
count++;
}
for(i=0;i<=count/2;i++)
{
t=a[i];a[i]=a[count-i-1];a[count-1-i]=t;
}
printf("转化后的数字为:");
for(i=0;i<count;i++)
printf("%d",a[i]);
}
int iserjinzhi(int m)
{
char a[100];
int i=0,k;
while(a[i]=getchar()!='\n')
i++;
a[i]=0;
for(k=0;k<i;k++)
{
if(a[k]>'1'||a[k]<'0')
{
return 0;
break;
}
}
return 1;
}
四。
int isbajinzhi(int m)
{
char a[100];
int i=0,k;
while(a[i]=getchar()!='\n')
i++;
a[i]=0;
for(k=0;k<i;k++)
{
if(a[k]>'7'||a[k]<'0')
{
return 0;
break;
}
}
return 1;
}
int isshijinzhi(int m)
{
char a[100];
int i=0,k;
while(a[i]=getchar()!='\n')
i++;
a[i]=0;
for(k=0;k<i;k++)
{
if(a[k]>'9'||a[k]<'0')
{
return 0;
break;
}
}
return 1;
}
3.main函数。
#include<stdio.h>
#include<math.h>
int erzhuanshi(char m);
int bazhuanshi(int m);
void PrintN1( int m );
void PrintN2( int m);
int iserjinzhi(int m);
int isbajinzhi(int m);
int isshijinzhi(int m);
int main()
{
int jzs, x; printf("输入'2'为二进制;输入'8'为八进制;输入'10'为十进制\n输入进制数;"); //输入进制数 scanf("%d", &jzs); printf("输入一个数:"); //输入被转化的数 scanf("%d", &x); //判断进制数 if (jzs == 2) { twotoeightandten(x); } else if (jzs == 8) { eighttotwoandten(x); } else if (jzs == 10) { tentotwoandeight(x); } return 0;}if(x==2)
{
scanf("%c",&y);
if(iserjinzhi(y))
{
y=erzhuanshi(y);
printf("经转化后的数字为:%d",y);
}
else printf("ERROR");
}
if(x==3)
{
scanf("%c",&y);
if(isbajinzhi(y))
{
y=erzhuanshi(y);
printf("经转化后的数字为:");
PrintN1(y);
}
else printf("ERROR");
}
if(x==4)
{
scanf("%c",&y);
if(isbajinzhi(y))
{
y=bazhuanshi(y);
printf("经转化后的数字为:%d",y);
}
else printf("ERROR");
}
if(x==5)
{
scanf("%c",&y);
if(isshijinzhi(y))
{
printf("经转化后的数字为:");
PrintN1(y);
}
else printf("ERROR");
}
if(x==6)
{
scanf("%c",&y);
if(isshijinzhi(y))
{
printf("经转化后的数字为:");
PrintN2(y);
}
else printf("ERROR");
}
return 0;
}
4.思维导图。

5.过程中遇到的问题。
一。怎么样判断二进制,八进制和十进制;解决:通过取余来判断每一位数是否小于进制数。如果是,就输出;如果出现一位以上不符合条件,就提示输入错误。
二。若何让使用者更舒服,适当添加一些提示语句。
6.代码评论。
void ten2any(int n,int key) {
int i, len = 0;
char a[10000];
while (n) {
a[len] = num2char(n % key);
n /= key;
len++;
}
switch (key) {
case 2:printf(" -->二进制是:"); break;
case 8:printf(" -->八进制是:"); break;
case 16:printf(" -->十六进制是:"); break;
}
for (i = len - 1; i >= 0; i--) {
printf("%c", a[i]);
}
printf("\n");
}
这个同学的代码思路非常清晰,非常的简洁,很多都是我没想到的,有很多东西可以学习借鉴一下。
7.总结。
一。本次作业,严重加深了对函数的理解和对循环的应用。
二。学到了一些使用函数的技巧,也加大了对程序查错的认识,粗心马虎真的不行。
三。刚开始没有思路,后来在室友的帮助下,磕磕绊绊的才完成,不懂就要多问啊。
三。收获到了进制数之间的转换,以后做题目自己也可以用这个程序。