阅读以下说明和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;}key

题目

阅读以下说明和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[i]='\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[i].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[i].word,keyword[i].count);

}


相似考题
参考答案和解析
正确答案:(1)(c==' '||c=='\t'||c=='\n') (2)&keyword[i].word[0] (3) s++; q++; (4) *s==*q (5)(word=getword(cp))!=NULL
(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[i].word[0]。第(3)空处的作用是让字符串能自动往后移动,因此,此空答案为s++;q++。第(4)空处是个条件判断语句,其下面的语句实现的功能是增加关键字出现次数,那么此句的功能应该是判断匹配是否成功,因此,第(4)空答案为*S==*q。
第(5)空是在主函数中,主函数的功能是首先打开一个文件,打开文件后,应该调用getword()函数取单词,并调用lookup()函数让单词与关键字匹配,再输出结果。从代码来看,第(5)空处是一个循环的条件,循环的主体是调用lookup()函数。因此,此处的作用是是否取得单词。第(5)空答案为(word=getword(cp))!=NULL。
更多“阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。 【说明】 以字符流形式读入一个文件, ”相关问题
  • 第1题:

    阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。

    【程序】

    include < stdio. h >

    main( )

    { FILE * fp;

    char str[100]; int i=0;

    if((fp=fopen("text.txt"(1))) ==NULL)

    { printf("can't open this file. \n") ;exit(0) ;}

    printf(" input astring: \n" ); gest(str);

    while( str[i] )

    { if(str[i] >='a' && str[i] <='z')

    str[i]=(2);

    fputc(str[i],(3));

    i++;

    }

    fclose(fp);

    fp=fopen(" test.txt",(4));

    fgets(str, 100, fp);

    printf("%s\n" ,str);

    (5);

    }


    正确答案:(1)W (2)str[i]-'a'+'A' (3)fp (4)r (5)fclose(fp)
    (1)W (2)str[i]-'a'+'A' (3)fp (4)r (5)fclose(fp) 解析:程序运行后,首先打开文件test.txt用于写入,因此(1)空填w。
    程序从键盘读入字符串到变量str中,对str中每个字符,如是小写字母,则将其转换成大写字母。(2)空是小写字母转换大写字母的操作。(3)空是将str中的字符写入文件text.txt中。
    str中所有字符处理完后,关闭文件test.txt(对应语句是fclose (fp)),然后重新以读方式打开,因此(4)空填r,将test.txt中的内容读到str中并显示输出后,关闭文件test.txt,即(5)空填fclose(fp)。

  • 第2题:

    阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    [说明]

    完成以下中序线索化二叉树的算法。

    [函数]

    Typedef int datatype;

    Typedef struct node {

    Int ltag, rtag;

    Datatype data;

    *lchild,* rchild;

    }bithptr;

    bithptr pre;

    void inthread ( p );

    {if

    {inthread ( p->lchild );

    if ( p->lchild==unll ) (1);

    if ( P->RCHILD=NULL) p->rtag=1;

    if (2)

    {if (3) pre->rchild=p;

    if ( p->1tag==1 )(4);

    }

    INTHREAD ( P->RCHILD );

    (5);

    }

    }


    正确答案:(1) P->LTAG=0 (2) (PRE) (3) (PRE->RTAG==1) (4) P->LCHILD=PRE (5) PRE=P
    (1) P->LTAG=0 (2) (PRE) (3) (PRE->RTAG==1) (4) P->LCHILD=PRE (5) PRE=P

  • 第3题:

    阅读下列说明和流程图,将应填入(n)的字句写在对应栏内。

    【说明】

    下列流程图(如图4所示)用泰勒(Taylor)展开式

    sinx=x-x3/3!+x5/5!-x7/7!+…+(-1)n×x2n+1/(2n+1)!+…

    【流程图】

    计算并打印sinx的近似值。其中用ε(>0)表示误差要求。


    正确答案:(1)x*x (2)x->t (3)│t│:ε (4)s+2->s (5)(-1) * t* x2/(s* (s-1))
    (1)x*x (2)x->t (3)│t│:ε (4)s+2->s (5)(-1) * t* x2/(s* (s-1)) 解析:该题的关键是搞清楚几个变量的含义。很显然变量t是用来保存多项式各项的值,变量s和变量x2的作用是什么呢?从流程图的功能上看,需要计算11、3!、5!,……,又从变量s的初值置为1可知,变量s主要用来计算这此数的阶乘的,但没有其他变量用于整数自增,这样就以判断s用来存储奇数的,即s值依次为1、3、5,……。但x2的功能还不明确,现在可以不用管它。
    (2)空的作用是给t赋初值,即给它多项式的第一项,因此应填写“x->t”。(3)空处需填写循环条件,显然当t的绝对值小于ε(>0)就表示已经达到误差要求,因此(3)空应填入“│t│:ε”。由变量s的功能可知,(4)空应当实现变量s的增加,因此(4)空应填入“s+2->s”。 (5)空应当是求多项式下一项的值,根据多项式连续两项的关系可知,当前一项为t时,后一项的值为(-1)*t*x*x/(s*(s-1))。但这样的话,每次循环都需要计算一次x*x,计算效率受到影响,联想到变量x2还没用,这时就可以判断x2就是用来存储x*x的值,使得每次循环者少进行一次乘法运算。因此(1)空处应填入“x*x”,(5)空处应填入“(-1)*t*x2/(s*(s-1))”。

  • 第4题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【说明】

    给定函数fun的功能是:将从键盘上输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。

    【函数】

    int fun(char *c,int status)

    {

    if((1)=='')

    return 1;

    else

    {

    if((2)&&(3)&&(4))

    (5)='A'-'a';

    return 0;

    }

    }

    main()

    {

    int flag=1;

    char ch;

    printf("请输入一字符串,用点号结束输入!\n");

    do {

    ch=getchar();

    flag=fun(&ch,flag);

    putchar(ch);

    }while(ch!='.');

    printf("\n");

    }


    正确答案:(1)*c (2)status (3)*c='z' (4)*c>='a' (5)*c+
    (1)*c (2)status (3)*c='z' (4)*c>='a' (5)*c+ 解析:本题考查在C语言中对字符串的处理。
    题目要求程序将从键盘上输入的每个单词的第一个字母转换为大写字母,而输入的各单词必须用空格隔开,用“.”结束输入。要实现这个功能,关键之一在于如何取出单词中的第一个字母,关键之二是如何实现大小写字母的转换。
    第(1)空是一个条件判断语句的条件,如果条件成立,则返回1,而从程序中可以看出,此条件判断语句是判断当前取到的字符是否等于空格字符。从主函数中可以看到,每次在调用功能函数fun()前都从输入的字符串中取出一个字符,并存放在变量ch中,而在调用函数时是将变量ch的地址传递给了指针变量c,因此此空的答案为*c。
    第(2)空、第(3)空和第(4)空应该结合起来看,它们都是条件判断语句的条件,这个条件判断语句下面的程序是将一个小写字母改变成一个大写字母,根据题目要求,此条件判断语句的条件应该是判断当前取到的字母是一个单词的第一个字母且是一个小写字母,再结合主函数来看,我们不难发现单词的第一个字母用一个标记变量flag标识,如果是第一个字母,这个标记变量flag的值为1,否则为0。要判断一个字母是否是小写字母,应该判断其ASCⅡ码值是否在a与z的ASCⅡ码值之间。所以这3个空的答案应该分别为status、*c='z'、*c>='a'。
    第(5)空是在上面条件成立的情况下执行的一条语句,条件成立我们在上面已经分析过了,表明当前取到的字符是一个单词的第一个字母且是小写字母,此空所在语句的任务是将小写字母变成大写字母,根据上面的分析,因此可以得到此空答案为*c+。

  • 第5题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【程序2.1说明】

    求所有满足如下条件的三位数:它除以11得的商等于它各位数字的平方和。例如 550,除以11商为50,50=52+52+02。

    【程序2.1】

    void main()

    {

    int i, j,n,s;

    for(i=100;i<=999;i++)

    {

    n=i;

    j=n/11;

    s=0;

    while((1))

    {

    (2)

    n/=10;

    }

    if((3))

    printf("%d\t",i);

    }

    }

    【程序2.2说明】

    本程序输入一字符串,将其中的大写字母改变成小写字母。

    【程序2.2】

    void main()

    {

    int i=0;

    char s[120];

    scanf("%s",s);

    while((4))

    {

    if((5))

    s[i]=s[i]- 'A'+'a';

    i++;

    }

    printf("%s\n",s);

    }


    正确答案:(1)n (2)s=s+(n%10)*(n%10); (3)j==s (4)s[i] (5)s[i]>='A'&&s[i]='Z'
    (1)n (2)s=s+(n%10)*(n%10); (3)j==s (4)s[i] (5)s[i]>='A'&&s[i]='Z' 解析:本题考查C语言中一些运算的实现。
    在程序2.1中要求求出满足如下条件的所有三位数:它除以11得的商等于它各位数字的平方和。要想求出所有结果,我们应该对每个三位数进行计算来判断它是否符合题目中的要求,只有在除以11的商等于各位数字的平方和时,才是我们要求的数。
    有了上述分析后,我们再来看程序2.1的代码,代码中首先声明了几个临时变量 i,j,n,s。接下来是一个循环,其目的是对从100到999的所有三位数来进行运算。再接下来的代码是将当前的这个三位数存放在变量n中,将除以11得到的商存放在i中。
    第(1)空所在的位置是循环的判断条件,根据我们上面的分析和整个程序代码来看,这个循环应该是用来计算三位数中各位数字的平方和用的,再看循环中语句n/=10,其作用是将n的值除以10,因为n是整型变量,保存数据时是直接去除小数点后面的数而只保留前面的整数部分,这个操作其本质是对数字降位,去除最低位(个位)。在对其进行此操作前应该对数字中的最低位进行求平方计算,这也应该是第(2)空的任务,要求个位数的方法是n%10,因此,第(2)空答案应该是“s=s+(n%10)*(n%10)”。第(1)空用来判断数n在变化后是否还有值,答案为n。
    第(3)空所在的位置是条件选择语句的条件,如果此条件成立,就输出变量i的值, i中存放的是当前参与计算的三位数,只有满足除以11得的商等于它各位数字的平方和的三位数才能被输出,那么条件选择语句中的条件应该是判断除以11得的商是否等于它各位数字的平方和。因此,第(3)空的答案为i==s。
    在程序2.2中要求将输入的一字符串中的大写字母改变成小写字母,那么我们首先要了解C语言中大小写字母的转换规则。在C语言中字母的运算其实是字母对应的 ASCII码码值的运算,其中小写字母a对应的ASCII码值为97,a后面的小写字母的ASCII码值依次增加1,而大写字母A的ASCII码值为65,A后面的大写ASCII码值也依次增加。这样,我们就知道了小写字母比对应的大写字母的ASCII码值大32,在将小写字母转化为大写字母时,我们只要相应地将小写字母的ASCII码值减去32或加上32的相反数即可。
    下面,我们来看程序2.2的代码,在代码中,声明了一个长度为120的字符型数组 S存放输入的字符串,下面有一个循环语句,第(4)空是循环语句的循环条件,结合整个程序,我们可以知道,循环语句要实现字符串中大写字母改变成小写字母的功能,所以循环的条件应该是判断在操作时是否取到了字符,而字符是存放在数组中的,因此,此空答案应该是“s[i]”。第(5)空是一个条件选择语句的条件,如果条件成立就执行将大写字母改变成小写字母操作,因此,是判断取到的字符是否为大写字母,所以此空答案为s[i]>='A'&&s[i]='Z'。

  • 第6题:

    阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。

    【说明】

    阅读下面几段C++程序回答相应问题。

    比较下面两段程序的优缺点。

    ①for (i=0; i<N; i++ )

    {

    if (condition)

    //DoSomething

    else

    //DoOtherthing

    }

    ②if (condition) {

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

    //DoSomething

    }else {

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

    //DoOtherthing

    }


    正确答案:程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断并且程序无法循环“流水”作业使得编译器无法对循环进行优化处理降低了效率。 程序2优点:循环的效率高;缺点:程序不简洁。
    程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断,并且程序无法循环“流水”作业,使得编译器无法对循环进行优化处理,降低了效率。 程序2优点:循环的效率高;缺点:程序不简洁。

  • 第7题:

    阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。

    [说明]

    下面的流程图用于计算一个英文句子中最长单词的长度(即单词中字母个数)MAX。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。

    [流程图]


    正确答案:(1)MAX←0 (2)←L+1 (3)MAX←L (4)≠ (5)L←0
    (1)MAX←0 (2)←L+1 (3)MAX←L (4)≠ (5)L←0 解析:本题用到的三个变量及其作用分别为:A,存放输入的一个字符;MAX,存放当前为止最长单词的长度;L,存放当前单同的长度。
    (1)使用变量MAX应先赋予初值,由上下文知其初值为0;
    (2)读取当前单词时,每读人一个字母,单词长度值L应增1;
    (3)当前单词长度L比MAX时,应更新MAX的值;
    (4)若当前字符不是句点,应当继续读取字符;
    (5)读取下一个单词前,应当重置L的值。

  • 第8题:

    ●试题二

    阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    该程序运行后,输出下面的数字金字塔

    【程序】

    include<stdio.h>

    main ()

    {char max,next;

    int i;

    for(max=′1′;max<=′9′;max++)

    {for(i=1;i<=20- (1) ;++i)

    printf(" ");

    for(next= (2) ;next<= (3) ;next++)

    printf("%c",next);

    for(next= (4) ;next>= (5) ;next--)

    printf("%c",next);

    printf("\n");

    }

    }


    正确答案:
    ●试题二【答案】(1)(max-′0′)(2)′1′(3)max(4)max-1(5)′1′【解析】该程序共有9行输出,即循环控制变量max的值是从1~9。每行输出分3部分,先用循环for语句输出左边空白,(1)空填"(max-′0′)";再用循环输出从1到max-′0′的显示数字,即(2)空和(3)空分别填1和max;最后输出从max-′1′~1的显示数字,即(4)空和(5)空分别填和max-1和′1′。

  • 第9题:

    图2-1是基于软交换的网络分层模型。请将选项应填入(n)处的字句写在答题纸对应的解答栏内。


    正确答案:
    (1)业务/应用层
    (2)控制层
    (3)接入层
    (4)媒体网关

  • 第10题:

    ()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]下面程序是一个带参数的主函数,其功能是显示在命令行中输入的文本文件内容。[C语言函数]#include"stdio.h"main(argc,argv) int argc; char *argv[]; { (1) ; if((fp=fopen(argv[1],”r’’))== (2) ) { printf(”file not open!\n”);exit(0);} while( (3) ) putchar( (4) ); (5); }


    正确答案:()
    (1)FILE *fp; (2)NULL  (3)!feof(fp)  (4)fgetc(fp)   (5)fclose(fp)
    从程序功能来看,程序中需要用到文件型指针变量中,而主函数体没有定义,所以(1)应该填写的是“FILE *fp;”。接下来的语句是标准的打开只读文本文件的语句,显示的是文件没打开,说明文件名不存在,也就是为“NULL”。接着的while循环语句中有两处空白。前一个空白是控制循环的条件,从程序功能来看,要将文本文件中的所有字符显示出来,这儿当然只能填写“不是文件尾则继续循环”,具体说,需要填写的是“!feof(fp)”。(4)出现在循环体中的语句中,该循环体的功能是从fp指向的文本文件中读取单个字符并显示在屏幕上,此处使用的是putchar函数,该函数的功能是将形参对应的字符显示在屏幕上,所以该处的空白就是要显示的字符,这个字符必须是从文本文件中读取的单个字符,完成这项工作的可以利用fgetc()函数,所以(4)填写的是“fgetc(fp)”。最后一句应当是关闭文件,所以(5)应填fclose(fp)。

  • 第11题:

    阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。

    【C++代码】 #include using namespace std; class invoice{ public: (1){ cout<<"This is the content of the invoice!"<

    答案:
    解析:
    (1) virtual void printInvoice() (2) ticket->printInvoice() (3) Decorator::printInvoice() (4) Decorator::printInvoice() (5) &a
    【解析】

    试题分析
    1.Invoice类下,义虛函数,按类图,函数名是printInvoice
    2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice
    3.这部分填写发票的抬头,看类图应该实现函数printInvoice ,Decorator装饰模式使用该方法
    4.这部分是发票的脚注,看类图应该实现函数printlnvoice,Decorator装饰模式使用该方法
    5.FootDecorator a(NULL) ;脚步的装饰参数是a,调用a参数,

  • 第12题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。



    答案:
    解析:
    1: void update()2: Observer3: obs.update()4: Subject5: Attach(this)

  • 第13题:

    阅读以下说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下程序为求行列式X(5,5)的值S。

    【Visual Basic代码】

    Private Function col ( byval x ( 5,5 ) as integer ) as long

    dim fesult as long

    dim temp as long

    dim I as integer

    dim j as integer

    dim k as imeger

    result = 0

    for I = to 5

    (1)

    for j = 1 to 5

    if I+j>6 then

    k= ( 1+j ) mod 5

    else

    k=1

    endif

    temp=temp*x ( k,j )

    (2)

    result=(3)

    (4)

    (5)

    End function


    正确答案:(1)temp=1 (2) next I (3) result+temp (4) next I (5) col=result
    (1)temp=1 (2) next I (3) result+temp (4) next I (5) col=result

  • 第14题:

    阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。

    [说明]

    设学生某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图读取该文件,统计出全部成绩中的最高分max和最低分min。


    正确答案:(1) max←a (2) min←a (3) a="." (4) a>max或amax或maxa或max≤a (5) amin或a≤min或min>a或mina
    (1) max←a (2) min←a (3) a="." (4) a>max或amax或maxa或max≤a (5) amin或a≤min或min>a或mina 解析:本题用到的三个变量及其作用分别为:a,存放读入的一行数据;max存放最高分;min存放最低分。算法首先读入文件的第一行数据a,若a为文件结束符“.”,则算法提前结束;否则为max和min赋初值a,循环读入文件其余部分,直至文件末尾。循环过程中,当某行数据a大于max时,更新max的值;当某行数据a小于min时,更新min的值。

  • 第15题:

    阅读以下说明和c++码,将应填入(n)处的字名写在的对应栏内。

    [说明] 以下函数完成求表达式

    的值,请填空使之完成此功能。

    float sum ( float x )

    { float s=0.0;

    int sign = 1;

    (1);

    for(inti=1;(2); i+ +)

    {

    t=t*x;

    s=s+(3);

    sign = - sign;

    (4);

    }


    正确答案:float t =1.0; i< =100 - sign * i/( t + sign* i) return s
    float t =1.0; i< =100 - sign * i/( t + sign* i) return s

  • 第16题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【说明】

    编写程序,生成一个新文本文件,它由一个已知文本文件的所有偶数行组成。要求已知文本文件名和新文本文件名均从键盘输入。请填空完善程序。

    【C语言程序】

    include<stdio.h>

    main()

    {

    FILE *oldf,*newf;

    char ch,fname[20];

    int i;

    do{

    printf("Enter name of existed text file to be read:");

    scanf("%s",fname);

    if((oldf=fopen(fname,"r"))==NULL)

    printf("File %s can't open!\n",fname);

    }while(oldf==NULL);

    do{

    printf("Enter mane of new text file to be written:");

    scanf("%s",fname);

    if(((1)==NULL)

    printf("File %s can't open!\n",fname);

    }while((2));

    i=1;

    while(!feof(oldf))

    {

    while((ch=fgetc(oldf))!=(3))

    {

    if(i%2==(4))

    fputc(ch,newf);

    }

    fputc('\n',newf);

    (5);

    }

    fclose(oldf);

    fclose(newf);

    }


    正确答案:(1)newf=fopen(fname"w") (2)newf==NULL (3)'\n' (4)0 (5)i=i+1(或i++)
    (1)newf=fopen(fname,"w") (2)newf==NULL (3)'\n' (4)0 (5)i=i+1(或i++) 解析:本题考查用C语言实现对文本文件的操作。
    题目要求程序生成一个新文本文件,它的内容由一个已知文本文件的所有偶数行组成,而已知文本文件名和新文本文件名均从键盘输入,题目的关键在于对文件的操作。下面来具体分析代码。
    第(1)空在一个循环体中,是条件判断语句的条件,此循环的作用我们不难从程序中看出,是用来打开新文本文件的,在C语言中要打开一个文件应该用函数fopen(),它的两个参数分别是其文件名和对文件操作的属性,根据题目意思,对这个文件的操作只有写操作。因此,此空答案为newf=fopen(fname,"w")。
    第(2)空是一个循环的判断条件,上面我们已经分析了该循环的作用,是用来打开新文本文件的,结合第一个文件的打开程序,我们很容易发现此空的答案为newf==NULL。
    第(3)空是一个二重循环第二层循环的判断条件,这个二重循环的作用是用来实现将已知文本文件的所有偶数行内容写到新文件中,这里需要注意每次取到的内容都是偶数行的内容,在对已知文本文件进行取内容时是逐行取的,那么条件判断语句是用来判断是否取完了一行内容,在C语言中,一般用换行符'\n'来标志一行的结束,因此此空答案为'\n'。
    第(4)空是循环下条件判断语句的条件,根据题目要求可以知道每次对新文件进行写的数据都是已知文本文件的偶数行的内容,那么在写之前应该首先判断内容是否是偶数行的内容。此空所在语句就是用来实现这一功能的,而偶数对2取余的结果都为0,因此此空答案为0。
    第(5)空是二重循环的最后一条语句,在上面的空中我们已经分析到,在对新文件进行写内容时要首先判断其内容所在行是否为偶数行,而当前行号存放在变量i中,整个程序都没有改变变量i的值,那么此空应该是用来改变变量i的值的,因此此空答案为i++。

  • 第17题:

    阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    下面程序完成从键盘读入一个字符串,然后采用parseInt方法将其转换为一个相应的整数。

    import java.io.*;

    public class testThrows{

    public static (1) readString() (2) IOException{

    int ch;

    String r="";

    boolean done=false;

    while((3)){

    ch=System.in.read();

    if(ch<0 || ch=0xd) //处理回车符中第一个符号

    done=true;

    else

    r=r+(char)ch;

    }

    return r;

    }

    public static void main(Stling args[]){

    String str;

    (4) {

    str=readString();

    } (5) (IOException e){

    System.out.println("error");

    return;

    }

    System.out.println("input integer: "+Integer.parselnt(str));

    }

    }


    正确答案:(1)String (2)throws (3)!done (4)try (5)catch
    (1)String (2)throws (3)!done (4)try (5)catch 解析:本题考查Java中字符串的处理。
    题目要求程序完成从键盘读入一个字符串,然后采用parseInt方法将其转换为一个相应的整数。这里的关键是如何将一个字符串转换为一个相应的整数,而这个过程在 parseInt方法中实现了,我们要做的工作主要是如何对字符串进行操作。下面来具体分析程序。
    第(1)空在类testThrows下面,从程序中不难看出,此空的作用是定义函数readString()的返回类型,再从程序后面的语句return r可以知道这个函数返回的是变量r的值,而变量r是一个字符串型的变量,因此此空答案为String。
    第(2)空也是函数readString()定义的内容,从此空后面的内容不难推断出,此处是要显式生成异常来处理程序中的异常。而在Java中,一般用关键字throws来显式生成异常,因此此空答案为throws。
    第(3)空很明显是循环的判断条件,从程序中可以看出,这个循环是用来对输入的字符串进行相关的处理的,如果一直可以取到有效字符,循环肯定不会结束,而判断是否取到有效字符,是通过布尔变量done来实现的,那么只要布尔变量done的值为真循环则结束,因此此空答案为!done。
    第(4)空与第(5)空需要结合起来看,它们都在入口函数中,如果我们对Java中的异常处理非常了解的话,这两个空应该很简单,从第(5)空后面的(IOException e)很明显地看出是要处理异常操作。在Java中,一般try{}与catch{}结合起来使用,如果在 try{}中产生了异常,那么在catch{}中对异常进行处理。因此这两个空的答案分别为try和catch。

  • 第18题:

    阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。

    [函数2.1说明]

    下面程序的功能是计算x和y的最小公倍数。

    [函数2.1]

    main()

    { int m,n,d,r;

    seanf("%d %d",&m,&n);

    if(m<n) {r=m;m=n;n=r;}

    (1);

    while (d%n! =0) (2);

    printf("%d\n",d);

    }

    [函数2.2说明]

    下述程序接收键盘输入,直到句点“.”时结束。输入的字符被原样输出,但连续的空格输入将转换成一个空格。

    [函数2.2]

    include <stdio.h>

    main()

    { char c,preChar='\0';

    c = getchar();

    while(c! = '.'){

    if((3)) putchar(c);

    else if(preChar! =' ') putchar(c);

    (4);

    c=(5);

    }

    }


    正确答案:(1)d=m (2) d+=m或d=d+m (3) c!=‘’ (4) preChar=c (5) getchar()
    (1)d=m (2) d+=m或d=d+m (3) c!=‘’ (4) preChar=c (5) getchar() 解析:(1)下文使用了变量d,因此需在此初始化,由下面循环的条件“d%n!=0”知初值不能是n,因此必为m;
    (2)此处while循环生成最小公倍数d,其终止条件是n整除d,因此循环过程中需要保证m整除d并且d尽可能地小,于是d应以m为增量递增;
    (3)当输入的字符非空格时,原样输出;
    (4)程序中变量preChar用于记录上一次读入的字符,循环过程中应不断更新其值;
    (5)接收下一个输入。

  • 第19题:

    阅读下列说明和流程图,将应填入(n)处的语句写在对应栏内。

    【说明】

    设学生(学生数少于50人)某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图用于读取该文件,并把全部成绩从高到低排序到数组B[50]中。

    【流程图】


    正确答案:(1)B[0]←a (2)i←0 (3)a="." (4)aB[j] (5)j--
    (1)B[0]←a (2)i←0 (3)a="." (4)aB[j] (5)j-- 解析:本题考查用程序流程图来描述排序。
    题目要求将文件中学生的成绩读出,并把全部成绩从高到低排序到数组B[50]中。这里面涉及两个问题,第一是从文件中读数,文件中的数据是以单行句点“.”为结束符的,在未读到此符号前,应该将继续取数据。第二是排序,每取到一个学生的成绩都要与数组的学生成绩比较,按照从高到低的顺序在数组中找到合适的位置存放。下面来具体分析流程图。
    第(1)空在条件判断为假的情况下执行流程中,如果条件为假说明从文件中取到的数据是学生成绩。从程序流程图中可以看到,从文件中读的数据存放在变量a中,而此空是第一次取数据,应该存放数组B的第一个位置,因此此空答案为B[0]←a。
    第(2)空是紧接着第(1)空来的,在上面已经把从文件中读到的第一个数存放到了数组中,接下来应该处理数组的下标问题,从后面的流程中可以推断出变量i是存放数组当前下标的,而且没有初值,那么此空的任务应该是用来给变量i赋一个初值,而对数组的操作应该从头开始,因此此空答案为i←0。
    第(3)空是循环的判断条件,如果条件成立则结束,在这之前又对文件进行了一次读数,根据我们上面的分析只有在读到了结束符时程序才结束,那么此空肯定是判断从文件中读到的数据是否为结束符,因此此空答案为a="."?。
    第(4)空也是一个循环的判断条件,如果条件成立,则将取到的数存放到数组的当前下标位置;如果不成立,则循环找到合适的位置再存放。从这里我们不难推断出,流程图中是将从文件取到的成绩与当前数组中的最小成绩进行比较的,而当前数组中的最小成绩存放在位置j中,因此此空答案为aB[i]?。
    第(5)空在循环体中,这个循环的作用是为当前从文件中读到的成绩在已经排好序的数组元素中找到合适的位置,找到了就要插入,数组中的元素是按从大到小排列的,在查找合适位置时是从后往前依次比较,因此此空的任务应该是将数组的下标往前移动,所以此空答案为“i--”。

  • 第20题:

    试题三(共 15 分)

    阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。


    正确答案:

  • 第21题:

    (a)智能网概念模型中分布功能平面模型如下图所示,请根据此图将应填入(n)处的 字句写在答题纸的对应栏内。


    正确答案:
    (1)SMF(或业务管理功能)
    (2)SCEF(或业务生成功能)
    (3)SDF(或业务数据功能)
    (4)SCF(或业务控制功能)
    (5)SSF(或业务交换功能)
    (6)CCF(或呼叫控制功能)

  • 第22题:

    图6-1是下一代网络的体系结构简图,请根据此简图将应填入(n)处的字句写在答题纸的对应栏内。


    正确答案:
    (1)业务平面
    (2)控制平面
    (3)传输平面
    (4)接入平面
    (5)SIP-TBICC
    (6)SIGTRAN
    (7)MGCP/H.248
    (8)H.323
    (9)SIP

  • 第23题:

    阅读下列说明和图,回答问题,将解答填入答题纸的对应栏内。
    阅读以下说明和C函数,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
    【说明1】
    函数deldigit(char *s) 的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再拷贝给s。
    【C函数】

    char *t = (char *)malloc( (1) ); /*申请串空间*/ int i, k = 0; if (!t) return; for(i = 0; i < strlen(s); i++)if ( !(*(s+i)>=’0’ && *(s+i)<=’9’) ) { t[k++] = (2) ;} (3) = ’\0’; /*设置串结束标志*/ strcpy(s,t);free(t);}

    【说明2】
    函数reverse(char *s, int len)的功能是用递归方式逆置长度为len的字符串s。例如,若串s的内容为"abcd",则逆置后其内容变为"dcba"。
    【C函数】

    void reverse(char *s, int len){ char ch; if ( (4) ) { ch = *s; *s = *(s+len-1); *(s+len-1) = ch; reverse( (5) ); }}


    答案:
    解析:
    (1)strlen(s)+1
    (2)*(s+i),或s[i]或其等价表示
    (3)*(t+k)或t[k] 或其等价表示
    (4)len>1 或len>=1 或其等价表示
    (5)s+1 len-2
    【解析】

    根据说明1,在函数deldigit(char*s)中需先申请一个与s等长的临时字符串空间并令t指向它,因此空(1)处应填入"strlen(s)+1",其中,加1的原因是函数strlen计算s所指向字符串的长度时,没有包含串结束标志字符"\0"。当然,申请比"strlen(s)+1"更大的存储区也可以,只是没有必要。
    由于需要将非数字字符按原来的顺序存入t所指向的存储区,所以空(2)处填入"s[i]",或其等价表示形式。
    最后在设置t所指向字符串的结束标志,即令t[k]='\0'.在这里,空(3)处的t[k]写为t[k++]也可以,而写为t[k+1]或t[++k]则不符合整个代码的处理逻辑。
    函数reverse(char*s,int len)的功能是用递归方式逆置长度为len的字符串s,其中以下代码实现了将s所指字符与串中最后一个字符交换的处理。
    Ch=*s; *s=*(s+len-1); *(s+len-1)=ch;

  • 第24题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析: