跪求C语言高手,帮帮我

1、已知字母a的ASCII码为十进制数97,下述程序的输出结果是
#include<stdio.h>
main()
{char c1,c2;
c1=’a’+’6’-‘0’;
printf(“%c,%c/n”,c1,c2);
}
结果为g,d,我不明白d是怎么得来的?
2、下列程序的输出结果为
main()
{ int a;
a=-4+4*5-6;printf(“%d”,a);
a=4+4%5-6;printf(“%d”,a);
a=-3+4%6/5; printf(“%d”,a);
a=(7+6)%5/2; printf(“%d”,a);
}
结果为10 2 -3 1,我不明白4%5这为什么得4,4%6/5为什么得0?

第一个程序如果c2输出的是d的话,只能是由于之前内存没有清空,导致你再次申请的时候读出了脏数据,否则如果单纯依据这个程序,c2是不可能输出字符的,因为你没有给这个字符赋值
第二个程序,%和/是同级的运算符,运算顺序是从左到右,所以题中的运算顺序为先算%后算/,%是求余数,4%5商是0余数是4,4%6/5是先算4%6商是0余数是4,用4/5商是0余数是4,所以答案是0,当然这个结果和你定义的a的数据类型有关,因为是整型,所以所求结果也是整型,中间过程也是整型,不会得到4/5等于0.8这样的答案。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-30
1 c2
没有初始化 输出的是随机的

2 % 是 取余 4%5=0余4 ;/是整除,4/5=0
第2个回答  2011-06-30
对的啊
第3个回答  2011-06-30
1.问题1 你没有给初值 他不知道指向内存的什么地方 建议赋初值
2.4%5 等于4 没错 取余为4
4%6/5 %和/ 同级别 所以从左到右: 4%6=4 ; 4/5=0.8 但是着里是整数除 所以为0
第4个回答  2011-06-30
c1=’a’+’6’-‘0’;可以先把他们转化为他们的ASCII码;则c1=97+54-48;
则可以知道:c1的ASCII码为103,它对应的字符为 g
但是printf(“%c,%c/n”,c1,c2);
应该是""printf(“%c,%c\n”,c1,c2);""
}
c2未经过赋值,即使输出来了d,也是一个随机值,在运行一次就不是d了
对于4%5这为什么得4,4%6/5为什么得0?
4%5的意思是4除5的余数 为4
4%6/5,我们可以分步来,首先,4%6的值为4
然后4/5的值为0(在C语言中.4和5未带小数位,默认为整形数据,其求出结果自动转化为整形。所以,结果为零。)
第5个回答  2011-06-30
1,c2没有赋值应该是乱码,我执行得到的是?号。d应该是有问题的。
2,优先级是顺序是: * / % + -
a=-4+4*5-6;printf(“%d”,a);先乘除4*5=20,最后计算-4+20-6=10
a=4+4%5-6;printf(“%d”,a);先计算4%5(就是计算4除以5的余数)=4,优先级大于+和-,所以4+4-6=2;
a=-3+4%6/5; printf(“%d”,a);先计算6/5取整数部分=1,再计算4%1=0,最后-3+0=-3;
a=(7+6)%5/2; printf(“%d”,a);先计算(7+6)=13,再计算5/2取整数部分=2,最后13%2=1;