问题 问答题

请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:
876 675 896 101 301 401 980 431 451 777
则输出结果为:
6,980
注意:部分源程序在文件PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
文件PROG1.C内容如下:
#include<stdio.h>
void fun(int *s,int t,int *k)


void main( )
int a[10]=876,675,896,101,301,401,980,431,451,777,k;
fun(a,10,&k);
printf("The resuh:%d,%d\n",k,a[k]);

答案

参考答案:

void fun(int *s,int t,int *k)

{

int i, max;

max=0;

for(i=A;i<t;i++)

if(s[i]>s[max])max=i;

*k=max;

}

解析:

形参指针s指向数组a,形参t是数组的长度,指针k带回数组最大元素的下标。函数fun中定义了一个变量max,用来存放最大元素的下标,s[max]就是s数组的最大元素。程序采用的算法是:首先将第一个元素的下标0赋值给max,再通过i循环,将s数组中剩余的所有元素与s[max]比较,如果比s[max]大,则对max赋值为i,确保变量max始终存放最大元素的下标。循环结束后,将max赋值给*k,通过k带回最大元素的下标。

[归纳总结] 本套试题的程序填空和程序设计题考查的是找最大值和最小值的算法。此类题目经常在数据类型上发生一些变化,例如求链表结点的最大值,在结构体数组中求结构体变量某个成员列表的最大值,在整型数组中找最大值。数据结构会有一定的变化,但是求解算法比较简单。通常是引入一个变量max,将需要比较的第一个数赋给它,然后再通过循环,将max和后面的数依次进行比较,若比max大,则对max重新赋值。常用程序段如下:

max=a[0];

for(i=1;i<n;i++)

if(max<a[i])max=a[i];

同理,可求数据的最小值。

如果是结构体数组,那么除了注意算法正确外,还要注意结构体变量的引用方法。如果是求链表结点的最大值,则需要注意链表的遍历方法。

单项选择题
单项选择题