M046

02-程序修改题 软件154 范金瑞 1012浏览

所属年份:2011.3;2012.3;

下列给定程序中fun函数功能是:将n个无序整数从小到大排序。

请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构!

#include <stdio.h>
#include <stdlib.h>

fun ( int  n, int  *a )
{
    int  i, j, p, t;
    for ( j = 0; j<n-1 ; j++ )
    {
        p = j;
        /************found************/
        for ( i=j+1; i<n-1 ; i++ )
            if ( a[p]>a[i] )
                /************found************/
                t=i;
        if ( p!=j )
        {
            t = a[j];
            a[j] = a[p];
            a[p] = t;
        }
    }
}

putarr( int  n,  int  *z )
{
    int  i;
    for ( i = 1; i <=  n; i++, z++ )
    {
        printf( "%4d", *z );
        if ( !( i%10 ) )  printf( "\n" );
    }
    printf("\n");
}
main()
{
    int  aa[20]= {9,3,0,4,1,2,5,6,8,10,7}, n=11;
    printf( "\n\nBefore sorting %d numbers:\n", n );
    putarr( n, aa );
    fun( n, aa );
    printf( "\nAfter sorting %d numbers:\n", n );
    putarr( n, aa );
}

【参考答案】

(1)for(i=j+1;i

【考点分析】
本题考查:for循环语句;需明确各个变量含义。
【解题思路】
该程序是对n个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第1个元素的位置;再找出次小项,置于第2个元素的位置;之后顺次处理后续元素。
(1)数组的长度为n,所以最后一个元素的下标值为n-1,i的取值范围应该包括此下标值。
(2)p是中间变量,存放值较小的元素下标。