1、三级数据库技术-535 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 Rdata()实现从文件 in.dat中读取一篇英文文章,存入到字符串数组 string中,请编写函数CharRight(),其函数的功能是:以行为单位把字符串中的最后一个字符的 ASCII值右移 4位后加倒数第二个字符的 ASCII值,得到最后一个新的字符,倒数第二个字符的 ASCII值右移 4位后加倒数第三个字符的 ASCII值,得到倒数第二个新的字符,依此类推,一直处理到第二个字符,第一个字符的 ASCII值加原最后一个字符的 ASCII值,得到第一个
2、新的字符,得到的新字符分别存放在原字符串对应的位置上。最后已处理的字符串仍按行重新存入字符串数组 string中,最后调用函数 Wdata(),把结果 string输出到文件 out.dat中。 原始数据文件存放的格式是:每行的宽度均小于 80个字符(含标点符号和空格)。 请勿改动主函数 main()、读函数 Rdata()和写函数 Wdata()的内容。 #include stdio.h #include string.h #include conio.h char string50 80; int maxline=0; int Rdata (void); void Wdata(void);
3、 void CharRight() void main() if (Rdata () printf(“数据文件 in.dat不能打开! n007“); return; CharRight (); Wdata (); /*从文件 in.dat中读取一篇英文文章,存入到字符串数组 string中*/ int Rdata (void) FILE *fp; int i=0; char *p; if (fp=fopen(“in.dat“, “r“) = NULL) return 1; while (fgets(stringi, 80, fp) != NULL) p=strchr(stringi, “n“
4、); if (p) *p= 0; i+; maxline=i; fclose(fp); return 0; /*把结果 string输出到文件 out.dat中*/ void Wdata() FILE *fp; int i; fp=fopen(“out.dat“, “w“); for (i=0; imaxline; i+) printf(“%sn“, stringi); fprintf(fp, “%sn“, stringi); fclose(fp); (分数:100.00)_三级数据库技术-535 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.
5、00)1.函数 Rdata()实现从文件 in.dat中读取一篇英文文章,存入到字符串数组 string中,请编写函数CharRight(),其函数的功能是:以行为单位把字符串中的最后一个字符的 ASCII值右移 4位后加倒数第二个字符的 ASCII值,得到最后一个新的字符,倒数第二个字符的 ASCII值右移 4位后加倒数第三个字符的 ASCII值,得到倒数第二个新的字符,依此类推,一直处理到第二个字符,第一个字符的 ASCII值加原最后一个字符的 ASCII值,得到第一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后已处理的字符串仍按行重新存入字符串数组 string中,最后调用
6、函数 Wdata(),把结果 string输出到文件 out.dat中。 原始数据文件存放的格式是:每行的宽度均小于 80个字符(含标点符号和空格)。 请勿改动主函数 main()、读函数 Rdata()和写函数 Wdata()的内容。 #include stdio.h #include string.h #include conio.h char string50 80; int maxline=0; int Rdata (void); void Wdata(void); void CharRight() void main() if (Rdata () printf(“数据文件 in.da
7、t不能打开! n007“); return; CharRight (); Wdata (); /*从文件 in.dat中读取一篇英文文章,存入到字符串数组 string中*/ int Rdata (void) FILE *fp; int i=0; char *p; if (fp=fopen(“in.dat“, “r“) = NULL) return 1; while (fgets(stringi, 80, fp) != NULL) p=strchr(stringi, “n“); if (p) *p= 0; i+; maxline=i; fclose(fp); return 0; /*把结果 s
8、tring输出到文件 out.dat中*/ void Wdata() FILE *fp; int i; fp=fopen(“out.dat“, “w“); for (i=0; imaxline; i+) printf(“%sn“, stringi); fprintf(fp, “%sn“, stringi); fclose(fp); (分数:100.00)_正确答案:()解析:int i,j, strl; char ch; for(i=0;imaxline; i+) strl=strlen(stringi); /计算文章第 i行的长度 ch=stringistrl-1; /把文章第 i行的最后一
9、个字符赋给 ch /*从文章第 i行的最后一个字符开始对每一个字符右移 4位后再与其前一个字符相加得到一个新的字符,把新字符的值赋给原字符*/ for(j=strl-1; j0; j-) stringij=4; /字符 stringij的 ASCII值右移 4位 stringij+=stringij-1; /字符 stringij与其前一个字符 stringij-1相加后再把它们的和值赋给字符 stringij /*第 i行的最后一个字符 stringistrl-1与第一个字符 stringi0相加的和赋给第一个字符stringi0*/ stringi0+=ch; 解析 以行为单位,新字符串中
10、每个字符的 ASCII码值等于该位置上的原字符 ASCII码值的二进制右移 4位后加其前一个字符的 ASCII码值。 定义整型循环变量 i、j 和表示字符串长度的整型变量 strl,以及字符局部变量 ch。 在第一层 for循环中,循环变量 i从 0开始,依次递增直到其值等于 maxline,在循环体中,利用库函数 strlen()求得字符串 stringi的长度,把此值赋给变量 strl。把字符串 stringi的最后一个字符stringistd-1赋给字符变量 ch,暂时保存起来。在第二层 for循环中,循环变量 j从 str-1开始,依次递减直到其值小于或等于 0,在循环体中,字符 stringij的 ASCII码值右移 4位,然后再与字符stringij-1的 ASCII码值相加的和保存到字符 stringij中。当退出第二层 for循环后,把第 i行的第一个字符 stringi0与最后一个字符 ch的值相加,保存在 stringi0中。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1