请教C语言程序设计中表达式和if语句问题。

来源:百度知道 编辑:UC知道 时间:2024/06/20 10:58:42
1)请教,为什么第二个输出失败?
main()
{
printf("%d %d\n",5%2,2/3);
printf("%d %f\n",5%2,2/3); /* 此句执行失败 */
}

2)请教,为什么输出是-4?
main()
{
int n = 0, m = 1, x = 2;
if(!n) x-=1;
if(m) x-=2;
if(x) x-=3;
printf("%d\n",x);
}

1):printf("%d %f\n",5%2,2/3); 2/3得的是整型,而在此句中要的却是单精度,因此出错。如果要运行的话,应该这样打:printf("%d %f\n",5%2,2.0/3); 这样可以保证得到的是单精度。
2):if(!n) x-=1; 意思是如果!n为真,即非零,因n=0,故!n为真。x=x-1=2-1=1.
if(m) x-=2; 同上,m为真,x=x-2=1-2=-1.
同理,下一句,x=x-3=-1-3=-4.
呵呵。。。不知道能否看懂啊!!

printf("%d %f\n",5%2,2/3); 2/3得的是整型,而在此句中要的却是单精度,因此出错。单精度即输出有小数的,而要输出有小数的答案,在C语言中规定了要除数或者被除数中要有小数,才能输出整数,正如一楼所言在2后面加(.0)就行了,还有令一种方法,就是直接把除数或者被除数其中一个小数化,即将其改为单精度比如printf("%d %f\n",5%2,(float)2/3);或者printf("%d %f\n",5%2,2/(float)3);都行。
而if则是判断()里面的语句,如果语句为真即执行后面的语句。
if(!n) x-=1; 意思是如果(!n)为真,即(!n)非零,因n=0,故!n为真。x=x-1=2-1=1. {!代表非,上面负负得正。}
if(m) x-=2; 意思是如果(m)为真,即(m)非零,因m=1,m为真,x=x-2=1-2=-1.
if(x) x-=3;意思是如果(x)为真,即(x)非零,因x=-2,m为真,x=x-3=-1-3=-4.
答案大量使用1楼的,懒得打,就是解析得更加详细点。