1、国家三级(数据库技术)机试模拟试卷 116及答案与解析 一、程序设计题 1 函数 Rdata()实现从文件 IN.dat中读取一篇英文文章存入字符串数组 string中,请编写函数 SortCharA(),其功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字爷串数组 string中。最后调用函数 Wdata(),把结果 string输出到 OUT.dat文件中。 例如,原文: dAe, BfC. CcbbAA 结果: ,. ABCdef AACbbc 原始数据文件存放的格式是:每行的宽度均小于 80个字符 (含标点符号和空格 )。 注意:部分源程序已经给出。请勿改动
2、主函数 main()、读数据函数 Rdata()和输出数据函数 Wdata()的内容。 #include stdio.h #include string.h #include conio.h char string 50 80; int maxline = 0; /* 文章的总行数 */ int Rdata (void); void Wdata (void); void SortCharA(void) void main () if (Rdata () printf(“数据文件 IN. dat 不能打开 ! n007“); return; SortCharA (); Wdata ( ); in
3、t Rdata (void) FILE *fp; int i = 0; char *p; if (fp = fopen(“IN. dat“, “r“) = NULL) return 1; while (fgets(stringi, 80, fp) != NULL) p = strchr(stringi, n); if (p) *p = 0; i+; maxline = i; fclose (fp); return 0; void Wdata (void) FILE *fp; int i; fp = fopen(“OUT. dat“, “w“); for (i=0; i maxline; i+)
4、 printf(“%sn“, stringi); fprintf(fp, “%sn“, stringi); fclose (fp); 国家三级(数据库技术)机试模拟试卷 116答案与解析 一、程序设计题 1 【正确答案】 void SortCharA (void) int i, j, k, str1; char ch; for (i=0; i maxline; i+) str1 = strlen(stringi); for (j=0; j str1-1; j+) for (k=j+1; k str1; k+) if (stringi j string i k) ch = stringi j; stringi j = stringi k; stringi k = ch; 解题思路 这里采用 strlen字符函数获取字符串的长度;对文章中的每一行的字符利用双重循环进行两两比较,较小的字符往行前放,较大的字符往行后放,这样就实现了以行为单位对字符从小到大的排序。在程序中的语句是 if(stringijstringik)成立, stringij和 stringik就交换数据。 【知识模块】 三级数据库技术机试模拟