单选题函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[0]=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为(  )。A 1,1B 1,2C 2,2D 2,1

题目
单选题
函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[0]=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为(  )。
A

1,1

B

1,2

C

2,2

D

2,1


相似考题
更多“单选题函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[0]=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为(  )。A 1,1B 1,2C 2,2D 2,1”相关问题
  • 第1题:

    函数swap(a, n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[0]=1;b[1]=2; swap(b, 2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为( )。

    A.1,1

    B.1,2

    C.2,2

    D.2,1


    正确答案:D
    解析:如果函数实参是数组名,形参也应为数组名,函数swap中形参进行了交换,实际卜也是实参进行了交换。而且数组名代表数组首元素的地址,并不代表数组的全部元素。所以,swap(b,2)是数组b第一个元素与第二个元素进行交换,即b[0]与b[1],根据题干,知道答案为2,1。

  • 第2题:

    在主函数中,从键盘输入若干个数放入数组x中,用0结束输入但不计入数组。下列给定程序中,函数fun()的功能是:输出数组元素中小于平均值的元素。请补充函数fun()。

    例如:数组中元素的值依次为1,2,2,12,5,15,则程序的运行结果为1,2,2,5。

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

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun( 【 】,int n)

    {

    double sum=0.0;

    double average=0.0;

    int i=0;

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

    【 】;

    average= 【 】;

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

    if(x[i]<average)

    {

    if(i%5==0)

    printf("\n");

    printf("%d/",x[i]);

    }

    }

    main()

    {

    int x[1000];

    int i=0;

    clrscr();

    printf("\nPlease enter some data(end with 0):");

    do

    {

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

    }

    while(x[i++]!=0);

    fun(x,i-1);

    }


    正确答案:int x[] sum+=x[i] sum/n
    int x[] sum+=x[i] sum/n 解析:第一空:由主函数main()调用fun()函数的格式,可知,函数fun()的第—个参数为整型数组。第二空:为了求出平均值,首先要对数组中的元素求累加和。第三空:数组中元素的累加和除以元素个数,得到所有元素的平均值。

  • 第3题:

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

  • 第4题:

    函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[o]=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为( )。

    A.1,1

    B.1,2

    C.2,2

    D.2,1


    正确答案:D
    D。【解析】如果函数实参是数组名,形参也应为数组名,函数swap中形参进行了交换。实际上也是实参进行了交换。而且数组名代表数组首元素的地址,并不是代表数组的全部元素。所以,swap(b,2)是数组b第一个元素与第二个元素进行交换,即b[0]与b[1],根据题干,知道答案为2,1。

  • 第5题:

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

    【函数2.1说明】

    递归函数sum(int a[], int n)的返回值是数组a[]的前n个元素之和。

    【函数2.1】

    int sum (int a[],int n)

    {

    if(n>0) return (1);

    else (2);

    }

    【函数2.2说明】

    有3个整数,设计函数compare(int a,int b,int c)求其中最大的数。

    【函数2.2】

    int compare (int a, int b, int c )

    { int temp, max;

    (3) a:b;

    (4) temp:c;

    }

    【函数2.3说明】

    递归函数dec(int a[],int n)判断数组a[]的前n个元素是否是不递增的。不递增返回 1,否则返回0。

    【函数2.3】

    int dec( int a[], int n )

    {

    if(n<=1) return 1;

    if(a[0]<a[1]) return 0;

    return (5);

    }


    正确答案:(1)a[n-1]+sum(an-1)或者a[0]+sum(a+1n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1n-1);
    (1)a[n-1]+sum(a,n-1)或者a[0]+sum(a+1,n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1,n-1); 解析:本题考查C语言函数和一些基本运算。
    下面我们分别来分析这几个函数。在函数2.1中,题目要求用此递归函数求数组前 n个元素之和。递归函数的特点是在函数体中不停地调用函数本身,只是将其函数的参数范围改变。题目中要求我们求数组前n个元素之和,我们可以这样理解,即前n个元素之和等于第n个元素加上前n-1个元素之和,现在的问题转化成如何求前n-1个元素之和。同样的道理,可以将求前n-1个元素之和转化成求前n-2个元素之和,直到这个数小于0。从函数2.1的代码中可以知道,在计算以前,首先判断n与0的关系,如果n小于0,说明数组中无元素,因此,返回0值;如果n大于等于0,说明数组中有元素,应该返回的结果是第n个元素加上前n-1个元素之和,而前n-1个元素之和是调用函数本身来计算的。因此,第(1)空和第(2)空的答案分别是a[n-1)+sum(a,n-1),return()。
    在函数2.2中,题目要求我们在三个数中取最大数,在数学中,我们从三个数中取最大数时,一般是首先拿其中两个数比较,取较大的数再与第三个数比较,再取其较大的数,这个数就是三个数中的最大数。从函数2.2的代码中知道,三个数a、b、c,两个整型变量temp与max。根据求三个数中最大数的数学过程和函数中已给出的代码可知,第(3)空处语句应该为temp=(a>b)?a:b,求得a、b中较大数并存放在变量temp中。第(4)空处语句为max=(temp>c)?temp:c。
    在函数2.3中,题目要求判断数组a[]的前n个元素是否是不递增的。不递增返回1,否则返回0。要判断前n个元素是否是不递增的,需要判断前n-1个元素是否是不递增的,以及第n个元素与第n-1个元素的关系。此处与函数2.1一样,用的都是递归函数,只是出口不同,在函数2.1中,只要数组中没有元素了,递归结束,这里只要第n个元素大于第n-1个元素,则返回0,递归结束。又由if(a[0]a[1])语句可知,在每次调用函数时,都将其数组中的第一个元素与第二个元素比较来作为递归的出口,如果结果为假,就说明数组的前面两项的关系是不递增的,在下次调用中不用再考虑第一项。因此第(5)空应该是dec(a+1,n-1)。

  • 第6题:

    计算斐波那契数列第n项的函数定义如下: intfib(intn){ if.(n==0)return1; elseif(n==1)return2: elsereturnfib(n-1)+fib(n-2); } 若执行函数调用表达式fib(2),函数fib被调用的次数是( )。

    A.1

    B.2

    C.3

    D.4


    正确答案:C
    C。【解析】根据递归调用的含义,当n为2时有fib(o),fib(1),fib(2)被调用,且fib(0),fib(1)时调用结束,共3次。

  • 第7题:

    函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为( )。

    A.1,1

    B.1,2

    C.2,2

    D.2,l


    正确答案:D
    解析: 如果函数实参是数组名,形参也应为数组名,函数swap中形参进行了交换,实际上也是实参进行了交换。而且数组名代表数组首元素的地址,并不是代表戮组的全部元素。所以,swap(b,2)是数组b第一个元素与第二个元素进行交换,即b[0]与b[1],根据题干,知道答案为2,1。

  • 第8题:

    下面程序的运行结果为( )。def swap(list): temp=list[0] list[0]=list[1] list[1]=templist=[1,2]swap(list)print(list)

    A.[1,2]

    B.[2,1]

    C.[2,2]

    D.[1,1]


    正确答案:B

  • 第9题:

    ● 给定一组长度为n的无序序列,将其存储在一维数组a[0..n-1]中。现采用如下方法找出其中的最大元素和最小元素:比较 a[0]和 a[n-1],若 a[0]较大,则将二者的值进行交换;再比较a[1]和a[n-2],若a[1]较大,则交换二者的值;然后依次比较a[2]和a[n-3]、a[3]和 a[n-4]、…,使得每一对元素中的较小者被交换到低下标端。重复上述方法,在数组的前 n/2 个元素中查找最小元素,在后 n/2 个元素查找最大元素,从而得到整个序列的最小元素和最大元素。上述方法采用的算法设计策略是 (64) 。

    (64)

    A. 动态规划法

    B. 贪心法

    C. 分治法

    D. 回溯法


    正确答案:C

  • 第10题:

    阅渎以下说明和C代码,回答问题,将解答写入答题纸的对应栏内。 【说明】函数bubbleSort(int arr [ ] int n, int (*compare)(int, int)的功能是根据调用时传递的比较函数 compare 对数組arr的前n个元素进行排序。 【C代码】

    #define swap(a,b){a=a^b;b=a^b;a=a^b //交换a与b 的值int less(int x, int y){ return((xy)?1: 0);} void bubble Sort(int arr[ ], int n, int (*compare)(int, int)){ int i,j; int swapped= 1; for( i= 0; swapped; 1++) { swapped =0; for(j=0; j
    【问题1】设有如下数组定义:int data1[ ]={4,2.6.3,1};int data2[ ]={4,2,6.3,1}int datas3[ ]={4,2,6.3,1}请分别给出下面的函数调用执行后,数组 data1、data2和 data3 各自的元素序列。(1)bubble Sort(data1, 5, less);(2)bubbleSort(data2, 5, larger)(3)bubbleSort(data3, 3, larger)


    答案:
    解析:
    (1){1,2,3,4,6}(2){6,4,3,2,1}(3){6,4,2,3,1}
    【解析】

    swp 函数是将两元素值进行相互交换。less 数是判断x和y 的关系,如果 xy,则函数值为真; 在)bubbleSort函数中,第二个参数表示进行比素的个数,第三个参数表示进排序的方式,如果传入less函数,则是从小到大排序;如果传入large函数,则是从大到小排序。

  • 第11题:

    函数swap(intx,inty)可以完成对x值和y值的交换,在运行调用函数中的如下语句后,a=2;b=3;swap(a,b);a和b的值分别是()

    • A、3,2
    • B、3,3
    • C、2,2
    • D、2,3

    正确答案:D

  • 第12题:

    单选题
    函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[0]=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为(  )。
    A

    1,1

    B

    1,2

    C

    2,2

    D

    2,1


    正确答案: C
    解析:
    函数实参为数组名,数组名代表数组首元素的地址,主函数和子函数共享数组内存。swap(b,2)将数组b第1个元素与第2个元素进行交换,b[0]=2,b[1]=1。

  • 第13题:

    若将元素10插入到堆A=(15,13,9,5,12,8,7,4,0,6,2,1)中,调用maxHeaplnsert函数进行操作,则新插入的元素在堆A中第(9)个位置(从1开始)。


    正确答案:(9)3
    (9)3 解析:依照maxHeapInsert的算法,可有如下几步:
    第一步:i=13 PARENT(i)=6key=10 A->int_array [PARENT(i)]=8
    由于key>A->int_array[PARENT(i)]
    所以符合while循环条件,执行:
    A->int_array[i]=A->int_array[PARENT(i)];
    i=PARENT(i);
    即:

    第二步:i=6 PARENT(i)=3key=10 A->int_array [PARENT (i)]=9
    由于key>A->int_array[PARENT(i)]
    所以符合while循环条件,执行:
    A->int_array[i]=A->int_array[PARENT(i)];
    i=PARENT(i);
    即:

    第三步:i=3 PARENT(i)=1key=10 A->int_array [PARENT(i)]=15
    由于keyint_array[PARENT(i)]
    所以不符合while循环条件,跳出循环。
    执行:A->int_array[i]=key;
    即:

    所以,插入元素10的位置在第三个位置。

  • 第14题:

    阅读以下说明和流程图,回答问题将解答填入对应栏。

    [说明]

    本流程图实现采用递归函数来求一个整数数组中从元素0到元素n中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有n的元素的数组的最小值时,只要求将前n-1的元素的最小值与第n个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。

    注:int min(int X,int y)为返回两数中最小数的函数。

    int minInArray(int a[],int n)为返回数组中最小数的函数。

    minA为数组中最小值。

    [问题l]

    将流程图的(1)~(4)处补充完整。

    [问题2]

    min()函数的定义为(5)。


    正确答案:(1) minInArray(an); (2) 1; (3) minA=a[n-1]; (4) minA=min(minInArray(an-1)a[n]); (5) xy?x:y;
    (1) minInArray(a,n); (2) 1; (3) minA=a[n-1]; (4) minA=min(minInArray(a,n-1),a[n]); (5) xy?x:y; 解析:本题目考查流程图。
    题目是利用递归来求数组中的最小值,则一定是反复的调用一个求数组最小值的函数,直到比较数组中最后只剩下两个数,则(1)中填入的应是“minlnArray(a,n)”,然后,判断n的值是否为1,如果是,则说明数组中只有一个数,则它一定就是最小值,可以直接输出,所以(2)应填入“1”,(3)应填入“minA=a[n]”;如果n的值不是1,则说明要继续递归,则再次调用求数组最小值的函数,把数组前n-1项的最小值同第n项做比较,所以(4)填入“minA=min(minInArray(a,n-1),a[n])”,由于min()是一个比较函数,返回两数中较小的数,我们可以用三元运算符直接定义为x y?x:y。

  • 第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题:

    设线性表中有2n个元素,算法( ),在单链表上实现要比在顺序表上实现效率更高。

    A.删除所有值为x的元素

    B.在最后一个匀速的后面插入一个新元素

    C.顺序输出前k个元素

    D.交换第i个元素和第2n-i-1个元素的值(i=0,1,…,n-1)


    正确答案:A

  • 第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题:

    函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的语句后,a[0]和a[1]的值分别为【 】。

    a[0]=1;a[1]=2;swap(a,2);


    正确答案:21
    2,1 解析:本题考核函数参数的传递。数组名作为函数参数传递的是数组的首地址,即实参数组名把实参数组的首地址传给了形参数组名,形参数组名就指向了相应的实参数组,就是说形参数组和实参数其实就是同一个数组,对形参数组元素的修改也同样影响到对应的实参数组元素。

  • 第19题:

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

    注意:部分源程序在文件PROGl.C中。

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


    正确答案:
    解析:该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。

  • 第20题:

    试题三(共15分)

    阅读以下说明和C函数,回答问题 l和问题 2,将解答填入答题纸的对应栏内。

    【说明】

    对于具有n个元素的整型数组a,需要进行的处理是删除a中所有的值为 0的数组元素,并将a中所有的非 O元素按照原顺序连续地存储在数组空间的前端。下面分别用函数CompactArr_v1 和CompactArr v2来实现上述处理要求,函数的返回值为非零元素的个数。 函数CompactArr_vl(int a[],int n)的处理思路是:先申请一个与数组a的大小相同的动态数组空间,然后顺序扫描数组a的每一个元素,将遇到的非O元素依次复制到动态数组空间中,最后再将动态数组中的元素传回数组a中。

    函数CompactArr_v2(int a[],int n)的处理思路是:利用下标i(初值为 0)顺序扫描数组a的每一个元素,下标k(初值为0)表示数组 a中连续存储的非0元素的下标。扫描时,每遇到一个数组元素,i就增 1,而遇到非 0元素并将其前移后k才增 1。

    【问题1】 (12分)

    请根据说明中函数CompactArr_v1的处理思路填补空缺(1)~(3),根据CompactArr_v2的处理

    思路填补空缺(4)。

    【问题2】(3分)

    请说明函数CompactArr vl存在的缺点。


    正确答案:
    试题三参考答案(共 15分)
    【问题 1】 (12分)
    (1) sizeof(int) (3分)
    若考生解答为一个正整数,则给 2分
    (2)temp[k++] 或*(temp+k++)或等价表示 (3分)
    (3) ik 或等价表示 (3分)
    (4)a[k++] 或*(a+k++)或等价表示 (3分)
    【问题 2】(3分)
    可能由于动态内存申请操作失败而导致函数功能无法实现,时间和空间效率低。
    注:考生仅回答出运行速度慢则给 2分,其他含义相同的描述可给满分或酌情给分。

  • 第21题:

    已知有一维数组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)。

  • 第22题:

    对n个元素值分别为-1、0或1的整型数组A进行升序排序的算法描述如下:统计A中-1、0和1的个数,设分别为n1、n2和n3,然后将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n3个元素赋值为1。该算法的时间复杂度和空间复杂度分别为()。

    • A、Θ(n)和Θ(1)
    • B、Θ(n)和Θ(n)
    • C、Θ(n2)和Θ(1)
    • D、Θ(n2)和Θ(n)

    正确答案:A

  • 第23题:

    单选题
    对n个元素值分别为-1、0或1的整型数组A进行升序排序的算法描述如下:统计A中-1、0和1的个数,设分别为n1、n2和n3,然后将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n3个元素赋值为1。该算法的时间复杂度和空间复杂度分别为()。
    A

    Θ(n)和Θ(1)

    B

    Θ(n)和Θ(n)

    C

    Θ(n2)和Θ(1)

    D

    Θ(n2)和Θ(n)


    正确答案: B
    解析: 本题需要用3个辅助变量n1、n2和n3来保存数组A中-1、0和1的个数,空间复杂度为Θ(1)。在统计时,需要使用一循环语句遍历数组A。统计完成后,再使用一次循环语句遍历数组A,并将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n个元素赋值为1。数组A的元素个数为n,因此算法的时间复杂度为Θ(n)。

  • 第24题:

    单选题
    已知主函数中通过如下语句序列实现对函数模板swap的调用:int a[10],b[10];swap(a,b,10);下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是(  )。
    A

    template<typename T>
    void swap(T a[],T b[],int size);

    B

    template<typename T>
    void swap(int size,T a[],T b[]);

    C

    template<typename T1,typename T2>
    void swap(T1 a[],T2 b[],int size);

    D

    template<class T1,class T2>
    void swap(T1 all,T2 b[],int size);


    正确答案: C
    解析:
    函数模板swap的声明应将第一、二个参数设为数组变量,第三个参数为整型变量。