niusouti.com

●试题四阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。【程序说明】该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。【程序】#include<stdio.h>void strmerge(char*a,char*b,cha

题目

●试题四

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

【程序说明】

该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。

【程序】

#include<stdio.h>

void strmerge(char*a,char*b,char*c)//将字符串a,b合并到字符串c中

{

char t,*w;

w=c;

while( (1) )

{

//找到字符串a,b当前字符中较小的字符

if(*a<*b)

{

t=*a;

(2) ;

}

else if(*a>*b)

{

t=*b;

(3) ;

}

else//字符串a,b当前字符相等

{

t=*a;

a++;

b++;

}

if( (4) )//开始,可直接赋值

*w=t;

else if(t!=*w)

//如果a,b中较小的当前字符与c中当前字符不相等,才赋值 (5) ;

}

if(*a!=\′\0′)//如果字符串a还没有结束,则将a的剩余部分赋给c

while(*a!=′\0′)

if(*a!=*w)

{

*(++w)=*a;

a++;

}

else

(6) ;

if(*6!=′\0′)//如果字符串b还没有结束,则将b的剩余部分赋给c

while(*b!=′\0′)

if(*b!=*w)

{

*(++w)=*b;

b++;

}

else

b++;

(7) ;

}

void strsort(char*s)//将字符串S中的字符排序

{

int i,j,n;

char t,*w;

W=S;

for(n=0;*w!=′\0′;n++)//得到字符串长度n

w++;

for(i=0;i<n-1;i++)//对字符串s进行排序,按字母先后顺序

for(j=i+1;j<n;j++)

if( (8) )

{

t=s[i];s[i]=s[j]; (9) ;

}

}

void main()

{

char s1[100],s2[100],s3[100];printf("\nPlease,input the first string:");

scanf("%s",s1);

printf("\nPlease input the second string:");

scanf("%s",s2);

strsort(s1);//将字符串s1排序

strsort(s2);//将字符串s2排序

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

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

s3[0]=′\0′;//字符串s3的第一个字符先置′\0′结束标志

(10) //将s1和s2合并,按照字母顺序排列,

//且要删去相同字符,存入s3中

printf("%s",s3);

}


相似考题
参考答案和解析
正确答案:

●试题四

【答案】(1)(*a!=′\0)&(*b!=′\0)(2)a++

(3)b++(4)*w==′\0(5)*(++w)=t(6)a++

(7)*(++w)=′\0(8)s[i]>s[j]  (9)s[j]=t(10)strmerge(s1s2s3)

【解析】根据题意,对字符串的处理分为三步:第一步是从键盘上输入两个字符串;第二步是将两个字符串分别排序;第三步是将字符串合并;第四步是显示处理结果。

第一步和第四步容易实现,关键是第二步和第三步的处理,下面分别加以说明。

字符串排序是指将一个字符串中各个字符按照ASCⅡ码值的大小排序。例如,字符串"Beijing"由小到大的排序结果应该是:"Bejiign"。排序算法很多,第二个例子,我们就要介绍快速排序算法。在这里使用简单的冒泡排序算法:即将字符串中的每一个字符一个个进行比较,找出最小的字符,然后再在剩下的字符中找最小的字符。例如,字符"Beijing"的排序过程如下:

第一次将字符"Beijing"中的每一个字符:′B′、′e′、′i′、′j′、′i′、′n′、′g′进行比较,找到最小的字符′B′。

第二次在剩下的字符′e′、′i′、′j′、′i′、′n′、′g′中,找到最小的字符′e′。

……

第三次在剩下的字符′j′、′i′、′n′、′g′中,找到最小的字符′j′。

第三步是合并字符串,合并后的字符串仍然由小到大排序。由于待合并的两个字符串已经排好序。假定两个排好序的字符串分别为AB,合并后的字符串为C,要使待合并后的字符串仍然由小到大排序,可采取下述步骤:

1.从前往后取A中的字符,并按从前往后的顺序与B中的字符比较,若A中的字符较小,则将该字符存入C,并移到A的下一个字符,继续与B中的字符比较。

2.A中的字符较大,则将B中的字符存入C,并移到B的下一个字符,继续与A中的字符比较。

3.AB中的字符相等,则将AB中的字符存入C,并将AB均移到下一个字符。

4.AB字符串到达末尾,则将BA的剩余部分加到字符串C中。

需要注意的是:ABC三个字符串均可以用字符数组来表示,C数组的长度不能小于AB两数组的长度之和。另外,判别字符串是否结尾的方法是:从AB中取出的字符是否为′\0′,所有字符串都是以′\0′结尾的。

 

更多“●试题四 阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。 【程序说明】 该 ”相关问题
  • 第1题:

    阅读下列程序说明和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优点:循环的效率高;缺点:程序不简洁。

  • 第2题:

    ●试题二

    阅读下列函数说明和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′。

  • 第3题:

    ()阅读下列说明和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)。

  • 第4题:

    阅读下列程序说明和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)接收下一个输入。

  • 第5题:

    试题三(共 15 分)

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


    正确答案:

  • 第6题:

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






    答案:
    解析: