问答题 下列给定程序中,函数proc()的功能是求出数组中最小数和次最小数,并把最小数和arr[0]中的数对调,次最小数和arr[1]中的数对调。
请修改程序中的错误,使它能得到正确结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<conio.h>
#include<stdio.h>
#define M 20
void proc(int *arr, int n)
{
int i, m, t, k;
//****found****
for(i=0; i<n; i++)
{
m=i;
for(k=i; k<n; k++)
if(arr[k]<arr[m])
//****found****
k=m;
t=arr[i];
arr[i]=arr[m];
arr[m]=t;
}
}
void main()
{
int b[M]={11, 5, 12, 0, 3, 6, 9, 7, 10, 8},
n=10, i;
system("CLS");
for(i=0; i<n; i++)
printf("%d", b[i]);
printf("/n");
proc(b, n);
for(i=0; i<n; i++)
printf("%d", b[i]);
printf("/n");
}
【正确答案】
【答案解析】(1)错误:for(i=0; i<n; i++)
正确:for(i=0; i<2; i++)
(2)错误:k=m;
正确:m=k; [解析] 题目中要求将数组中最小的和次最小的元素,与数组中第一个和第二个元素相交换,因此,“for(i=0; i<n; i++)”应改为“for(i=0; i<2; i++)”;由函数proc()可知,变量m中存放最大元素的下标,因此,“k=m;”应改为“m=k;”。