C语言一个简单题

来源:百度知道 编辑:UC知道 时间:2024/05/23 02:02:58
题一:下面程序的运行结果是
#include<stdio.h>
main()
{inta=28,b;
char s[10],*p;
p=s;
do{b=a%16;
if(b<10) *p=b+48;
else *p=b+55;
p++;
a=a/5;
}while(a>0);
*p='\0';
puts(s);}
答案是c51。 b是整形,计算b=a%16后b应该等于1.75变换整形后应该为1才对,然后运行*p=b+48后,*p应该为49才对,但是ascll码的A=65远远大于49怎么可能出现答案的‘C’,想不通,请帮我计算和分析下谢谢!!

哥们,首先要纠正一下你的错误b=a%16不是1.75因为%是求余.b=a%16的值是12
"运行*p=b+48后,*p应该为49才对"如果b是12肯定是不对的
但是*P的最终结果也不是49
因为
a=a/5;
}while(a>0);
这两句要求你的循环要再执行两次

%在C语言中是取余数,/才是除法。你明显把两个弄混了
28%16=12 才对

修改如下:

#include<stdio.h>
void main()
{
int a=28,b;
char s[10],*p;
p=s;
do
{b=a/16; //%是求余数
if(b<10) *p=b+48;
else *p=b+55;
p++;
a=a/5;
}while(a>0);

*p='\0';
puts(s);}

b=a%16在C中就是求余这也就是28%16=12,b=12>10,所以s[0]=12+55=66
a/5=5;然后再次回到a%16.所以又是5%16=5,b=5<10,所以s[1]=5+48=53
a/5=1;再次回到1%16=1.所以b=1<10,s[2]=1+48=49.这里跳出,但是p指向s[3]
也就是s[3]='\0';puts(s)就是打印s[0],s[1],s[2].
应该是B51吧.

计算b=a%16后b应该等于12,因为运算符“%”是用来求余数的,
所以表达式b=28%16;的结果为12,而不是1.75;
接下来程序执行到if语句,由于b=12,大于10,所以执行*p=b+55;
故*p=12+55=67;
由于ascll码的A=65,所以67就是字母“C”了。

先弄清 ‘/’ 和 ‘%’ 两个运算符号再说吧!