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

admin2011-10-31  45

问题 下列程序的功能是:将一正整数序列{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 [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[j]);
             if(j<=7)  fprintf(fp,",");
          }
          fprintf(fp,"\n");
      }
      fclose(fp);
   }

选项

答案void jsValue(int a[10][9]) { int value,i,j,k,num; for(i=0;i<10;i++) { value=a[i][0]; /*将一行的第一个元素赋给value*/ for(j=0;j<9;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个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。
转载请注明原文地址:https://jikaoti.com/ti/zGP7FFFM
0

随机试题
最新回复(0)