1、三级信息管理技术机试-257 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 readDat()是从文件 in77.dat 中读取 20 行数据并存放到字符串数组 xx 中(每行字符串长度均小于80)。请编制函数 jsSort(),其功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组 xx 中。最后调用函数 writeDat()把结果 xx 输出到文件 out77.dat 中。条件:从字符串中间一分为二,左边部分按字符的 ASCII 值降序排序,右边部分按字符的 ASCII 值升序排序。如果原字符
2、串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。注意:部分源程序已给出。请勿改动主函数 main()、读函数 readDat()和写函数 writeDat()的内容。试题程序:#include stdio.h#include string.h#include stdlib.hchar xx2080;void readDat();void writeDat();void jsSort()void main()readDat();jsSort();writeDat();void readDat()FILE * in;int i=0;char * p;in=fopen(“in77.dat
3、“,“r“);while(i20 & fgets(xxi,80,in)!=NULL)p=strchr(xxi,/n);if(p)*p=0;i + +;fclose(in);void writeDat()FILE * out;int i;system(“CLS“);out=fopen(“out77.dat“,“w“);for(i=0;i20;i + +)printf(“% s/n“,xxi);fprintf(out,“% s/n“,xxi);fclose(out);(分数:100.00)_三级信息管理技术机试-257 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分
4、数:100.00)1.函数 readDat()是从文件 in77.dat 中读取 20 行数据并存放到字符串数组 xx 中(每行字符串长度均小于80)。请编制函数 jsSort(),其功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组 xx 中。最后调用函数 writeDat()把结果 xx 输出到文件 out77.dat 中。条件:从字符串中间一分为二,左边部分按字符的 ASCII 值降序排序,右边部分按字符的 ASCII 值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。注意:部分源程序已给出。请勿改动主函数 main(
5、)、读函数 readDat()和写函数 writeDat()的内容。试题程序:#include stdio.h#include string.h#include stdlib.hchar xx2080;void readDat();void writeDat();void jsSort()void main()readDat();jsSort();writeDat();void readDat()FILE * in;int i=0;char * p;in=fopen(“in77.dat“,“r“);while(i20 & fgets(xxi,80,in)!=NULL)p=strchr(xxi,
6、/n);if(p)*p=0;i + +;fclose(in);void writeDat()FILE * out;int i;system(“CLS“);out=fopen(“out77.dat“,“w“);for(i=0;i20;i + +)printf(“% s/n“,xxi);fprintf(out,“% s/n“,xxi);fclose(out);(分数:100.00)_正确答案:(void jsSort()int i,j,k; /*定义循环控制变量*/int str,half; /*定义存储字符串长度的变量*/char temp; /*定义数据交换时的暂存变量*/for(i=0;i2
7、0;i + +) /*逐行对数据进行处理*/str=strlen(xxi); /*求各行字符串的总长度*/half=str/2; /*求总长度的一般*/for(j=0;jhalf-1;j + +) /*左边部分按字符的 ASCII 值降序排序*/for(k=j+1;khalf;k + +)if(xxijxxik)temp=xxij;xxij=xxik;xxik=temp;if(str% 2=1) /*如果原字符串长度为奇数,则跳过最中间的字符,使之不参加排序*/half + +;for(j=half,jstr-1;j + +) /*右边部分按字符的 ASCII 值升序排序*/for(k=j+1,kstr;k + +)if(xxijxxik)temp=xxij;xxij=xxik;xxik=temp;)解析:解析 本题主要考查的是二维数组的访问及字符的排序问题。因为以行为字符串处理的单位,所以首先要通过字符串处理函数 strlen()先求得一行字符串的长度。对从 0 到(长度/2-1)的字符进行降序排序(数组的下标从 0 开始)。若长度为奇数,则再从(长度/2+1)开始(跳过最中间的字符)到最后 1 个字符进行升序排列。否则,从(长度/2)开始到最后 1 个字符进行升序排列。字符排序使用“选择排序法”。