文本内容:
计算机三级数据库技术T14总分
100.00,做题时间90分钟
一、上机题总题数1,分数
100.
001.函数readDatO的功能是从文件IN.DAT中读取20行数据存放到字符串数组xx中每行字符串长度均小于80请编写函数jsSortO,该函数的功能是以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDatO,把结果xx输出到文件OUT.DAT中条件从字符串中间一分为二,左半部分按字符的ASCH码值降序排序,排序后,左半部分与右半部分按例子所示的方法进行交换如果原字符串长度为奇数,则最中间的字符不予处理,字符仍放在原位置上例如,位置012345678原字符串abcdhgfe23498765处理后hgfedcba87659432请勿改动主函数main读函数readDat和写函数writ eDat的内容[试题程序]#includestdio.h#includestring.h#includestdlib.hchar xx
[20]
[80];void readDat;void writeDat;void jsSortvoid mainreadDat;jsSort;writeDat;void readDatFILE*in;int i=0;char*p;in=fopen,zIN.DAT,〃r〃;whilei20fgetsxx[i],80,in!二NULLP二strchrxx[i],〃\n〃;ifP*p=0;i++;fclosein;void writeDat FILE*out;int i;system〃CLS〃;out=fopen z/OUT.DAT,〃w〃;fori=0;i20;i++printf〃96s\n〃,xx[i];fprintfout,〃/s\n〃,xx[i];fclose out;}分数:
100.00正确答案解析void jsSort{int i,j,k;/*定义计数器变量*/int str,half;/*定义存储字符串长度的变量*/char temp;/*定义数据交换时的暂存变量*/for i=0;i20;i++/*逐行对数据进行处理*/str=strlenxx[i];/*求字符串的长度*/half=str/2;/*通过half将字符串分为左右两部分*/forj=0;jhalf-l;j++/*用选择法将左边部分按字符的ASCTT值降序排序*/for k=j+l;khalf;k++if xx[i][j]xx[i][k]temp=xx[i][j];xx[i][j]=xx[i][k];xx Li][k]=temp;forj=half-l,k=str-l;j=0;j—,k—/*将左边部分和右边部分的对应字符交换*/temp=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=temp;}[考点]本题考查对整数的筛选以及数组排序考查的知识点主要包括:循环嵌套,数组排序本题属于字符串操作类题;考查对二维字符数组的处理本题解题思路:需要首先求得各行字符串的长度利用求字符串长度的strlenO函数,然后借助循环结构逐个访问各行中的每一个字符在本题中,应先确定各行中字符串的中间位置,之后用起泡法先对中间位置以前的字符进行降序排序接着把中间位置前的一个位置定为初始位置,字符串中的最后一个位置也视为初始位置,使两个位置所对应的字符进行交换,交换过后,这两个位置值也就是下标值分别前移,再进行对应位置字符的交换。