以下函数rotate的功能是:将N行N列的二维数组a中的最后一行放到N行N列的二维数组b的第0列中,把二维数组a中的第0行放到二维数组b的最后一列中,二维数组b中其他数据不变,请在下划线处填空。 #define N 4 void rotate(int a[N][N], int b[N][N]) { int i; for (i=0; i<N; i++) { b[i][0] = a[N-1][i] ; (1) = a[0][i]; } }

题目

以下函数rotate的功能是:将N行N列的二维数组a中的最后一行放到N行N列的二维数组b的第0列中,把二维数组a中的第0行放到二维数组b的最后一列中,二维数组b中其他数据不变,请在下划线处填空。 #define N 4 void rotate(int a[N][N], int b[N][N]) { int i; for (i=0; i<N; i++) { b[i][0] = a[N-1][i] ; (1) = a[0][i]; } }


相似考题
更多“以下函数rotate的功能是:将N行N列的二维数组a中的最后一行放到N行N列的二维数组b的第0列中,把二维数组a中的第0行放到二维数组b的最后一列中,二维数组b中其他数据不变,请在下划线处填空。 #define N 4 void rotate(int a[N][N], int b[N][N]) { int i; for (i=0; i<N; i++) { b[i][0] = a[N-1][i] ; (1) = a[0][i]; } }”相关问题
  • 第1题:

    以下程序中的select()函数功能是:在N行M列的二维数组中选出一个最大值作为函数值返回,并通过形参传回此最大值的行下标。请填空完成此程序。

    include<iostream>

    define N 3

    define M 3

    using namespace std;

    int select(int a[N][M],int *n)

    {

    int i,j,row=0,colum=0;

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

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

    if(a[i][j]>a[row][colum])

    {

    row=i;

    colum=j;

    }

    *n=【 】;

    return 【 】;

    }

    int main()

    {

    int a[N][M]={9,11,23,6,1,15,9,17,20};

    int max,n;

    max=select(a,&n);

    cout<<"max="<<max<<"line="<<n<<end1;

    return 0;

    }


    正确答案:row a[row][colum]
    row a[row][colum] 解析:通过对题意的分析不难看出:在select()函数中,变量row的作用是用来标记最大元素的行下标值,colum的作用是用来记下最大元素的列下标:函数select()通过循环求得数组的最大值的行下标、列下标并分别存放在变量row和colum中。根据题意,应把行下标赋值给形参指针变量n,这样就通过地址传递的方式改变了主调函数中的实参,即把最大值的行下标传回到主调函数中。然后把最大值a[row][colum]作为函数返回值。

  • 第2题:

    以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。

    #define N 3

    #define M 3

    select(int a[N][M],int *n)

    {int i,j,row=1,colum=1;

    for(i=0;i

    for(j=0;j

    if(a[i][j]>a[row][colum]){row=i;colum=j;}

    *n= 【16】 ;

    return 【17】 ;

    }

    main()

    {int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;

    max=select(a,&n);

    printf("max=%d,line=%d\n",max,n);

    }


    正确答案:
    row;a[row][colum]

  • 第3题:

    请编写函数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; } }

  • 第4题:

    下列程序定义了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*/ } 解析:本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

  • 第5题:

    程序定义了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。

  • 第6题:

    请编写函数fun(),该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

    例如,若二维数组中的数据为:

    W WWW

    S S S S

    H H H H

    则字符串中的内容应是WSHWSHWSHWSH。

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

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

    试题程序:

    include<stdio.h>

    define M 3

    define N 4

    void fun(char (*s)[N],char *b)

    {

    }

    main()

    {

    char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},

    {'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}};

    int i,j;

    printf("The matrix:\n");

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

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

    printf("%3c",w[i][j]);

    printf("\n");

    }

    fun(w,a);

    printf("The A string:In");

    puts(a);

    printf("\n\n");

    }


    正确答案:void fun(char (*s) [N]char *b) { int i j k=0; for (i=0; iN; i++) /*按列的顺序依次放到一个字符串中*/ for (j=0; jM; j++) b [k++] =s [j] [i]; b[k]='\0'; }
    void fun(char (*s) [N],char *b) { int i, j, k=0; for (i=0; iN; i++) /*按列的顺序依次放到一个字符串中*/ for (j=0; jM; j++) b [k++] =s [j] [i]; b[k]='\0'; } 解析:看到程序后,我们很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。注意其中第1个循环条件为iN(即列),第2个循环的条件为JM(即行),这是因为在循环的嵌套中越在内层,循环变化就越快。另外,在编写程序中注意是s[j][i]而非s[i][j]。

  • 第7题:

    请编写函数fun(),函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。

    例如:若二维数组中的值为

    1 3 5 7 9

    2 9 9 9 4

    6 9 9 9 8

    1 3 5 7 0

    则函数值为61。

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

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

    试题程序:

    include<conio.h>

    include<stdio.h>

    define M 4

    define N 5

    int fun( int a [M][N])

    {

    }

    main()

    {

    int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},

    {6,9,9,9,8},{1,3,5,7,0}};

    int i, j, y;

    clrscr();

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

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

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

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

    printf("\n ");

    }

    y=fun(aa);

    printf("\nThe sun:%d\n ",y);

    printf("\n");

    }


    正确答案:int fun( int a [M] [N]) { int ijsum=0; for(i=0;iM;i++) for(j=0;iN;j++) if(i==0||i==M-1||j==0||j==N-1) /*只要下标中有一个为0或M-1或N-1则它一定是周边元素*/ sum=sum+a[i][j]; /*将周边元素相加*/ return sum; }
    int fun( int a [M] [N]) { int i,j,sum=0; for(i=0;iM;i++) for(j=0;iN;j++) if(i==0||i==M-1||j==0||j==N-1) /*只要下标中有一个为0或M-1或N-1,则它一定是周边元素*/ sum=sum+a[i][j]; /*将周边元素相加*/ return sum; } 解析:本题采用逐一判断的方式,周边元素的下标一定有一个是0或M-1或N-1,且只要下标中有一个为0或M-1或N-1,则它一定是周边元素。

  • 第8题:

    以下程序中,函数 sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。

    define M 2

    define N 4

    void SumColumMin(int a[M][N],int *sum)

    { int i,j,k,s=0;

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

    { k=0;

    for(j=1;j<M;j++)

    if(a[k][i]>a[j][i])k=j;

    s+=【 】;

    }

    【 】 =s;

    }

    main( )

    { int x[M][N]={3,2,5,1,4,1,8,3},s;

    SumColumMin(【 】);

    printf("%d\n",s);

    }


    正确答案:a[k][i] *sum x[M][N]&s
    a[k][i] *sum x[M][N],&s 解析:本题中if(a[k][I] >a [j] [I]) k=j;把一列中值较小的一个元素的索引存储到k中,所以[18]填[k] [i],[19]填返回值,右值为整型,所以应该填。sum,SnmColumMin(  )函数第一个参数为数组a[M][N],第二个参数为一个整型指针,所以[20]填x[M][N],&s。

  • 第9题:

    以下fun函数的功能是在N行M列的整型二维数组中,选出一个最大值作为函数值返回,请填空。(设M,N已定义)

    int fun(int a[N][M])

    {int i,j,row=0,col=0;

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

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

    if(a[i][j]>a[row][col])(row=i;col=j;)

    return(_____);

    }


    正确答案:a[row][col]
    a[row][col] 解析:嵌套循环,依次遍历二维数组的所有元素,从a[0][0]开始,先按行,后按列,a[row][col]先取a[0][0],若后面的元素比他大,则将此i、j值存入row、col中,即记录元素中当前最大值。循环结束返回a[row][col],即数组最大值。

  • 第10题:

    请编写一个函数void fun(int a [],int n),其中a为数组,n为数组a的长度。函数fun()的功能是冒泡排序法将数组a元素按从小到大的顺序排列,实现数组a的升序排列。

    注意:部分源程序已存在文件PROC12.cpp中。

    请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句。

    文件PROC12.cpp的内容如下:

    //PROC12. cpp

    include <iostream>

    using namespace std;

    define MAX 100

    void fun(int a[],int n);

    int main ()

    {

    int a[MAX],n,i;

    cout<<"Please enter the array size n:\n";

    do {

    cin>>n;

    if (n>100)

    cout<<"array size flowover! ReEnter a number(0-100)\n";

    }while (n>100);

    cout<<"Enter the array data:\n";

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

    cin>>a [ii;

    fun(a[],n);

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

    cout<<a [i] <<" ";

    cout<<end1;

    return 0;

    }

    void fun(int a[ ],int n)

    {

    // * * * * * * * *

    }


    正确答案:

  • 第11题:

    以下程序中,fun函数的功能足求3行4列二维数组每行尢素中的最大值。请填空。 void fun(int,int,int(*)[4],int*); main() {int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i; fun(3,4,a,B); for(i=0;j<3;i++)printf("%4d",b[i]); printf("\n"); } void fun(int m,int n,int ar[][4],int*br) {int i,j,x; for(i=0;i<m;i++) {x=ar[i][0]; for(j=0;j<n;j++) if(( )) x=ar[i][j]; br[i]=x; } }


    正确答案:xar[i][j]
    xar[i][j] 解析:本题考查的是循环的嵌套。本题定义了二维数组a,存放3行4列的数组元素,定义了,一维数组b用于存放每行的最大数。存函数fun中,通过二重for循环求每行的最大数,外层for循环用于控制行数,内层for循环用于控制列数。当外层循环执行一次时,内层循环则执行4次,并求出了这一行的最大值x,最后将每一行求出最大值x赋值给存放最大值的数组br,故本题答案为xar[i][j]。

  • 第12题:

    单选题
    设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为()。
    A

    (i-1)*n+j

    B

    (i-1)*n+j-1

    C

    i*(j-1)

    D

    j*m+i-1


    正确答案: D
    解析: 特殊值法。取i=j=1,易知A[1,1]的的下标为1,四个选项中仅有A选项能确定的值为1,故选A。

  • 第13题:

    以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #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

  • 第14题:

    请编一个函数void proc(int ttEM][N],int pp[N]),tt 指向一个M行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。 试题程序: include<stdio.h> include<conio.h> include<stdlib.h> define M 3 define N 4 void proc(int ttrM3rN]。int pp[N]) {

    } void main { int str[M][N]={ {34,56,84,78}, {23,84,93,12), {28,38,39,93}}; int p[N],i,j,k; system("CLS"); printf("The riginal data is:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) printf("%6d",str[i][j]); printf("\n"); } proc(str,p); printf("\nThe result is:\n");for(k=0:k<M;k++) printf("%4d",p[k]); printf("n");}


    正确答案:

    void proc(int tt[M][N],int pp[N])
    int i,j,max;
    for(i=0;i<M;i++)//i控制行的下标
    {
    max=tt[i][c]; //max存放每行中最大的数
    for(j=0;j<N;j++)
    if(tt[i][j]>max)
    max=tt[i][j];
    pp[i]=max;//把大的数放到PP数组中,经过i来控制pp数组的下标
    }
    }
    【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放入PP所指的一维数组中。首先比较二维数组中每一行的元素,找出每一行中的最大元素,放入一维数组pp中,返回到主函数当中。

  • 第15题:

    设二维数组A[1..m,1..n](即m行n列)按行存储在数组B[1..m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为()。

    A.(i-1)*n+j

    B、(i-1)*n+j-1

    C.i*(j-1)

    D、j*m+i-1


    参考答案:A
    解释:特殊值法。取i=j=1,易知A[1,1]的的下标为1,四个选项中仅有A选项能确定的值为1,故选A。

  • 第16题:

    请编一个函数void fun( int tt[M][N], int pp[N], tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

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

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

    试题程序:

    include <conio.h>

    include <stdio.h>

    define M 3

    define N 4

    void fun(int tt[M][N],int pp[N])

    {

    }

    main()

    {

    int t[M] [N]={{68,32,54,12},{14,24,88,

    58},{42, 22, 44, 56}};

    int p[N],i,j,k;

    clrscr();

    printf("The riginal data is:\n");

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

    {

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

    printf("%6d",t[i][j]);

    printf("\n");

    }

    fun(t,p);

    printf("\nThe result is:\n");

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

    printf("%4d",p[k]);

    printf("\n");

    }


    正确答案:void fun(int tt[M][N]int pp[N]) { int iimax; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } }
    void fun(int tt[M][N],int pp[N]) { int i,i,max; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大,则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } } 解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

  • 第17题:

    请编写一个函数void fun(int p[],int n,int c),其中数组p的元素按由小到大的顺序排列,其元素个数为n。函数fun()的功能是将c插入到数组p中,且保持数组的升序排列。

    注意:部分源程序已存在文件PROC9.cpp中。

    请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句;

    文件PROC9.cpp的内容如下:

    //PROC9.cpp

    include <iostream>

    include <string>

    using namespace std;

    define M 30

    void fun(int p[ ],int n,int c);

    int main ()

    {

    int pp[M],n,i;

    int fg, c;

    cout<<"Please input n:\n";

    cin>>n;

    cout<<"Please input the n data:\n";

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

    cin>>pp [i];

    cout<<"Please input c:\n";

    cin>>c;

    fun (pp, n, c);

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

    cout<<pp [i] << " " ;

    cout<<end1;

    return 0;

    }

    void fun(int p[ ],int n, int c)

    {

    //* * * * * * * * *

    }


    正确答案:

  • 第18题:

    请编写函数fun(),它的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<n-1)的数组元素平移到数组的最后。例如:一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为: 5,6,7,8,9,10,1,2,3,4。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

    include<stdiO.h>

    define N 80

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

    {

    }

    main()

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

    int i,p,n=15;

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

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

    printf("\nEnter p:");

    scanf("%d",&p);

    fun(a,p,n);

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

    for(i=0;i<n;i++)printf("%3d”,a[i]);

    }


    正确答案:void fun(int*wint pint n) {int iJ; int a[N]; for(i=0;i=p;i++)a[i]=w[i] for(i=p+1j=0;in;i++j++)w[j]=w[i]; for(i=0;i=p;i++)w[n-p-1+i]=a[i]; }
    void fun(int*w,int p,int n) {int i,J; int a[N]; for(i=0;i=p;i++)a[i]=w[i] for(i=p+1,j=0;in;i++,j++)w[j]=w[i]; for(i=0;i=p;i++)w[n-p-1+i]=a[i]; } 解析:将数组后面的元素向前平移,肯定会将前面的元素覆盖。因此,可以定义一个数组用来暂时存放前面的元素。可以先将w[0]~w[p]依次赋给a[0]~a[p];然后将w[p]~w[n—1)
    移到数组的前面:再将a[0]~a[p)依次赋给w[n-p-1+i]~w[n—1]。

  • 第19题:

    下列程序定义了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*/ } 解析:本题旨在考查控制数组中左下半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

  • 第20题:

    请编写函数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; } } 解析:本题采用“循环左移”的算法(关于“循环左移”,我们在后面的试题中有详细的解释)。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。

  • 第21题:

    请编写函数proc,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。 例如,若二维数组中的数据为 13 23 33 43 14 24 34 44 15 25 35 45 则一维数组中的内容应该是13 23 33 43 14 24 34 44 15 25 35 45。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。 试题程序: include<stdio.h> void proc(int(*s)[103,int*b,int*n,int rain.int nn) {

    } void main { int arr[10][10]={{33,33,33,33),{44,44,44,44}, {55,55,55,55}),i,j; int a[l00]={o),n=o; printf("The matrix:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%3d",arr[i][j]): printf("\n"); } proc(arr,a,&n,3,4): printf("The A array:\n"); for(i=0;i<n;i++) printf("%3d",a[i]): printf("\n\n"); }


    正确答案:

    void proc(int(*s)[10],int*b,int*n,int mm,int nn)
    {
    int i,j,k=0;
    for(i=0;i<mm;i++)//i是表示其行的下标
    for(j=0;j<nn;j++)//j是表示其列的下标
    b[k++]=s[i][j]; //把其放到b的一维数组中
    *n=k; //把b数组的长度通过形参n传回到主函数中
    }
    【解析】要将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,可以通过首先行循环,然后列循环取出二维数组中的每一个元素,并将其放入一维数组中。最后,将一维数组的长度通过形参返回到主函数当中。

  • 第22题:

    下面程序的功能是 : 将 N 行 N 列二维数组中每一行的元素进行排序 , 第 0 行从小到大排序 , 第 1 行从大到小排序,第 2 行从小到大排序,第 3 行从大到小排序,例如:

    define N 4

    void sort(int a[][N])

    { int i, j, k, t;

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

    for (j=0; j<N-1:j++)

    for (k= 【 13 】 ; k<N;K++)

    /* 判断行下标是否为偶数来确定按升序或降序来排序 */

    if ( 【 14 】 ? a[i][j]<a[i][k]); a[i][j]>a[i][k])

    { t = a[i][j];

    a[i][j]=a[i][k];

    a[i][k] = t;

    }

    }

    void outarr(int a[N][N])

    { …… }

    main()

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

    outarr(aa); /* 以矩阵的形式输出二维数组 */

    sort(aa);

    outarr(aa);

    }


    正确答案:
    答案j+1;i%2或i%2==1解析:k表示i行中从第j个元素之后的元素的列小标;判断第i行是否是偶数

  • 第23题:

    试题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

  • 第24题:

    单选题
    设二维数组A[l.m,1..n](即m行n列)按行存储在数组B[1.m*n]中,则二维数组元素Ai,j]在一维数组B中的下标为()。
    A

    (i-1)*n+j

    B

    (i-1)*n+j-1

    C

    i*(j-1)

    D

    j*m+i-1


    正确答案: D
    解析: