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