一道C语言问题 麻烦帮我解释一下!

来源:百度知道 编辑:UC知道 时间:2024/09/22 15:30:40
以下程序输出为:_____
main()
{ char x=123;
do
{printf("%c",x%10+'0');
}while(x/=10);
}
麻烦帮我讲一下这道题的解题方法和步骤 关键是 x%10+'0' 这个不太懂!谢谢了!

输出是321

这里主要涉及到ASC码表对应以及char和int类型隐式转换的问题,需要记住的是:一个字符类型的数据,在进行+、-、*、\等运算时,编译器会隐式类型转换为该字符对应的ASC码值来计算。

char x=123; 该句将x初始化为ASC码值为123的字符。
开始循环时,x存放字符的ASC码值为123,因此x%10=3,从而x%10+'0'即为3加“字符0对应的ASC码值”,由于ASC码表里数字0到9是按顺序排放的,因此3加“字符0对应的ASC码值”得到的是字符3的ASC码值,而printf按照%c的字符方式输出,那么显示的就是字符3(如果用%d方式输出,则输出的是字符3的ASC码值)

循环一次后x/=10,从而x存放的ASC码值从123变成12,按照上面方式输出就是2,接着x/=10使得x存放的ASC码值从12变成1,输出为1,接着x/10=0,退出循环。

x为字符类型的变量
x的ASC码是123,将这个码值对10求余得到3,0的码值是'0'所以'0'+3就是'3'的码值,懂了么,不懂继续问,这个问题蛮初级的

输出为321.x%10+'0' 就是就是x%10在加上0的ASCII码值