① 运行截图
一.主菜单
二.无效命令
三.运行成功程序 以此类推
(1).十进制转十六进制
(2).二进制转八进制
② 函数功能介绍
(1).十进制转二进制
void turn1()
{
int a,b[30],c,i=0,d;
printf("请输入十进制数:");
scanf("%d",&a);
while(a!=0)
{
b[i]=a%2;
c=a/2;
a=c;
i++;
}
printf("转化为二进制为:");
while(i>0)
printf("%d",b[--i]);
printf("感谢使用\n");
}
(2).二进制转八进制
void turn2()
{
int a,b[30],c,i=0,d;
printf("请输入十进制数:");
scanf("%d",&a);
while(a!=0)
{
b[i]=a%8;
c=a/8;
a=c;
i++;
}
printf("转化为八进制为:");
while(i>0)
printf("%d",b[--i]);
printf("感谢使用\n");
}
(3).十进制转十六进制
void turn3()
{
int a,b[30],c,i=0,d;
printf("请输入十进制数:");
scanf("%d",&a);
while(a!=0)
{
b[i]=a%16;
c=a/16;
a=c;
i++;
}
printf("转化为十六进制为:");
while(i>0)
{
d=b[--i];
if(d==10)
printf("A");
else
if(d==11)
printf("B");
else
if(d==12)
printf("C");
else
if(d==13)
printf("D");
else
if(d==14)
printf("E");
else
if(d==15)
printf("F");
else
printf("%d",d);
}
printf("感谢使用\n");
}
(4).二进制转八进制
void turn4(){
char a[30]={0};
int n ,j,i,sum=0,t=0,p=1;
int c,d;
printf("请输入一个二进制数:");
scanf("%s",a);
n=strlen(a);
for(i=n-1;i>=0;i--)
{
p=1;
t=(a[i]-48);
if(i==n-1)
p=1;
else
for(j=0;j<n-i-1;j++)
p=p*2;
sum+=t*p;
}
int x=0;
while(sum!=0)
{
a[x]=sum%8;
c=sum/8;
sum=c;
x++;
}
printf("转化为八进制为:");
while(x>0)
printf("%d",a[--x]);
printf("感谢使用\n");
}
(5).二进制转十进制
void turn5()
{
char a[30]={0};
int n ,j,i,sum=0,t=0,p=1;
printf("请输入一个二进制数:");
scanf("%s",a);
n=strlen(a);
for(i=n-1;i>=0;i--)
{
p=1;
t=(a[i]-48);
if(i==n-1)
p=1;
else
for(j=0;j<n-i-1;j++)
p=p*2;
sum+=t*p;
}
printf("转化为十进制为:%d",sum);
}
(6).八进制转二进制
void turn6(){
char a[30]={0};
int n ,j,i,sum=0,t=0,p=1;
printf("请输入一个八进制数:");
scanf("%s",a);
n=strlen(a);
for(i=n-1;i>=0;i--)
{
p=1;
t=(a[i]-48);
if(i==n-1)
p=1;
else
for(j=0;j<n-i-1;j++)
p=p*8;
sum+=t*p;
}
int c,x=0,d;
while(sum!=0)
{
a[x]=sum%2;
c=sum/2;
sum=c;
x++;
}
printf("转化为二进制为:");
while(x>0)
printf("%d",a[--x]);
printf("感谢使用\n");
}
(7).八进制转十进制
void turn7()
{
char a[30]={0};
int n ,j,i,sum=0,t=0,p=1;
printf("请输入一个八进制数:");
scanf("%s",a);
n=strlen(a);
for(i=n-1;i>=0;i--)
{
p=1;
t=(a[i]-48);
if(i==n-1)
p=1;
else
for(j=0;j<n-i-1;j++)
p=p*8;
sum+=t*p;
}
printf("转化为十进制为:%d",sum);
}
(8).十六进制转十进制
void turn8()
{
int a,b[30],c,i=0,d;
printf("请输入十六进制数:");
scanf("%x0",&a);
while(a!=0)
{
b[i]=a%10;
c=a/10;
a=c;
i++;
}
printf("转化为十进制数为:");
while(i>0)
printf("%d",b[--i]);
}
③ main函数展示
#include <stdio.h>
#include <string.h>
void turn1();
void turn2();
void turn3();
void turn4();
void turn5();
void turn6();
void turn7();
void turn8();
int main(void)
{
int choice,a;
do{
printf("\t-------------------【 进制转换器 】-----------------\n");
printf("\t-------------0. 退出--------------------------\n");
printf("\t-------------1. 十进制转二进制----------------\n");
printf("\t-------------2. 十进制转八进制----------------\n");
printf("\t-------------3. 十进制转十六进制--------------\n");
printf("\t-------------4. 二进制转八进制----------------\n");
printf("\t-------------5. 二进制转十进制----------------\n");
printf("\t-------------6. 八进制转二进制----------------\n");
printf("\t-------------7. 八进制转十进制----------------\n");
printf("\t-------------8. 十六进制转十进制----------------\n");
printf("\n\n请输入您的选择:\t");
scanf("%d",&choice);
switch(choice)
{
case 0:break;
case 1:turn1();break;
case 2:turn2();break;
case 3:turn3();break;
case 4:turn4();break;
case 5:turn5();break;
case 6:turn6();break;
case 7:turn7();break;
case 8:turn8();break;
default:printf("\n选项不存在!\n");
}
printf("是否继续!!(继续按1,退出按0):");
scanf("%d",&a);
}while(a==1);
}
④ 思维导图
(1)缺少函数声明,没有错误提示
询问同学将其补充在头文件之后
(2)二进制和八进制的相互转化模糊不清
先将其转化为十进制数再套用原有公式实现相应进制转变
(3)进制转化器不存在错误提示的纠错功能
在void turn函数里添加if panduan(a[==1){}语句但是操作失败
(4)代码过于冗长不会合并简化
无方法
⑥ 代码互评
void TenToSixteen()//李曼
{
char arr[] = "0123456789ABCDEF";
char hex[16];
int i = 0;
int j = 0;
int num = 0, a = 0;
printf("输入一个整数:");
scanf("%d", &num);
a = num;
while (num)
{
hex[i++] = arr[num % 16]; //对十进制数求余并最终与hextable数组中的字符匹配
num = num / 16;
}
printf("十进制数%d转换成十六进制数是:", a);
for (j = i - 1; j >= 0; --j)
printf("%c", hex[j]);
printf("\n");
}
void turn3()//我的
{
int a,b[30],c,i=0,d;
printf("请输入十进制数:");
scanf("%d",&a);
while(a!=0)
{
b[i]=a%16;
c=a/16;
a=c;
i++;
}
printf("转化为十六进制为:");
while(i>0)
{
d=b[--i];
if(d==10)
printf("A");
else
if(d==11)
printf("B");
else
if(d==12)
printf("C");
else
if(d==13)
printf("D");
else
if(d==14)
printf("E");
else
if(d==15)
printf("F");
else
printf("%d",d);
}
printf("感谢使用\n");
}
比较代码: (1)自定义函数void TenToSixteen()使用户清晰明了知道进制的准换;
(2)我的代码一直使用多分支结构造成代码冗长不够简洁;
(3)她的代码出现了文字说明便于理解分析
⑦ 自我总结
(1) 通过这次博客园作业,对于进制的转化更加熟练操作得心应手。
(2) 学会了调用库函数中的strlen求字符长度。
(3) 知道了%o是以八进制形式输出一个整数,%x是以十六进制形式输入输出一个整数。
(4)函数是一个完成特定工作的独立程序模块;
通过使用函数避免代长度冗长占用空间;
代码可读性强,独立功能的函数实现预定功能,方便编程者阅读。