问答题 下列给定的程序中,函数proc()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#define M 20
void proc(int a[], int n)
{
int i, j, t, p;
for(j=0; j<n-1; j++)
//****found****
{ p=j
for(j=j; i<n; i++)
if(a[i]<a[p])
//****found****
p=j;
t=a[p]; a[p]=a[j]; a[j]=t;
}
}
void main()
{
int arr[M]={9, 6, 8, 3, -1}, i, m=5;
printf("排序前的数据:");
for(i=0; i<m; i++)printf("%d", arr[i]);
printf("/n");
proc(arr, m);
printf("排序后的顺序:");
for(i=0; i<m; i++)printf("%d", arr[i]);
printf("/n");
}
【正确答案】
【答案解析】(1)错误:p=j
正确:p=j;
(2)错误:p=j;
正确:p=i; [解析] 根据C语言的语法规则,每一条语句都要以分号结束。因此,“p=j”后要加上分号“;”。每次比较后要把小的下标赋值给p,因此,“p=j;”应改为“p=i;”。