请高手帮我解决一下这道C语言题目,谢谢!

2025-02-22 16:15:57
推荐回答(2个)
回答1:

#include
main( )
{
int a=28,b;
char s[10],*p;
p=s; //将数组s的首地址即s[0]传给p
do {b=a%16; //28除以16所得余数12赋给b
if(b<10) *p=b+48;//若b小于10则把b+48的值赋给p所指向的数组s的s[当前]中
else *p=b+55;//否则则把b+55的值赋给p所指向的数组s的s[当前]中
p++;//更新指针即p指向s[下一个]
a=a/5;//a整除5
} while(a>0);//a大于0循环
*p='\0';//防止程序出错
puts(s);//输出数组
}

第一轮循环
s[0]=12+55=67='C' a=5
第二轮循环
s[1]=5+48=53='5' a=1
第三轮循环
s[2]=1+48=49='1' a=0
注:s是字符数组,输入时会将int转为ascii码

答案C

回答2:

do-while整个过程:
b = 12 >>>> *p = 67(该ASCII码 对应字符就是 ‘C’) ====== s[0] = 'C'

a=a/5 >>>> a = 5 > 0; 继续循环体
b = 5; >>>> *p = 53 (该ASCII码 对应字符是 ‘5’) ====== s[1] = '5'

a=a/5 >>>> a = 1 > 0; 继续循环体:
b = 1; >>>>> *p = 49 ( 对应字符为 ‘1’) ======= s[2] = '1'

a = a/5; a = 0 == 0 跳出循环体:
*p = ‘\0’; ====== s[3] = '\0';

p++ 就是每次指向下一个存储单元

答案就是 c 了