niusouti.com
更多“单选题以下程序段是函数返回a所指数组中最大的值所在的下标值,横线处的语句为(  )。A k=iB k=jC i=jD i=n”相关问题
  • 第1题:

    以下程序段是函数返回a所指数组中最大的值所在的下标值,横线处的语句为( )。 fun(int*a, int n) { int i,j=0,k; k=j; for(i=j;i<n;i++) if[a[i]>a[k])______; return(k); }

    A.k=i

    B.k=j

    C.i=j

    D.i=n


    正确答案:A
    解析:函数fun中首先定义整型变量k用来存放返回最大值的下标,并将其首先指向第一个元素,即k=j。然后在for循环中依次将当前元素a[i]与标识为最大值的元素进行比较,如果当前元素大于这个标识元素,那么将最大值标识为当前元素,即k=i。

  • 第2题:

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

  • 第3题:

    下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。

    请改正函数fun()中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <stdio.h>

    define SIZE 20

    fun (double *s, double *w)

    { int k, i; double sum;

    for(k=2, i=0; i<SIZE; i++)

    {s [i]=k; k+=2;}

    sum=0.0;

    for(k=0, i=0; i<SIZE;i++)

    {sum+=s[i];

    /*************found**************/

    if(i+1%5==0)

    {w[k]=sum/5; Sum=0; k++;}

    }

    return k;

    }

    main()

    { double a[SIZE],b[SIZE/5];

    int i, k;

    k=fun(a/b);

    printf ("The original data:\n");

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

    {

    if(i%5==0)printf("\n");

    printf("%4.0f"/a[i]);

    }

    printf{"\n\nThe result:\n");

    for(i=0; i<k; i++) printf("%6.2f",b[i]);

    printf("\n\n");

    }


    正确答案:错误:if(i+1%5==0) 正确:if((i+1)%5==0)
    错误:if(i+1%5==0) 正确:if((i+1)%5==0) 解析:本题除了考查循环语句以外,其实就是一道简单的数学题,循环条件if(i+1%5==0)是一个标准的语法错误,这跟题目考查的知识点毫无关系,也就是说,做这样的题,只要读懂了题干意思,问题便可迎刃而解。

  • 第4题:

    以下函数模板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。

  • 第5题:

    下列给定程序中,函数fun()的功能是找出100~n(n不大于1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。

    请改正程序中的错误,使它能得到正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include<stdio.h>

    define N 100

    int fun(int *s,int n)

    {

    int i,j,k,a,b,c;

    j=0;

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

    {

    /*************found***********/

    k=n;

    a=k%10;

    k/=10;

    b=k%10;

    c=k/10;

    if(a==b+c)

    /************found**************/

    s[j]=i;

    }

    return j;

    }

    main()

    {

    int a[N],n,num=0,i;

    do

    {

    printf("\nEnter n(<=1000):”);

    scanf("%d",&n);

    }

    while(n>1000);

    num=fun(a,n);

    printf("\n\nThe result:\n”);

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

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

    printf("\n\n");

    }


    正确答案:(1) 错误:k=n; 正确:k=i; (2) 错误:s[j]=i; 正确:s[j++]=i;
    (1) 错误:k=n; 正确:k=i; (2) 错误:s[j]=i; 正确:s[j++]=i; 解析:错误1:k就是当前要被判断的数,是随着i值的变化而变化的。错误2:在循环中,j是数组的下标要递增。

  • 第6题:

    以下函数返回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);}在下画线处应填入的内容是A.i=p B.a[p]=a[i] C.p=i D.p=j


    正确答案:C
    该题目所要求的是最大数的位置(下标),而不是最大数的数值。因此,在进行逐个比较的过程中,需要记录最大数的下标i。根据给出的程序可知,该下标记录在变量p中,所以,如果a[i]>a[p]这一关系成立,应该把i的值赋给p,这样才满足题目的要求。

  • 第7题:

    请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。

    主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

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

    试题程序:

    include<stdlib.h>

    include<stdio.h>

    void fun(int a[],int n, int *max,int *d)

    {

    }

    main()

    {

    int i, x[20], max, index, n=10;

    randomize();

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

    {

    x[i]=rand()%50;

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

    /*输出一个随机数组*/

    }

    printf("\n");

    fun(x,n,&max,&index);

    printf("Max=%5d,Index=%4d\n",max,index);

    }


    正确答案:void fun(int a[]int nint *maxint *d) { int i; *max=a[0]; *d=0; for(i=0;in;i++) /*将最大的元素放入指针max所指的单元最大元素的下标放入指针d所指的单元*/ if(*maxa[i]) {*max=a[i];*d=i;} }
    void fun(int a[],int n,int *max,int *d) { int i; *max=a[0]; *d=0; for(i=0;in;i++) /*将最大的元素放入指针max所指的单元,最大元素的下标放入指针d所指的单元*/ if(*maxa[i]) {*max=a[i];*d=i;} } 解析:该程序直接使用形参max和d,由于它们都是指针变量,所以要引用它所指向的变量时要对它进行指针运算,也即*号运算。

  • 第8题:

    以下函数实现按每行8个输出W所指数组中的数据:

    在横线处应填人的语句是( )。

    A.if(i/8==0)printf(”\n”);

    B.if(i/8==O)continue;

    C.if(i%8==0)prinff(’’\n”);

    D.if(i%8==0)continue;


    正确答案:C
    要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时(即i%8==0),输出一个换行符。因此C选项正确。

  • 第9题:

    以下函数返回a所指数组中最小的值所在的下标值: A.i=pB.a[p]=a[i]C.p=jSXB

    以下函数返回a所指数组中最小的值所在的下标值:

    A.i=p

    B.a[p]=a[i]

    C.p=j

    D.p:i


    正确答案:D
    该程序先判断a[i]<a[p],如果条件为真,则a[i]比当前设定的最小值小(p保留的当前最小元素的下标),那么将i赋给P,即将比较过的最小元素标保留在p中,作为下面判断的标准。

  • 第10题:

    以下fun函数返回数组中最大值的下标

    在横线处应填入的内容是

    A.++k

    B.i=k

    C.k++

    D.k=i


    正确答案:D
    fu-函数的功能是返回数组中最大值的下标。通过for循环语句,每次将最大的数给k,即k=i。因此D选项正确。

  • 第11题:

    以下函数返回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); } 在下划线处应填入的内容是( )。

    A.i=p

    B.a[p]=a[i]

    C.p=j

    D.p=i


    正确答案:D
    解析:该题目要求的是最大数的位置(下标)。程序通过对a所指数组中的元素进行逐个比较,记录最大数的下标i,并把该下标记录在变量p中,所以,如果a[i]>a[p]关系成立,应该把i的值赋给p,这样才满足题目的要求。

  • 第12题:

    (11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。

    void fun(int a[N],int k)

    { int i;

    for(i=k;i<N;i++) a[ 【11】 ]=a[i];

    }


    正确答案:
    (11)i-1

  • 第13题:

    试题二

    下面程序中函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置(即,下标值),最大数可能不止一个。最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。

    例如:

    若输入 2 8 5 7 8 4 5 3 2 8

    则应输出:

    The max: 8

    Total: 3 //最大数出现次数

    The positions: 1 4 9

    请补充下列空缺:

    include<stdio.h>

    include<conio.h>

    define M 10

    int fun(int *a, int *n, int pos[])

    {int i, k,max=-32767;

    (1)

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

    if( (2) ) max=a[i];

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

    if( (3) )pos[k++]=i;

    *n=k;

    return max;

    }

    main()

    {int a[M], pos[M], i=0, j, n;

    clrscr();

    printf("Enter 10 number :");

    for(i=0; i<M; i++)scanf("%d", (4));

    j=fun( (5) );

    printf("The max: %d\n", j);

    printf("Total: %d",n);

    printf("The position:");

    for(i=0; i<n; i++ ) printf("%4d", pos[i]);

    printf("\n");

    }


    正确答案:

    试题分析:

    正确代码:

    #include<stdio.h>

    #include<conio.h>

    #define M 10

    int fun(int *a, int *n, int pos[])

    {int i, k, max=-32767;

    k=0;//因为后面有k++,所以要在这里先给k赋初值。

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

    if(a[i]>max) max=a[i];//用于求出数列中的最大数。

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

    if(a[i]== max) pos[k++]=i;//用于记录最大数的下标

    *n=k;

    return max;

    }

    main()

    {int a[M], pos[M], i=0, j, n;

    clrscr();

    printf("Enter 10 number :");

    for(i=0; i<M; i++)scanf("%d", a+i);

    j=fun(a, &n, pos);

    printf("The max: %d\n", j);

    printf("Total: %d\n",n);

    printf("The position:");

    for(i=0; i<n; i++ ) printf("%4d", pos[i]);

    printf("\n");

    }

    此程序算法非常简单,先循环找出最大数,再循环找出最大数的下标。但要注意的是一些细节方面的问题,如在形参中int *a 和int pos[]两种写法都可以用来传递数组名。由于形参有:int *n ,所以对应实参应为指针,所以只能写&n不能用n。

    参考答案:

    (1) k=0

    (2) a[i]>max

    (3) a[i] == max

    (4) a+i 或 &a[i]

    (5) a, &n, pos



  • 第14题:

    以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回,请填空。(设N己定义)

    int fun(int x[N])

    {int i,k=0

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

    if(x[i]<x[k])k=_____;

    return x[k];

    }


    正确答案:i
    i 解析:循环语句依次查找数组的元素,下标从0到N-1,当x[i]的值小于k时,记录i值即此元素的下标,然后再将其余元素与新的k元素比较,最终求得最小值。所以填i。

  • 第15题:

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

  • 第16题:

    以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空:includefind

    以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空: #include<stdio.h> findmax(int*s,int t,int*k) { int p; for(p=0,*k=p;p<t;p++) if(s[p]>s[*k])________; } main() { int a[10],i,k; for(i=0;i<10;i++)scanf("%d",&a[i]); findmax(a,10,&k); printf("%d,%d\n",k,a[k]); }

    A.k=p

    B.*k=p-s

    C.k=p-s

    D.*k=p


    正确答案:D
    解析:k是—个指针,它的值是—个地址,要通过它为主函数的变量改变数据,必须使用*p,边样就可以把—个下标数赋给p指针指向的那个内存单元,所以横线处应填入*k=p。

  • 第17题:

    阅读以下说明,将应填入(n)处的字句写在答卷纸的对应栏内。

    【说明】

    下面的程序为堆排序程序,其中函数adjust(i,n)是把以R[i](1≤i≤┕i/2┙)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的,是在主函数中说明的结构数组,它含有要排序的n个记录。

    【程序】

    Void adjust(i,n)

    Int i,n;

    {

    iht k,j;

    element extr;

    extr=r[i];

    k=i;

    j=2*i;

    while (j<=n )

    {if ((j<n) && (r[j].key<r[j+1].key))

    (1);

    if (extr. key<r[j].key)

    {

    r[k]=r[j];

    k=j;

    (2);

    }

    else

    (3);

    }

    r[k]=extr;

    }

    /*让i从┗i/2┛逐步减到1, 反复调用函数adjust, 便完成建立初始堆的过程。*/

    void heapsort (r,n)

    list r;

    int n;

    {

    int i,1;

    element extr;

    for (i=n/2;i>=1;- -i)

    (4); /* 建立初始堆*/

    for (k--n;k>=2;k- -)

    {

    extr=r[1];

    r[1]=r[k];

    r[k]=extr;

    (5);

    }

    }


    正确答案:(1)j++ (2)j*=2或j=k*2 (3)j=n+1或break (4)adjust(in) (5)adjust(1k-1)
    (1)j++ (2)j*=2或j=k*2 (3)j=n+1或break (4)adjust(i,n) (5)adjust(1,k-1) 解析:函数adjust(i,n)是把以R[i](1≤i≤┗i/2┛)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的r是在主函数中说明的结构数组,它含有要排序的n个记录。
    Void adjust(i,n)
    Int i,n;
    {
    int k,j;
    element extr;
    extr=r[i];
    k=i;
    j=2*i;
    while(j=n)
    {if((jn)&&(r[j].keyr[j+ 1].key))
    j++;
    if(extr.keyr[j].key)
    {
    r[k]=r[j];
    k=j;
    j*=2;
    }
    else
    j=n+1;
    }
    r[k]=extr;
    }
    /* 让i从┗i/2 ┛逐步减到1, 反复调用函数adjust, 便完成建立初始堆的过程。堆排序程序heapsort 如下*/
    void heapsort(r,n)
    list r;
    int n;
    {
    int i,l;
    element extr;
    for (i=n/2;i>= 1 ;--i)
    adjust(i,n); /*建立初始堆*/
    for(k=n;k>=2;k--)
    {
    extr=r[1];
    r[1]=r[k];
    r[k]=extr;
    adjust(1,k-1);
    }
    }
    函数heapsoff的第一个for循环建立初始化。没待排序的n个记录组成—棵深度为h的完全二叉树,因此有2h-1n≤2h+1-1,即2h≤n2h+1。完全二叉树的第i层(设根结点的层次为0)上最多有2i个结点,对每个非叶结点,都要调用过程adjust,同时可能移动结点(向下移动),第i层上的结点可能要移动的最大距离为h-i,若设向下移动一层花费的时间为c,则第i层2i个结点调整的时间最多为c*(h-i)*2i建立初始堆的全部时间应是:
    令j=h-1,则i=h-j,所以有:
    对第二个for循环,调用adjust函数n-1次,每次总是由根向下调整,调整的最大距离为log2n(实际上,调整的距离是逐渐变小的),所以总的时间不多于c*(n-1)log2n=O(log2n).堆排序总的时间为:
    O(n)+O(nlog2n)=O(max(n,n log2n))=O(n log2n)
    算法需要的存储空间是存储n个记录的数组以及少量暂存单元。
    堆排序算法是不稳定的。

  • 第18题:

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

    template<typename T>Tmax(Ta[],intn)

    {

    Tm=a[0];

    for(int i:1;i(n;i++)

    if(a[i]>m______;

    return m;

    }


    正确答案:(eh=filel.get())!=eof。
    (eh=filel.get())!=eof。 解析: 本题是判断文件是否达到结尾,可以使用流输入的get函数获得当前字符,然后判断该字符是否是eof即可。

  • 第19题:

    请补充函数fun(),该函数的功能是:寻找两个整数之间的的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。

    例如,输入6和21,则输出为:7 11 13 17 19 21。

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

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

    试题程序:

    include<conio. h>

    include<stdio. h>

    define N 1000

    int fun (int n, int m, int bb [N])

    {

    int i, j, k=0, flag;

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

    {

    【 】;

    for (i=2; i<j; i++)

    if(【 】)

    {

    flag=0;

    break;

    }

    if(【 】)

    bb [k++] =j

    }

    return k;

    }

    main ()

    {

    int n=0,m=0, i, k;

    int bb[N];

    clrscr ();

    printf ("Input n\n");

    scanf ("%d", &n);

    printf ("Input m\n");

    scanf ("%d", &m);

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

    bb[i]=0;

    k=fun (n, m, bb);

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

    printf ("%4d",bb [i]);

    }


    正确答案:I p->next=s p->next
    I p->next=s p->next 解析:第一空:题目要求各结点的值为对应的下标,头结点的值为0,其他结点的值从1开始,所以此空应填i。第三空:为了将结点p和结点s连接起来,应将结点p的next 指针指向结点s。第三空:为了通过for 循环形成链表,每执行完一次循环操作,都要将指针p 指向下一个结点。

  • 第20题:

    以下函数返回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选项。

  • 第21题:

    以下程序调用fun函数求数组中最大值所在元素的下标。

    在横线处应填入的内容是

    A.*k=i

    B.k=i

    C.*k=i-s

    D.k=i-s


    正确答案:A
    fun函数的功能是求数组中最大值所在元素的下标。通过for循环语句,每次将最大的数给*k,即*k=i。因此A选项正确。

  • 第22题:

    以下函数返回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);} 在下划线处应填入的是

    A.i=p

    B.a[p]=a[i]

    C.p=j

    D.p=i


    正确答案:D
    解析:该程序先判断a[i]a[p],如果条件为真,则a[i]比当前的设定的最小值小(p保留的当前最小元素的下标),那么将i赋给p即将比较过的最小的元素下标保留在p中,作为下面判断的标准。

  • 第23题:

    试题14

    以下程序调用fun函数把x中的值插入到a数组下标为k的数组元素中。主函数中,n存放a数组中数据的个数。请填空。

    #include <stdio.h>

    void fun(int s[], int *n, int k, int x)

    { int i;

    for(i=*n-1; i>=k; i- - ) s[ ___ ]=s[i];

    s[k]=x;

    *n=*n+______;

    }

    main()

    { int a[20]={1,2,3,4,5,6,7,8,9,10,11}, i, x=0, k=6, n=11;

    fun(a, &n, k, x);

    for(i=0; i<n; i++) printf(“%4d”,a[i]); printf(“\n”);

    }


    正确答案:
    试题14分析
    因为是把x中的值插入到a数组下标为k的数组元素中,所以首先要将k及其后的元素往后移一位,方法是s[i+1]=s[i],插入之后,因为多了一个元素,要将n中值增1。
    试题14答案
     【14】i+1
    【15】1

  • 第24题:

    单选题
    以下程序段是函数返回a所指数组中最大的值所在的下标值,横线处的语句为(  )。
    A

    k=i

    B

    k=j

    C

    i=j

    D

    i=n


    正确答案: A
    解析:
    函数fun定义整型变量k用来存放返回最大值的下标,并将其首先指向第一个元素,即k=j。然后在for循环中依次将当前元素a[i]与标识为最大值的元素进行比较,如果当前元素大于这个标识元素,那么将最大值标识为当前元素,即k=i。