1、三级数据库技术机试-305 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是实现从文件 IN32.DAT中读取一篇英文文章存入到字符串数组 xx中。请编制函数 StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组 xx中。最后调用函数 WriteDat()把结果输出到文件 OUT32.DAT中。例如,原文:You can create an index
2、 on any fieldyou have the correct record结果:n any field Yu can create an indexrd yu have the crrect rec原始数据文件存放的格式是:每行的宽度均小于 80个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。试题程序:#includestdio. hincludestring. h# includeconio. hchar xx50 80;int maxline=0;int ReadDat (void);vo
3、id WriteDat(void);void StrOR (void)void main ()clrscr ( );if (ReadDat ( ) )printf (“数据文件 IN32.DAT不能打开! /n/007“);return;StrOR ( );WriteDat ( );int ReadDat (void)FILE *fp;int i=0;char *p;if ( (fp= fopen ( “IN32. DAT“, “r“ ) ) =NULL) return 1;while (fgets (xx i , 80, fp) ! =NULL)p=strchr xxi , /n);if (
4、p) *p=0;i+;maxline=i;fclose(fp);return 0;void WriteDat (void)FILE *fp;int i;ctrscr ( );fp=fopen (“OUT32 .DAT“, “w“);for (i=0; imaxline; i+)printf(“%s/n“,xxi);fprint f (fp, “%s/n“, xx i);fclose(fp);(分数:100.00)_三级数据库技术机试-305 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是实现从文件 IN32.
5、DAT中读取一篇英文文章存入到字符串数组 xx中。请编制函数 StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组 xx中。最后调用函数 WriteDat()把结果输出到文件 OUT32.DAT中。例如,原文:You can create an index on any fieldyou have the correct record结果:n any field Yu can create an indexrd yu have the
6、crrect rec原始数据文件存放的格式是:每行的宽度均小于 80个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。试题程序:#includestdio. hincludestring. h# includeconio. hchar xx50 80;int maxline=0;int ReadDat (void);void WriteDat(void);void StrOR (void)void main ()clrscr ( );if (ReadDat ( ) )printf (“数据文件 IN3
7、2.DAT不能打开! /n/007“);return;StrOR ( );WriteDat ( );int ReadDat (void)FILE *fp;int i=0;char *p;if ( (fp= fopen ( “IN32. DAT“, “r“ ) ) =NULL) return 1;while (fgets (xx i , 80, fp) ! =NULL)p=strchr xxi , /n);if (p) *p=0;i+;maxline=i;fclose(fp);return 0;void WriteDat (void)FILE *fp;int i;ctrscr ( );fp=fo
8、pen (“OUT32 .DAT“, “w“);for (i=0; imaxline; i+)printf(“%s/n“,xxi);fprint f (fp, “%s/n“, xx i);fclose(fp);(分数:100.00)_正确答案:(void StrOR(void)int I, j, k, index, str1;char ch;for (I=0; Imaxline; I+)str1=strlen (xx I ); /*求各行的长度*/index=str1;for (j =0; jstr1; j +) /*将一行中所以小写字母 o右边的字符依次向左移一位,删除字母 o*/if(xx
9、I j=o)for (k=j ;kstr1-1;k+)xxI k=xxI k+1;xxI str1-1= ;index= j; /*记录下最后一个 o所在的位置*/for j=strl-1; j=index; j-) /*最后一个 o右侧的所有字符都移到已处理字符串的左边*/ch=xxI str1-1;for (k=str1-1 ;k0; k-)xxI k=xxI k-1;xxI 0 =ch;)解析:解析 本题考查的知识点如下:(1)循环结构与选择结构的嵌套使用。(2)字符数组中的元素的移动。(3)字符串处理函数的使用。在本题中,以行作为字符串处理的基本单位。首先,要确定该行字符串的长度。然后使用循环结构依次对字符进行处理。先找到字符 o,将 o右侧的字符依次向左移。这个操作同时能够删除字符 o。记录下最后一个。所在的位置,在这个。右侧的所有字符都要移到已处理字符串的左边,这个过程也是使用循环来完成的。最后,对文章中的每一行都进行这一操作即可。