niusouti.com

若有说明int m[3][4]={3,9,7,8.5},(*q)[4];和赋值语句q=m;,则对数组元素m[i][j](其中O<=i<3,0<=j<4)值的正确引用为( )。A)(q i)[j]B)*q[il][j]C)*(*q[i] j)D)*(*(q i) j)

题目

若有说明int m[3][4]={3,9,7,8.5},(*q)[4];和赋值语句q=m;,则对数组元素m[i][j](其中O<=i<3,0<=j<4)值的正确引用为( )。

A)(q i)[j]

B)*q[il][j]

C)*(*q[i] j)

D)*(*(q i) j)


相似考题
更多“若有说明int m[3][4]={3,9,7,8.5},(*q)[4];和赋值语句q=m;,则对数组元素m[i][j](其中O&lt;=i&lt; ”相关问题
  • 第1题:

    若有定义语句:int a[4][10],* P,* q[4];且0<=i<4,则错误的赋值是( )。

    A.P=a

    B.q[i]=a[i]

    C.p=a[i]

    D.p=&a[2][1]


    正确答案:A
    二维数组名是指向指针的指针,所以a和q都为指向指针的指针,而P为指向int类型的指针。所以选项A)是将一个指向int类型的指针用来指向一个指针的指针,显然是错误的。其他几个选项都是正确的赋值,其中选项D)是用&返回整数的地址,然后赋值给P。

  • 第2题:

    若有定义语句“intm[]={5,4,3,2,1),i=4;”则下列对m数组元素的引用中错误的是( )。A.m[--i]SXB

    若有定义语句“intm[]={5,4,3,2,1),i=4;”则下列对m数组元素的引用中错误的是( )。

    A.m[--i]

    B.m[2*2]

    C.m[m[o]]

    D.m[m[i]]


    正确答案:C
    C。【解析】数组的下标是从零开始的。一维数组的一般定义方式为数型说明符数组名[常置表达式],其中“[]”中的内容可以是整型数量,也可以是整型表达式。选项C中,m[0]=5,m[m[o]]=m[5],数组下标越界。

  • 第3题:

    若有说明int m[3][4]={3,9,7,8.5},(*q)[4];和赋值语句q=m;,则对数组元素m[i][j](其中O<=i<3,0<=j<4)值的正确引用为( )。

    A)(q i)[j]

    B)*q[il][j]

    C)*(*q[i] j)

    D)*(*(q i) j)


    正确答案:D
    (q i)指向第i行首地址, (*(q i) j)代表第i行第i个元素。

  • 第4题:

    若有定义语句:int u[4][10],*P,*q[4];且0≤i<4,则错误的赋值是

    A.p=a

    B.q[i]=a[i]

    C.p=a[i]

    D.p=&a[2][1]


    正确答案:A
    解析:直接将二维数组a赋给p不合法,两者类型不匹配。

  • 第5题:

    若有定义int a[2][3];,则对a数组的第i行第j列(假设i,j已正确说明并赋值.元素值的正确引用为( )。

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

    B.(a+i.[j]

    C.*(a+i+j.

    D.*(a+i.+j


    正确答案:A
    本题考查了二维数组元素的引用方法。选项A)中a+i指向了数组a的第i+1行。*(a+i)则是第i+1行第0列的地址值,*(a+i)+j指向了数组a第i+1行,j+1列,*(*(a+i)+j)取到的是数组a的a[i][j]元素。

  • 第6题:

    若有定义语句:int m[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误的是______。

    A.m[-i]

    B.m[2*2]

    C.m[m[0]]

    D.m[m[i]]


    正确答案:C
    解析:一维数组的定义方式为:类型说明符 数组名[常量表达式]。其中“常量表达式”表示元素的个数,即数组长度。元素的下标从0开始,最大下标是元素个数减一。本题定义了一个由5个元素(m[0[到m[4])组成的数组。选项A表示对m[3]的引用;选项B表示对m[4]的引用;由于m[0]的值为5,所以选项C表示m[5],但由于m数组元素的最大下标为4,所以本引用下标越界;由于m[i]即m[4]的值为1,所以选项D表示对m[1]的引用。

  • 第7题:

    有如下程序:include using namespace std;class Base{protected:int i;public:int

    有如下程序: #include <iostream.h> using namespace std; class Base { protected: int i; public: int j; }; class Derived:public Base { int m; public: int n; }; int main() { Derived d; d.i=0; //[1] d.j=0; //[2] d.m=0; //[3] d.n=0; //[4] return 0; } 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是( )。

    A.[1]和 [2]

    B.[1]和[3]

    C.[2]和[3]

    D.[2]和[4]


    正确答案:B
    解析:此题考查的是类和派生类的访问权限。类Derived公有继承类Base,所以d对基类Base成员的访问权限不变。因数据成员i为保护,故不能通过对象访问;派生类Derived中m变量为私有,同样不能通过对象访问,所以[1]、[3]错误。

  • 第8题:

    若有定义语句:int m[][3]={1,2,3,4,5,6,7};,则与该语句等价的是

    A.int m[][3j={{1,2,3},{4,5,6},{i 7}};

    B.int m[][3]={{1,2},{3,4},{5,6,7}};

    C.int m[][3]={{1,2,3},{4,5},{6,7}};

    D.int nl[][3]={{1},{2,3,4},{5,6,7}};


    正确答案:A
    二维数组的初始化有两种方式,一种是分行初始化,方式为:数据类型数组名[行下标表达式][列下标表达式]={{第0行初值},{第1行初值表},…{最后l行初值表}};,如果初值表只对部分元素赋初值,没有被赋初值的元素将被自动赋值为0。另一种是按二维数组在内存中的排列顺序给各元素赋初值,这种方式就是不分行将所有数据依次列在一个花括号里,方式为:数据类型数组名[行下标表达式][列下标表达式]={初值表};,这种方式的赋值就是将初值表的数据依次赋予数组的每个元素,其中赋值是按照数组元素在内存中的位置进行的。题目中的初始化语句是第二种方法,如果用第一种方法应该是intm[][3]={{1,2,3},{4,5,6{,{7{};,这里应该保证除了最后一行,每一行都满列有3个元素,A选项正确。

  • 第9题:

    若有定义:int a[2][3];则才a数组的第i行第j列(假调i,j已正确说明并赋值)元素值的正确引用为

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

    B.(a+i)[j]

    C.*(a+i+j)

    D.*(a+i)+j


    正确答案:A
    解析:本题考查了二维数组元素的引用方法。选项A中a引指向了数组a的第i+1行,*(a+i)则是第i+1行第0列的地址值,*(a+i)+j指向了数组a第i+1行,j+1列,*(*(a+i)+j)取到的是数组a的a[i][j]的元素。

  • 第10题:

    有如下程序:include using namespace std;classBase{protected:int i:public:int j

    有如下程序: #include <iostream.h> using namespace std; class Base { protected: int i: public: int j; }; class Derived: public Base { int m: public: int n; } int main() { Derived d: d.i=0; //[1] d.J=0; //[2] d.m=0; //[3] d.n=0: //[4] return 0; } 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是

    A.[1]和[2]

    B.[1]和[3]

    C.[2]和[3]

    D.[2]和[4]


    正确答案:B
    解析:本题考核类和派生类的访问权限。类Derived共有继承Base,那么d对基类Base成员变量的访问权限不变,由于数据成员i为保护的,不能通过对象访问。派生类Derived中变量m为私有的,同样不能通过对象访问,所以错误的赋值语句为[1]和[3]。

  • 第11题:

    设数组a[0..n-1,0..m-1](n>1,m>1)中的元素以行为主序存放,每个元素占用4个存储单元,则数组元素a[i,j](0≤i
    A. (j*m+i)*4
    B.(i*m+j)*4
    C.(j*n+i)*4
    D.(i*n+j)*4

    答案:B
    解析:
    本题考查数据结构基础知识。
    数组a的元素可示意如下。

    对于元素按行排列时,其之前有i行且每行有m个元素(行下标为0,1,…,i-1),即i*m个,行下标为i时,排列在a[i,j]切之前的元素有a[i,0],a[i,1],…,a[i,j-1],即j个,所以一共有i*m+j个元素排在a[i,j]之前,因此该元素的存储位置相对于数组空间首地址的偏移量为(i*m+j)*4。

  • 第12题:

    单选题
    若有定义语句:int m[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误的是(  )。
    A

    m[--i]

    B

    m[2*2]

    C

    m[m[0]]

    D

    m[m[i]]


    正确答案: A
    解析:
    在C语言中,数组的下标是从0开始的,所以它的上限是数组元素个数减1。如果超过这个范围来引用数据元素就会溢出,造成运行时错误。本题的数组m有5个元素,所以它的下标范围是0~4。A项,--i的值为3;B项,2*2的值为4;C项,m[0]等于5,超出范围,出现溢出错误;D项,m[i]的值为4,即m[4]的值为1。答案选择C选项。

  • 第13题:

    阅读下列函数说明和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列。

  • 第14题:

    阅读以下说明和C++程序,将应填(n)处的字句写在对应栏内。

    [说明]

    设计一程序,输入10个整数到一个数组中,调整这10个数在数组中的位置,使得其中最小的一个数成为数组的首元素,最大的一个数成为数组的末元素。

    [C++程序]

    include <iostream.h>

    define SIZE 10

    void main ( )

    {

    int data [SIZE];

    int m;

    cout<<"请输入"<<SIZE<<"个整数:";

    for ( m=0;m<SIZE; m++ ) (1);

    int j=0,k=0;

    for ( int i=1;i<SIZE; i++ )

    if ((2)) j=i;

    else if ( data[i]<data[k] ) (3);

    if (j>0 ) {

    int d=data[0];

    (4);

    data[k]=d;

    }

    if ( k<SIZE-1 )

    {

    int d=data [SIZE- 1 ];

    data[SIZE- 1 ]=data[j];

    (5);

    }

    cout<<end1<<" 排序后: ";

    for ( m=0;m<SIZE; m++ ) cout<<data[m]<<" " ;

    }


    正确答案:(1)n>>data [m] (2) data[i]>data[j] (3) k=i (4) data[0]=data[k] (5) data[j]=d
    (1)n>>data [m] (2) data[i]>data[j] (3) k=i (4) data[0]=data[k] (5) data[j]=d

  • 第15题:

    有如下程序:includeclass Base{protected:int i;public:int j;};class Derived:pub

    有如下程序: #include<iostream.h> class Base { protected:int i; public:int j; }; class Derived:public Base { int m; public:int n; }; int main() { Derived d; d.i=0; //[1]d.j=0; //[2]d.m=0; //[3]d.n=0; //[4]return 0; } 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是( )。

    A.[1]和[2]

    B.[1)和[3]

    C.[2]和[3]

    D.[2]和[4]


    正确答案:B

  • 第16题:

    若在以下定义和赋值语句,则才s数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的合法引用为 int s[2][3]={0},( *p)[3]; p=s;

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

    B.*(p[i]+j)

    C.(p+i)+j

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


    正确答案:A
    解析:p+i是数组s的第i+1行的首地址,而*(p+i)则是数组第i+1行第1列的元素的地址,*(p+i)+j则是第i+1行的第j+1列的地址,*(*(p+i)+j)引用的是数组元素s[i][j]的值。注意:通过建立一个指针数组来引用二维数组元素。

  • 第17题:

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

  • 第18题:

    若有说明int m[3][4]={3,9,7,8.5},(*q)[4];和赋值语句q=m;,则对数组元素m[i][j](其中0<=i<3,0<=j<4)值的正确引用为( )。

    A.(q+i)[j]

    B.*q[i][j]

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

    D.*(*(q+i)+j)


    正确答案:D
    解析:*(q+i)指向第i行首地址,*(*(q+i)+j)代表第i行第j个元素。

  • 第19题:

    若有定义语句:"int a[4][10],*P,*q[4];"且0≤i<4,则错误的赋值是( )。

    A.D=a

    B.q[i]=a[i]

    C.p=a[l]

    D.P=&a[2][1]


    正确答案:A
    数组名是一个存放一个数组首地址的值,是一个地址常量。而p=a不是合法的,因为p和a的基本类型不同。

  • 第20题:

    有如下程序:include using namespace std;class Base{ protected: int i;public: int

    有如下程序: #include <iostream> using namespace std; class Base { protected: int i; public: int j; }; class Derived:public Base {int m; public: int n; }; int main() { Derived d; d.i=0;//[1]d.j=0;//[2]d.m=0;//[3]d.n=0;//[4]return 0; } 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是______ 。

    A.[1]和[2]

    B.[1]和[3]

    C.[2]和[3]

    D.[2]和[4)


    正确答案:B
    解析:i是Derived的保护成员,m是私有成员。

  • 第21题:

    设数组a[0.n-1,0..m-1](n>1,m>1)中的元素以行为主序存放,每个元素占用4个存储单元,则数组元素a[i,j](0≤i<n,0≤j<m)的存储位置相对于数组空间首地址的偏移量为 ( )。

    A.(j*m+i)*4B.(i*m+j)*4C.(j*n+i)*4D.(i*n+j)*4


    正确答案:B

  • 第22题:

    设有如下定义:

    struct sk

    { int m;

    floatx;

    }data,*q;

    若要使q指向data中的m域,正确的赋值语句是( )。

    A)q=&data.m;

    B)*q=data.m;

    C)q=(struct sk*)&data.m;

    D)q=(struct sk*)data.m;


    正确答案:C

  • 第23题:

    若有定义:inta[3][4];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的不正确引用为()

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

    正确答案:C

  • 第24题:

    单选题
    若有定义语句:int a[4][10],*P,*q[4];且0≤i<4,则错误的赋值是(  )。
    A

    p=a

    B

    q[i]=a[i]

    C

    p=a[i]

    D

    p=&a[2][1]


    正确答案: C
    解析:
    二维数组名是指向指针的指针,所以a和q都为指向指针的指针,而p为指向int类型的指针,p和a不同类型,故A选项中p=a赋值语句错误。其余选项可以正确赋值,其中D项是用取地址符&返回整数的地址,然后赋值给p。所以答案选择A选项。