在文件in33.dat中有200个正整数,且每个正整数均在1000至9999之间。函数readDat()的功能是读取这200个数并存放到数组aa中。请编制函数jsSort(),该函数的功能是:要求按照每个数的后3位的大小进行升序排列,将排序后的前10个数存

admin2009-02-15  47

问题 在文件in33.dat中有200个正整数,且每个正整数均在1000至9999之间。函数readDat()的功能是读取这200个数并存放到数组aa中。请编制函数jsSort(),该函数的功能是:要求按照每个数的后3位的大小进行升序排列,将排序后的前10个数存入数组
bb中,如果数组bb中出现后3位相等的数,则对这些数按原始4位数据进行降序排列。最后调用函数writeDat()把结果bb输出到文件out33.dat中。
   例如:处理前 6012  5099 9012  7025  8088
         处理后 9012  6012  7025  8088  5099
   注意:部分源程序已给出。
   请勿改动主函main()、读函数readDat()和写函数writeDat()的内容。
   试题程序:
   #include<stdio.h>
   #include<string.h>
   #include<conio.h>
   int  aa[200],bb[10];
   void readDat();
   void writeDat();
   void jsSort()
   {
   }
   Void main()
   {
      readDat ();
      jsSort();
      writeDat();
   }
   void readDat()
   {
      FILE *in;
      int i;
      in=fopen("in33.dat","r");
      for(i=0;i<200;i++)  fscanf(in,"%d ",&aa);
      fclose(in);
   }
   void writeDat()
   {
      FILE *out;
      int i;
      clrscr();
      out=fopen("out33.dat","w");
      for(i=0;i<10;i++)
      {
         printf("i=%d, %d\n", i+1, bb);
         fprintf(out, "%d\n",bb);
      }
      fclose(out);
   }

选项

答案void jsSort() { int i, j,data; for(i=0;i<199;i++) for(j=i+1;j<200;j++) { if(aa[i]%1000>aa[j]%1000) /*按照每个数的后3位的大小进行升序排列*/ { data=aa[i]; aa[i]=aa[j]; aa[j]=data; } else if(aa[i]%1000==aa[j]%1000 /*如果后3位数值相等,则对这些数值按原始4位数据 进行降序排列* / if(aa[i]<aa[j]) { data=aa[i]; aa[i]=aa[j]; aa[j]=data; } } for(i=0;i<10;i++) /*将排好序的前十个数存入数组bb中*/ bb[i]=aa[i]; }

解析 本题考查的知识点如下:
   (1) 循环结构的嵌套。
   (2) 选择结构的嵌套。
   (3) 特殊运算符“%”的使用。
   (4)数据的升降序排列。
   在该题中,首先要解决的问题是如何把题中4位数转换成符合要求的3位数。这里要用到一个比较特殊的运算符%,它的功能是取余。将4位数除以1000取余则得到要求的3位数。根据题意,若后3位相等,则按照原数据进行降序排序,所以在这里要加一个选择结构进行判断。对数据进行排序,可以使用最简单的“选择排序法”。即第一次从第一个数据开始和所有后面的数据进行比较,与比它大(小)的数据交换位置,将数据中最大(小)的数交换到最前面。第二次从第二个数据开始与后面的数据进行比较,将此次比较中最(小)的数据交换至第二个位置,直至最后一个数据。
转载请注明原文地址:https://kaotiyun.com/show/RUfZ777K
0

最新回复(0)