请补充函数fun(),该函数的功能是:从键盘输入一个下标n,把数组aa中比元素aa[n]小的元素放在它的左边,比它大的元素放在它的右边,排列成的新数组仍然保存在原数组中。例如,数组aa={33,67,42,58,25,76,85,16,41, 56},输入3。结果输出“33,42,25,16,41,56,58,67,76,85”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仪在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:include<stdio.h>defi

题目

请补充函数fun(),该函数的功能是:从键盘输入一个下标n,把数组aa中比元素aa[n]小的元素放在它的左边,比它大的元素放在它的右边,排列成的新数组仍然保存在原数组中。

例如,数组aa={33,67,42,58,25,76,85,16,41, 56},输入3。

结果输出“33,42,25,16,41,56,58,67,76,85”。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仪在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include<stdio.h>

define N 10

void fun(int aa[],int n)

{

int i,j=0,k=0,t;

int bb[N];

t=aa[n];

for(i=0;i<N;i++)

{

if(aa[i]>t)

bb[j++]=aa[i];

if(aa[i]<t)

aa[k++]=aa[i];

}

【 】;

for(i=0;【 】;i++, k++)

aa[k]=bb[i];

}

main()

{

int i,n;

int aa[N]={33,67,42,58,25,76,85,16,41,56};

clrscr();

printf("\n*** original list ***\n");

for(i=0;i<N;i++)

printf("%4d"/aa[i]);

printf("\n suffix n\n");

scanf("%d",&n);

fun(aa,n);

printf("\n*** new list ***\n");

for (i=0;i<N; i++)

printf("%4d", aa[i]);

}


相似考题
更多“请补充函数fun(),该函数的功能是:从键盘输入一个下标n,把数组aa中比元素aa[n]小的元素放在它的左 ”相关问题
  • 第1题:

    请补充函数fun(),该函数的功能是把数组aa中的奇数元素按原来的先后顺序放在原数组后面。

    例如,输入“33,67,42,58,25,76,85,16,41,56”,输出结果“42,58,76,16,56,33,67,25,25,41。

    注意:部分源程序给出如下。

    请勿改动主函数main和具他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    define N 10

    void fun(int aa[])

    {

    int i, j=0,k 0;

    int bb IN];

    for (i 0; i<N; i++)

    {

    if (【 】)

    bb[k++] aa[i];

    else

    aa [j++] =aa Ii];

    for(i=0; i<k;【 】)

    aa[j] bb[i];

    }

    main ( )

    {

    int i;

    int aa[N]={33, 67, 42,58,25, 76, 85, 16,

    41,56};

    clrscr ();

    printf("\n*** original list ***\n");

    for (i=0; i<N; i++)

    printf("%4d", aa[i]);

    fun (aa);

    printf("\n*** new list ***\n");

    for (i=0; i<N; i++)

    printf("%4d", aa[i]);

    }


    正确答案:aa[i]%2!=0或 aa[i]%2==1 i++j++
    aa[i]%2!=0或 aa[i]%2==1 i++,j++ 解析:第一空:如果一个数对2求余,结果不为0,也就是等于1,则这个数为奇数,就把这个数先暂时存在数组bb中。否则这个数为偶数,就存在数组aa中。第二空:最后,将数组bb中的奇数都拷贝到数组aa中偶数的后面。每执行一次循环休,数组aa的下标j和数组bb的下标i都要加1。

  • 第2题:

    请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。

    主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<stdlib.h>

    include<stdio.h>

    void fun(int a[],int n, int *max,int *d)

    {

    }

    main()

    {

    int i, x[20], max, index, n=10;

    randomize();

    for(i=0; i<=n; i++)

    {

    x[i]=rand()%50;

    printf("%4d",x[i]);

    /*输出一个随机数组*/

    }

    printf("\n");

    fun(x,n,&max,&index);

    printf("Max=%5d,Index=%4d\n",max,index);

    }


    正确答案:void fun(int a[]int nint *maxint *d) { int i; *max=a[0]; *d=0; for(i=0;in;i++) /*将最大的元素放入指针max所指的单元最大元素的下标放入指针d所指的单元*/ if(*maxa[i]) {*max=a[i];*d=i;} }
    void fun(int a[],int n,int *max,int *d) { int i; *max=a[0]; *d=0; for(i=0;in;i++) /*将最大的元素放入指针max所指的单元,最大元素的下标放入指针d所指的单元*/ if(*maxa[i]) {*max=a[i];*d=i;} } 解析:该程序直接使用形参max和d,由于它们都是指针变量,所以要引用它所指向的变量时要对它进行指针运算,也即*号运算。

  • 第3题:

    (11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。

    void fun(int a[N],int k)

    { int i;

    for(i=k;i<N;i++) a[ 【11】 ]=a[i];

    }


    正确答案:
    (11)i-1

  • 第4题:

    请补充main函数,该函数的功能是:如果数组aa的前一个元素比后一个元素小,则把它保存在数组比中并输出。

    例如,输入“40,51,62,33,35,52,48,95,66, 73”,则结果输出“40,51,33,35,48,66”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在 main函数的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio. h>

    define N 10

    main ( )

    {

    int i, n=0;

    int aa [N]={40, 51, 62,33, 35, 52, 48, 95,

    66,73};

    int bb[N];

    clrscr ();

    for (i=0; i<【 】; i++)

    if (aa [i] <aa [i+l] )

    【 】;

    printf("\n*** display bb ***In");

    for (i=0; i<n; i++)

    printf("bb[%d]=%2d ",【 】);

    }


    正确答案:N-1 bb[n++]=aa[i] ibb[i]
    N-1 bb[n++]=aa[i] i,bb[i] 解析:第一空:题目要求找出比后一个元素小的元素,所以最后一个元素不需要参加判断,因为它后面没有元素了,所以for循环中,i取值从0到N-2。第二空:将满足题目要求的元素存入数组bb中。第三空:题目要求将数组bb中的数输出,所以输出函数的输出列表是i和bb[i]。

  • 第5题:

    请补充函数fun(),该函数的功能是:把数组aa中元素下标为偶数的元素按从小到大重新保存在原数组中,其它元素位置不变。

    例如,输入“33,67,42,58,25,76,85,16,41, 56”,则输出“25,67,33,58,41,76,42,16,85,56”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<s tdio. h>

    define N 10

    void fun(int aa[])

    {

    int i, j, t;

    for (i=0; i<N;i=i+2)

    {

    for(【 】; j<N; j=j+2)

    if (【 】)

    {

    t=aa [j];

    aa [j] =aa [i];

    aa [i] =t;

    }

    }

    }

    main ()

    {

    int i;

    int aa[N]={33, 67,42, 58, 25, 76, 85, 16,

    41, 56};

    clrscr ();

    printf("\n*** original list ***\n");

    for(i=0; i<N; i++)

    printf ("%4d", aa [i] );

    fun (aa);

    printf("\n*** new list ***\n");

    for(i=0; i<N; i++)

    printf ("%4d", aa [i] );

    }


    正确答案:j=i或j=i+2 aa[i]>aa[j]
    j=i或j=i+2 aa[i]>aa[j] 解析:第一空:本题采用选择法进行排序。选择法的算法思路是:如果有n个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。所以此空填j=i,而填j=i+2也可以,因为如果第一次执行循环体时j=i,则aa[i]和aa[j]是同一个元素,不会引起任何改变,所以可以从它的下一次循环刀:始,即j=i=2。第二空:两两比较时,如果后面的元素比前面的元素小,则将两数交换,实现从小到大排列。