问答题 下列给定程序中,函数fun()的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调、次最大数和b[1]中的数对调。
请修改程序中的错误,得出正确的结果。
注意:不要改动math()函数,不能增行或删行,也不能更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
#define N 10
//****error****
void fun()
{
int i, m, t, j;
for(i=0; i<2; i++)
{
//****error****
m=0;
for(j=i+1; j<n; j++)
if(b[j]>b[m])
m=j;
t=b[i];
b[i]=b[m];
b[m]=t;
}
}
void main()
{
int a[N]={5, 12, 9, 7, 10}, n=5, i;
for(i=0; i<n; i++)
printf("%d", a[i]);
printf("/n");
fun(a, n);
for(i=0; i<n; i++)
printf("%d", a[i]);
printf("/n");
}
【正确答案】
【答案解析】(1)错误:m=j;
正确:void fun(int*b, int n)
(2)错误:void fun()
正确:m=i; [解析] 本题中函数的功能是求出数组中最大数和次最大数。解题思路是首先求出数组中最大数和次最大数,然后将最大数和次最大数分别放到数组的第一位和第二位。
第一个错误标识下“void fun(int*b,int n);”函数的定义语法有误,根据C语言语法函数定义后面不应该加“;”,所以“void fun(int*b,int n);”应该改为“void(fun(int*b,int n)”。
第二个标识符下for循环逐个对m个数据进行选择判断,原题中“m=0;”语句将m值设置为0,在循环中m的值始终是0,不会改变,根据“for(i=0;i<2;i++)”语句中的循环条件,“m=0;”改为“m=i;”。