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