C语言数组题解答

来源:百度知道 编辑:UC知道 时间:2024/06/02 23:17:19
main()
{ int b[51],x,i,j=0,n=0;
scanf("%d",&x);
while(x>-1) {b[++n]=x;scanf(%d",&x);}
for(i=1;i<=n;i++)
if(b[i]%2==0) b[++j]=b[i];
for(i=1;i<=j;i++) printf("%3d",b[i]);
printf("\n");
}
以上程序输入:7 10 5 4 6 7 9 8 3 2 4 6 12 2 -1<CR>后的结果是____.
以上数字间都有一个空格,我没打上去.
为什么要用两个scanf语句呢?两者有什么区别?不明白,望高手解释一下.

10 4 6 8 2 4 6 12 2
因为b[i]%2==0。所以打印出偶数
第一个scanf的意思是你要先输入一个数。让他判断while。如果你没有第一个scanf的话。那么 你的X没有被赋值初始化。。
第二个scanf是存储数组的,就没必需多做解释了!!!

10 4 6 8 2 4 6 12 2
第一个scanf得到一个x,为下面的循环做判断。如果没有第一个,下面的循环就跑不起来了。
第二个是保证不停循环时输入的scanf。不知道我说清楚了没有

输出结果是 10 4 6 8 2 4 6 12 2
第一个scanf是输入一个数赋给x,与-1比较,从而进入while循环,并把x的值赋给数组b。第二个scanf是重新输入x,与—1比较,继续循环,如果没有,则此时x没有赋值,则不能继续完成循环。这个程序的功能是找出输入数中大于-1的偶数。
希望我的回答能对你有帮助。

这程序的判断是在if(b[i]%2==0).只有整除才成立.所以最后输出10 4 6 8 2 4 6 12 2.这里面一共九个数字.那就因为if(b[i]%2==0)一共成立九次.