诛仙草庙村:C语言问题

来源:百度文库 编辑:高考问答 时间:2024/05/18 00:46:54
程序:
# include <stdio.h>
main ( )
{ int a[4], x, i;
for(i=1;i<=3;i++)a[i]=0;
scanf("%d",&x);
while(x!=-1){a[x]+=1;scanf("%d",&x);}
for(i=1;i<=3;i++)printf("a[%2d]=%4d\n",i,a[i]);
}
若输入数据如下: ( <CR> 代表换行符)
3 1 2 3 2 2 2 1 1 3 3 3 3 3 1 1 2 2 3 2 1 2 3 2 -1<CR>
输出结果是 。

谁可以给我解答并写下详细解释呢?感激不尽!
请说明详细解释,答案我有,但是我不知道为什么是这个结果.

结果是:
a[ 1]= 6
a[ 2]= 9
a[ 3]= 9
因为:第一个3使的x!=-1,然后a[3]加1;之后的是一样的,从所输入的数字可以看到,一共输入了6个1,9个2,9个3,所以是这个结果.当输入-1时,x==-1,条件满足,循环结束,输出结果,注意哦,数组的下标是从0开始的.
还有一个要注意的是,输出的格式.
下标占2位,值占4位,都是右对齐的.

你用VC单步调试就出来了
很简单的
做个程序员要是自己写的程序都不知道调试真是很难说得过去的

# include <stdio.h>
void main ()
{
int a[4], x, i;
for(i=1;i<=3;i++) a[i]=0;
scanf("%d",&x);
while(x!=-1){
a[x]+=1;
scanf("%d",&x);
}
for(i=1;i<=3;i++) printf("a[%2d]=%4d\n",i,a[i]);
}

若输入数据如下: ( <CR> 代表换行符)
3 1 2 3 2 2 2 1 1 3 3 3 3 3 1 1 2 2 3 2 1 2 3 2 -1<CR>
输出结果是:
a[1]=6
a[2]=9
a[3]=9

结果如下:
3 1 2 3 2 2 2 1 1 3 3 3 3 3 1 1 2 2 3 2 1 2 3 2 -1
a[ 1]= 6
a[ 2]= 9
a[ 3]= 9
Press any key to continue

这个程序容易出现数组溢出的现象,所有要求输入的数据一定要在0~4之间。

程序的作用就是统计输入的1,2,3的个数。

a[1]为1的个数,
a[2]为2的个数
a[3]为3的个数