1、计算机三级数据库技术-89 及答案解析(总分:100.00,做题时间:90 分钟)1.函数 ReadDat()的功能是从文件 IN.DAT 中读取一篇英文文章,存入字符串数组 xx 中。请编写函数SortCharD(),该函数的功能是:以行为单位按从大到小的顺序对 xx 中的字符进行排序,排序后的结果仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat(),把结果 xx 输出到文件 OUT.DAT 中。 例如,原文:dAe,BfC CCbbAA 结果:fedCBA, bbCCAA 原始数据文件存放的格式是:每行的宽度均小于 80 个字符(含标点符号和空格)。 请勿改动主函数 ma
2、in()、读函数 ReadDat()和写函数 WriteDat()的内容。 试题程序 #includestdio.h #includestring.h #includestdlib.h char xx5080; int maxline=0; int ReadDat(void); void WriteDat(void); void SortCharD() void main() system(“CLS“); if(ReadDat() printf(“数据文件 IN.DAT 无法打开!n007“); return; SortCharD(); WriteDat(); int ReadDat(void
3、) FILE*fp; int i=0; char*p; if(fp=fopen(“IN.DAT“, “r“)=NULL) return 1; while(fgets(xxi, 80, fp)!=NULL) p=strchr(xxi, “n“); if(p) *p=0; i+; maxline=i; fclose(fp); return 0; void WriteDat() FILE*fp; int i; system(“CLS“); fp=fopen(“OUT.DAT“, “w“); for(i=0; imaxline; i+) printf(“%sn“, xxi); fprintf(fp,
4、“%sn“, xxi); fclose(fp); (分数:100.00)_计算机三级数据库技术-89 答案解析(总分:100.00,做题时间:90 分钟)1.函数 ReadDat()的功能是从文件 IN.DAT 中读取一篇英文文章,存入字符串数组 xx 中。请编写函数SortCharD(),该函数的功能是:以行为单位按从大到小的顺序对 xx 中的字符进行排序,排序后的结果仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat(),把结果 xx 输出到文件 OUT.DAT 中。 例如,原文:dAe,BfC CCbbAA 结果:fedCBA, bbCCAA 原始数据文件存放的格式是:每
5、行的宽度均小于 80 个字符(含标点符号和空格)。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 试题程序 #includestdio.h #includestring.h #includestdlib.h char xx5080; int maxline=0; int ReadDat(void); void WriteDat(void); void SortCharD() void main() system(“CLS“); if(ReadDat() printf(“数据文件 IN.DAT 无法打开!n007“); return; SortC
6、harD(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; char*p; if(fp=fopen(“IN.DAT“, “r“)=NULL) return 1; while(fgets(xxi, 80, fp)!=NULL) p=strchr(xxi, “n“); if(p) *p=0; i+; maxline=i; fclose(fp); return 0; void WriteDat() FILE*fp; int i; system(“CLS“); fp=fopen(“OUT.DAT“, “w“); for(i=0; imaxline;
7、i+) printf(“%sn“, xxi); fprintf(fp, “%sn“, xxi); fclose(fp); (分数:100.00)_正确答案:()解析:void SortCharD() int i, j, k; /*定义循环控制变量*/ int str; /*存储字符串的长度*/ char temp; /*定义数据交换时的暂存变量*/ for (i=0; imaxline; i+) /*以行为单位获取字符*/ str=strlen(xxi); /*求得当前行的字符串长度*/ for(j=0; jstr-1; j+) /*对字符按从大到小的顺序进行排序*/ for(k=j+1; kstr; k+) if(xxijxxik) temp=xxij; xxij=xxik; xxik=temp; 考点 本题考查对字符数组中字符排序。考查的知识点包括:字符串数组的访问,数组排序算法。 首先通读题目,得知此题属于字符排序问题;其次分析题干要求,本题要求实现 SortCharD()函数,该函数需要实现将字符数组中的元素排序的算法。分析后可以归纳出实现该功能的关键点是:如何按照字符从大到小的顺序对数组中的字符进行排序。这可以通过循环嵌套的起泡法来实现。