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

函数Rdata()实现从文件IN.dat中读取一篇英文文章存入到字符串数组string中,请编写ConvertCharD()函数,其功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变,最后把已处理的字符串仍按行重新存入字符串数组string中。最后调用函数Wdata(),把结果string输出到文件OUT.dat中。

例如,原文:Adb.Bcdza

abck.LLhj

结果:Aca.Bbcyz

zabj.LLgi

原始数据文件存放的格式是:每行的宽度均小于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 ConvertCharD(void)

{

 

}

void main()

{ if (Rdata())

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

            return;

   }

   ConvertCharD();

   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);

}

试题答案及详解

【审题分析】分析题目可知,本题只要实现ConvertCharD()函数的功能即可。ConvertCharD()要实现的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。最后把已处理的字符串仍按行重新存入字符串数组string中。因此解答本题的关键在于如何实现字符间的转换。

【解题思路】在for循环语中当自变量从0递增到maxline时,就完成了对一篇文章中每一行的字符进行判断。如果字符是a,就用字符z替换,否则如果字符是大于等于字符b,而小于等于字符zASCII码值,就对其ASCII码值减1

【知识拓展】字符间的转换可以通过字母的ASCII值来实现,字母的ASCII值比上一个字母的的ASCII1

【参考答案】

void ConvertCharD(void)

{ int  i;

  char  *pf;

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

  {     pf = string[i];

         while (*pf)

         {     if (*pf == 'a')

                       *pf = 'z';

                else if (*pf>='b' && *pf<='z')

                       *pf -= 1;

                pf++;

         }

  }

}

【易错分析】判断字符的范围是否大于等于字符b而小于等于字符z;对于字符a,要单独进行处理。

【考点链接】C语言的for循环语句;字符的ASCII码值减1,就是其上一个字符的ASCII码值。

责任编辑:小草

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