问题 填空题

【说明】
下面程序的功能是:在含有10个元素的数组中查找最大数,及最大数所在位置(即下标值),最大数可能不止一个。
例如:若输入
2 8 5 7 8 4 8 3 2 8
则应输出
The max:8
Total:4 //最大数出现次数
The positions:1 4 6 9
【函数】
#include<stdio.h>
#define M 10
int fun(int* a,int * n,int pos[ ])

int i, k max = - 32767;
(1)
for(i=0;i<M;i++)
if( (2) )max=a[i];
for(i=0;i<M;i++)
if( (3) )pos[k++]=i;
*n=k;
return max;

main()

int a[M],pos[M],i=0j,n;
printf("Enter 10umber:")
for(i=0,i<M;i++)scanf("%d", (4) );
j=fun( (5) );
printf("The max:%d\n",j);
printf("Total: %d", n);
printf("The position:")
for (i=0; i<n;i++) printf ("%4d", pos[i]);
printf("\n");

答案

参考答案:k=0 (B)a[i]>max (C)a[i]=max
(D)a+i或&a[i] (E)a,&n,pos

解析: 先分析(4)、(5)空。(4)空所在语句是从键盘中读入数据并存放在数组a[]之中,循环变量为I。(4)空处应填写存放地址,循环变量有两种表示方法,一种是“a+i”,另一种是“&a[i]”。(5)空处需要填写调用函数fun()的实参,从函数fun()的形参可以看出,第1个参数是要处理的数组a[],第2个参数要返回的最大元素的个数n,第3个参数最大元素的下标数组pos[]。因此(5)空处应填写“a,&n,pos”。
再来分析(1)-(3)空。(1)、(3)空所在函数是找最大数,并将其下标存放在数组pos[]中,其实现的思路是先遍历一次数组,从数组中找出最大数max,再将遍历一次数组,依次将这些最大数的下标存放在数组pos[]中。(2)空所在的循环就是找最大数max,因此(2)空处应填写“a[i]>max”。(3)空所在的循环是将这些最大数的下标存放在数组pos[]中,因此(3)空处应填写“a[i]=max”。(1)空应填写什么呢从语句“pos[k++)=i”和“*n=k”可知,变量k是用来指出当前要存放在数组pos[]中的位置,但这个变量要进行初始化,因此(1)空处应填写“k=0”。

单项选择题
单项选择题 A3/A4型题