函数ReadDat()的功能是实现从文件IN100.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数CharConvA(),该函数的功能是:以行为单位把字符串的最后一个字符ASCII值右移4位后加最后第二个字符的ASCII值,得到最后一个新的字符

admin2010-01-11  25

问题 函数ReadDat()的功能是实现从文件IN100.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数CharConvA(),该函数的功能是:以行为单位把字符串的最后一个字符ASCII值右移4位后加最后第二个字符的ASCII值,得到最后一个新的字符,最后第二个字符的ASCII值右移4位后加最后第三个字符的ASCII值,得到最后第二个新的字符,以此类推一直处理到第二个字符,第一个字符的ASCII值加最后一个字符的ASCII值,得到第一个新的字符,得到的新字符分别存放在原字符串对应的位置上,把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT100.DAT中。
   注意;部分源程序已给出。
   原始文件存放的格式是:每行的宽度小于80个字符,含标点符号和空格。
   请勿改动主函数main()、读函数ReadDat()和写函数Wnh2Dat()的内容。
   试题程序:
   #include<stdio.h>
   #include<string.h>
   #include<conio.h>
   char xx[50][80];
   int maxline=0;
   int ReadDat();
   void WriteDat();

   void CharConvA(void)
   {

   }

   void main()
   {
      clrscr();
      if (ReadDat())
      {
          printf("数据文件IN100.DAT不能打开!\n\007");
          return;
      }
      CharConvA( )
      WriteDat();
   }

   int ReadDat(void)
   {
      FILE *fp;
      int i=0;
      char *P;
      if((fp=fopen("IN100.DAT","r"))==NULL)  return 1;
      while (fgets(xx,80,fp)!=NULL)
      {
         p=strchr(xx,’\n’);
         if (p) *p=0;
         i++;
      }
      maxline=i;
      fclose(fp);
      return 0;
   }

   void WriteDat()
   {
      FILE *fp;
      int i;
      clrscr();
      fp=fopen("OUT100.DAT","w");
      for(i=0;i<maxline;i++)
      {
         printf("%s\n",xx);
         fprintf(fp,"%s\n",xx);
      }
      fclose(fp);
   }

选项

答案void CharConvA(void) { int i,j,k,str; char ch; for(i=0;i<maxline;i++) { str=strlen(xx[i]); /*求出各行的总字符数*/ ch=xx[i][str-1]; /*将最后一个字符暂存入ch*/ for(j=str-1;j>0;j--) /*从最后一个字符开始,直到第二个字符*/ xx[i][j]=xx[i][j]>>4+xx[i][j-1]; /*当前字符ASCII值右移4位加前一个字符的ASCII值,得到新的当前字符*/ xx[i][0]+=ch; /第一个字符的ASCII值加最后一个字符的ASCII值,得到第一个新的字符*/ } }

解析 本题考查的知识点如下;
   (1)字符变量的整数运算。
   (2)使用循环实现对数组的访问。
   因为是以行为处理单位,所以要先求得每一行中字符的个数。在C语言中,字符量可参与任何整数运算,实际参与运算的是字符的ASCII码。这里可以直接将字符右移4位后相加,即可得到所求结果。使用循环结构依次对字符进行处理,第一个字符要单独处理。
转载请注明原文地址:https://jikaoti.com/ti/Wrc7FFFM
0

最新回复(0)