改错题 1.  下列给定程序中proc()函数的功能是:将n个无序整数按从小到大排序。
    请修改程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<conio.h>
    #include<stdlib.h>
    #include<stdio.h>
    void proc(int n,int*arr)
    {
    int i,j,p,t;
    for(j=0; j<n-1; j++)
    {
    p=j;
    //****found****
    for(i=j+1; i<n-1; i++)
    if(arr[p]>arr[i])
    //****found****
    t=i;
    if(p!=j)
    {t=arr[j]; arr[j]=arr[p]; arr[p]=t;}
    }
    }
    void putarr(int n,int*z)
    {
    int i;
    for(i=1; i<=n; i++,z++)
    {
    printf("%4d",*z);
    if(!(i%10))printf("\n");
    }
    printf("\n");
    }
    void main()
    {int arr[20]={9,3,0,4,1,2,5,6,8,10,7},
    n=11;
    system("CLS");
    printf("\n\nBefore sorting%d numbers:
    \n",n); putarr(n,arr);
    proc(n,arr);
    printf("\nAfter sorting%d numbers:
    \n",n); putarr(n,arr);
    }
【正确答案】(1)错误:for(i=j+1; i<n-1; i++)
   正确:for(i=j+1; i<n; i++)
   (2)错误:t=i;
   正确:p=i;
【答案解析】 要将n个无序整数从小到大排序,需要将数组中的每一元素与其后的各个元素比较,因此,“for(i=j+1; i<n-1; i++)”应改为“for(i=j+1; i<n; i++)”;由后面的语句可知,要将位置p和j的元素交换,变量t为中间变量,因此,“t=i;”应改为“p=i;”。