B049

01-程序填空题 田少松, 软件154 907浏览

所属年份:2011.9;

下列给定程序中,函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中,再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,以此类推。例如,若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。
请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!

#include    <stdio.h>
#define    N    9
/**********found**********/
void fun(int  ___1___, int  n)
{
    int  i, j, max, min, px, pn, t;
    /**********found**********/
    for (i=0; i<n-1; i+=___2___)
    {
        max = min = a[i];
        px = pn = i;
        /**********found**********/
        for (j=___3___; j<n; j++)
        {
            if (max < a[j])
            {
                max = a[j];
                px = j;
            }
            if (min > a[j])
            {
                min = a[j];
                pn = j;
            }
        }
        if (px != i)
        {
            t = a[i];
            a[i] = max;
            a[px] = t;
            if (pn == i) pn= px;
        }
        if (pn != i+1)
        {
            t = a[i+1];
            a[i+1] = min;
            a[pn] = t;
        }
    }
}

main()
{
    int  b[N]= {1,4,2,3,9,6,5,8,7}, i;
    printf("\nThe original data  :\n");
    for (i=0; i<N; i++)  printf("%4d ", b[i]);
    printf("\n");
    fun(b, N);
    printf("\nThe data after moving  :\n");
    for (i=0; i<N; i++)  printf("%4d ", b[i]);
    printf("\n");
}

【参考答案】

(1)   a[]  
(2) 2  
(3) i+1

【考点分析】
本题考查:函数定义; for循环语句。

【解题思路】
填空1:由main中函数调用语句确定函数定义的形式参数。
填空2:for循环语句中,循环变量增值为2。
填空3:确定for语句循环变量的初值。