niusouti.com

下列程序段完成给数组输入数据,请在下划线处填空。 #define N 5 int i,a[N]; printf{"请给数组初值:n"}; for (i=0;i<N;i++) scanf("%d",(1));

题目

下列程序段完成给数组输入数据,请在下划线处填空。 #define N 5 int i,a[N]; printf{"请给数组初值:n"}; for (i=0;i<N;i++) scanf("%d",(1));


相似考题
更多“下列程序段完成给数组输入数据,请在下划线处填空。 #define N 5 int i,a[N]; printf{"请给数组初值:n"}; for (i=0;i<N;i++) scanf("%d",(1));”相关问题
  • 第1题:

    请补充函数fun(),该函数的功能是把数组bb中的数按从小到大的排列(数组的值及元素个数从土函数中输入)。

    例如,输入2 3 5 4 1,结果为1 2 3 4 5。

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

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

    试题程序:

    include<stdio. h>

    define N 100

    void fun(int bb[], int n)

    {

    int i,j,t;

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

    for(j=0;【 】;j++)

    if(bb[j]>bb[j+1] )

    {

    t=bb[j];

    bb [j]=bb [j+1];

    bb[j+1]=t;

    }

    }

    main()

    {

    int i=0, n=0;

    int bb[N];

    clrscr ();

    printf("\nInput n: \n");

    scanf ("%d", &n);

    printf ("\nInput data: \n");

    while (i<n)

    {

    printf ("bb [%d] =", i);

    scanf ("%d", &bb [i]);

    i++;

    }

    fun (bb, n);

    printf("\n*** the result ***\n");

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

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

    }


    正确答案:in jn-1
    in jn-1 解析:第一空:本题采用冒泡法进行排序。冒泡法的思路是:如果对n个数从小到大排序,则要进行n轮比较,在每一轮比较中要进行n-1次两两比较。所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在后面,即两两比较后这两个数要形成题中所要求的顺序。理解了冒泡法的思路,则此空应填in。

  • 第2题:

    阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

    【说明】

    程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。

    【程序】

    define N 10

    main()

    {

    void (1);

    int i,a[N];

    for(i=0;i<10,i++) /*输入*/

    scanf(“%d”,&a[i]);

    (2);

    for(i=0;i<N,i++) /*输出*/

    printf(“%3d”,a[i]);

    }

    void selectSon(int x[],int n)

    {

    int i,j,k,t;

    for(int i=0; (3);i++)

    {

    k=i;

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

    if (4) k=j;

    if (5)

    {t=x[i];x[i]=x[k];x[k] =t;}

    }

    }


    正确答案:(1)selectSort()
    (1)selectSort() 解析:main函数中对selectSort函数的调用在定义之前,所以要进行说明。

  • 第3题:

    以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int x[N]) { int i=0; while(i<N) scanf("%d",_________); } 在下划线处应填入的是

    A.x+i

    B.&x[i+1]

    C.x+(i++)

    D.&x[++i]


    正确答案:C

  • 第4题:

    请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p~n-1(p<n-1)的数组元素平移到数组的前面。

    例如,一维数组中的原始内容为1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, P的值为6。移动后,一维数组的内容应为7, 8, 9, 10, 11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6。

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

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

    [试题源程序]

    inciude <stdio.h>

    define N 80

    void fun(int *w, int p, int n)

    {

    }

    main()

    {

    int a[N]=(i, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

    int i, P, n=15;

    printf("The original data:\n");

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

    printf("%3d", a[i]);

    printf("\n\nEnter p: ");

    scanf("%d", &p);

    fun(a, P, n);

    printf("\nThe data after moving:\n");

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

    printf("%3d", a[i]);

    printf("\n\n");

    }


    正确答案:void fun(int *w int p int n) { int i J t; for(i=p; i=n-i; i++) { t=w[n-1]; for(j=n-2; j>=0; j--) w[j+1]=w[j]; w[0]=t; } }
    void fun(int *w, int p, int n) { int i, J, t; for(i=p; i=n-i; i++) { t=w[n-1]; for(j=n-2; j>=0; j--) w[j+1]=w[j]; w[0]=t; } }

  • 第5题:

    下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是使数组右上半三角元素中的值全部置成0。例如a数组中的值为

    a=4 5 6

    1 7 9

    3 2 6,

    则返回主程序后a数组中的值应为

    0 0 0

    1 0 0

    3 2 0

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

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

    试题程序:

    include<conio.h>

    include<stdio.h>

    include<stdlib.h>

    define N 5

    int fun(int a[ ][N])

    {

    }

    main()

    {

    int a[N][N],i,j;

    clrscr( );

    printf("*****The array*****\n");

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

    /*产生—个随机的5*5矩阵*/

    {for(j=0;j<N;j++)

    {a[i][j]=rand( )%10;

    printf (“%4d”,a[i][j]);

    }

    printf(“\n”);

    }

    fun(a);

    printf(“THE RESULT\n”);

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

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

    printf(“%4d”,a[i][j]);

    printf(“\n”);

    }

    }


    正确答案:int fun (int a[][N)) { int ij; for(i=0;iN;i++) for(j=i;jN;j++) a[i][j]=0; /*将数组右上半三角元素中的值全部置成0*/ }
    int fun (int a[][N)) { int i,j; for(i=0;iN;i++) for(j=i;jN;j++) a[i][j]=0; /*将数组右上半三角元素中的值全部置成0*/ } 解析:本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

  • 第6题:

    程序定义了N×N的二维数组,并在主函数中自动赋值。

    请编写函数fun(int a[][N],int n),该函数的功能是使数组左下半三角元素中的值加上n。

    例如:若n的值为3,a数组中的值为

    a=2 5 4

    1 6 9

    5 3 7

    则返回主程序后a数组中的值应为

    5 5 4

    4 9 9

    8 6 10

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

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

    试题程序:

    include <stdio.h>

    include <conio.h>

    include <stdlib.h>

    define N 5

    fun(int a[][N],int n)

    {

    }

    main()

    {

    int a[N][N],n,i,j;

    clrscr();

    printf("***** The array *****\n");

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

    /*产生—个随机5*5矩阵*/

    {

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

    {

    a[i][j]=rand()%10;

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

    }

    printf("\n");

    }

    do

    n=rand()%10;

    /*产生一个小于5的随机数n*/

    while(n>=5);

    printf("n=%4d\n",n);

    fun(a,n);

    printf("*****THE RESULT*****\n");

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

    {

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

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

    printf("\n");

    }

    }


    正确答案:fun (int a[ ][N] int n) { int ij; for(i=0; iN; i++) for(j=0; ji; j++) a[i][j]=a[i][j]+n /*使数组左下半三角元素中的值加上n*/ }
    fun (int a[ ][N], int n) { int i,j; for(i=0; iN; i++) for(j=0; ji; j++) a[i][j]=a[i][j]+n /*使数组左下半三角元素中的值加上n*/ } 解析:首先从数组中找出要被加上n的那部分元素,找的过程其实就是找出将被挑出的那部分元素在原数组中的分布规律的过程。通过观察得出,要被处理的那部分元素的下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得合乎要求的元素,然后再加上n。

  • 第7题:

    下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include<stdio.h>

    define N 20

    void fun(int a[ ],int n)

    {

    int i,j,t,p;

    /*************found*************/

    for(j=0;j<n-1;j++) ;

    {

    p=j;

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

    if(a[i)>a[p])

    p=i;

    t=a[p];

    a[p]=a[i];

    /*************found**************/

    a[p]=t;

    }

    }

    main()

    {

    int a[N]={11,32,-5,2,14},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)错误:for(j=0;jn-1;j++); 正确:for(j=0;jn-1;j++) (2) 错误:a[p]=t 正确:a[j]=t;
    (1)错误:for(j=0;jn-1;j++); 正确:for(j=0;jn-1;j++) (2) 错误:a[p]=t 正确:a[j]=t; 解析:错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。错误2:将两数进行交换的常用语句,借助第三个变量。

  • 第8题:

    假如整数数列中的数不重复,并存放在数组中。下列给定的程序中,函数fun()的功能是:删除数列中值为X的元素。 N中存放的是数列中元素的个数。

    请改正程序中的错误,使它能够得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include<stdio.h>

    define N 20

    fun (int *a,int n,int x)

    {int p=0,i;

    a[n]=x;

    while (x!=a[p])

    p=p+1;

    if(p==n) return -1;

    else

    {for (i=p;i<n;i++)

    /*************found**************/

    a[i+1]=a[i];

    return n-1;

    }

    }

    main()

    {int w[N]={-3,0,1,5,7,99,10,15,30,90},

    x,n,i;

    n=10;

    printf("The original data :\n");

    for (i=0;i<n;i++) printf("%5d",w[i]);

    printf("\nInput x (to delete ): ");

    scanf("%d",&x);

    printf("Delete : %d\n",x);

    n=fun(w,n,x);

    if (n==-1) printf("***No be found!

    ***\n\n");

    else

    {printf("The data after deleted:\n");

    for (i=0;i<n;i++) printf("%5d",

    w[i]);printf("\n\n");

    }

    }


    正确答案:错误:a[i+1]=a[i]; 正确:a[i]=a[i+1];
    错误:a[i+1]=a[i]; 正确:a[i]=a[i+1]; 解析:上机改错题有一个优势,就是我们可以执行该程序,根据错误的提示再一步一步实现改错的目的,我们先不看程序是什么意思,甚至不用看它在求什么。按Ctrl+F9快捷键,然后看看屏幕提示。另外,审题时我们必须要注意“不要改动main()函数,不得增行或减行,也不得更改程序结构”,这样;对我们来说,只要读懂题意,对程序执行部分:
    {int p=0,i;
    a[n]=x;
    while (x!=a[p])
    p=p+1;
    if (p==n) return -1;
    else
    { for (i=p;in;i++)
    a[i+1]=a[i];
    return n-1;
    }
    逐步分析,再应用平时的常识加以区分,琢磨,相信答案不攻自破,这种考题,按Ctrl+F9快捷键后,屏幕一般都不会提示错误,否则就显得太儿科了一点,所以,我们并不需要着急去找错误,而是把程序读懂。

  • 第9题:

    以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #include<stdio.h> #define N l0 void fun(int x[N]) {int i=O; while(i<N)scanf("%d",___ ); } 在程序中下划线处应填人的是( )。

    A.x+i

    B.&x[i+1]

    C.x+(i++)

    D.&x[++i]


    正确答案:C
    x为数组x[N]的首地址也就等于&x[0];A中i都为0则只对X[0]赋值,B对数组第二位赋值;D从数组第二位开始赋值;故选c。

  • 第10题:

    以下函数按每珩8个输出数组中的数据 void fun( iht*w, int n) { inti; for(i=0;i<n,i++) { ______ printf("%d",w[i]); } printf("\n"); } 下划线处应填入的语句是______。

    A.if(i/8=0)printf("\n);

    B.if(i/8=0)continue;

    C.if(i%8=0)printf("\n");

    D.if(i%8=0)continue;


    正确答案:C
    解析:本题主要考查输出换行的问题,要求每行8个输出,因此,下划线处应填的语句是if(i%8=0)printf("\n");选项A相当于空—行,前七个数每输出—个数换行,从第八个数以后不换行输出剩下的数。选项B相当于前八个数不输出,从第九个数开始不换行输出剩下的数。选项D相当于不换行从数组中的第二个数开始输出,凡是i对8取模为0的数,均不输出。所以选项C是正确的。

  • 第11题:

    请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。

    例如,一维数组中的原始内容为1,2,3,4,5,6,7, 8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15, 1, 2, 3, 4。

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

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

    试题程序:

    include <stdio.h>

    define N 80

    void fun(int *w, int p, int n)

    {

    }

    main ()

    {

    int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    int i, p, n=15;

    printf("The original data:\n");

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

    printf("%3d",a[i]);

    printf("\n\nEnter p: ");

    scanf("%d",&p);

    fun(a,p,n);

    printf("\nThe data after moving:\n");

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

    printf("%3d",a[i]);

    printf("\n\n");

    }


    正确答案:void fun(int *wint pint n) { int i j t; for(i=0; i=p; i++) /*循环左移p+1次*/ {t=w[0]; for(j=1/jn;j++) /*实现循环左移*/ w[j-1]=w[j]; w[j-1]=t; } }
    void fun(int *w,int p,int n) { int i, j, t; for(i=0; i=p; i++) /*循环左移p+1次*/ {t=w[0]; for(j=1/jn;j++) /*实现循环左移*/ w[j-1]=w[j]; w[j-1]=t; } } 解析:本题采用“循环左移”的算法(关于“循环左移”,我们在后面的试题中有详细的解释)。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。

  • 第12题:

    请完成函数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; 1 )

    { p=j;

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

    if(a[i] 2 a[p]

    p=i;

    t=a[p];

    a[p]=a[j];

    a[ 3 ]=t;

    main()

    {int a[N]={11,32,-5,2,14},i,m=5;

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

    printf("%d\n",a[i});

    fun(a,m);

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

    printf("%d"a[i]);

    }


    正确答案:void fun(int a[]int n) { int ijtp; for(j=0;jn-1;j++) { p=j; for(i=j;in;i++) if(a[i]>a[p]) p=i; t=a[p]; a[P]=a[j]; a[j]=t; } }
    void fun(int a[],int n) { int i,j,t,p; for(j=0;jn-1;j++) { p=j; for(i=j;in;i++) if(a[i]>a[p]) p=i; t=a[p]; a[P]=a[j]; a[j]=t; } } 解析:程序的基本思路是依次用当前取得的元素和它后面的其他元素进行比较,这样在比较完后,可以保证当前位置的当前元素存放着最大数。按同样方法取得次最大数。空白1处填j++,循环变量j依次增1,取出每个数;空白2处填>,按照题目要求是从大到小排序:空白3处填j,借助中间变量交换两个数。

  • 第13题:

    (28)以下函数按每行8个输出数组中的数据

    void fun( int *w,int n)

    { int i;

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

    {________

    printf(“%d”,w);

    }

    printf(“\n”);

    }

    下划线处应填入的语句是

    A)if(i/8==0)print(“\n”); B) if(i/8==0)continue;

    C) if(i%8==0)print(“\n”); D) if(i%8==0)continue;


    正确答案:C

  • 第14题:

    请补充函数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]);

    }


    正确答案:aa[k++]=t ij
    aa[k++]=t ij 解析:第一空:首先将aa[n]赋值给t,通过for循环,将比t大的数暂存在数组bb中,将比t小的数保存在数组aa中,此时应该将t存入数组aa中,正好放在那些小于t的元素后面。第二空:最后将数组bb中的元素存入数组aa中,放在t的后面。变量j记录了大于t的元素的个数,所以变量i的取值范围是从0到j-1。

  • 第15题:

    下列给定程序中,函数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;

    }

    }

    msin()

    {

    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 正确:p=; (2)错误:p=j; 正确:p=i;
    (1)错误:p=j 正确:p=; (2)错误:p=j; 正确:p=i; 解析:题中提到按“从小到大”的顺序排序,这类题目都可以用选择排序法,即从后N个比较过程中,选择一个最小的与第一个元素交换,以此类推,即用第二个元素与后N-1个进行比较,并进行交换。
    错误1:此处错误比较明显,p=j后面应加分号。
    错误2:根据选择排序法的思路,此处应将i赋给p。

  • 第16题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【程序2.1说明】

    已知一个排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组中。

    【程序2.1】

    include <stdioh>

    define N 100

    void main()

    {

    float a[N+l],x;

    int i,p;

    printf("输入已经排好序的数列: ");

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

    scanf(%f",&a[i]);

    printf("输入要插入的数:");

    scanf("%f",&x);

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

    if(x<a[i])

    {

    (1)

    break;

    }

    for(i=N-1; i>=p; i--)

    (2)

    (3)

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

    prinff("%f\t",a[i]);

    }

    【程序2.2说明】

    本程序用变量count统计文件中字符的个数。

    【程序2.2】

    include <stdio.h>

    include <stdlib.h>

    void main()

    {

    FILE *fp;

    long count=0;

    if((fp=fopen("letter.txt","r"))==NULL)

    {

    printf("can not open file\n");

    exit(0);

    }

    while(!feof(fp))

    {

    (4)

    count++;

    }

    printf("count=%d\n",count);

    (5)

    }


    正确答案:(1)p=i (2)a[i+1]=a[i]; (3)a[p]=x; (4)fgetc(fp); (5)fclose(fp);
    (1)p=i (2)a[i+1]=a[i]; (3)a[p]=x; (4)fgetc(fp); (5)fclose(fp); 解析:本题考查在C语言中实现对数组的插入和对文件中字符个数的统计。
    我们先来看程序2.1。题目要求在程序2.1中实现在排好序的数组中插入一个数,但不能改变数组中数字排序的规律。由于数组是已经排好序的,它有可能是按不递减的方法排序,也有可能是按不递增的方法排序。在插入时,从数组中第一个数开始,逐个进行比较,直到找到比其大或相等的数,在其前面进行插入,在插入前应该先将数组中的元素逐个后移。
    下面我们来看代码。代码中有三个循环,第(1)空在第一个循环体下面的条件判断语句里,条件判断语句是判断要插入的数J与数组中元素的大小,如果数x小于数组中的元素,就执行第(1)空的语句。从上面的分析,再结合第二个循环语句的条件,我们可以知道,此空的作用是记录数要插入的位置,并把这个结果存放在变量p中,所以,答案为p=i。
    第(2)空所在的位置是第二个循环体下面,根据分析,要完成的任务应该是将数组中要插入位置后的元素逐个往后移动。所以,此空的答案为a[i+1]=a[i]。
    在完成了上述两空之后,再结合整个程序来看,很明显还有一个功能没有完成,那就是插入数x,第(3)空就是用于完成这个任务的。由于在代码的前面已经记录下了要插入的位置,所以,此空答案为a[p]=x。
    在程序2.2中,题目要求完成的任务是用变量count统计文件中字符的个数,要实现对文件中字符个数的统计,首先需要我们判断出哪些是字符,这就涉及C语言中对文件中字符的判定。此外,还需要我们掌握对文件的基本操作。
    下面,我们来看程序2.2的代码。首先用一个条件判断语句来打开一个文件,如果打开成功,则执行下面的while循环语句,循环体的功能是对文件中的内容逐个判断,如果是字符,则统计变量count加1,因此,第(4)空的功能就是要找出文件中的所有字符。这里没有条件判断语句来判段是否是字符,需要用到C语言中对文件处理的一个函数fgetc(),其作用是可以取出文件中所有的字符,因此,此空答案为fgetc(fp)。
    第(5)空在代码的最后面,如果我们对文件操作很熟悉的话,不难发现文件在打开后还没有关闭,此空要实现的功能是关闭文件,因此,此空答案为fclose(fp)。

  • 第17题:

    请补充main函数,该函数的功能是:把一维数组中的元素逆置。结果仍然保存在原数组中。

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

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

    试题程序:

    include <stdio.h>

    define N 10

    main ( )

    {

    int i, j, t;

    int bb[N];

    clrscr ();

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

    bb[i]=i;

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

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

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

    for(【 】; j<=i;【 】)

    {

    t=bb [j ];

    bb [j ] =bb [i];

    bb[i]=t;

    }

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

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

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

    }


    正确答案:j=0--I j++i-
    j=0,--I j++,i-, 解析:第一空:逆置一维数组元素的思路是,将第一个元素与最后一个元素对调,将第二个元素与倒数第二个元素对调,依此类推,直到中间的元素。所以第一次执行循环时,第一个元素的下标为0,最后一个元素的下标为N-1,而此时i等于N,故要将i减1。第二空:每执行一次循环,顺方向元素向后移动一个,反方向元素向前移动一个,故下标j要加1,下标i要减1。

  • 第18题:

    下列给定程序中,函数fun()的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵:

    4 1 2 3

    3 4 1 2

    2 3 4 1

    1 2 3 4

    请改正程序中的错误,使它能得出正确的结果。

    注意;不要改动main 函数,不得增行或删行,也不得更改程序的结构。

    试题程序;

    include <stdio.h>

    define M 4

    /*******************************/

    void fun(int a)

    {int i,j,k,m;

    printf("Enter 4 number: ");

    for (i=0; i<M; i++) scanf ("%d", &a [i] );

    printf ("\n\n The result : \n\n ");

    for (i=M; i>0; i--)

    { k=a [M-1];

    for (j=M-1; j>0; j--)

    /**********************************/

    a[j]=a[j+1];

    a[0]=k;

    for (m=0 ;m<M; m++ ) printf ("%d ", a [m]);

    printf ("\n ");

    }

    }

    main ()

    {int a [M];

    fun(a); printf("\n\n ");

    }


    正确答案:(1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1];
    (1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1]; 解析:其实,该题中题目信息已经告诉我们按“如下规律”,这就需要去认真分析矩阵的“规律”了,在第1列中,数列以4开始递减,直至1,在该数列中,行和列都是递减循环排列,所以题目在循环的时候有循环条件for(i=M;i>0;i--)和 for (j=M-1;j>0;j--),当然每次循环结束后在列中的赋值语句应该是a[j]=a[j-1];。

  • 第19题:

    以下程序段是函数返回a所指数组中最小的值所在的下标值,请在下划线处填空。

    fun(int *a,int n)

    {

    int i,j=0,p;

    p=j;

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

    if(a[i]<a[p]) 【 】;

    return(p);

    }


    正确答案:p=i
    p=i

  • 第20题:

    下列程序定义了N×N的二维数组,并在主函数中自动赋值;请编写函数fun(int a[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为

    a=1 9 7

    2 3 8

    4 5 6

    则返回主程序后a数组中的值应为

    0 9 7

    0 0 8

    0 0 0

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

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

    试题程序:

    include <conio.h>

    include <stdio.h>

    include <stdlib.h>

    define N 5

    int fun (int a[] [N])

    {

    }

    main()

    {

    int a[N] [N],i,j;

    clrscr();

    printf("*****The array*****\n");

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

    /*产生—个随机的5*5矩阵*/

    { for(j=0;j<N;j++)

    {a[i][j]=rand()%10;

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

    }

    printf("\n");

    }

    fun (a);

    printf("THE RESULT\n");

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

    { for(j=0;j<N;j++)

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

    printf("\n");

    }

    }


    正确答案:int fun (int a[][N]) { int ij; for(i=0;iN;i++) for(j=0;j=i;j++) a[i][j]=0; /*将数组左下半三角元素中的值全部置成0*/ }
    int fun (int a[][N]) { int i,j; for(i=0;iN;i++) for(j=0;j=i;j++) a[i][j]=0; /*将数组左下半三角元素中的值全部置成0*/ } 解析:本题旨在考查控制数组中左下半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

  • 第21题:

    以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(intx[N]) { int i=0; while(i<N) seanf("%d",______); } 在下划线处应填入的是

    A.x+i

    B.&x[i+1]

    C.x+(i++)

    D.&x[++i]


    正确答案:C
    解析:在scanf()函数中有两个参数,其中第一个参数为输入格式字符串,第二个参数是地址字符串。根据scant()的定义,故应该在空白处填入一地址,又由题意要给数组的每个成员赋值,i表示数组的下标,那么i必须每循环一次加1,即指向下一个数组元素,当i=7时循环体执行了7次,数组的每个成员都被赋值了,退出循环。

  • 第22题:

    以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。请填空。#include <stdio.h>#define N 80int fun(int a[], int n){ int i,j=1; for(i=1;i<n;i++) if(a[j-1]a[i]) a[j++]=a[i]; ;}main(){ int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}, i, n=19; printf("The original data :\n"); for(i=0; i<n; i++) printf("%3d",a[i]); n=fun(a,n); printf("\nThe data after deleted :\n"); for(i=0; i<n; i++) printf("%3d",a[i]); printf("\n");}


    正确答案:<,return j
    在本题中,程序的功能是删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
    在主函数中,首先定义了一个一维数组,并进行了初始化操作,然后用一个循环输出该数组,接着调用函数fun去掉数组中重复的元素,最后输出。按照题目要求,我们可以知道函数fun的作用是去掉已排好序数组中的重复元素。
    fun函数带有两个形参,从主函数中我们可以看出,这两个形参分别是数组的首地址和数组的长度。在函数体中,首先定义两个整型变量i和j,其中j被初始化为1,而i作为循环变量,然后执行for循环,循环的结束条件是循环变量i小于数组的长度,从题目要求和程序来分析,该循环的作用是删除数组中重复的元素,在循环体中,首先执行条件判断语句if,第13空就是该语句的判断条件表达式,如果条件为真,执行a[j++]=a[i];,从程序中我们推断出a[j++]是用来存储新的数组,而将a[i];赋值给a[j++]时,能确定a[i]是出现一个新数值的时候,即一个更大的数值,那么此时a[i]应该大于a[j-1],因此第13空应该填<运算符。
    第14空是在循环结束后的一条语句,从主函数中我们可以看出,函数应该有个返回值,且返回值作为输出数组元素个数的依据,由此我们可以推断出在14空处应该返回新数组的长度。返回的应该是变量j的当前值,因此,第14空的答案是return j。本题的答案应该分别是<和return j

  • 第23题:

    以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

    #include<stdio.h>

    #define N 10

    void fun(int x[N])

    {int i=0;

    while(i<N)scanf(“%d”,_______);

    }

    在程序中下划线处应填入的是

    A.x+i

    B.&x[i+1]

    C.x+(i++)

    D.&x[++i]


    正确答案:C

  • 第24题:

    试题14

    以下程序调用fun函数把x中的值插入到a数组下标为k的数组元素中。主函数中,n存放a数组中数据的个数。请填空。

    #include <stdio.h>

    void fun(int s[], int *n, int k, int x)

    { int i;

    for(i=*n-1; i>=k; i- - ) s[ ___ ]=s[i];

    s[k]=x;

    *n=*n+______;

    }

    main()

    { int a[20]={1,2,3,4,5,6,7,8,9,10,11}, i, x=0, k=6, n=11;

    fun(a, &n, k, x);

    for(i=0; i<n; i++) printf(“%4d”,a[i]); printf(“\n”);

    }


    正确答案:
    试题14分析
    因为是把x中的值插入到a数组下标为k的数组元素中,所以首先要将k及其后的元素往后移一位,方法是s[i+1]=s[i],插入之后,因为多了一个元素,要将n中值增1。
    试题14答案
     【14】i+1
    【15】1