niusouti.com

已知有一维数组T[0...m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1...m]中,即B[1]=T[0],B[2)= T[n],依次类推,那么放入B[k](1≤k≤m)的元素是( )。A.T[(k-1)*n] B.T[k*n] C.T[(k-1)*m] D.T[k*m]

题目
已知有一维数组T[0...m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1...m]中,即B[1]=T[0],B[2)= T[n],依次类推,那么放入B[k](1≤k≤m)的元素是( )。

A.T[(k-1)*n]
B.T[k*n]
C.T[(k-1)*m]
D.T[k*m]

相似考题
更多“已知有一维数组T[0...m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1...m]中,即B[1]=T[0],B[2)= T[n],依次类推,那么放入B[k](1≤k≤m)的元素是( )。”相关问题
  • 第1题:

    设用一维数组A[1…n]来存储一个栈,令A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。当从栈中弹出一个元素时,变量T的变化为

    A.T:=T+1

    B.T:=T-1

    C.T不变

    D.T:=n


    正确答案:A

  • 第2题:

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

    【说明】

    函数void rcr(int a[],int n,int k)的功能是:将数组a中的元素s[0]~9[n-1]循环向右平移k个位置。

    为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标 p,并将a[P]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至 a[p];依次类推,直到将a[0]的备份值移到正确位置。

    若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至9[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。

    若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。

    例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。

    void rcr( int a[] ,int n,int k)

    { int i,j,t,temp,count;

    count =0; /*记录移动元素的次数*/

    k=k%n;

    if((1)){ /*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/

    i=0

    while(count<n) {

    j=i;t=i;

    temp =a[1]; /*备份a[i]的值*/

    /*移动相关元素,直到计算出a[i]应移动到的目标位置*/

    while((j=(2))! =i){

    a[t]=a[j];

    t=(3);

    count++;

    }

    (4)= temp;count ++;

    (5);

    }

    }

    }


    正确答案:(1)k或k!=0 (2)(j-k+n)%n或(t-k+n)%n (3)j (4)a[t]或等价表达式 (5)i++或等价表达式
    (1)k或k!=0 (2)(j-k+n)%n或(t-k+n)%n (3)j (4)a[t]或等价表达式 (5)i++或等价表达式 解析:(1)判断k执行k=k%n后是否为0,即是否是n的倍数,应填入k或k!=0。(2)j表示要移动到a[t]的元素的位置,于是j和t的关系为j=(t-k+n)%n;当执行完j=i,t=i后,j=t,于是此处可填入(j-k+n)%n或(t-k+n)%n。(3)将a[j]移动到a[t]后,需要将 t指向j,即此处填入j。(4)将暂存在temp中的值移动到a[t]中。即此处填入a[t]或等价表达式。(5)此处while循环的递增条件,显然应该是i++或其他等价表达式。

  • 第3题:

    下面函数返回数组中最大元素的下标,数组中元素个数为t,将程序补充完整。

    int findmax(int s[],int t) {

    int k,p;

    for(p=0,k=p;p<t;p++) {

    if 【 】

    k=p;

    }

    return k;

    }


    正确答案:(s[p]>s[k])
    (s[p]>s[k]) 解析:分析程序其他部分,k存放最大元素的下标。

  • 第4题:

    已知数组a中有n个元素,下列语句将数组a中从下标x1开始的k个元素移动到从下标x2开始的k个元素中,其中O<=xl<x2<n,x2+k<n,请将下列语句补充完整。

    For(int i=x1+k-1;i>=x1;i--)

    a[______]=a[i];


    正确答案:X2+k-1
    X2+k-1 解析:此题考查的是数组的操作。a[i]表示从下标x1开始的第i个元素,若为第一次循环,则i为xt+k-1,按照题目将数组a中从下标x1开始的k个元素移动到从下标x2开始的k个元素中的要求,所以将a[i]赋值给下标为X2+k-1的元素。

  • 第5题:

    以下函数模板max()的功能是返回数组a中最大元素的值。请将横线处缺失部分补充完整。

    template<typename T>T max(T a[],int n)

    {

    T m=a[0]

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

    if(a[i]>m)______;

    return m;

    }


    正确答案:m=a[i]
    m=a[i] 解析:此题考查的是函数模板、if语句、for循环等知识点。函数模板max()的功能是返回数组a中最大元素的值,所以当a[i]是最大值时,应将a[i]的值赋值给m。

  • 第6题:

    ●设有二维数组a[1..m,1..n](2<m<n),其第一个元素为a[1,1],最后一个元素为a[m,n],若数组元素以行为主序存放,每个元素占用k个存储单元(k>1),则元素a[2,2]的存储位置相对于数组空间首地址的偏移量为(35)。

    A.(n+1)*k

    B.n*k+l

    C.(m+1)*k

    D.m*k+l


    正确答案:A

  • 第7题:

    已知有一维数组A(0..m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系(4)可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。

    A.i=k/n,j=k%m

    B.i=k/m,j=K%m

    C.i=k/n,j=k%n

    D.i=k/m,j=k%n


    正确答案:C
    解析:此题是求一维数组向二维数组转化的问题。最原始的方法就是把数组A的前n个元素放到数组B的第一行,数组A的第n个元素放到数组B的第二行中,依次类推,数组A的最后n个元素放到数组B的最后一行中。求且[幻在数组B中的位置,应先确定A[k]处在哪一行,显然应该是k/n行,然后再确定处在k/n行的哪一列,显然是k%n列。

  • 第8题:

    已知有二维数组A[0..n-1][0..n-1],其中当i+j=n时,A[i][j]≠0,现在要将A数组压缩存储到一维数组T[0..m],其中m>n。数组T的第一个元素T[0]=A[1][n-1] T[1]=A[2][n-2],……,依次类推,那么放入A[i][j](i+j=n)的元素是(37)。

    A.T[i+j]

    B.T[i*n+j]

    C.T[i]

    D.T[i-1]


    正确答案:D
    解析:由题可知,除第0行外,每一行只存储一个元素,因此i行应存放在T[i-1]之中。

  • 第9题:

    阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    函数void rcr(int a[],int n,int k)的功能是:将数组a中的元素a[0]~a[n-1]循环向右平移k个位置。

    为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标p,并将a[p]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[0]的备份值移到正确位置。

    若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至a[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。

    若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。

    例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。

    【函数】

    void rcr(int a[],int n,int k)

    {int i,j,t,temp,count;

    count=0;/*记录移动元素的次数*/

    k=k%n;

    if( (1) ){/*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/

    i=0;

    while(count<n){

    j=i;t=i;

    temp=a[i];/*备份a[i]的值*/

    /*移动相关元素,直到计算出a[i]应移动到的目标位置*/

    while((j= (2) )!=i){

    a[t]=a[j];

    t= (3) ;

    count++;

    }

    (4) =temp;count++;

    (5) ;

    }

    }

    }


    正确答案:
    【答案】(1)k或k!=0(2)(j-k+n)%n或(t-k+n)%n(3)j(4)a[t]或等价表达式(5)i++或等价表达式【解析】(1)判断k执行k=k%n后是否为0,即是否是n的倍数,应填入k或k!=0。(2)j表示要移动到a[t]的元素的位置,于是j和t的关系为j=(t-k+n)%n;当执行完j=i,t=i后,j=t,于是此处可填入(j-k+n)%n或(t-k+n)%n。(3)将a[j]移动到a[t]后,需要将t指向j,即此处填入j。(4)将暂存在temp中的值移动到a[t]中。即此处填入a[t]或等价表达式。(5)此处while循环的递增条件,显然应该是i++或其他等价表达式。

  • 第10题:

    第二题 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    【说明】
    对n个元素进行简单选择排序的基本方法是:第一趟从第1个元素开始,在n个元素中选出最小者,将其交换至第一个位置,第二趟从第2个元素开始,在剩下的n-1个元素中选出最小者,将其交换至第二个位置,依此类推,第i趟从n-i+1个元素中选出最小元素,将其交换至第i个位置,通过n-1趟选择最终得到非递减排序的有序序列。 问题:2.1 【代码】
    #include
    void selectSort(int data[ ],int n)
    //对 data[0]~data[n-1]中的n个整数按非递减有序的方式进行排列
    {
    int i,j,k;
    int temp;
    for(i=0;i for(k=i,j=i+1;(1);(2)) //k表示data[i]~data[n-1]中最小元素的下标
    if(data[j] if(k!=i) {
    //将本趟找出的最小元素与data[i]交换
    temp=data[i]; (4) ;data[k]=temp;
    }
    }
    }

    int main()
    {
    int arr[ ]={79,85,93,65,44,70,100,57};
    int i,m;
    m=sizeof(arr)/sizeof(int); //计算数组元素的个数,用m表示
    (5); //调用selectSort对数组arr进行非递减排序
    for((6);i printf(“%d\t”,arr[i]);
    printf(“\n”);
    return 0;
    }


    答案:
    解析:
    j(2)j++
    (3)k=j
    (4)data[i]=data[k]
    (5)selectSort(arr,m)此处m也可以填8或者sizeof(arr)/sizeof(int), arr可以改成&arr[0]
    (6)i=0

    【解析】

    本题考查 C 程序设计基本技能及应用。简单选择排序方法是设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟后就完成了记录序列的排序。
    第1空应填j循环结束条件,j应该运行至序列末尾。填j第2空填j循环控制语句,j每次递增1,往后移动一个元素与a[i]进行比较。
    第3空为自动保存最大元素的下标,k=j。
    第4空为交换两个元素,temp为临时变量,保存data[i]的值,使用data[i]=data[k]使data[i]为后面n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,再将temp赋给data[k]。
    第5空为调用selectSort对数组arr进行非递减排序,selectSort有两个参数,数组和排序元素个数,为selectSort(arr,m)。
    第6空进行元素遍历输出所有的数组元素,从下标为0开始,所以填i=0。

  • 第11题:

    已知有一维数组A[0.m×n-1],若要对应为m行n列的矩阵,则下面的对应关系(),可将元素A[k](O≤<k≤<m×n)表示成矩阵的第i行、第j列的元素(0≤i≤m,0匀≤n)。

    A. i=k/n,j=k%m
    B.i=k/m,j=k%m
    C.i=k/n,j=k%n
    D.i=k/m,j=k%n

    答案:C
    解析:
    矩阵每一行有n个元素,则第i+l行、第j+l到的元素~在A中是第n×i+j+l个元素,对应的下标k=nXi+j(因为下标从0开始)。反过来:i=k/n,j=k%n。

  • 第12题:

    已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的地址是()。


    正确答案:Loc(A[0][0])+(i*N+j)*k

  • 第13题:

    已知有一维数组A[0...m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系______可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。

    A.i=k/n,j=k%m

    B.i=k/m,j=k%m

    C.i=k/n,j=k%n

    D.i=k/m,j=k%n


    正确答案:C
    解析:本题其实是求一个一维数组A[m*n)向二维数组B[m][n]的转化问题。最原始的方法就是把A数组的前n个元素放到B数组的第一行中,A数组的第n个元素放到B数组的第二行中,依次类推,A数组的最后n个元素放到B数组的最后一行中。
      要求A[k]在B数组中的位置,首先确定A[k]处在哪一行,根据上面的存放方法,显然,应该是k/n行。然后再确定处在k/n行的哪一列,显然是k%n。

  • 第14题:

    请编一个函数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数组中*/ } } 解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

  • 第15题:

    假设有一维数组T[O...m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1...m)中,即B[1]=T[0],B[2]=T[n],依此类推,那么放入B[k](1≤k≤n)的元素是(120)。

    A.T[(K-1)*m]

    B.T[K*n)

    C.T[(K-1)*n]

    D.T[K*m]


    正确答案:C
    解析:代入k=1,得到B[k]=T[0];代入k=2,得到B[k]=T[n]。可见只有T[(K-1)*m)满足要求。

  • 第16题:

    插入排序算法的主要思想是:每次从未排序序列中取出一个数据,插入到己排序序列中的正确位置。InsertSort类的成员函数sort()实现了插入排序算法。请将画线处缺失的部分补充完整。

    class InsertSort{

    public:

    InsertSort(int* a0,int n0):a(a0),n(n0){}//参数a0是某数组首地址,n是数组元素个数

    void sort()

    {//此函数假设已排序序列初始化状态只包含a[0],未排序序列初始为a[1]…a[n-1]

    for(int i=1;i<n;++i){

    int t=a[i];

    int j;

    for(【 】;j>0;--j){

    if(t>=a[j-1])break;

    a[j]=a[j-1];}

    a[j]==t;}}

    protected:

    int*a,n;//指针a用于存放数组首地址,n用于存放数组元素个数

    };


    正确答案:j=i
    j=i 解析:本题考查的是插入排序算法。在sort()函数中是一个两重循环,外循环从1循环递增到n-1,即遍历未排序序列a[1]…a[n-1],取未排序序列中的第1个元素a[i] (i初值等于1)与已排序序列中的最后一个元素a[i-1]开始从后往前进行比较。内循环从后往前遍历已排序序列,使循环变量j的初值为i,则a[j-1]是已排序序列的最后一个元素。所以应该填j=i

  • 第17题:

    已知有一维数组T[0..m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1..m]中,即B[1]=T[0],D[2]=T[n],依此类推,那么放入B[k](1≤k≤n)的元素是______。

    A.T[(k-1)*n]

    B.T(k*n)

    C.T[(k-1)*m]

    D.T[k*m]


    正确答案:A
    解析:根据题意,每隔n个元素取出一个元素依次存入数组B(1..m]中。所以,不难推导出B[1]=T[0],B[2]=T[n],B[3]=T[2n],…,B[k]=T[(k-1)n]故本题应该选择A。

  • 第18题:

    已知有一维数组T[0...m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1...m]中,即B[1]=T[0],B[2)= T[n],依次类推,那么放入B[k](1≤k≤m)的元素是______。

    A.T[(k-1)*n]

    B.T[k*n]

    C.T[(k-1)*m]

    D.T[k*m]


    正确答案:A
    解析:由题可知,B[1]=T[(1-1)*n],B[2]=T[(2-1)*n],B[3]=T[(3-1)*n],...,根据归纳法可得B[k]=T[(k-1)*n)。

  • 第19题:

    阅读下面程序,则程序段的功能是 #include"stdio.h" main() { int c[]={23,1,56,234,7,0,34},i,j,t; for(i=1;i<7;i++) { t=c[i];j=i-1; while(j>=0 && t>c[j]) { c[j+1]=c[j];j--;} c[j+1]=t;} for(i=0;i<7;i++) printf("%d",c[i]); putchar('\n');}

    A.对数组元素的升序排列

    B.对数组元素的降序排列

    C.对数组元素的倒序排列

    D.对数组元素的随机排列


    正确答案:B
    解析:读懂两个循环的关系,是解这个题目的关键,本题的第一个for循环的作用是实现对数组元素的遍历,第二个循环的作用是排序。while(j>=0&&t>c[j]),这个语句是控制排序的关键语句,它即实现了比较两个元素大小的作用,又实现了元素向后移动的作用,不断地把大的数据向前移动,直到找到一个比它小的,或到数据的上界为止。

  • 第20题:

    已知有一维数组A[0,…,m×n-1],若要对应为m行、n列的矩阵,则下面的对应关系(73)可将元素A[k](0≤k<m×n)表示成矩阵的第i行、第j列的元素(0≤i<m, 0≤j<n)。

    A.i=k/n,j=k%m

    B.i=k/m,j=k%m

    C.i=k/n,j=k%n

    D.i=k/m,j=k%n


    正确答案:C
    解析:本题其实就是求一个一维数组A[m×n]向二维数组B[m][n]的转化问题,最原始的方法就是把A数组的前n个元素放到刀数组的第一行中,A数组的第n+1到2n个元素放到B数组的第二行中,依次类推,A数组的最后n个元素放到B数组的最后一行中。要求A[k])在B数组中的位置,首先确定A[k]处在哪一行,根据上面的存放方法,显然,应该是k/n行。然后再确定处在k/n行的哪一列,显然是k%n(“%”表示模运算)。

  • 第21题:

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

    [说明]

    函数int psort(int a[],int n)实现将含n个整数的数组a[]的不同元素按从小到大顺序存于数组a[]中。实现方法是从未确定的元素列中找到最小元素并将a[]的第i最小元素交换至a[i]位置。如该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。

    [C函数]

    int psort(int a[],int n)

    {int i,J,k,P;

    for(i=0,k=0;i<(1);i++){

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

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

    p=j;

    if(p!=i){

    t=a[p];

    a[p]=a[i];

    a[i]=t;

    }

    if( (3) ) k++;

    else if( (4) <a[i])

    (5)=a[i];

    }

    return k;

    }

    int a[]={5,7,5,6,4,3,4,6,7};

    main()

    {int k,n;

    for(k=0;k<(Sizeof a)/Sizeof(int);k++)

    printf("%5d",a[k]);

    printf ("\n\n");

    n=psort(a,(sizeof(a))/sizeof(int));

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

    printf("%5d",a[k]);

    printf("\n\n");

    }


    正确答案:(1) n-1 (2) P=i (3) k==0 (4) a[k-1] (5) a[k++]
    (1) n-1 (2) P=i (3) k==0 (4) a[k-1] (5) a[k++] 解析:本程序排序方法是从未确定的元素列中找到最小元素并将a[]的第i最小元素交换至a[i]位置。如该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。这是采用选择法对数组元素进行排序,因此空(1)填“n-1”,空(2)填“p=i”。若该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。因此,空(3)填“k==0”;而当a[k-1]a[i]时”,则a[k++]=a[i];否则忽略元素a[i]。所以空(4)填“a[k-1]”空(5)填“a[k++]”。

  • 第22题:

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

    A.j*m+i
    B.i*m+j
    C.j*n+i
    D.i*n+j

    答案:B
    解析:
    本题考查程序语言基础知识。
    对于元素a[i,j],按行存储方式下,其前面共有i行(行下标为0至行下标为i-1)、每行m个元素,合计i*m个元素。数组a中行下标为i的元素有a[i,0]、a[i,1]、…、a[i,j-1]、a[i,j]、…、a[i,m-1],显然在该序列中,a[i,j]之前有j个元素,因此,数组元素a[i,j](0<i<n,0<j<m)之前共有i*m+j个元素,由于每个占用1个存储单元,故该元素的存储位置相对于数组空间首地址的偏移量为i*m+i。

  • 第23题:

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

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

    答案:C
    解析:
    数组a[0..n-1,0..m-1](n>0,m>0)表示有n行m列,数组元素的存储地址=数组空间首地址+偏移量。其中偏移量的计算方式为排列在所访问元素之前的元素个数乘以每个元素占用的存储单元数。对于元素a[i,j],在按列存储(以列为主序存放)方式下,该元素之前有j列完整(因为首列编号为0)的元素,每一列n个元素,在第j列之前有i个元素(因为首行编号为0),所以偏移量为j*n+i。

  • 第24题:

    单选题
    设二维数组A[0…m-1][0…n-1]按行优先顺序存储在内存中,第一个元素的地址为p,每个元素占k个字节,则元素aij的地址为()。
    A

    p+[i*n+j-1]*k

    B

    p+[(i-1)*n+j-1]*k

    C

    p+[(j-1)*n+i-1]*k

    D

    p+[j*n+i-1]*k


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