解释一个C语言程序

来源:百度知道 编辑:UC知道 时间:2024/05/18 15:24:25
这是一个十进制数转化为16进制的程序,请解释一下从这里for(j=i-1;j>=0;j--)往后的内容是什么意思。谢谢了!
#include<stdio.h>
void main()
{
int num,n,a[10],i=0,j;
printf("请输入一个十进制数: ");
scanf("%d",&num);
n=num;
do{
a[i]=n%16;
n=n/16;
i++;
}while(n!=0);
for(j=i-1;j>=0;j--)
{
if(a[j]>10)
{
a[j]=a[j]+55;
printf("%c",a[j]);
}
else
{
printf("%d",a[j]);
}
}
printf("\n");
}

执行完前面的do-while循环过后
a[0]~a[i-1]分别存放了该数16进制的个位到最高位

for循环将顺序倒过来,从最高位开始输出,直到个位

0~10的项可以直接输出数字(else子句)
但是10~15的项,对应的16进制应该是A~F
程序分别将他们转化为对应的字符输出(if子句)
比如10+55=65,就是字符'A'的ascii码

这个问题我估计楼主是想问为什么要加哪个55??
是吧!别的你也应该看懂了吧!!
如果大于9的话,就是10对应A,11对应B......
而A的ASCII与10的差正好是55了.
B的........11 55
.................
所以对大于9以上的处理,对小于的原样输出 .

因为是16进制嘛 10~15用A~F来表示
那几个语句就是要实现这个表示的转换,而且是从高位向低位转的。

将字符用int类型表示则需要用到ASCII码中相应的字符型转化为int 类型

这个是因为16进制从9以后就是用就用字母表示了
所以要将它利用ASCⅡ码转换成字符型数据

有道理!!