niusouti.com
更多“设有二维数组int a[3][4];和指针 int *p=&a[0][0]; 下列哪项是与a[i][j]的作用相同的表示法”相关问题
  • 第1题:

    阅读下列函数说明和C函数,回答问题1~2,将解答填入栏内。

    [说明]

    若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m和n分别是矩阵A的行列数。

    [程序]

    void saddle (int A[ ] [ ], int m, int n)

    { int i,j,min;

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

    { min: (1);

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

    if(A[i][j]<min) (2);

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

    if ((3))

    { p=0;

    while (p<m&&(4))p+ +;

    if (p > = m)printf ("%d,%d,%d\n",i,j,min);

    }

    }

    }

    [问题1] 将函数代码中的(1)~(4)处补充完整

    [问题2]在上述代码的执行过程中,若A为矩阵,则调用saddle(A,3,3)后输出是(5)。


    正确答案:[问题1](1)A[i][0] (2)min=A[i][j] (3)A[i] [j]==min (4)A[p][j]=min或min=A[P] [j] [问题2](5)1211
    [问题1](1)A[i][0] (2)min=A[i][j] (3)A[i] [j]==min (4)A[p][j]=min或min=A[P] [j] [问题2](5)1,2,11 解析:本算法的基本思想是:对矩阵A逐行处理,求出每一行的最小值,对于这一行上等于最小值的那些元素,逐个判断该元素是否是所在列的最大元,如果是则打印输出。
    (1)由上下文可知min代表第i行的最小值,此处应对其赋初值:本行第一个元素;
    (2)遍历第i行后面的元素,若有元素比miu小,则应更新min的值;
    (3)此处应挑出本行中取最小值的元素进行判断;
    (4)此循环用于判断min是否是本列的最大元。
    (5)所给矩阵中只有一个鞍点11,若行列号从。开始计,它位于第l行第2列。

  • 第2题:

    下列语句序列执行后,j的值是( )。 int j=0; for (int i=3 i>0; i- -)j+=i;

    A.3

    B.4

    C.6

    D.5


    正确答案:C

  • 第3题:

    有以下程序:include int f(int b[] [4]){int i,j,s=0; for(j=0;j<4;j++) {i=j;if(i>2)

    有以下程序: #include <stdio.h> int f(int b[] [4]) { int i,j,s=0; for(j=0;j<4;j++) { i=j; if(i>2) i=3-j; s+=b[i][j]; } return s; } main() { int a[4][4]={{1,2,3,4},{0,2,4,6},{3,6,9,12},{3,2,1,0}}; printf("%d\n",f(a)); } 执行后的输出结果是( )。

    A.12

    B.11

    C.18

    D.16


    正确答案:D
    解析:程序中,当j=0时,i=0,i>2不成立,s+=b[0][0)=1;j=1时,i=1,i>2不成立,s=s+b[1][1]=1+2=3;j=2时,i=2,i>2不成立,s=s+b[2][2]=3+9=12;j=3时,i=3,i>2成立,i=3-j,此时i=0,s=s+b[0][3]=12+4=16;j=4时循环结束。所以最后s值为16。

  • 第4题:

    以下程序输出正确的是_______ amovep(int *p,int (*a)[3],int n) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++){ *p=a[i][j];p++;} } main() {int *p,a[3][3]={{1,3,5}, {2,4,6}}; p=(int*)mallox(100) amovep)p,a,3); printf("%d%d\n",p[2],p[5]);free(p) }

    A.56

    B.25

    C.34

    D.程序错误


    正确答案:A
    解析:本题main函数中定义了指针p和二维数组a,通过函数amovep将数组的值存入指针p所指向的存储单元中,a的各元素分别:a[0][0]=1,a[0][1]=3,a[0][1]=3,a[0][2]=5,a[1][2]=2,a[1][1]=4,a[1][2]=6,a[2][0]=0,a[2][1]=0,a[2][2]=0。通过malloc()函数给指针分配内存空间,free()函数用于释放指针变量所用内存空间。在主函数中通过amovep(p,a,3)调用函数amovep,使得实参p与形参P,实参数组a与形参中指向数组的指针变量共用同一存储空间。最后输出p[2],p[5]为56。

  • 第5题:

    设有二维数组int a[10][20];,则a[i][j]的地址可由首元素a[0][0]的地址来表达,由此可得访问数组元素a[i][j]的表达式为【 】。


    正确答案:*(&a[0][0]+20*4*i+4*j)
    *(&a[0][0]+20*4*i+4*j) 解析:根据二维数组的定义,它的a[i][j]元素的地址应该是&a[0][0]+20*4*i+4*j,所以a[i][j]元素的值是*(&a[0][0]+20*4*i+4*j)。

  • 第6题:

    下列程序中,定义了一个3行4列的数组A,并将A的内容转换为ASCII码值,并复制到数组B中,然后打印出来。

    注意:请勿改动main()主方法和其他已有语句内容,仅在横线处填入适当语句。

    public class Example1_4

    {

    private char A[] [] = {{'a', 'b', 'c', 'd'},

    {'e', 'f', 'g', 'h'},

    {'i', 'j', 'k', 'l'}};

    public int ______; //生成一个空的3行4列的数组B

    public void copy()

    {

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

    for(int j = 0; j < 4; j++)

    ______;

    }

    public static void main(______ argv[])

    {

    Example1_4 example = new Example1_4();

    example.copy();

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

    {

    for(int j = 0; j < 4; j++)

    System.out.print(example. B[i] [j] *+" ");

    System.out.println ();

    }

    }

    }


    正确答案:①B[][]=new int[3][4] ②B[i][j]=A[i][j] ③String[]
    ①B[][]=new int[3][4] ②B[i][j]=A[i][j] ③String[] 解析:本题主要考查考生对数组的掌握情况,以及数据类型之间的转换。
    Java语言中,数组必须使用“new”关键字对其分配存储空间,因此第一个空需要填写“new int[3][4]”。
    main函数的参数列表必须是字符串数组,但是作为参数,是动态获取的,所以没有数组长度,而仅仅写成String[]argv,由此得到了第3个空。第2空是考查数据自动转换。
    Java的基本数据类型可以按照一定的规则自动转换,而不需要特殊处理。故第2个空可以直接用等号赋值。

  • 第7题:

    以下函数返回a所指数组中最小的值所在的下标值: fun(int*a,int n) { int i,j=0,P; p=j; for(i=j;i<n;i++) if(a[i]<a[j])____return(p); } 在下划线处应填入的是( )。

    A.i=P

    B.a[p]=a[i]

    C.p=j

    D.p=i


    正确答案:D
    p是存放最小下标的变量,而if后的表达就是实现这个}j的的,当if成立时,就把小的下标放到p中,故选择D选项。

  • 第8题:

    以下程序输出正确的是______。 amovep(int *pint(*a) [3]int n) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++){ *p=a[i][j];p++;} } main() {int *p,a[3][3]={{1,3,5},{2,4,6}}; p=(int*)malloc (100); amovep(p,a,3); printf("%d%d\n",p[2]p[5];free(p); }

    A.56

    B.25

    C.34

    D.程序错误


    正确答案:A
    解析:本题main函数中定义了指针p和二维数组a,通过函数amovep将数组的值存入指针p所指向的存储单元中,a的各元素分别为:a[0][0]=1,a[0][1]=3,a[0][2]=5……,a[2][0],a[2][1]=0,a[2][2]=0。通过mallo()函数绐指针分配内存空间,free()函数用于释放指针变量所用内存空间。在主函数中通过amovep(p,a,3)调用函数amovep,使得实参p与形参p,实参数组a与形参中指向数组的指针变量共用同—存储空间。最后输出p[2],p[5]为56。

  • 第9题:

    下列有关指针的用法中,错误的是( )。

    A.int i;int *p=&i;

    B. int i;int *p;i=*p;

    C. int *p;p=0;

    D.int i=5;int *p;p=&i;


    正确答案:B
    解析:“int i;”语句为定义了一个整型变量i。“int *p”为定义一个整型指针p。选项A) 中的“int *p=&i;”是定义整型指针变量p,并指向整型i的地址。选项B) 中“i=*p”语句是将p指向的变量赋值给i,而指针p没有初始化,所以选项B) 错误。选项C) 中“p=0;”表示p指向0的地址。选项D) 中“&i”为取i的地址,并赋值给p。

  • 第10题:

    有以下程序:int f(int b[][4]){int i, j, s=0;for(j=0; j<4; j++){i=j;if(i>2)i=3-j;S+=b[i][j];

    有以下程序: int f(int b[][4]) { int i, j, s=0; for(j=0; j<4; j++) { i=j; if(i>2)i=3-j; S+=b[i][j]; } return s; } main() { int a[4][4]={{1, 2, 3, 4}, {0, 2, 4, 6}, {3, 6, 9, 12}, {3, 2, 1, 0}}; printf("%d\n", f(a)); } 执行后的输出结果是______。

    A.12

    B.11

    C.18

    D.16


    正确答案:D
    解析:f(a)=a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。

  • 第11题:

    以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)

    例如,矩阵为:

    3 0 0 3

    2 5 7 3

    1 0 4 2

    则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。

    add(int m,int n,int arr[])

    { int i,j,sum=0;

    for(i=0;i

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

    sum=sum+ (7) ;

    for(j=0;j

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

    sum=sum+arr[i*n+j];

    return(sum);

    }


    正确答案:
    3.(7) arr[i*n+j](或者arr[i*10+j])

     (8) i<M-1(或者I<=M-2)

  • 第12题:

    若有以下程序段,其中0<=i<4,0<=j<3,则不能正确访问a数组元素的是() int i,j,(*p)[3]; int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12}; p=a;

    • A、*(*(a+i)+j)
    • B、p[i][j]
    • C、(*(p+i))[j]
    • D、p[i]+j

    正确答案:D

  • 第13题:

    以下程序段是函数返回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

  • 第14题:

    下列程序用来判断数组中特定元素的位置所在,则输出结果为()。includeinclude

    下列程序用来判断数组中特定元素的位置所在,则输出结果为( )。 #include<conio.h> #include<iostream.h> int fun(int*p,int n,int*j) {int i; *j=0; for(i=0;i<n;i++) if(p[*j]<p[i])*j=i; return p[*j];} void main() {int a[10]={1,3,9,0,8,7,6,5,4,2)j;int j; fun(a,10,&j); cout<<j<<','<<a[j];}

    A.2,9

    B.3

    C.9

    D.3,9


    正确答案:A
    解析:由程序中的主函数main入手,调用fun函数。其中第一个实参为数组a的名字,数组名作为实参,传递的是数组的起始地址。所以在fun函数中指针D指向了数组的第一个元素a[0]。另外实参整型j传递的是引用,也就是j的地址。在fun函数中在for循环中,依次将当前元素p[i]与j指针值为标识的p[*j]进行比较,取较大的。最后循环后的结果就是p[*j]存放数组中的最大值,并且指针j为该值的标识位。可以看出数组的最大值是9标识位为2。

  • 第15题:

    以下程序中,函数 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。

  • 第16题:

    下面程序的输出结果是______。 main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int(*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++) k=p[i][j]; printf("%d\n",k); }

    A.17

    B.18

    C.19

    D.23


    正确答案:C
    解析:p是指向长度为4的一维数组的指针变量,可看作是二维数组a的行指针,可以像使用数组名一样通过p带数组下标的形式来引用数组中元素,变量k最后是元素a[2][1]的值。

  • 第17题:

    以下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],即数组最大值。

  • 第18题:

    若有以下程序段,其中0<=i<4,0<=j<3,则不能正确访问a数组元素的是()int i,j,(*p)[3];int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12};p=a;

    A.*(*(a+i)+j)

    B.p[i][j]

    C.(*(p+i))[j]

    D.p[i]+j


    参考答案:D

  • 第19题:

    有以下程序:int f(int b[][4]){ int i, j, s=0;for(j=0j<4;j++){ i=j;if(i>2) i=3-j;s+=b[i][j];

    有以下程序:int f(int b[][4]){ int i, j, s=0; for(j=0j<4;j++) { i=j; if(i>2) i=3-j; s+=b[i][j]; } return s;}main(){ int a[4][4]={ { 1,2,3,4}, {0,2,4,6},{3,6,9,12 }, {3,2,1,0} }; printf("%d\n", f(a)); }执行后的输出结果是( )。

    A.12

    B.11

    C.18

    D.16


    正确答案:D
    解析:分析程序可知,函数f()中的for循环作用,是将数组前三行中的对角线上的元素,即b[0][0]、b[1][1]、b[2][2]和第一行的第四列元素即b[0][3]累加到变量s中,然后将s的值返回。在主函数中首先定义了一个4行4列的二维数组,接着通过输出语句输出函数f(a)的返回值。调用f(a)的返回值为a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。所以,4个选项中选项D符合题意。

  • 第20题:

    有以下程序:struct S{int n;int a[20];};void f(struct S*P){int i,j,t;for(i=0;in-1;i++)fo

    有以下程序: struct S{int n;int a[20];}; void f(struct S*P) { int i,j,t; for(i=0;i<P->n-1;i++) for(j=j+1;j<P->n-1;j++) if(p->a[i]>p->a[j]) {t=P->a[i];p->a[i]=P->a[j];p->a[j]=t} } main() {int i;struct S s{10,{2,3,1,6,8,7,5,4,10,9}}; f(&s); for(i=0;i<s.n;i++)printf("%d",s.a[i]);} 程序运行后的输出结果是( )。

    A.3

    B.4

    C.5

    D.6


    正确答案:A
    解析:在主函数main()中定义了一个整型变量i和一个结构体变量s。f()函数中,定义了一个结构体指针类型的指针p,外层循环变量i表示数组的第i个元素,内层循环j表示数组的第i+1个元素,调用f()函数,通过指针变量p来引用结构体成员,并把它们进行从小到大排序,最后输出。

  • 第21题:

    下面程序段的功能是()。……int a[]={4,0,2,3,1},i,j,t;for(i=0;<5;i++){t=a[i];j=i;j--;while(j>=0

    下面程序段的功能是( )。 …… int a[]={4,0,2,3,1},i,j,t; for(i=0;<5;i++) { t=a[i];j=i;j--; while(j>=0&&t>a[j]) {a[j+1]=a[j];j--;} a[j+1] =t; } ……

    A.对数组a进行插入排序(升序)

    B.对数组a进行插入排序(降序)

    C.对数组a进行选择排序(升序)

    D.对数组a进行选择排序(降序)


    正确答案:B
    解析:本题考查数组的使用,注意插入排序方法。

  • 第22题:

    以下程序中,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]。

  • 第23题:

    设有C语句int a[3][4];, 则每次移动过a数组一行元素的指针变量定义形式是()

    • A、int *p;
    • B、int **p;
    • C、int(*p)[4];
    • D、int *p[4];

    正确答案:C

  • 第24题:

    单选题
    若有以下程序段,其中0<=i<4,0<=j<3,则不能正确访问a数组元素的是() int i,j,(*p)[3]; int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12}; p=a;
    A

    *(*(a+i)+j)

    B

    p[i][j]

    C

    (*(p+i))[j]

    D

    p[i]+j


    正确答案: D
    解析: 暂无解析