【说明】 下面程序的功能是:在含有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 (2)a[i]>max (3)a[i]=max
解析:(4)a+i或&a[i] (5)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”。