1、三级数据库技术-534 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 Rdata()实现从文件 in.dat 中读取一篇英文文章存入到字符串数组 string 中,请编写函数CharLeft(),其功能是:以行为单位把字符串中的所有字符的 ASCII 值左移 4 位,如果左移后,其字符的ASCII 值小于等于 32 或大于 100,则原字符保持不变,否则就把左移后的字符 ASCII 值再加上原字符ASCII 值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组 string 中,最后调用函数
2、 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 CharLeft() void main() if (Rdata () printf(“数据文件
3、in.dat 不能打开! n007“; return; CharLeft (); 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; /*把结果
4、 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)_三级数据库技术-534 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 Rdata()实现从文件 in.dat 中读取一篇英文文章存入到字符串数组 string 中,请编写函
5、数CharLeft(),其功能是:以行为单位把字符串中的所有字符的 ASCII 值左移 4 位,如果左移后,其字符的ASCII 值小于等于 32 或大于 100,则原字符保持不变,否则就把左移后的字符 ASCII 值再加上原字符ASCII 值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组 string 中,最后调用函数 Wdata(),把结果 string 输出到文件 out.dat 中。 原始数据文件存放的格式是:每行的宽度均小于 80 个字符(含标点符号和空格)。 请勿改动主函数 main()、读数据函数 Rdata()和输出数据函数 Wdata()
6、的内容。 #include stdio.h #include string.h #include conio.h char string50 80; int maxline=0; int Rdata (void); void Wdata(void); void CharLeft() void main() if (Rdata () printf(“数据文件 in.dat 不能打开! n007“; return; CharLeft (); Wdata (); /*从文件 in.dat 中读取一篇英文文章存入到字符串数组 string 中*/ int Rdata(void) FILE *fp; i
7、nt 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; /*把结果 string 输出到文件 out.dat 中*/ void Wdata() FILE *fp; int i; fp=fopen(“out.dat“, “w“); for (i=0; imaxline; i+) printf(“%sn“,
8、stringi); fprintf(fp, “%sn“, stringi fclose(fp); (分数:100.00)_正确答案:()解析:int i,j,str; char ch; for(i=0; imaxline; i+) str=strlen(stringi); /计算文章第 i 行的长度 /*以行为单位把字符串中的所有字符的 ASCII 值左移 4 位,如果左移后,其字符的 ASCII 值大于 32 且小于等于 100,就把左移后的字符 ASCII 值再加上原字符 ASCII 值,得到新的字符仍存入原字符串对应的位置上*/ for(j=0; jstr; j+) ch=stringi
9、j4; /字符 stringij的 ASCII 值左移 4 位,得到新的字符赋给 ch if(ch32 解析 以行为单位把字符串中的所有字符的 ASCII 值左移 4 位,如果左移后,其字符的 ASCII 值小于等于 32 或大于 100,则原字符保持不变,否则就把左移后的字符 ASCII 值再加上原字符 ASCII 值,得到新的字符仍存入原字符串对应的位置上。 首先定义整型循环变量 i、j 和表示字符串长度的变量 str,以及字符局部变量 ch。 在第一层 for 循环语句中,循环变量 i 从 0 开始,依次递增直到其值等于 maxline,在循环体中,首先对字符串 stringi利用库函数 strlen()求其长度,把此值赋给变量 str。在第二层 for 循环语句中,循环变量 j 开始 0,依次递增直到其值等于 str,把字符 stringij的 ASCII 值左移 4 位后所得到字符赋给变量 ch,再用 if 语句判断 ch 的值是否大于 32 并且小于等于 100,如果成立,则把 ch 的值与stringij的值相加,所得的新值保存在 stringij中。