1、三级数据库技术-521 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 reaaDat()是从文件 in.dat中读取 20行数据存放到字符串数组 xx中(每行字符串长度均小于 80)。请编制函数 jsSort(),其函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组 xx中,最后调用函数 writeDat()把结果 xx输出到文件 out.dat中。 条件:字符串从中间一分为二,左边部分按字符的 ASCII值升序排序,右边部分不变,左边经排序后再与右边部分进行交换。如果原字符串长度为
2、奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如:位置 0 1 2 3 4 5 6 7 8 源字符串 d c b a h g f e 4 3 2 1 9 8 7 6 5 则处理后字符串 h g f e a b c d 8 7 6 5 9 1 2 3 4 请勿改动数据文件 in.dat中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。#include stdio.h #include string.h void readDat(); void writeDat(); char xx20 80; void jsSort() void ma
3、in() readDat (); jsSort (); writeDat (); /*从文件 in.dat中读取 20行数据存放到字符串数组 xx中*/ void readDat() FILE *in; int i=0; char *p; in=fopen(“in.dat“, “r“); while(i20 if(p) *p=0; i+; fclose (in); /*把结果 xx输出到文件 out.dat中*/ void writeDat() FILE *out; int i; out=fopen(“out.dat“, “w“); for(i=0; i20; i+) printf(“%sn“
4、, xxi); fprintf(out, “%sn“, xxi); fclose (out); (分数:100.00)_三级数据库技术-521 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 reaaDat()是从文件 in.dat中读取 20行数据存放到字符串数组 xx中(每行字符串长度均小于 80)。请编制函数 jsSort(),其函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组 xx中,最后调用函数 writeDat()把结果 xx输出到文件 out.dat中。 条件:字符串从中
5、间一分为二,左边部分按字符的 ASCII值升序排序,右边部分不变,左边经排序后再与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如:位置 0 1 2 3 4 5 6 7 8 源字符串 d c b a h g f e 4 3 2 1 9 8 7 6 5 则处理后字符串 h g f e a b c d 8 7 6 5 9 1 2 3 4 请勿改动数据文件 in.dat中的任何数据、主函数 main()、读函数 readDat()和写函数 writeDat()的内容。#include stdio.h #include string.h void read
6、Dat(); void writeDat(); char xx20 80; void jsSort() void main() readDat (); jsSort (); writeDat (); /*从文件 in.dat中读取 20行数据存放到字符串数组 xx中*/ void readDat() FILE *in; int i=0; char *p; in=fopen(“in.dat“, “r“); while(i20 if(p) *p=0; i+; fclose (in); /*把结果 xx输出到文件 out.dat中*/ void writeDat() FILE *out; int i
7、; out=fopen(“out.dat“, “w“); for(i=0; i20; i+) printf(“%sn“, xxi); fprintf(out, “%sn“, xxi); fclose (out); (分数:100.00)_正确答案:()解析:char ch, str80; int i, j, k, len, p; for(i=0; i20; i+) len= (int) strlen(.xxi); p=len / 2; /*对文章第 i行左半部分的字符中进行升序排列*/ for(j=0; j(p-l); j+) for(k=j+i; kp; k+) /*如果字符 xxij的 A
8、SCII码大于 xxik的 ASCII码值,则两者进行互换*/ if(xxi jxxi k) ch=xxi k; xxi k=xxi j; xxi j=ch; if(len % 2) strcpy(str, xxi +p+1); strncat(str, xxi +p, i); strncat(str, xxi, p); else strcpy(str, xxi +p); strncat(str, xxi, p); strcpy(xxi, str); 解析 以行为单位从字符串左边部分升序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理。 通过审题可以发现主要是对字符串左边部分排序时所采用的排序方式不同,参考答案的第 11行,修改 if条件语句的设置即可。