1、三级数据库技术-536 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 ReadDat()实现从文件 in.dat 中读取一篇英文文章存入到无符号字符串数组 xx 中;请编制函数ChA(),其函数的功能是:以行为单位把字符串中的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到第一个新的值,存入数组单元 xxi0中(其中:i 是文章中的某行)。第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到第二个新的值,存入数组单元 xxi1中。以此类推一直处理到最后第二个字符,最后一个字符的 ASCII 值加原第
2、一个字符的 ASCII 值,得到最后一个新的值,存放在原字符串对应的位置上,之后把己处理的字符串逆转后仍按行重新存入无符号字符串数组 xx 中。最后 main()函数调用函数WriteDat()把结果 xx 输出到 out.dat 文件中。 原始数据文件存放的格式是:每行的宽度均小于 80 个字符,含标点符号和空格,并也按它的 ASCII 值作以上处理。 请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 WriteDat()的内容。 #include stdio.h #include string.h unsigned char xx50 80; int maxlin
3、e=0; /*文章的总行数*/ int ReadDat(void); void WriteDat(void); void ChA (void) void main() if (ReadDat () printf(“数据文件 in.dat 不能打开! n007“); return; chA(); WriteDat (); /*从文件 in.dat 中读取一篇英文文章存入到无符号字符串数组 xx 中*/ int ReadDat (void) FILE *fp; int i=0; char *p; if(fp=fopen (“ in.dat“, “r“) ) =NULL) return 1; whi
4、le(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(“out.dat“, “w“); for(i=0; imaxline; i+) printf(“%sn“, xxi); fprintf(fp, “%sn“, xxi); fclose(fp); (分数:100.00)_三级数据库技术-536 答案解析(总分:
5、100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.函数 ReadDat()实现从文件 in.dat 中读取一篇英文文章存入到无符号字符串数组 xx 中;请编制函数ChA(),其函数的功能是:以行为单位把字符串中的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到第一个新的值,存入数组单元 xxi0中(其中:i 是文章中的某行)。第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到第二个新的值,存入数组单元 xxi1中。以此类推一直处理到最后第二个字符,最后一个字符的 ASCII 值加原第一个字符的 ASCII 值,得到最后一个新
6、的值,存放在原字符串对应的位置上,之后把己处理的字符串逆转后仍按行重新存入无符号字符串数组 xx 中。最后 main()函数调用函数WriteDat()把结果 xx 输出到 out.dat 文件中。 原始数据文件存放的格式是:每行的宽度均小于 80 个字符,含标点符号和空格,并也按它的 ASCII 值作以上处理。 请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 WriteDat()的内容。 #include stdio.h #include string.h unsigned char xx50 80; int maxline=0; /*文章的总行数*/ int R
7、eadDat(void); void WriteDat(void); void ChA (void) void main() if (ReadDat () printf(“数据文件 in.dat 不能打开! n007“); return; chA(); WriteDat (); /*从文件 in.dat 中读取一篇英文文章存入到无符号字符串数组 xx 中*/ int ReadDat (void) FILE *fp; int i=0; char *p; if(fp=fopen (“ in.dat“, “r“) ) =NULL) return 1; while(fgets(xxi,80,fp) !
8、= 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(“out.dat“, “w“); for(i=0; imaxline; i+) printf(“%sn“, xxi); fprintf(fp, “%sn“, xxi); fclose(fp); (分数:100.00)_正确答案:()解析:int i,j; char yuan; for(i=0; im
9、axlime;i+) yuan=xxi0; /把第 i 行的第一个字符 xxi0赋给 yuan /*从第 i 行的第一个字符加上其相邻的后一个字符得到一个新的字符,把新字符的值赋给原字符*/ for(j=0;j(int)strlen(xxi)-1;j+) xxij+=xxij+1; /xij加上其后相邻的字符 xxij+1的和赋给字符 xij xxistrlen(xxi)-1+=yuan; /第 i 行的最后一个字符 xxistrlen(xxi)-1加上第 i 行的第一个字符 xxi0的和赋给最后一个字符 xxistrlen(xxi)-1 strrev(xxi); /对字符串 xxi进行逆转
10、解析 以行为单位,新字符串中每个字符的 ASCII 码值等于该位置上的原字符 ASCII 码值加其后面一个字符的 ASCII 码值,逆序排序。 定义整型循环变量 i、j 和字符局部变量 yuan。 在第一层 for 循环中,循环变量 i 从 0 开始,依次递增直到其值大于或等于 maxline,在循环体中,首先把第 i 行的第一个字符 xxi0赋给变量 yuan,在第二层 for 循环中,循环变量 j 从 0 开始,依次递增直到其值等于该行字符串的长度减 1,在循环体中,将字符 xxij的 ASCII 码值与字符 xxij+1的 ASCII 码值相加的和保存到字符 xxij中。当退出第二层 for 循环后,把第 i 行的最后一个字符与第一个字符变量 yuan 的值相加,最后通过 strrev()函数对 i 行字符串逆序排序。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1