计算机三级数据库技术上机考试试题八(附答案)
来源:优易学  2010-1-20 17:30:06   【优易学:中国教育考试门户网】   资料下载   IT书店

函数Rdata()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组string中,请编写函数CharRight(),其功能是:以行为单位把字符串中的最后一个字符的ASCII值右移4位后加倒数第二个字符的ASCII值,得到最后一个新的字符;倒数第二个字符的ASCII值右移4位后加倒数第三个字符的ASCII值,得到倒数第二个新的字符;依此类推,一直处理到第二个字符;第一个字符的ASCII值加原最后一个字符的ASCII值,得到第一个新的字符。得到的新字符分别存放在原字符串对应的位置上,最后已处理的字符串仍按行重新存入字符串数组string中。最后调用函数Wdata(),把结果string输出到文件OUT.dat中。

原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。

注意:部分源程序已经给出。请勿改动主函数main()、读函数Rdata()和写函数Wdata()的内容。

#include <stdio.h>

#include <string.h>

#include <conio.h>

char string[50][80];

int maxline = 0;         /* 文章的总行数 */

int Rdata(void);

void Wdata(void);

void CharRight(void)

{

 

}

void main()

{    if (Rdata())

      {       printf("数据文件IN.dat不能打开!\n\007");

                return;

      }

      CharRight();

      Wdata();

}

int Rdata(void)

{    FILE  *fp;

      int  i = 0;

      char  *p;

      if ((fp = fopen("IN.dat", "r")) == NULL)

                return 1;

      while (fgets(string[i], 80, fp) != NULL)

      {       p = strchr(string[i], '\n');

                if (p)

                         *p = 0;

                i++;

      }

      maxline = i;

      fclose(fp);

      return 0;

}

void Wdata(void)

{    FILE  *fp;

      int  i;

      fp = fopen("OUT.dat", "w");

      for (i=0; i<maxline; i++)

      {       printf("%s\n", string[i]);

                fprintf(fp, "%s\n", string[i]);

      }

      fclose(fp);

}

试题答案及详解

【审题分析】分析题目可知,本题只要实现CharRight()函数的功能即可。CharRight()函数要实现的功能是:按“将字符的ASCII值右移4位并加上该字符前面的一个字符的ASCII值等到新的字符,然后存在原位”的替代关系,将字符串数组string中的字符全部替换。因此解答本题的关键在于读取字符串数组中的字符,然后转换成ASCII码值,最后进行替换运算。

【解题思路】这里我们通过for循环语句来实现读取字符串数组中的所有字符。当自变量i0递增到maxline时,就完成了对一篇文章每一行的扫描。对一行的字符串数组,首先利用字符串函数strlen求出字符串数组string[i]的长度输给变量strl,把字符串中的最后一个字符赋给ch;然后在for循环语句中当自变量jstrl-1递减到0时,对每一个字符的ASCII值右移4位,右移4位的字符与其前一个字符相加,两者的和仍然存入字符串数组元素string[i][j]中;最后替换第一个字符时将其ASCII值与ch相加,得到第一个新的字符。

【参考答案】

void CharRight(void)

{   int  i, j, strl;

     char  ch;

     for (i=0; i<maxline; i++)

     {     strl = strlen(string[i]);

            ch = string[i][strl-1];

            for (j=strl-1; j>0; j--)

            {     string[i][j] >>= 4;

                   string[i][j] += string[i][j-1];

            }

            string[i][0] += ch;

     }

}

【易错分析】字符的ASCII值右移4位,用表达式string[i][j] >>= 4表示。

【考点链接】字符的移位运算。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训