问答题
给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!
#include<stdio.h>
#define N 20
void fun(int a[], int n)
{ int i, j, t, p;
for(j=0; j<n-1; j++){
/**********found**********/
p=j
for(i=j; i<n; i++)
if(a[i]<a[p])
/**********found**********/
p=j;
t=a[p]; a[p]=a[j]; a[j]=t;
}
}
main()
{
int a[N]={9,6,8,3,-1}, i, m=5;
printf("排序前的数据:");
for(i=0; i<m; i++)printf("%d", a[i]); printf("/n");
fun(a, m);
printf("排序后的数据:");
for(i=0; i<m; i++)printf("%d", a[i]);
printf("/n");
}
【正确答案】
【答案解析】(1)p=j; (2)p=i;
答案考生文件夹 [解析] 程序利用选择法实现数组中的n个元素从小到大的排序。
(1)第一个标识下面“p=j”,根据C语言的语法,不难发现语句结束缺少分号,因此改为“p=j; ”。
(2)第二个标识下面的“p=j; ”上两句是以i作为循环和判断条件,其中语句“for(i=j; i<n; i++)”和“if(a[i]<a[p])”是将第p个元素与剩下的所有元素从第i个以后到最后一个进行循环比较,所以改为“p=i; ”。
[考点] 一维数组、循环的嵌套。