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