改错题 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;”。