题目是用C++语言编写一个可以将十进制数转换为二进制、八进制、十六进制的数的程序
源程序:#include<iostream> //预处理指令
using namespace std; //使用命名空间std
void fun_1(unsigned m) //定义fun_1函数,无返回值类型,形式参数m为无符号型
{unsigned b=m; //变量声明,定义本函数用到的变量b为无符号类型,并且把值赋给了m
unsigned char i=0; //变量声明,定义本函数用到的变量i为无符号字符型,并且赋予初始值为0
char s[]="0123456789ABCDEF";//定义字符串数组s,并赋予初值
char num[10],t;//定义字符数组num和字符变量t
while(b>=16)//while语句,当变量b>=16时,执行下列语句
{num[i++]=s[b%16];//将数组s的值存入数组num,将对应数值存入到对应数组里
b=b/16;//对b再次进行赋值
}
if(b>0)//if语句,当b>0时
num[i++]=s[b];//将数组s的值付给数组num
num[i]='\0';//不合理的进制转换为空字符串
for(b=0;b<i/2;b++)//for语句,变量b赋予初始值为0,当b<i/2时,执行下语句,
{t=num[b];//将字符数组num[b]的值付给字符变量t
num[b]=num[i-b-1];//将num数组的i-b-1项的值赋给b项
num[i-b-1]=t;//将t的值赋给数组num[i-b-1],将储存的余数反向输出
}
cout<<"10进制数是"<<m<<"转换为16进制数是"<<num<<'\n';//输出数组num里储存的值即为转换的值
}
void fun_2(unsigned m)//定义fun_2函数,无返回值类型,形式参数m为无符号型
{unsigned b=m;
unsigned char i=0;
char s[]="0123456789ABCDEF";
char num[10],t;
while(b>=8)//while语句,当b>=8时,执行下列语句
{num[i++]=s[b%8];
b=b/8;//对b再次进行赋值
}
if(b>0)
num[i++]=s[b];
num[i]='\0';
for(b=0;b<i/2;b++)
{t=num[b];
num[b]=num[i-b-1];
num[i-b-1]=t;
}
cout<<"10进制数是"<<m<<"转换为8进制数是"<<num<<'\n';
}
void fun_3(unsigned m)//定义fun_3函数,无返回值类型,形式参数m为无符号型
{unsigned b=m;
unsigned char i=0;
char s[]="0123456789ABCDEF";
char num[10],t;
while(b>=2)//while语句,当b>=2时,执行下列语句
{num[i++]=s[b%2];
b=b/2;
}
if(b>0)
num[i++]=s[b];
num[i]='\0';
for(b=0;b<i/2;b++)
{t=num[b];
num[b]=num[i-b-1];
num[i-b-1]=t;
}
cout<<"10进制数是"<<m<<"转换为2进制数是"<<num;
}
int main()//主函数
{unsigned num;//定义一个无符号类型变量num
cout<<"请输入一个正整数";//输出语句
cin>>num;//输入语句
fun_1(num);//调用fun_1函数
fun_2(num);//调用fun_2函数
fun_3(num);//调用fun_3函数
cout<<"\n";//输出回车换行
return 0;//如果程序正常结束,向操作系统返回一个零值
}
可以帮我解释一下这部分是什么意思吗???????
for(b=0;b<i/2;b++)//for语句,变量b赋予初始值为0,当b<i/2时,执行下语句,
{t=num[b];//将字符数组num[b]的值付给字符变量t
num[b]=num[i-b-1];//将num数组的i-b-1项的值赋给b项
num[i-b-1]=t;//将t的值赋给数组num[i-b-1],将储存的余数反向输出
}
谢谢,我想问一下这部分的程序的作用是什么?
追答是这样的,短除法将十进制转化为2进制,每次最先得到的余数其实恰恰是转化后二进制数的最低位,但是它是在数组num[i]的最开始,那你输出的时候就得倒序输出,让最低位最后输出,这样子顺序才对,注意到每个转化的子函数最后都有这么一个小的函数块,如果你把它去掉,输出的结果就是倒序了
追问真是太感谢你了,但是我还是有点不懂那个“i/2”是什么意思,为什么要b<i/2
追答i 是数组总的数据数目,举个例子,比如有五个数 11 0 01 你要倒序,只要把第一个跟第五个,第二个跟第四个交换就好,中间那个不动(由于是int类型,5/2=2)
如果是偶数个,比如6个 100 110
那就第一个跟第六个换
那就第2个跟第5个换
那就第3个跟第4个换
看到了吧,不管是奇数还是偶数,都只用循环到一半就好了,多想想,不然就算我说的再明白你还是不清楚
谢谢您,我们明天要讲这个程序,所以得要弄明白,您可以给我一下邮箱吗,以后有关于C++的问题可以问您吗