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