1、三级数据库技术-484 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 ReadDat()实现从文件 in.dat中读取一篇英文文章,存入到无符号字符串数组 xx中;请编制函数eneryptChar(),按给定的替代关系对数组 xx中的所有字符进行替代,其替代值仍存入数组 xx所对应的位置上,最后调用函数 WriteDac()把结果 xx输出到文件 out.dat中。 替代关系:f(p)=p*11 mod 256, mod 为取余运算,p 是数组 xx中某一个字符的 ASCII值,f(p)是计算后的无符号整型值(注意:中间变量定
2、义成整型变量),如果计算后 f(p)值小于等于 32或大于 130,则该字符不变,否则用 f(p)替代所对应的字符。 请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 WfiteDat()的内容。 #include stdio.h #include string.h #include ctype.h unsigned char xx5080; int maxline=0; /*文章的总行数*/ int ReadDat (void); void WriteDat (void); void encryptChar() void main() if(ReadDat() pr
3、intf(“数据文件 in.dat不能打开!n007“); return; encryptChar(); WriteDat(); /*从文件 in.dat中读取一篇英文文章, 存入到无符号字符串数组 xx中*/ int ReadDat (void) FILE *fp; int i=0; unsigned char *p; /定义无符号字符型指针变量 p if(fp=fopen(“in.dat“, “r“)=NULL) return 1; while (fgets(xxi, 80, fp)!=NULL) p=strchr (xxi, “n“); if(p) *p=0; i+; maxline=i
4、; fclose(fp); return 0; /*把结果 xx输出到文件 out.dat中*/ void WriteDat (void) FILE *fp; int i; fp=fopen(“out.dat“, “w“); for(i=0; imaxline; i+) printf(“%sn“, xxi); fprintf(fp, “%sn“, xxi); fclose (fp); (分数:100.00)_三级数据库技术-484 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 ReadDat()实现从文件 in.dat中读取一篇
5、英文文章,存入到无符号字符串数组 xx中;请编制函数eneryptChar(),按给定的替代关系对数组 xx中的所有字符进行替代,其替代值仍存入数组 xx所对应的位置上,最后调用函数 WriteDac()把结果 xx输出到文件 out.dat中。 替代关系:f(p)=p*11 mod 256, mod 为取余运算,p 是数组 xx中某一个字符的 ASCII值,f(p)是计算后的无符号整型值(注意:中间变量定义成整型变量),如果计算后 f(p)值小于等于 32或大于 130,则该字符不变,否则用 f(p)替代所对应的字符。 请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函
6、数 WfiteDat()的内容。 #include stdio.h #include string.h #include ctype.h unsigned char xx5080; int maxline=0; /*文章的总行数*/ int ReadDat (void); void WriteDat (void); void encryptChar() void main() if(ReadDat() printf(“数据文件 in.dat不能打开!n007“); return; encryptChar(); WriteDat(); /*从文件 in.dat中读取一篇英文文章, 存入到无符号字
7、符串数组 xx中*/ int ReadDat (void) FILE *fp; int i=0; unsigned char *p; /定义无符号字符型指针变量 p if(fp=fopen(“in.dat“, “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; /*把结果 xx输出到文件 out.dat中*/ void WriteDat (void) FILE *fp; int i; fp=fopen
8、(“out.dat“, “w“); for(i=0; imaxline; i+) printf(“%sn“, xxi); fprintf(fp, “%sn“, xxi); fclose (fp); (分数:100.00)_正确答案:()解析:int i, j, val; /*对字符串数组 xx中的每一个字符,用替代公式计算其对应的 ASCII值,如果 ASCII值小于等于 32或大于 130,则该字符不变,否则用新的 ASCII值对应的字符替代所原有的字符*/ for(i=0; imaxline; i+) for(j=0; j(int) strlen(xxi); j+) val=(xxij*1
9、1)%256; /xxij对应的 ASCII值乘以 11然后再对 256求余, 得到其对应的新的ASCII值 if(!(val=32|val130) /如果新的对应的 ASCII值大于 32且小于等于 130时 xxij=val; /用新的 ASCII值对应的字符替代原来的字符 解析 字符替代 f(p)=p*11 mod256,小于等于 32或大于 130不变,否则替换。 首先定义两个循环整型变量 i,j 和存放 ASCII码值的中间变量 val。 通过两个 for循环完成对字符串的替换。第一个 for循环的循环变量 i的初值为 0,当 i值等于文章中最大行数值 maxline时停止循环,每循环一次,i 的值加 1;第二层 for循环中,循环变量 j的初值为0,表示从第 i行的第 1个字符开始计算,当 j值等于该行中字符串长度的数值时停止循环,每循环一次,j的值加 1。 循环体中,根据题意重新计算每个字符 xxij的 ASCII码值,当新取得的 ASCII码值大于 32且小于等于 130时,则用新的 ASCII码值所对应的字符替代原来的字符,新 ASCII码值不在此范围内的字符则保持原字符不变。