三级信息管理技术机试-278
三级信息管理技术机试 -278( 总分: 100.00 ,做题时间: 90 分钟 )、上机题( 总题数: 1,分数: 100.00)1.函数 ReadDat() 的功能是实现从文件 ENG53IN 中读取一篇英文文章,并存入到字符串数组xx 中。请编制函数 encryptChar() ,按给定的替代关系对数组 xx 中的所有字符进行替代;结果仍存人数组 xx 的对应 的位置上,最后调用函数 WdteDat() 把结果 xx 输出到文件 PS53.DAT 中。替代关系:f(P)=P*11 mod 256(P 是数组xx中某一个字符的 ASQ值,f(P)是计算后新字符的 ASQ值), 如果原字符是大写字母或计算后 f(P) 的值小于等于 32,则该字符不变,否则将 f(P) 所对应的字符进行替 代。注意:部分源程序已给出。原始数据文件的存放格式是:每行的宽度均小于 80 个字符。请勿改动主函教 mainf() 、读函数 QeadDat() 和写函数 WriteDat() 的内容。 试题程序 #include< stdlib.h>#include< stdio.h>#include< string.h>#include< ctype.h>unsigned char XX5080;int maxline=0;int ReadDat(void);void WriteDat(void);void encryChar()void main()system("CLS");if(ReadDat()printf(" 数据文件 ENG53.IN 不能打开 !/n/007"); return;encryChar();WriteDat();int ReadDat(void)FILE*fp;int i=0;unsigned char * P; if(fp=fopen("ENG53.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()FILE*fp;int i; fp=fopen("ps53.dat","w");for(i=0;i < maxline;i+)printf("%s/n",xxi); fprintf(fp,"%s/n",xxi);fclose(fp);分数: 100.00 ) 正确答案: (void encryChar()inti,j; /* 定义循环控制变量 */int str; /*存储字符串的长度 */char ch; /*存储当前取得的字符 */fpr(i=0;i < maxline;i+) /* 以行为单位获取字符 */ str=strlen(xxi); /*求得当前行的字符串长度 */for(j=0;j < str;j+) /* 依次取每行的所有字符 */ ch=xxij*11%256;if(xxijj > ='A'&& xxij < ='z'|ch<=32)/*如果原字符是大写字母或计算后的值小于等于32*/continue; /* 则此字符不变,取下一个字符 */elsexxij=ch; /* 如果不满足条件,则用新字符替代原字符 */)解析: 解析 本题要对二维数组中的字符元素按行进行处理。首先用 strlen() 函数得到当前行所包含的字符个数。然后再利用 for 循环来依次访问该行中的所有字符。对于每一个字符,先按照题目中的函数替代关系 “f(p)=p*11 mod256 ”计算出相应的 f(p) 值,再用一条 if 语句判断该值是否符合本题给定的条件:“原 字符是大写字母或计算后的值小于等于32”。如果符合条件, 则该字符不变, 否则用 f(p) 所对应的字符对其进行替代。