C语言的问题

为什么这个程序输出结果是:1_-2 (我用下划线代表空格)
题目是:
int x =3;
do
{ printf (9"%3d",x - =2 );
}
while (!(- - x ) );
~~~~~~~~~~~~~~~~~还有这个题:
#include < stdio.h>
main()
{int i;
for ( i=1;i<=5;i+ +)
{if (i%2) printf ("*")
else continue;
printf ( "#" );
}
printf("$"\n);
}
输出结果:*#*#*#$
我觉得应该是*#*#*$
为什么答案要多个#
第2个题目明白了
可是第一个更糊涂了
那个答案是:1空格-2
我想为 中间那空格怎么来的,还有!(--X) 这个到底是在说什么 不明白啊?

1)第一题:
这题中主要是--x的理解。开始执行do的第一层循环时,x=3,然后执行x-=2,也就是x=x-2,这时候x=1,根据程序输出1,程序中"%3d",x - =2是输出x的值,也就是每行输出3个位置的值。下面!(--x),其中--x意思就是说先将x减1,然后再将其整体的值减1,那么--x=0,根据前面的逻辑取反!,则可知道while后面的括号里为1,继续回复到do的位置继续循环,此时的x的值为0-2=-2,那么输出的值为-2,则输出你给出的结果。
2)第二题
对于第二题,我觉得你不清楚的地方在于最后的一个#,
{if (i%2) printf ("*")
else continue;
printf ( "#" );
}
这段程序中,当i=5时,5%2=1即if后面为1,执行后面语句,输出*,然后转去执行printf ( "#" ); (注意if/else只能执行一个,如果if执行完了就不会继续执行else了,而是跳出这个if/else语句而执行下面的语句。)

不知道你明白了没,加油啦!~多看看就懂了~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-01-29
第一题,首先 printf (9"%3d",x - =2 )没有那个9
这里的--x是指把x先减去1再参与运算, while (!(- - x ) )就是说取真的时候就继续循环,而由于这里有个取反的符号!,所以要求--x为假,只有当结果为0才满足条件.因为do while 是先执行后判定循环条件,所以这里循环了2次,有2个结果1和-2
又因为输出格式是%3d,每个输出结果占3个字符的位置,所以才会出现中间的空格
第2个回答  2008-01-28
int x =3;
do
{ printf (9"%3d",x - =2 );
}
while (!(- - x ) );
printf这里应该没9的吧
int x =3;
do
{ printf ("%3d",x - =2 );
}
while (!(- - x ) );

第一次运行:x初值=3,运行x-=2后,x=1这个没问题吧?判断!(--x),由于x=1,所以--x=0,为假,然后!是求反,假的求反当然是真,所以继续循环
第二次运行:x上一次在while里判断后,变为0,所以x-=2后,x=-2,而且你的输出也不可能是这个,应该是__1_-2因为printf里面有"%3d",表示每个输出结果占3个位置;
然后继续判断--x,由于x=-2所以--x等于-3,-3是非零值,所以为真,求反后为假,退出循环

第二题:
i=1 输出*#
i=2 不输出
i=3 输出*#
i=4 不输出
i=5 输出*#
退出循环输出 $
if(i%2)等价于if(i%2==1)本回答被提问者采纳
相似回答