1、国家三级信息管理技术机试模拟试卷 33及答案与解析 一、程序设计题 1 在文件 in33.dat中有 200个正整数,且每个正整数均在 1000至 9999之间。函数readDat()的功能是读取这 200个数并存放到数组 aa中。请编制函数 jsSort(),该函数的功能是:要求按照每个数的后 3位的大小进行升序排列,将排序后的前 10个数存入数组 bb中,如果数组 bb中出现后 3位相等的数,则对这些数按原始 4位数据进行降序排列。最后调用函数 writeDat()把结果 bb输出到文件 out33.dat中。 例如:处理 前 6012 5099 9012 7025 8088 处理后 90
2、12 6012 7025 8088 5099 注意:部分源程序已给出。 请勿改动主函 main()、读函数 readDat()和写函数 writeDat()的内容。 试题程序: #include stdio.h #include string.h #include conio.h int aa200,bb10; void readDat(); void writeDat(); void jsSort() Void main() readDat (); jsSort(); writeDat(); void readDat() FILE *in; int i; in=fopen(“in33.dat
3、“,“r“); for(i=0;i 200;i+) fscanf(in,“%d “, fclose(in); void writeDat() FILE *out; int i; clrscr(); out=fopen(“out33.dat“,“w“); for(i=0;i 10;i+) printf(“i=%d, %dn“, i+1, bbi); fprintf(out, “%dn“,bbi); fclose(out); 国家三级信息管理技术机试模拟试卷 33答案与解析 一、程序设计题 1 【正确答案】 void jsSort() int i, j,data; for(i=0;i 199;i+
4、) for(j=i+1;j 200;j+) if(aai%1000 aaj%1000) /*按照每个数的后 3位的大小进行升序排列 */ data=aai; aai=aaj; aaj=data; else if(aai%1000=aaj%1000 /*如果后 3位数值相等,则对这些数值按原始 4位数据 进行降序排列 * / if(aai aaj) data=aai; aai=aaj; aaj=data; for(i=0;i 10;i+) /*将排好序的前十个数存入数组 bb中 */ bbi=aai; 【试题解析】 本题考查的知识点如下: (1) 循环结构的嵌套。 (2) 选择 结构的嵌套。 (
5、3) 特殊运算符 “%” 的使用。 (4)数据的升降序排列。 在该题中,首先要解决的问题是如何把题中 4位数转换成符合要求的 3位数。这里要用到一个比较特殊的运算符 %,它的功能是取余。将 4位数除以 1000取余则得到要求的 3位数。根据题意,若后 3位相等,则按照原数据进行降序排序,所以在这里要加一个选择结构进行判断。对数据进行排序,可以使用最简单的 “选择排序法 ”。即第一次从第一个数据开始和所有后面的数据进行比较,与比它大 (小 )的数据交换位置,将数据中最大 (小 )的数交换到最前面。第二次从 第二个数据开始与后面的数据进行比较,将此次比较中最 (小 )的数据交换至第二个位置,直至最后一个数据。