三级信息管理技术机试-309
三级信息管理技术机试 -309( 总分: 100.00 ,做题时间: 90 分钟 )一、上机题( 总题数: 1,分数: 100.00)1.函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数 StrOR() ,该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边 存放,然后把小写字母 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 个字符,含标点符号和空格。 注意:部分源程序已给出。请勿改动主函数 main() 、读函数 ReadDat() 和写函数, WriteDat() 的内容。试题程序:#include < stdio.h >#include < string.h >#include < conio.h >char 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 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);return 0;void WriteDat(void)FILE *fp;int i;clrscr(); fp=fopen("OUT32.DAT","w");for (i=O;i < maxline;i+)printf("%s/n",xxi); fprintf fp,"%s/n",xxi);fclose(fp)分数: 1OO.OO ) 正确答案: (void StrOR(void)int I, j, k, index, str1;char ch;for(I=O; I < maxline; I+)str1=strlen(xxI); /*求各行的长度 */index=str1;o*/for(j=O;j < str1;j+) /* 将一行中所以小写字母 o 右边的字符依次向左移一位,并删除字母if (xxIj='o')for(k=j;k < strl-1;k+)xxIk=xxIk+1;xxI strl-1=' 'index= j; /* 记录下最后一个 o 所在的位置 */for(j=str1-1;j > =index;/*最后一个o右侧的所有字符都移到已处理字符串的左边*/ch=xxI strl-1;for (k=str1-1;k>O;k-)xxI k=xxI k-1;xxIO=ch;) 解析: 解析 本题考查的知识点如下:(1) 循环结构与选择结构的嵌套使用。(2) 字符数组中的元素的移动。(3) 字符串处理函数的使用。 在本题中,以行作为字符串处理的基本单位。首先,要确定该行字符串的长度。然后使用循环结构依次对字符进行处理。先找到字符 0,将0右侧的字符依次向左移。这个操作同时能够删除字符0。记录下最后一个 o 所在的位置,在这个 o 右侧的所有字符都要移到已处理字符串的左边,这个过程也是使用循环来完成 的。最后,对文章中的每一行都进行这一操作即可。