阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。 【说明】 以字符流形式读入一个文件,从文件中检索出6种C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或’\t’、’\n’结束的字符串。其中

admin2010-01-15  36

问题 阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。
   【说明】
   以字符流形式读入一个文件,从文件中检索出6种C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或’\t’、’\n’结束的字符串。其中6种关键字在程序中已经给出。
   【程序】
   #include <stdio.h>
   #include <stdlib.h>
   FILE *cp;
        char fname[20], buf[100];
   int NUM;
   struct key
   {     char word[10];
         int count;
   }keyword[]={ "if", 0, "char", 0, "int", 0,
          "else", 0, "while", 0, "return", 0};
   char *getword (FILE *fp)
   {    int i=0;
        char c;
        while((c=getc(fp))!= EOF &&(1));
        if(c==EOF)
             return (NULL);
        else
             buf[i++]=c;
        while((c=fgetc(fp))!=EOF && c!="&& c!=’\t’ && c!=’\n’ )
                 buf[i++]=c;
           buf=’\0’;
           return(buf);
   }
   void lookup(char *p)
   {    int i;
        char *q, *s;
        for(i=0; i<NUM; i++)
        {   q=(2);
            s=p;
            while(*s && (*s==*q))
            {  (3))
            if((4))
            {    keyword.count++;
                 break;
            }
       }
       return;
   }
   void main()
   {    int i;
        char *word;
        printf("lnput file name:");
        scanf("%s", fname);
        if((cp=fopen(fname, "r"))==NULL)
        {    printf("File open error: %s\n", fname);
             exit(0);
        }
        NUM=sizeof(keyword)/sizeof(struct key);
        while((5))
             lookup(word);
   fclose(cp);
   for(i=0;i<NUM;i++)
       printf("keyword:%-20s  count=%d\n",keyword.word,keyword.count);
   }

选项

答案(1)(c==’ ’||c==’\t’||c==’\n’) (2)&keyword[i].word[0] (3) s++; q++; (4) *s==*q (5)(word=getword(cp))!=NULL

解析 本题考查C语言对文件中字符串处理的相关知识。
   题目要求从文件中检索已经给出的6种C语言的关键字,并统计、输出每种关键字在文件中出现的次数。这需要我们将文件中的字符串与6种C语言的关键字匹配,如果匹配成功一次,则记录下相关的内容。
   从代码中我们可以分析出,函数getword()的主要功能是从文件中取出单个单词,并保存在数组buf[]中,第(1)空就在这个函数中,在文件中取单词时,首先要能区别单词的开始和结束标志。题目中规定单词是一个以空格或’\t’、’\n’,结束的字符串,再结合函数getword()的代码我们可以知道,此空应该填(c==’ ’||c==’\t’||c==’\n’)。
   函数lookup()是关键函数,其功能是匹配文件的字符串与C语言的关键字,并记录匹配结果。函数lookup()中的参数指针变量p是指向getword()的返回结果的。函数体中 for循环语句下面是分别用其不同的关键字做匹配,在匹配过程中,用指针变量q和s分别指向关键字字符串和文件字符串。因此,第(2)空处的作用是让指针变量q指向关键字字符串,因此,答案为&keyword.word[0]。第(3)空处的作用是让字符串能自动往后移动,因此,此空答案为s++;q++。第(4)空处是个条件判断语句,其下面的语句实现的功能是增加关键字出现次数,那么此句的功能应该是判断匹配是否成功,因此,第(4)空答案为*S==*q。
   第(5)空是在主函数中,主函数的功能是首先打开一个文件,打开文件后,应该调用getword()函数取单词,并调用lookup()函数让单词与关键字匹配,再输出结果。从代码来看,第(5)空处是一个循环的条件,循环的主体是调用lookup()函数。因此,此处的作用是是否取得单词。第(5)空答案为(word=getword(cp))!=NULL。
转载请注明原文地址:https://jikaoti.com/ti/EXW7FFFM
0

最新回复(0)