1、三级信息管理技术机试-89 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是实现从文件 IN73.DAT 中读取一篇英文文章存入到字符串数组 xx 中。请编制函数 CovertCharD(),该函数的功能是:以行为单位把字符串中的所有小写字母改成该字母的上一个字母,如果是字母 a,则改成字母 z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat()把结果 xx 输出到文件OUT73.DAT 中。例如:原文 Adb Bc
2、dzaabck LLhj 结果 Aca Bbcyz,zabj LLgi原始数据文件存放的格式是:每行的宽度均小于 80 个字符,含标点符号和空格。注意:部分源程序已给出。 请勿改动主函数 main()、读函数 ReadDat()和写函数 Wiltedat()的内容。试题程序:#includestdio. h#includestring. h#includeconio. hchar xx50 80;int maxline=0;int ReadDat (void);void WriteDat (void);void CovertCharD ( )void main ( )clrscr ( );if
3、 (ReadDat ( ) )printf ( “数据文件 IN73 .DAT 不能打开/n/007“);return;CovertCharD ( );WriteDat ();int ReadDat ()FILE *fp;int i=0;char *p;if ( ( fp= fopen ( “IN73. DAT“, “r“ ) ) = =NULL) returnwhile (fgets (xx i, 80, fp) !=NULL)p=strchr (xx i , /n );if(p)*p=0;i+;maxline=i;fclose (fp);return 0;void WriteDat (vo
4、id)FILE *fp;int i;clrscr ( );fp=fopen(“OUT73 .DAT“, “w“);for (i=0; imaxline; i+)printf ( “%s/n“ ,xx i );fprintf (fp, “%s/n“ ,xxi );fclose (fp);(分数:100.00)_三级信息管理技术机试-89 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是实现从文件 IN73.DAT 中读取一篇英文文章存入到字符串数组 xx 中。请编制函数 CovertCharD(),该函数的功能是
5、:以行为单位把字符串中的所有小写字母改成该字母的上一个字母,如果是字母 a,则改成字母 z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat()把结果 xx 输出到文件OUT73.DAT 中。例如:原文 Adb Bcdzaabck LLhj 结果 Aca Bbcyz,zabj LLgi原始数据文件存放的格式是:每行的宽度均小于 80 个字符,含标点符号和空格。注意:部分源程序已给出。 请勿改动主函数 main()、读函数 ReadDat()和写函数 Wiltedat()的内容。试题程序:#include
6、stdio. h#includestring. h#includeconio. hchar xx50 80;int maxline=0;int ReadDat (void);void WriteDat (void);void CovertCharD ( )void main ( )clrscr ( );if (ReadDat ( ) )printf ( “数据文件 IN73 .DAT 不能打开/n/007“);return;CovertCharD ( );WriteDat ();int ReadDat ()FILE *fp;int i=0;char *p;if ( ( fp= fopen (
7、“IN73. DAT“, “r“ ) ) = =NULL) returnwhile (fgets (xx i, 80, fp) !=NULL)p=strchr (xx i , /n );if(p)*p=0;i+;maxline=i;fclose (fp);return 0;void WriteDat (void)FILE *fp;int i;clrscr ( );fp=fopen(“OUT73 .DAT“, “w“);for (i=0; imaxline; i+)printf ( “%s/n“ ,xx i );fprintf (fp, “%s/n“ ,xxi );fclose (fp);(分数
8、:100.00)_正确答案:(void CovertCharD ( )int i;char *pf;for ( i=0; imaxline; i+ )pf=xx i; /*指针 pf 指向各行的首地址*/while (*pf)if (*pf=a) /*如果是字母 a,则改成字母 z*/*pf=z;pf+; /*指向下一个字符*/else if(*pf=bPf+; /*指向下一个字符*/else pf+; /*如果不满足条件,则不变字符,指向下一个字符*/)解析:解析 本题考查的知识点如下:(1)字符串的计算。(2)循环结构的使用。(3)使用指针实现对数组的访问。本题中,将字符存放在二维数组中,以行为字符处理的基本单位,可以定义一个指针,指向每一行字符。初始时,指针指向每一行的第一个元素,增加指针地址就可以实现对一行数据的完全访问,要将所有小写字母改成它的前一个字母,小写字母的 ASC码是连续的,可直接将其 ASC码减 1,则得要求的字符。注意:字母 a 要单独处理,其他字符保持不变。