1、三级数据库技术机试-71 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()实现从文件 engin 中读取一篇英文文章,存入到字符串数组 xx 中。请编制函数encryptChar(),按给定的替代关系对数组 xx 中的所有字符进行替代,仍存入数组 xx 的对应的位置上,最后调用函数 WriteDat()把结果 xx 输出到文件 ps10dat 中。替代关系:f(p)=p*43 mod 256(p 是数组中某一个字符的 ASCII 值,fO)是计算后新字符的 ASCII 值),如果原字符的 ASCII 值是偶数或计算后
2、 fb)值小于等于 32,则该字符不变,否则将 qp)所对应的字符进行替代。部分源程序己给出,原始数据文件存放的格式是:每行的宽度均小于 80 个字符。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 WriteDat()的内容。#includestdio.h#includestring.h#includeconio.h#includectype.hunsigned char xx5080;int maxline=0;/*文章的总行数*/int ReadDat(void)void WriteDat(void)void encryptChar()void main()c
3、lrscr();if(ReadDat()printf (“数据文件 ENG. IN 不能打开! /n/007“);return;encryptChar();WriteDat();int ReadDat(void)FILE *fp;int i=0;unsigned char *p;if(fp=fopen(“eng.in“,“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;i
4、nt i;fp-fopen(“ps10.dat“,“w“);for(i=0;imaxline;i+)printf(“%s/n“,xxi);fprintf(fp,“%s/n“,xxi);fclose(fp);(分数:100.00)_三级数据库技术机试-71 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()实现从文件 engin 中读取一篇英文文章,存入到字符串数组 xx 中。请编制函数encryptChar(),按给定的替代关系对数组 xx 中的所有字符进行替代,仍存入数组 xx 的对应的位置上,最后调用函数 Write
5、Dat()把结果 xx 输出到文件 ps10dat 中。替代关系:f(p)=p*43 mod 256(p 是数组中某一个字符的 ASCII 值,fO)是计算后新字符的 ASCII 值),如果原字符的 ASCII 值是偶数或计算后 fb)值小于等于 32,则该字符不变,否则将 qp)所对应的字符进行替代。部分源程序己给出,原始数据文件存放的格式是:每行的宽度均小于 80 个字符。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 WriteDat()的内容。#includestdio.h#includestring.h#includeconio.h#includectyp
6、e.hunsigned char xx5080;int maxline=0;/*文章的总行数*/int ReadDat(void)void WriteDat(void)void encryptChar()void main()clrscr();if(ReadDat()printf (“数据文件 ENG. IN 不能打开! /n/007“);return;encryptChar();WriteDat();int ReadDat(void)FILE *fp;int i=0;unsigned char *p;if(fp=fopen(“eng.in“,“r“)=NULL) return 1;while
7、(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;fp-fopen(“ps10.dat“,“w“);for(i=0;imaxline;i+)printf(“%s/n“,xxi);fprintf(fp,“%s/n“,xxi);fclose(fp);(分数:100.00)_正确答案:(提示:类型:字符替换。关键点:1字符串读写。2由于 fgets()函数读入数据时读入换行符/n,因而需要在 xx 数组每一行末尾将
8、换行符/n替换成结束符/0。本题中此步已经在 ReadDat()函数中完成。3算法:让字符指针 pf 指向每一行的开头然后逐一往后移动,在移动过程中按要求进行转换。*pf%20 用于判断是否为偶数。If()条件语句用于控制不替代字符。4中间变量的类型选择整型。解答:void encryptChar()/*字符替换过程中,运算的中间结果可能超过 256*/*因此采用整型存储中间结果*/int i,j,t;for(i=0;imaxline;i+)/*遍历每一行*/for(j=0;istrlen(xxi);j+)/*用控型变量进行所有运算*/t=xxij;t=t*43%256;/*判断替换条件*/if(t=32 | xxij%2=0) continue;xxij=t;)解析: