改错题
1. 下列给定程序中,函数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;”。