1、计算机三级数据库技术-138 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是从文件 IN.DAT 中读取一篇英文文章存入到字符串数组 xx 中。请编写函数CharConvA(),该函数的功能是:以行为单位把字符串的倒数第一个字符的 ASCII 码值右移 4 位后加倒数第二个符的 ASCII 码值,得到最后一个新的字符,倒数第二个字符的 ASCII 码值右移 4 位后加倒数第三个字符的 ASCII 码值,得到倒数第二个新的字符,依此类推,一直处理到第二个字符,第一个字符的 ASCII码值加最后一个字符的 AS
2、CII 码值,得到第一个新的字符,得到的新字符分别存放在对应的原字符串位置上,把已处理的字符串仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat(),把结果 xx 输出到文件 OUT.DAT 中。 注意:原始文件存放的格式是:每行的宽度小于 80 个字符(含标点符号和空格)。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 【试题程序】 #include stdio.h #include string.h #include stdlib.h char xx5080; int maxline =0; int ReadDat(); vo
3、id WriteDat () ; void CharConvA (void) void main () system (“CLS“) ; if (ReadDat () printf (“数据文件 IN. DAT 无法打开! n007“) ; return; CharConvA () ; WriteDat () ; int ReadDat (void) FILE * fp; int i =0; char * p; if ( (fp = fopen (“IN.DAT“, “r“) ) =NULL) return 1 ; while (fgets(xxi,80,fp) ! =NULL) p = st
4、rchr (xxi, “n“) ; if (p) * p =0; i+; maxline = i ; fclose (fp) ; return 0 ; void WriteDat () FILE * fp; int i ; system (“CLS“) ; fp = fopen (“OUT. DAT“, “w“) ; for (i =0;i maxline;i + ) printf (“%sn“,xxi ) ; fprintf (fp, “%sn“, xxi ) ; fclose (fp) ; (分数:100.00)_计算机三级数据库技术-138 答案解析(总分:100.00,做题时间:90
5、分钟)一、上机题(总题数:1,分数:100.00)1.函数 ReadDat()的功能是从文件 IN.DAT 中读取一篇英文文章存入到字符串数组 xx 中。请编写函数CharConvA(),该函数的功能是:以行为单位把字符串的倒数第一个字符的 ASCII 码值右移 4 位后加倒数第二个符的 ASCII 码值,得到最后一个新的字符,倒数第二个字符的 ASCII 码值右移 4 位后加倒数第三个字符的 ASCII 码值,得到倒数第二个新的字符,依此类推,一直处理到第二个字符,第一个字符的 ASCII码值加最后一个字符的 ASCII 码值,得到第一个新的字符,得到的新字符分别存放在对应的原字符串位置上,
6、把已处理的字符串仍按行重新存入字符串数组 xx 中,最后调用函数 WriteDat(),把结果 xx 输出到文件 OUT.DAT 中。 注意:原始文件存放的格式是:每行的宽度小于 80 个字符(含标点符号和空格)。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 【试题程序】 #include stdio.h #include string.h #include stdlib.h char xx5080; int maxline =0; int ReadDat(); void WriteDat () ; void CharConvA (void)
7、void main () system (“CLS“) ; if (ReadDat () printf (“数据文件 IN. DAT 无法打开! n007“) ; return; CharConvA () ; WriteDat () ; int ReadDat (void) FILE * fp; int i =0; char * 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+; ma
8、xline = i ; fclose (fp) ; return 0 ; void WriteDat () FILE * fp; int i ; system (“CLS“) ; fp = fopen (“OUT. DAT“, “w“) ; for (i =0;i maxline;i + ) printf (“%sn“,xxi ) ; fprintf (fp, “%sn“, xxi ) ; fclose (fp) ; (分数:100.00)_正确答案:()解析:void CharConvA(void) int i,j; /*定义循环控制变量*/ int str; /*存储字符串长度*/ cha
9、r ch; /*暂存最后一个字符*/ for(i=0;imaxline;i+) /*以行为单位获取字符*/ str=strlen(xxi); /*求得当前行的字符串长度*/ ch=xxistr-1; /*将最后一个字符暂存入 ch*/ for(j=str-1;j0;j-) /*从最后一个字符开始,直到第二个字符*/ xxij=(xxij4)+xxij-1; /*当前字符 ASCII 值右移 4 位加前一个字符的 ASCII 值,得到新的当前字符*/ xxi0+=ch; /*第一个字符的 ASCII 值加最后一个字符的 ASCII 值,得到第一个新的字符*/ 考点 本题考查对字符数组中的字符计算
10、。考查的知识点主要包括:字符串数组的访问,字符 ASCII码的算术运算,位运算,if 判断结构以及逻辑表达式。 解析 首先通读题目,得知此题属于字符计算问题;其次分析题干要求,本题要求实现 CharConvA (void)函数的功能。分析后可以归纳出 2 个关键点:关键点 1 如何对字符数组的元素逐一访问;关键点 2按照要求取每个位置的字符右移 4 位后和其下一个字符相加,并将结果作为该位置上的新字符,以此类推;需要注意的是,末尾位置的新字符是该位原字符和第 1 个原字符相加的结果。 接着分析每一步的解决方法,对于第 1 点,通过字符串处理函数 strlen 获取字符串的长度,再通过获得的长度用下标法对字符数组的字符元素逐一访问;第 2 点,在遍历访问字符时,可以直接取下一个位置的字符进行运算,在进行计算的开始需要首先保存第 1 个位置的字符。以作为计算最后位置新字符的条件。 最后一个字符的计算,逆序存储算法的选择。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1