读下列程序说明和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程序,将应填入(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.●试题四阅读下列程序说明和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的剩余部分赋给cwhile(*a!=′\0′)if(*a!=*w){*(++w)=*a;a++;}else(6) ;if(*6!=′\0′)//如果字符串b还没有结束,则将b的剩余部分赋给cwhile(*b!=′\0′)if(*b!=*w){*(++w)=*b;b++;}elseb++;(7) ;}void strsort(char*s)//将字符串S中的字符排序{int i,j,n;char t,*w;W=S;for(n=0;*w!=′\0′;n++)//得到字符串长度nw++;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);}

更多“读下列程序说明和C程序,将应填入(n)处。 【程序说明】 该程序定义了两个子函数strsort和strmerge。它 ”相关问题
  • 第1题:

    阅读下列说明和程序,回答问题l至问题3.将答案填入答题纸的对应栏内。

    【说明】

    在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下程序,其中:

    【程序1】;实现两个变量的值的互换;

    【程序2】:完成某功能的C语言程序;

    【程序3】和【程序4】:是P、V操作的形式化定义,设S为信号量。在多道程序系

    统中,进程是并发执行的。这些进程间存在着不同的相互制约关系,主要表现为同步和

    互斥两个方面。信号量是解决进程间同步与互斥的有效方法。

    【程序1】

    【程序3】

    P操作的形式化定义

    P (S)

    {

    (1):

    If(2) {

    阻塞该进程;

    将该进程插入信号量S的等待队列

    }

    }

    【程序4】

    V操作的形式化定义:

    V(S)

    {

    (3)

    if(4) {

    从信号量s的等待队列中取出队首进程

    将其插入就绪队列:

    }

    }

    【问题1】(6分)

    执行【程序1】后,没有能够实现两个变量值的交换,为什么?请修改上述函数

    实现两个变量值的交换,要求函数无返回值,形式为:void swap(...)。请将答案填写在

    答题纸中对应的栏目。

    【问题2】(3分)

    请问【程序2】运行结果是什么?

    【问题3】(6分)

    请简述什么是临界资源?什么是临界区?

    请完成【程序3】和【程序4】的形式化定义,将应填入(n)处的内容写在答题纸

    的对应栏中。


    正确答案:
    分析本题考查嵌入式C/C++语言编程基础知识。【问题1】函数swap采用值传递,虽然将形参nl和n2交换了,但是并不影响到实参,所以执行【程序1】后,实参变量并没有完成数据交换。将值传递改成指针传递就可以了。对应的swap函数应修改如下:【问题3】在多道程序系统中,进程是并发执行的,这些进程之间存在着不同的相互制约关系。进程之间的这种制约关系来源于并发进程的合作以及对资源的共享。进程在运行过程中,一般会与其它进程共享资源,而有些资源的使用具有排他性。系统中的多个进程可以共享系统的各种资源,然而其中许多资源一次只能为一个进程所使用,通常把一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如打印机、绘图机等。除物理设备外,还有许多变量、数据等都可由若干进程所共享,它们也属于临界资源。进程中访问临界资源的那段代码称为临界区,也称为临界段。访问临界资源应遵循如下原则:①空闲让进(或有空即进):当没有进程处于临界区时,可以允许一个请求进入临界区的进程立即进入自己的临界区:②忙则等待(或无空则等):当已有进程进入其临界区时,其它试图进入临界区的进程必须等待;③有限等待:对要求访问临界资源的进程,应保证能在有限时间内进入自己的临界区;④让权等待:当进程不能进入自己的临界区时,应释放处理机。信号量是荷兰著名的计算机科学家Dijkstra于1965年提出的一个同步机制,其基本思想是在多个相互合作的进程之间使用简单的信号来同步。在操作系统中,信号量是表示资源的实体,除信号量的初值外,信号量的值仅能由P操作(又称Wait操作)和V操作(又称Signal操作)改变。设S为一个信号量.P(S)执行时主要完成:先执行S=S-I:若S0则进程继续运行;若s<o则阻塞改进程,并将它插入该信号量的等待队列中。v(s)执行时主要完成:先执行S=S+I:若s>o则进程继续执行;若S≤0则从该信号量等待队列中移出第一个进程.使其变为就绪状态并插入就绪队列,然后再返回原进程继续执行。P、V操作的形式化描述如下:P(S){S—IF(S<O){阻塞该进程,将该进程插入信号量s的等待队列;}}V(S){s++;IF(S<=0){从信号量S的等待队列中取出队首进程,将其插入就绪队列;}}试题五参考答案【问题1】两个变量不能交换值的原因:因为函数是传值的,函数形参值的交换,并不影响到实参的值的变化。正确的函数编写如下(下面只是范倒,变量名称不作要求):voidswap(int*pnl.int*pn2){inttmp=*pnl;*pnl=*pn2;*pn2=tmp;}【问题2】第一次输出:fun(5)=5第二次输出:fun(7)=13第三次输出:fun(9)=34【问题3]临界资源:一次只能使一个进程访问的资源称为临界资源临界区:进程中访问临界资源的那段代码称为临界区。(l)S-(2)S<0(3)S++(4)S<=0

  • 第2题:

    试题三(共 15 分)

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


    正确答案:

  • 第3题:

    函数子程序FJ求一组数的和:

    为了完整程序,在____处应填入:
    (A) 0.0 (B) s
    (C) X(N) (D)N


    答案:B
    解析:

  • 第4题:

    ●试题二

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

  • 第5题:

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