问答题 给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请修改程序中的错误,使它能得出正确的结果。
#include<stdio.h>
#defineN 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; [解析] (1)该题根据题目用选择法实现数组中的n个元素从小到大的排序。其中,选择排序法中的升序排序,首先从数组中挑选一个最小的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最小的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。
(2)从已给定源程序的main主函数开始入手,语句“fun(a,m)”调用函数“void fun(int a[],int n)”实现数组的排序。
(1)第一个标识下面“p=j”,根据C语言的语法,不难发现语句结束缺少分号,因此改为“p=j;”。
(2)第二个标识下面的“p=j;”上两句是以i作为循环和判断条件,其中语句“for(i=j;i<n;i++)”和“if(a[i]<a[p])”是将第p个元素与剩下的所有元素从第j个以后到最后一个进行循环比较,所以改为“p=i;”。
[考点] 选择算法。