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