编写一函数ins_sort,函数功能是在一个已排好序的敷组中插入一个数据使之保持有序。要求在主函数main 中输入N-1(设N=10)个有序数据(如升序)和一个要新增的数据,并输出处理后的数据。      例如:输入有序数列1 2 3 5 6 7 8 9 10     输入新增数据4  则处理后数据1 2 3 4 5 6 7 8 9 10

题目

编写一函数ins_sort,函数功能是在一个已排好序的敷组中插入一个数据使之保持有序。要求在主函数main 中输入N-1(设N=10)个有序数据(如升序)和一个要新增的数据,并输出处理后的数据。      例如:输入有序数列1 2 3 5 6 7 8 9 10     输入新增数据4  则处理后数据1 2 3 4 5 6 7 8 9 10


相似考题
更多“编写一函数ins_sort,函数功能是在一个已排好序的敷组中插入一个数据使之保持有序。要求在主函数main 中输入N-1(设N=10)个有序数据(如升序)和一个要新增的数据,并输出处理后的数据。      例如:输入有序数列1 2 3 5 6 7 8 9 10     输入新增数据4  则处理后数据1 2 3 4 5 6 7 8 9 10”相关问题
  • 第1题:

    下列程序的功能是:将一正整数序列{K1,K2,…,K91重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比KI大的数都在K1的右面(后续的再向右存放),从K1向右扫描。要求编写函数JsValue()实现此功能,最后调用函数writeDat()把新序列输出到文件out90.dat中。

    说明:在程序中已给出了.10个序列,每个序列中有9个正整数,并存入数组a[10][9]中,分别求出这 10个新序列。

    例如:

    序列排序前 {6,8,9,1,2,5,4,7,3}

    序列排序后 {3,4,5,2,1,6,8,9,7}

    注意:部分源程序已给出。

    请勿改动主函数main()和写函数writeDat()的内容。

    试题程序:

    include

    jsValue(int a[lO] [9])

    {

    }

    main()

    {

    int a[10] [9]={{6,8,9,1,2,5,4,7,3},

    {3,5,8,9,1,2,6,4,7},

    {8,2,1,9,3,5,4,6,7},

    {3,5,1,2,9,8,6,7,4},

    {4,7,8,9,1,2,5,3,6},

    {4,7,3,5,1,2,6,8,9},

    {9,1,3,5,8,62,4,7}

    {2,6,1,9,8,35,7,4}

    {5,3,7,9,1,82,6,4}

    {7,1,3,2,5,89,4,6}

    };

    int i,j;

    jsValue(a);

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

    {

    for(j=0;j<9;j++)

    {

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

    if(j<=7) printf(",");

    }

    printf("\n");

    }

    writeDat(a);

    }

    writeDat(int ail0] [9])

    {

    FILE *fp;

    int i,j;

    fp=fopen("outg0.dat","w");

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

    {

    for(j=0;j<9;j++)

    {

    fprintf(fp,"%d",a[i] [j]);

    if(j<=7) fprintf(fp,",");

    }

    fprintf(fp,"\n");

    }

    fclose(fp);

    }


    正确答案:void jsValue(int a[10][9]) { int valueijkhum; for(i=0;i10;i++) { value=a[i][0]); /*将一行的第一个元素赋给value*/ for{j=0;j9;j++) if(a[i][j]value) /*若后面的数中有比第土个数据小的数*/ { num=a[i] [j]; /*则把这个数取出赋给num*/ for (k=j;k>0;k--) /*将这个数据左侧的数依次向右移动*/ { a[i][k]=a[i][k-1]; } a[i][0]=num; /*再将这个数放在最左侧*/ } } }
    void jsValue(int a[10][9]) { int value,i,j,k,hum; for(i=0;i10;i++) { value=a[i][0]); /*将一行的第一个元素赋给value*/ for{j=0;j9;j++) if(a[i][j]value) /*若后面的数中有比第土个数据小的数*/ { num=a[i] [j]; /*则把这个数取出,赋给num*/ for (k=j;k>0;k--) /*将这个数据左侧的数依次向右移动*/ { a[i][k]=a[i][k-1]; } a[i][0]=num; /*再将这个数放在最左侧*/ } } } 解析:本题考查的知识点如下:
    (1)二维数组的访问和数组元素的移动。
    (2)循环结构和判断结构的嵌套使用。
    数据存放在一个二维数组中,每一行数为数据处理的基本单位。将第1个数取出依次和后面的数比较,若后面的数中有比第1个数据小的数,则将这个数取出。将这个数据左侧的数依次向右移动(包括第1个数),
    然后将这个数放在最左侧。扫描完一行后,比第1个数小的数就都在第1个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。

  • 第2题:

    以下程序中,函数sort的功能是对a数组中的数据进行由大到小的排序。void sort(int a[],int n){ int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) { t=a[i];a[i]=a[j];a[j]=t;}}main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++)printf("%d,",aa[i]); printf("\n");}程序运行后的输出结果是A.1,2,3,4,5,6,7,8,9,10B.10,9,8,7,6,5,4,3,2,1C.1,2,3,8,7,6,5,4,9,10D.1,2,10,9,8,7,6,5,4,3


    正确答案:C
    本题题目给出了函数sort的功能是对a数组中的数据进行由大到小的排序。在函数sort中,带有两个形参,其中一个为要操作的数组a,在函数体中,通过双重循环对a数组元素进行排序。
    在主函数中,定义了一个数字aa,并赋了初值,然后调用函数sort,其两个参数分别为&aa[3]和5,其中&aa[3]表示从数组aa的第四个元素作为首地址,即使形参数组a的首地址等于实参数组aa第四个元素的地址,从数组aa的第四个元素开始操作,即a[0]=aa[3]=4, a[1]=aa[4]=5,…,a[4]=aa[7]=8。
    题目告诉我们,sort的功能是对a数组中的数据进行由大到小的排序。那么对4,5,6,7,8排序的结果是8,7,6,5,4。调用函数结束后,数组aa中的值是1,2,3,8,7,6,5,4,9,10。然后程序通过一个循环输出该数组中的元素。因此,最后程序的输出结果为1,2,3,8,7,6,5,4,9,10。

  • 第3题:

    下列程序的功能是:将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描。要求编写函数jsValue()实现此功能,最后调用函数writeDat()把新序列输出到文件out90.dat中。

    说明:在程序中已给出了10个序列,每个序列中有9个正整数,并存入数组a[10][9]中,分别求出这10个新序列。

    例如:序列排序前 {6,8,9,1,2,5,4,7,3}

    序列排序后 {3,4,5,2,1,6,8,9,7}

    注意:部分源程序已给出。

    请勿改动主函数main()和写函数writeDat()的内容。

    试题程序:

    include<stdio.h>

    jsValue(int a[10][9])

    {

    }

    main ()

    {

    int a[10] [9]={{6,8,9,1,2,5,4,7,3},

    {3,5,8,9,1,2,6,4,7},

    {8,2,1,9,3,5,4,6,7},

    {3,5,1,2,9,8,6,7,4},

    {4,7,8,9,1,2,5,3,6},

    {4,7,3,5,1,2,6,8,9},

    {9,1,3,5,8,6,2,4,7},

    {2,6,1,9,8,3,5,7,4},

    {5,3,7,9,1,8,2,6,4},

    {7,1,3,2,5,8,9,4,6},

    };

    int i,j;

    jsValue (a);

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

    {

    for(j=0;j<9;j++)

    {

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

    if(j<=7) printf(",");

    }

    printf ("\n");

    }

    writeDat (a);

    }

    writeDat (int a[10] [9])

    {

    FILE *fp;

    int i,j;

    fp=fopen ("out90.dat", "w");

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

    {

    for(j=0;j<9;j++)

    {

    fprintf (fp, "%d", a [i] [j] );

    if (j<=7) fprintf (fp, ", ");

    }

    fprintf (fp, "\n");

    }

    fclose (fp);

    }


    正确答案:void jsValue(int a[10][9]) { int valueijknum; for(i=0;i10;i++) { value=a[i][0]; /*将一行的第一个元素赋给value*/ for(j=0;j9;j++) if(a[i][j]value) /*若后面的数中有比第1个数据小的数*/ { num=a[i][j]; /*则把这个数取出赋给num*/ for(k=j;k>0;k--) /*将这个数据左侧的数依次向右移动*/ { a[i][k]=a[i][k-1]; } a[i][0]=num; /*再将这个数放在最左侧*/ } } } [解析] 本题考查的知识点如下: (1)二维数组的访问和数组元素的移动。 (2)循环结构和判断结构的嵌套使用。 数据存放在一个二维数组中每一行数为数据处理的基本单位。将第1个数取出依次和后面的数比较若后面的数中有比第1个数据小的数则将这个数取出。将这个数据左侧的数依次向右移动(包括第1个数)然后将这个数放在最左侧。扫描完一行后比第1个数小的数就都在第1个数的左侧而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。
    void jsValue(int a[10][9]) { int value,i,j,k,num; for(i=0;i10;i++) { value=a[i][0]; /*将一行的第一个元素赋给value*/ for(j=0;j9;j++) if(a[i][j]value) /*若后面的数中有比第1个数据小的数*/ { num=a[i][j]; /*则把这个数取出,赋给num*/ for(k=j;k>0;k--) /*将这个数据左侧的数依次向右移动*/ { a[i][k]=a[i][k-1]; } a[i][0]=num; /*再将这个数放在最左侧*/ } } } [解析] 本题考查的知识点如下: (1)二维数组的访问和数组元素的移动。 (2)循环结构和判断结构的嵌套使用。 数据存放在一个二维数组中,每一行数为数据处理的基本单位。将第1个数取出依次和后面的数比较,若后面的数中有比第1个数据小的数,则将这个数取出。将这个数据左侧的数依次向右移动(包括第1个数),然后将这个数放在最左侧。扫描完一行后,比第1个数小的数就都在第1个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。

  • 第4题:

    以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序 void sort(int a[],int n) { int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++)printf(“%d”,aa [i]); pfintf(“\n”); } 程序运行后的输出结果是

    A.1,2,3,4,5,6,7,8,9,10

    B.10,9,8:7,6,5,4,3,2,1

    C.1,2,3,8,7,6,5,4,9,10

    D.1,2,10,9,8,7,6,5,4,3


    正确答案:C
    解析:本题中首先定义一个长度为10的一个整型数组,并初始化为“l,2, 3,4,5,6,7,8,9,10”,然后调用排序函数sort(),通过分析不难看出,sort()函数是对具有n个元素的a数组进行从大到小排序。由于函数的第一个参数是数组名,其对应的实参可以是函数名或地址。本题在调用该函数时,实参是&aa[3]的地址,即把aa[3]的地址传给了形参数组名a,函数也就是对aa[3]开始的5个元素进行从大到小的排序,aa[0]、aa [1]、aa[2]、aa[8]、aa[9]并没有变化。sort()执行完毕后,接着执行后面的for语句输出数组aa中各个元素的值,由于函数sort()只是对aa[3]开始的5个元素进行从大到小的排序,aa[0]、aa[1]、aa[2]、aa[8]、aa[9]并没有变化,所以输出为“1,2,3,8,7,6,5,4,9, 10”。

  • 第5题:

    下列程序的功能是:将一个正整数序列{K1, K2,…, K9}重新排列成一个新的序列。在新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。要求编写函数jsValue()实现以上功能,最后调用函数writeDat(),将新序列输出到文件out.dat中。说明:程序中已给出了10个序列,每个序列中有9个正整数,并存入数组a[10][9] 中,分别求出这10个新序列。例如:序列{6, 8, 9, 1, 2, 5, 4, 7, 3}重排后为{3, 4, 5, 2, 1, 6, 8, 9, 7}。部分源程序已给出。请勿改动主函数main() 和写函数writeDat() 的内容。#include<stdio.h>void jsValue(int a[10][9]){ } void main(){ int a[10][9]={{6,8,9,1,2,5,4,7,3} {3,5,8,9,1,2,6,4,7} {8,2,1,9,3,5,4,6,7} {3,5,1,2,9,8,6,7,4} {4,7,8,9,1,2,5,3,6} {4,7,3,5,1,2,6,8,9} {9,1,3,5,8,6,2,4,7} {2,6,1,9,8,3,5,7,4} {5,3,7,9,1,8,2,6,4} {7,1,3,2,5,8,9,4,6} }; int i,j; jsValue(a); for(i=0;i<10;i++){ for(j=0;j<9;j++) { printf("%d",a[i][j]); if(j<=7) printf(","); } printf("\n");}writeDat(a);}void writeDat(int a[10][9]){ FILE *fp; int i,j; fp=fopen("out.dat","w"); for(i=0;i<10;i++){ for(j=0;j<9;j++){ fprintf(fp,"%d",a[i][j]); if(j<=7) fprintf(fp,","); } fprintf(fp,"\n");} fclose(fp);}


    正确答案:参考试题解析
    【解析及答案】
    本题的任务是把排序函数jsValue() 补充完整。本题的处理过程是对数组a[10][9] 中的每行数据分别处理,然后再放置到原来的数组a[10][9] 中。求解时需要使用一个[10][9] 的临时数组b存放处理时的中间结果。数组a处理完以后,就用数组b的内容代替数组a的内容。对每行数据进行处理时,首先需要准备两个指示器nk,分别指向数组b中该行的开头和结尾。然后,反向扫描数组a中对应的行。如果碰到比该行第1个数据值大的元素,就将其放到指示器k指向的位置;如果碰到比其数据值小的元素,就将其放到指示器n指向的位置。处理完以后,还要移动指示器nk,使其定位在新的位置,以接收后面的数据。如果碰到和其数据值相等的元素,由题意可知,这样的元素在新数组中只允许出现1次,所以直接把这个元素放到指示器nk指向的位置即可,但不必移动指示器,否则该元素有可能出现多次。综上所述,完整的排序函数jsValue() 如下。
    jsvalue(int a[10][9])
    {
      int i,j,k,n,temp;
      int b[9]=0;
       for(i=0;i<10;i++)

        temp=a[i][0];
         k=8; 
        n=0;
        for(j=8,j>=0;j--)     
    {    
          if(temp<a[i][j]) 
              b[k--]=a[i][j];
          if(temp>a[i][j])  
              b[n++]=a[i][j];
          if(temp==a[i][j])  
              b[n]=temp;     /*也可以b[k]=a[i][j];*/
    }
        for(j=0;j<9;j++)
      {
          a[i][j]=b[j];
          b[j]=0;}
      }
    }

  • 第6题:

    请编写函数fun(),该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

    例如,若一维数组中的数据是:

    2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10

    删除后,数组中的内容应该是:

    2 3 4 5 6 7 8 9 10。

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

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

    试题程序:

    include <stdio. h>

    define N 80

    int fun(int a[], int n)

    {

    }

    main ( )

    {

    int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,

    8,9,9,10,10,10,10}, i, n=20;

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

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

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

    n=fun (a, n);

    printf("\n\nThe data after deleted

    : \n");

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

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

    printf ("\n\n");

    }


    正确答案:int fun(int a[] int n) { int i j=l; for (i=1; in; i++) if (a[j-1] !=a[i]) /*若该数与前一个数不相同则要保留*/ a[j++]=a [i]; return j; /*返回不同数的个数*/ }
    int fun(int a[], int n) { int i, j=l; for (i=1; in; i++) if (a[j-1] !=a[i]) /*若该数与前一个数不相同,则要保留*/ a[j++]=a [i]; return j; /*返回不同数的个数*/ } 解析:本题程序的流程是:让i,j都从1开始,其中j用于控制删除后剩下的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以if()中的条件是a[j-1]!=a[i],其中a[j-1]就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要留下到新数组中。注意本题中i,j的初值都要从1开始,该算法只能用于数组已排序的题目中。

  • 第7题:

    请编写函数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的花括号中填入你编写的若干语句。


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

  • 第8题:

    以下程序中函数sort的功能足对a所指数组中的数据进行由大到小的排序 void sort(int a[],int n) { int i,j,t; for(i=0;i<n-1;i++) for(j=i+l,j<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t; } } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++) print("%d, ",aa[i]); printf('\n"); } 程序运行后输出的结果是

    A.1,2,3,4,5,6,7,8,9,10

    B.10,9,8,7,6,5,4,3,2,1,

    C.1,2,3,8,7,6,5,4,9,10

    D.1,2,10,9,8,7,6,5,4,3,


    正确答案:C
    解析:本题考查的知识点是数组名作为函数的参数以及函数与排序算法结合在一起的综合应用.本题中首先定义一个长度为10的一个整型数组,并初始化为“1,2,3,4,5,6,7,8,9,10”,然后调用排序函数sort(),通过分析不难看出,sort()数是对具有n个元素的a数组进行从大到小排序.由于函数的第一个参数是数组名,其对应的实参可以是函数名或地址。本题在调用该函数时,实参是&aa[3)的地址,即把aa[3]的地址传给?行参数蛆名a,函数也就是对aa[3]开始的5个元素进行从大到小的排序,aa[0]。aa[1],aa[2]、aa[8]、aa[9]并没有变化.Sort()执行完毕后,接着执行后面的for语句输出数组aa中各个元素的值,由于函数sort()只是对aa[3]开始的5个元素进行从大到小的排序,aa[0]、aa[1]、aa[2]、aa[8]、aa[9]并没有变化,所以输出为“1,2,3,8,7,6,5,4,9,10”。所以4个选项中C正确。

  • 第9题:

    函数fun()的功能是:逆置数组元素中的值。形参n给出数组中数据的个数。

    例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。

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

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

    试题程序:


    正确答案:

    【1】n/2【2】i【3】a[n-i-1]
    【解析】fun()函数实现的功能是实现数组的逆置。具体步骤通过参数传递,得到数组指针(即数组名)和数组记录大小的变量n,通过这两个参数配置for循环,遍历数组的中间的元素位置,每次循环都将i位置和对应位置结点(i距离0位置等于其距离尾位置的结点)的元素交换,由此实现数组的逆置。

  • 第10题:

    下列程序中函数sort( )的功能是对数组a中的数据进行由大到小的排序。 #include<stdio.h> void sort(int a[],int ll) { int i,j,t; for(i=0;i<n-1;i++) for(j=j+1+1;j<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t; } } main( ) { int a[10]一{1,2,3,4,5,6,7,8,9,10},i; sort(&a[1],7); for(i=0;i<10;i++)printf("%d,",a[i]); } 程序运行后的输出结果是( )。

    A.1,2,3,4,5,6,7,8,9,10,

    B.10,9,8,7,6,5,4,3,2,1,

    C.1,8,7,6,5,4,3,2,9,10,

    D.1,2,10,9,8,7,6,5,4,3,


    正确答案:C
    本程序中的函数sort(inta[],intn)实现的功能是将数组a中的前n个数进行从大到小排序。sort(&a[1],7)是将数组中从a[1]~a[7]这7个数进行从大到小排序,其他数不变。

  • 第11题:

    某个应用中,需要对输入数据进行排序,输入数据序列基本有序(如输入为1,2,5,3,4,6,8,7)。在这种情况下,采用(1)排序算法最好,时间复杂度为(2)。
    1、____

    A.插入
    B.归并
    C.堆
    D.快速

    答案:A
    解析:
    当一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序法,时间复杂度为O(n^2),是稳定的排序方法。

  • 第12题:

    某个应用中,需要对输入数据进行排序,输入数据序列基本有序(如输入为1,2,5,3,4,6,8,7)。在这种情况下,采用(1)排序算法最好,时间复杂度为(2)。
    2、____

    A.O(n)
    B.O(nlgn)
    C.O(n^2)
    D.O(n^2lgn)

    答案:C
    解析:
    当一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序法,时间复杂度为O(n^2),是稳定的排序方法。

  • 第13题:

    以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序: float sort(int a[], int n) { int i, j, t; for(i=0; i<n-1; i++) for(j=i+1; j<n; j++) if(a[i]<a[j]){t=a[i]; a[i]=a[j]; a[j]=t; } } main() { int aa[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10), i; sort(&aa[3], 5); for(i=0; i<10; i++)printf("% d", aa[i]); printf ("\n"); } 程序运行后的输出结果是______。

    A.1, 2, 3, 4, 5, 6, 7, 8, 9, 10

    B.10, 9, 8, 7, 6, 5, 4, 3, 2, 1

    C.1, 2, 3, 8, 7, 6, 5, 4, 9, 10

    D.1, 2, 10, 9, 8, 7, 6, 5, 4, 3


    正确答案:C
    解析:本题考查数组名作为函数形参的函数调用问题。数组名作函数形参是按地址传递,形参的改变可以传回实参。sort函数的两个形参中一个是数组名,sort函数的功能是对数组元素进行由大到小的排序。主函数调用sort函数时,实参为aa[3]元素的地址和整数5,即sort函数将对数组aa中的元素aa[3]、aa[4]、aa[5]、aa[6]、aa[7]5个元素的值进行由大到小的排序,排序后aa[3]=8、aa[4]=7、aa[5]=6、aa[6]=5、aa [5]=4,而数组aa中其余元素的值不变,因此结果是C。

  • 第14题:

    以下程序中函数sort的功能是对数组a中的数据进行由大到小的排序:includevoidsort(int

    以下程序中函数sort的功能是对数组a中的数据进行由大到小的排序: #include<stdio.h> voidsort(int a[],int n) { int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() { int aa[]={1,2,3,4,5,6,7,8,9,10},i; son(&aa[3],5); for(i=0;i<10;i++) printf("%d,",aa[i]); printf("\n"); } 程序运行后的输出结果是( )。

    A.1,2,3,4,5,6,7,8,9,10,

    B.10,9,8,7,6,5,4,3,2,1,

    C.1,2,3;8,7,6,5,4,9,10,

    D.1,2,10,9,8,7,6,5,4,3,


    正确答案:C
    解析:在main函数中调用sort函数时,实参&aa[3]把数组元素aa[3]的首地址传给形参数组a,使aa[3]与a[0]相对应。sort函数将从aa[3]开始的连续5个数进行了从大到小的排序,其他数组元素不变。

  • 第15题:

    以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。请填空。#include <stdio.h>#define N 80int fun(int a[], int n){ int i,j=1; for(i=1;i<n;i++) if(a[j-1]a[i]) a[j++]=a[i]; ;}main(){ int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}, i, n=19; printf("The original data :\n"); for(i=0; i<n; i++) printf("%3d",a[i]); n=fun(a,n); printf("\nThe data after deleted :\n"); for(i=0; i<n; i++) printf("%3d",a[i]); printf("\n");}


    正确答案:<,return j
    在本题中,程序的功能是删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
    在主函数中,首先定义了一个一维数组,并进行了初始化操作,然后用一个循环输出该数组,接着调用函数fun去掉数组中重复的元素,最后输出。按照题目要求,我们可以知道函数fun的作用是去掉已排好序数组中的重复元素。
    fun函数带有两个形参,从主函数中我们可以看出,这两个形参分别是数组的首地址和数组的长度。在函数体中,首先定义两个整型变量i和j,其中j被初始化为1,而i作为循环变量,然后执行for循环,循环的结束条件是循环变量i小于数组的长度,从题目要求和程序来分析,该循环的作用是删除数组中重复的元素,在循环体中,首先执行条件判断语句if,第13空就是该语句的判断条件表达式,如果条件为真,执行a[j++]=a[i];,从程序中我们推断出a[j++]是用来存储新的数组,而将a[i];赋值给a[j++]时,能确定a[i]是出现一个新数值的时候,即一个更大的数值,那么此时a[i]应该大于a[j-1],因此第13空应该填<运算符。
    第14空是在循环结束后的一条语句,从主函数中我们可以看出,函数应该有个返回值,且返回值作为输出数组元素个数的依据,由此我们可以推断出在14空处应该返回新数组的长度。返回的应该是变量j的当前值,因此,第14空的答案是return j。本题的答案应该分别是<和return j

  • 第16题:

    以下程序中函数sort的功能足对a数组中的数据进行由大到小的排序 void sort(int a[],int n) {int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;} } main() {int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++)printf("%d,",aa[i]); printf("\n"); } 程序运行后的输出结果是( )。

    A.1,2,3,4,5,6,7,8,9,10,

    B.1 0,9,8,7,6,5,4,3,2,1,

    C.1,2,3,8,7,6,5,4,9,10,

    D.1,2,10,9,8,7,6,5,4,3,


    正确答案:C
    解析:程序中sort函数的功能是对数组中的数据进行从大到小的排序。主函数main中调用函数sort(&aa[3],51;,使得数组aa中从第4个元素开始的5个元素进行从大到小的排序,数组aa中的元素变为:1,2,3,8,7,6,5,4,9,10。并输出这些元素。

  • 第17题:

    以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序: void sort(int a[],int n) {int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;i<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() {int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++) printf('%d,",aa[i]); printf("\n"); } 程序运行后的输出结果是( )。

    A.1,2,3,4,5,6,7,8,9,10,

    B.10,9,8,7,6,5,4,3,2,1,

    C.1,2,3,8,7,6,5,4,9,10,

    D.1,2,10,9,8,7,6,5,4,3,


    正确答案:C
    解析:本题中首先定义一个长度为10的整型数组,并初始化为“1,2,3,4,5,6,7,8,9,10”,然后调用排序函数sort(),对aa[3]开始的5个元素进行从大到小的排序,aa[0]、aa[1]、aa[2]、aa[8]、aa[9]并没有变化。sort()执行完毕后,接着执行后面的for语句输出数组aa中各个元素的值,所以输出为“1,2,3,8,7,6,5,4,9,10”。故4个选项中C正确。

  • 第18题:

    下列程序中函数sort()的功能是对数组a中的数据进行由大到小的排序。 A.1,2,3,4,5,6,7,8,9,l0,S

    下列程序中函数sort()的功能是对数组a中的数据进行由大到小的排序。

    A.1,2,3,4,5,6,7,8,9,l0,

    B.10,9,8,7,6,5,4,3,2,1,

    C.1,8,7,6,5,4,3,2,9,10,

    D.1,2,10,9,8,7,6,5,4,3,


    正确答案:C
    本程序中的函数sort(inta[],intn)实现的功能是将数组a中的前n个数进行从大到小排序。sort(&a[1],7)是将数组中从a[1]~a[7]这7个数进行从大到小排序,其他数不变。

  • 第19题:

    给定程序MODll.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。

    例如,若输入2 |若输入4

    则输出: |则输出:

    1 2 |1 2 3 4

    2 4 |2 4 6 8

    |3 6 9 12

    |4 8 12 16

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

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


    正确答案:(1)void fun(int a[][M] int m)(2)a[j][k]=(k+1)*(j+1);
    (1)void fun(int a[][M], int m)(2)a[j][k]=(k+1)*(j+1); 解析:本题中函数的功能是根据形参m的值(2≤m≤9),在m行m列的二维数组中存放有规律的数据,规律就是,i和j代表二维数组的行和列,则a啪[k]=(k+1)*(j+1)。

  • 第20题:

    请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

    例如,一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。

    删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。

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

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


    正确答案:
    解析:该程序功能是删去一维数组中所有相同的数,使之只剩一个。解题思路是,首先在函数中定义临时变量指向每一个元素,然后在循环过程中将临时值和其他元素进行比较,如果相同,那么跳过相同字符。

  • 第21题:

    请编写程序fun,函数的功能是:实现B=A+Aˊ,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

    例如,输入下面的矩阵: 其转置矩阵为:

    1 2 3 1 4 7

    4 5 6 2 5 8

    7 8 9 3 6 9

    程序输出:

    2 6 10

    6 10 14

    10 14 18

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

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


    正确答案:
    解析:该程序功能是实现B=A+Aˊ,即把矩阵A加上A的转置。其中,所谓矩阵的转置,是把行中的数据与列中的数据进行对调。解题过程中首先求得已给的矩阵的转置,然后在循环过程中对矩阵与该矩阵的转置对应元素求和。

  • 第22题:

    以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序; void sort(int a[],int n) { int i,j,t; for(i=0;i<n-1;i++) for(j=i+1,j<n;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i<10;i++)print("%d,",aa[i]); printf('\n"); } 程序运行后的输出结果是( )。

    A.1,2,3,4,5,6,7,8,9,10

    B.10,9,8,7,6,5,4,3,2,1,

    C.1,2,3,8,7,6,5,4,9,10

    D.1,2,10,9,8,7,6,5,4,3,


    正确答案:C
    解析:本题中首先定义一个长度为10的一个整型数组,并初始化为“1,2,3,4,5,6,7,8,9,10”,然后调用排序函数sort(),通过分析不难看出,sort()函数是对具有n个元素的a数组进行从大到小排序。由于函数的第一个参数是数组名,其对应的实参可以是函数名或地址。本题在调用该函数时,实参是&aa[3]的地址,即把aa[3]的地址传给了行参数组名a,函数也就是对aa[3]开始的5个元素进行从大到小的摔序,aa[0]、aa[1]、aa[2]、aa[8]、aa[9]并没有变化。Sort()执行完毕后,接着执行后面的for语句输出数组aa中各个元素的值,由于函数sort()只是对aa[3]开始的5个元素进行从大到小的排序,aa[0]、aa[1]、aa[2]、aa[8]、aa[9]并没有变化,所以输出为“1,2,3,8,7,6,5,4,9,10”。所以4个选项中C正确。

  • 第23题:

    某个应用中,需要对输入数据进行排序,输入数据序列基本有序(如输入为1,2,5,3,4,6,8,7)。在这种情况下,采用( )排序算法最好。

    A.插入
    B.归并
    C.堆
    D.快速

    答案:A
    解析:
    当一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序法,时间复杂度为O(n^2),是稳定的排序方法。

  • 第24题:

    问答题
    编写一函数ins_sort,函数功能是在一个已排好序的敷组中插入一个数据使之保持有序。要求在主函数main 中输入N-1(设N=10)个有序数据(如升序)和一个要新增的数据,并输出处理后的数据。      例如:输入有序数列1 2 3 5 6 7 8 9 10     输入新增数据4  则处理后数据1 2 3 4 5 6 7 8 9 10

    正确答案: #include "stdio.h"
    #define N 10
    void ins_sort(int a[],int n,int x)
    {int i,j;
    if(x>a[n-1])
    a[n]=x;
    else
    {for(i=n-1;x<a[i]&&i>=0;i--)
    a[i+1]=a[i];
    a[i+1]=x;
    }
    }
    main()
    {int i,a[N],x;
    prontf("/nPlease input N-1 data:");
    for(i=0;i<N;i++)
    printf("%d",a[i]);
    }
    解析: 暂无解析