niusouti.com

编程题: 定义一个含N个整数的一维数组。实现:该数组中的前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。宏定义N,其值为小于30的任意值。键盘输入一维数组的N个整数和正整数m。(程序中只能定义和使用一个数组,m<N)

题目

编程题: 定义一个含N个整数的一维数组。实现:该数组中的前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。宏定义N,其值为小于30的任意值。键盘输入一维数组的N个整数和正整数m。(程序中只能定义和使用一个数组,m<N)


相似考题
更多“编程题: 定义一个含N个整数的一维数组。实现:该数组中的前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。宏定义N,其值为小于30的任意值。键盘输入一维数组的N个整数和正整数m。(程序中只能定义和使用一个数组,m<N)”相关问题
  • 第1题:

    假定二维数组的定义语句为“doublea[M][N];”,则每个数组元素的列下标取值范围在0~N-1之间。()

    此题为判断题(对,错)。


    正确答案:√

  • 第2题:

    已知N个数已存入数组A[1..M]的前N个元素中(N<M),为在A[i]()之前插入一个新数,应先(61),以挪出一个空闲位置插入该数。

    A.从A[i]开始直到A[N],每个数向前移动一个位置

    B.从A[i]开始直到A[1],每个数向后移动一个位置

    C.从A[N]开始直到A[i],每个数向后移动一个位置

    D.从A[1]开始直到A[i],每个数向后移动一个位置


    正确答案:C
    解析:本题考查用顺序方式存储线性表元素的插入运算特点。数组A[1..M]元素的布局如图5-8所示。

    对于选项A,从A[i]开始直到A[N]的每个数向前移动一个位置,使A[i-1]的值被改为A[i]的值,A[i]的值被改为A[i+1]的值,依此类推,A[N-1]的值为A[N]的值,相当于挪出来的空闲位置为A[N],显然不符合新元素插入在A[i]之前的要求。对于选项B,从A[i]开始直到A[1]的每个数向后移动一个位置,会将A[i+1]原来的值覆盖,挪出的空闲位置为A[1],显然不符合新元素插入在A[i]之前(即A[i-1]之后)的要求。对于选项C,从A[N]开始直到A[i]的每个数向后移动一个位置,使A[N]的值移入A[N+1],A[N-1]的值移入A[N],依此类推,A[i]的值移入A[i+1],这样挪出来的空闲位置为A[i],完成了将新元素插入在 A[i-1]之后(即A[i]之前)的操作要求。对于选项D,从A[1]开始直到A[i]的每个数向后移动一个位置,使A[2]的值被改为与A[1]相同,使 A[3]的值被改为与A[2]相同,依此类推,A[i]的值等于A[i-1],即完成该操作后,元素A[1]到A[i]的值都相同(等于A[1])。

  • 第3题:

    已知N个数已存入数组A[1..M]的前N个元素中(N<M),为在A[i](1≤i≤N)之前插入一个新数,应先______,以挪出一个空闲位置插入该数。

    A.从A[i]开始直到A[1],每个数向后移动一个位置

    B.从A[1]开始直到A[i],每个数向后移动一个位置

    C.从A[i]开始直到A[N],每个数向前移动一个位置

    D.从A[N]开始直到A[i],每个数向后移动一个位置


    正确答案:D
    解析:根据题干内容,数组A[1..M]元素的结构如图8-10所示。对于选项A,从A[i]开始直到A[1],每个数向后移动一个位置,那么,首先移动A[i]到A[i+1]的位置时,会覆盖A[i+1]的内容。而且,最后挪出的空闲位置为A[1],如图8-11所示。显然,不符合题意。对于选项B,首先A[1]内容向后移动到A[2]内容,那么,A[2]的内容被A[1]的内容所覆盖,A[2]内容再继续向后移,实际上是将A[1]内容又覆盖了A[3]内容。依此类推。最后,A[2]~A[i]的值都变成了A[1]的值。空闲位置是A[1]。如图8-12所示。也不符合题意。对于选项C,从A[i]开始直到A[N],每个数向前移动一个位置,那么,首先移动A[i]到A[i-1]的位置时,会覆盖A[i-1]的内容,A[i]的内容变成A[i+1],依此类推,A[N-1]的内容成为A[N]的内容。而且,最后挪出的空闲位置为A[N],如图8-13所示。显然,不符合题意。对于选项D,从A[N]开始直到A[i],每个数向后移动一个位置,那么,首先移动A[N]到A[N+1]的位置时,会覆盖A[N+1]的内容,A[N-1]的内容移入A[N],依此类推,A[i]的内容移入A[i+1]。而且,最后挪出的空闲位置为A[i],如图8-14所示。显然符合题意。本题正确答案为选项D。

  • 第4题:

    对两个数组a和b进行下列初始化: char m[]1="l234567": char n[]={1,2 ,3,4 ,5,6,7); 则下列叙述正确的是( )。

    A.数组m与数组n完全相同

    B.数组m与数组n长度相同

    C.数组m比数组n长1

    D.数组m与数组n中都存放字符串


    正确答案:C
    在m数组中赋值的是字符串,其长度为7,末尾有结束符\0,故字节数为8,而n数组中赋的是字符,其长度为7,故C选项正确。

  • 第5题:

    已知N个数已存入数组A[1..M]的前N个元素中(N<M),为在A[i](1≤i≤N)之前插入—个新数,应先(40),以挪出一个空闲位置插入该数。

    A.从A[i]开始直到A[1],每个数向后移动一个位置

    B.从A[1]开始直到A[i],每个数向后移动一个位置

    C.从A[i]开始直到A[N],每个数向前移动一个位置

    D.从A[N]开始直到A[i],每个数向后移动一个位置


    正确答案:D
    解析:对于选项A,从A[i]开始直到A[1]的每个数向后移动一个位置,会将A[i+1]原来的值覆盖,挪出的空闲位置为A[1],显然不符合新元素插入在A[i]之前(即A[i-1]之后)的要求。对于选项B,从A[1]开始直到A[i]的每个数向后移动一个位置,使A[2]的值被改为与A[1]相同,使A[3]的值被改为与A[2]相同。依此类推,A[i]的值等于A[i-1],即完成该操作后,元素A[1]到A[i]的值都相同(等于A[1]),显然不符合新元素插入在A[i]之前的要求。对于选项C,从A[i]开始直到A[N]的每个数向前移动一个位置,使A[i-1]的值被改为A[i]的值,A[i]的值被改为A[i+1]的值,依此类推,A[N-1]的值为A[N]的值,相当于挪出的空闲位置为A[N],显然不符合新元素插入在A[i]之前的要求。对于选项D,从A[N]开始直到A[i]的每个数向后移动一个位置,使且A[N]的值移入A[N+1],A[N-1]的值移入A[N],依此类推,A[i]的值移入A[i+1],这样挪出来的空闲位置为A[i],完成了将新元素插入在A[i-1]之后(即A[i]之前)的操作要求。

  • 第6题:

    设有一个m行n列的矩阵存储在二维数组A[1..M,1..n]中,将数组元素按行排列,对于A[i,j](1≤i≤m,l≤j≤n),排列在其前面的元素个数为( )。

    A.i*(n-1)+jB.(i-1)*n+J-1C.i*(m-l)+jD.(i-1)*m+J-1


    正确答案:B

  • 第7题:

    假定二维数组的定义为“double a[M][N];”,则每个数组元素的列下标取值范围在0~N之间。()

    A

    B



  • 第8题:

    假定二维数组的定义为“double a[M][N];”,则每个数组元素的行下标取值范围在0~M-1之间。()

    A

    B



  • 第9题:

    从一维数组a[n]中顺序查找出一个最大值元素的时间复杂度为(),输出一个二维数组b[m][n]中所有元素值的时间复杂度为()。


    正确答案:O(n);O(m*n)

  • 第10题:

    填空题
    从一维数组a[n]中顺序查找出一个最大值元素的时间复杂度为(),输出一个二维数组b[m][n]中所有元素值的时间复杂度为()。

    正确答案: O(n),O(m*n)
    解析: 暂无解析

  • 第11题:

    判断题
    假定二维数组的定义为“double a[M][N];”,则每个数组元素的列下标取值范围在0~N之间。()
    A

    B


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

  • 第12题:

    判断题
    假定二维数组的定义为“double a[M][N];”,则每个数组元素的行下标取值范围在0~M-1之间。()
    A

    B


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

  • 第13题:

    阅读以下说明和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

  • 第14题:

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

    【说明】

    有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

    【函数】

    main()

    {

    int number[20],n,m,i;

    printf("the total numbers is:");

    scanf("%d",&n);

    printf("back m:");

    scanf("%d",&m);

    for(i=0;i<=n-1;i)

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

    (1);

    for(i=0;i<=n-1;i)

    printf("%d,",number[i]);

    }

    move(array,n,m)

    int n,m,array[20];

    {

    int *p,array_end;

    array_end=(2);

    for(p=array[n-1];(3);p--)

    *p=(4);

    *array=array_end;

    m--;

    if(m>0) (5);

    }


    正确答案:(1)move(numbernm) (2)*(array[n-1]) (3)p>array (4)*(p-1) (5)move(arraynm)
    (1)move(number,n,m) (2)*(array[n-1]) (3)p>array (4)*(p-1) (5)move(array,n,m) 解析:本题考查数字顺序移动和数组的相关知识。
    从数据结构的角度出发,数字在数组中顺序移动,就是将数字一个一个往后搬,例如,将n-1位置的数字移到n位置,然后再把n-2位置的数字移到n-1位置,其实这是一个简单的数字移动。我们只需要取出第n个位置的数字并保存在一个临时变量中,然后,其他的就按顺序依次移动即可,直到一次整体移动完成,我们再从临时变量中取回数字并将其放在数组的第一个位置中。重复这个过程m次,整个数组就往后移动了m个位置。
    首先,我们来看一下主函数,在主函数里面声明了一个容量为20的整型数组 number[20]和其余3个整型变量,数组用来存储我们输入的待处理的数,而变量m、n分别用于存放我们要移动位置的个数和输入整数的个数。第一个循环语句用于n个整数的输入,第二个循环语句用于n个整数的输出,在这中间应该还有一个处理来完成将n个整数顺序向后移m个位置,并让最后m个数变成最前面的m个数这个功能,从下面的程序段我们知道,这里是调用函数muve(number,n,m)来完成的。因此,第(1)空填 move(nurnber,n,m),在调用时我们需要注意参数的传递。
    再来看move(array,n,m)函数,在此函数中,同样声明了一个容量为20的整型数组和 2个整型变量,另外还声明了一个指针变量p。由*array=array_end,结合第(2)空来看,这里是把数组中最后位置的数取出存放在array_end变量当中。因此,第(2)空应填 *(array[n-1])。
    第(3)空是常见的在循环语句中表示判断的语句,由于“p=array[n-1]”把数组最末的地址赋给了指针p,只要p的值大于数组的起始地址循环就可以继续,因此,第(3)空应填p>array。
    第(4)空要完成的任务是将数字后移,因此,第(4)空为*p-1。从程序来分析,数组每移动完成一次,m的值就减一,而现在只有移动m次的功能没有实现,因此,只要m值大于0,就调用函数自身来实现再次移动。因此,第(5)空填写move(array,n,m)进行递归调用。

  • 第15题:

    给出以下定义:则正确的叙述为( )。

    A.数组m和数组n等价

    B.数组m和数组n的长度相同

    C.数组m的长度小于数组n的长度

    D.数组m的长度大于数组n的长度


    正确答案:D
    按照m方式声明的数组,系统会在数组尾部自动添加字符’\0’,因此m的长度比n大l。

  • 第16题:

    ●设数组a[1..m,1..n](m>1,n>2)中的元素以行为主序存放,每个元素占用1个存储单元,则最后一个数组元素a[m,n】相对于数组空间首地址的偏移量为( )。

    A.(m-l)*n+n-l

    B.(m-l)*n

    C.m*(n-l)

    D.m*n


    正确答案:A

  • 第17题:

    对两个数组a和b进行下列初始化: A.数组m与数组n完全相同B.数组m与数组n长度相同SXB

    对两个数组a和b进行下列初始化:

    A.数组m与数组n完全相同

    B.数组m与数组n长度相同

    C.数组m比数组n长1

    D.数组m与数组n中都存放字符串


    正确答案:C
    在m数组中赋值的是字符串,其长度为7,末尾有结束符ˊ\0ˊ,故字节数为8,而n数组中赋的是字符,其长度为7,故C选项正确。

  • 第18题:

    设有一个m行n列的矩阵存储在二维数组A[1..M,1..n]中,将数组元素按行排列,对于A[i,j](1≤i≤m,l≤j≤n),排列在其前面的元素个数为( ).

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

    答案:B
    解析:
    本题考查数据结构基础知识。二维数组A[1..m,1.n]如下所示。



    对于元素A[i,j],其之前有i-1行、每行n个元素,在第i行上,A[i,j]之前有j-1个元素,因此,按行排列时,A[i,j]之前共有(i-1)*n+j-1个元素。

  • 第19题:

    假定二维数组的定义为“char a[M][N];”,则该数组所含元素的个数为M+N。()

    A

    B



  • 第20题:

    假定二维数组的定义为“char a[M][N];”,则该数组所含元素的个数为()。
    M*N

  • 第21题:

    编一个程序,定义一个n行n列的二维数组,例如,n=4,输入该数组的全部数据。可以在定义数组时赋于常量值。求二维数组中这样元素的位置:它在行上是最小,在列上也是最小。


    正确答案: intn=4;
    int[,]a={{25,12,22,14},{15,16,17,18},{19,20,21,13},{23,24,11,26}};
    inti,j,k,temp,min;
    Console.Write("/n二维数组:");
    for(i=0;i{
    Console.Write("/n/t");
    for(j=0;j}
    Console.WriteLine("/n/n行列最小值");
    for(i=0;ifor(j=0;j{
    temp=a[i,j];
    min=temp;
    /*
    for(k=0;k{
    if(a[i,k]if(a[k,j]}
    */
    for(k=0;kif(a[i,k]for(k=0;kif(a[k,j]if(temp==min)Console.WriteLine("i={0},j={1}{2}",i,j,temp);
    }

  • 第22题:

    填空题
    假定二维数组的定义为“char a[M][N];”,则该数组所含元素的个数为()。

    正确答案: M*N
    解析: 暂无解析

  • 第23题:

    问答题
    编一个程序,定义一个n行n列的二维数组,例如,n=4,输入该数组的全部数据。可以在定义数组时赋于常量值。求二维数组中这样元素的位置:它在行上是最小,在列上也是最小。

    正确答案: intn=4;
    int[,]a={{25,12,22,14},{15,16,17,18},{19,20,21,13},{23,24,11,26}};
    inti,j,k,temp,min;
    Console.Write("/n二维数组:");
    for(i=0;i{
    Console.Write("/n/t");
    for(j=0;j}
    Console.WriteLine("/n/n行列最小值");
    for(i=0;ifor(j=0;j{
    temp=a[i,j];
    min=temp;
    /*
    for(k=0;k{
    if(a[i,k]if(a[k,j]}
    */
    for(k=0;kif(a[i,k]for(k=0;kif(a[k,j]if(temp==min)Console.WriteLine("i={0},j={1}{2}",i,j,temp);
    }
    解析: 暂无解析

  • 第24题:

    判断题
    假定二维数组的定义为“char a[M][N];”,则该数组所含元素的个数为M+N。()
    A

    B


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