1、三级信息管理技术机试-260 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 readDat()的功能是从文件 IN75.DAT 中读取 20 行数据并存放到字符串数组 xx 中(每行字符串长度均小于 80)。请编制函数 jsSort(),该函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组 xx 中,最后调用函数 writeDat()把结果 xx 输出到文件OUT75.DAT 中。条件:从字符串中间一分为二,左边部分按字符的 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(“
3、in75.dat“,“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(“out74.dat“,“w“);for(i=0;i20;i + +)printf(“% s/n“,xxi);fprintf(out,“% s/n“,xxi);fclose(out);(分数:100.00)_三级信息管理技术机试-260 答案解析(总分:100.00,做题时间:90 分钟)一、上机题
4、(总题数:1,分数:100.00)1.函数 readDat()的功能是从文件 IN75.DAT 中读取 20 行数据并存放到字符串数组 xx 中(每行字符串长度均小于 80)。请编制函数 jsSort(),该函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组 xx 中,最后调用函数 writeDat()把结果 xx 输出到文件OUT75.DAT 中。条件:从字符串中间一分为二,左边部分按字符的 ASCII 值降序排序,排序后,左边部分与右边部分按例子所示进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。注意:部分源程序已
5、给出。请勿改动主函数 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(“in75.dat“,“r“);while(i20 & fgets(xxi,80,in)!=NU
6、LL)p=strchr(xxi,/n);if(p)*p=0;i + +;fclose(in);void writeDat()FILE * out;int i;system(“CLS“);out=fopen(“out74.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; /*定义数据交换时的暂
7、存变量*/for(i=0;i20;i + +) /*逐行对数据进行处理*/str=strlen(xxi); /*求字符串的长度*/half=str/2; /*通过变量 half 将字符串分为左右两部分*/for(j=0;jhalf-1;j + +) /*用选择法将左边部分按字符的 ASCII 值降序排序*/for(k=j+1;khalf;k + +)if(xxijxxik)temp=xxij;xxij=xxik;xxik=temp;for(j=half-1,k=str-1;j=0;j - -,k - -) /*将左边部分和右边部分的对应字符交换*/temp=xxij;xxij=xxik;xxik=temp;)解析:解析 本题考查对二维字符数组的处理。需要首先求得各行字符串的长度(利用求字符串长度的 strlen()函数),然后借助循环结构逐个访问各行中的每一个字符。在本题中,应先确定各行中字符串的中间位置,之后用选择法先对中间位置以前的字符进行降序排序。接着把中间位置前的一个位置定为初始位置,字符串中的最后一个位置也视为初始位置,使两个位置所对应的字符进行交换,交换过后,这两个位置值(也就是下标值)分别前移,再进行对应位置字符的交换。