三级网络技术机试真题2010年9月.pdf
1 真题 三级网络技术机试真题2010 年 9 月计算机三级网络技术(机试)第 1 题:函数 ReadDat()用于实现从文件ENG.IN中读取一篇英文文章,并将其存入字符串数组 xx 中。请编制函数 encryptChar(),按给定的替代关系对数组xx 中所有的字符进行替代,结果仍存入字符串数组xx 的对应位置,最后调用函数WriteDat()把结果数组 xx 输出到文件 PS3.DAT中。替代关系:f(p)=p*17 rood 256(p是数组中某一个字符的ASC 值,f(p)是计算后新字符的 ASC 值)。如果计算后 f(p)的值小于 32 或其 ASC 值是奇数,则该字符不变,否则将f(p)所对应的字符进行替代。原始数据文件的格式为:每行的宽度均小于80 个字符。注意:部分源程序给出如下。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 WriteDat()的内容。_ 试题源程序#include Stdio.h#include string.h#inciude conio.h#include ctype.h unsigned char xx5080;int maxline=0;/*文章的总行数*/int ReadDat(void);void WriteDat(void);void encryptChar()void main()system(cls);if(ReadDat()printf(数据文件 ENG.IN不能打开!n007);return;encryptChar();WriteDat();int ReadDat(void)FILE*fp;int i=0;2 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;int i;fp=fopen(ps.dat,w);for(i=0;imaxline;i+)printf(%sn,xxi);fprintf(fp,%sn,xxi);fclose(fp);参考答案:void encryptChar()int i;char*p;for(i=0;imaxline;i+)/*遍历数组 xx 的所有行*/p=xxi;/*让字符指针指向该行的第一个字符*/while(*P!=0)if(*p*17%256)%2!=0|(*p*17%256)=32)/*若替换值满足替换条件*/p+;continue;*p=*p*17%256;/*将指针 p 的内容替换为计算出的值*/p+;/*移动指针 p,指向下一个字符*/详细解答:本题主要考查的是字符替换问题。首先,用for 循环遍历每一行,对于某一行 xxi来说先让字符指针p 指向该行的第一个字符,使用while 循环和指针 p来遍历该行的每一个字符。根据题目要求,如果遇到“p*17 mod 256”的值为奇数或者小于等于 32,字符不变,把指针指向下一个字符,结束本次循环;否则,将该字符替换为“p*17 mod 256”的值,将指针指向下一个字符,进入下一次循环。