阅读以下函数: fun(char *s1,char *s2) { int i=0; while(s1[i]==s2[i]&&s2[i]!='\0')i++; return(s1[i]=='\0'&&s2[i]=='\0'); } 此函数的功能是( )。A.将s2所指字符串赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为

题目

阅读以下函数: fun(char *s1,char *s2) { int i=0; while(s1[i]==s2[i]&&s2[i]!='\0')i++; return(s1[i]=='\0'&&s2[i]=='\0'); } 此函数的功能是( )。

A.将s2所指字符串赋给s1

B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0


相似考题
更多“阅读以下函数:fun(char*s1,char*s2){inti=0; while(s1[i]==s2[i]&&s2[i]!='\0')i++; ret ”相关问题
  • 第1题:

    阅读以下函数 fun(char *sl,char *s2) { int i:0; while(sl[i]==s2[i]&&s2[i]!='\0') i++; return(sl[i]=='\0'&&s2[i]=='\0'); } 此函数的功能是

    A.将s2所指字符申赋给s1

    B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

    C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为o

    D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为o


    正确答案:C
    解析:在函数fun()中有两个字符型指针变量s1和s1,在函数中程序执行while循环,该循环退出条件有两个:一个是s1[i]!=s2[i](两个字符串不相等);第二个是sl[i]和s2[i]相等均为“\0”(两个字符串相等)。循环退出后,执行return语句,即两个字符串相等则返回1,不相等则返回0。所以,C选项为所选。

  • 第2题:

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

    【说明】

    本程序可以将字符串s1中出现的所有s2子串替换成s3,形成一个新串,但不破坏字符串s1。

    【代码】

    include<stdio.h>

    include<stdlib.h>

    include<string.h>

    char*replace(char *s1, char *s2,char *s3)

    { char *p, *q, *r, *s; int |2,|3, i=0;

    |2=strlen(s2);

    |3=strlen(s3);

    p=s1;

    while((p=strstr(p,s2))!=NULL)

    { i++; /* 统计s2串出现的次数*/

    (1);

    }

    i=(2);

    s=r=(char*)malloc(i); /*分配动态内存存放新字符串*/

    p=s1;

    while(1)

    { q=strstr(p, s2); /* s2串是否在s1中出现,q是首次出现的位置*/

    if(q!=NULL)

    { i=q-p;

    (3);

    r+=i;

    (4);

    r+=|3;

    p=q+|2; /*将指向s1串的指针移到s2子串出现的位置后,

    为下一次循环做好准备*/

    }

    else /*q为空,表示剩余的s1串中已经没有s2*/

    { (5);

    break; /*终止循环*/

    }

    }

    return(s); /*返回指向所形成的新串的指针*/

    }

    void main()

    { char *a="sabcababde", *b="ab", *c="efg", *d;

    d=replace(a, b, c); printf("result=%s\n", d); free(d);

    }


    正确答案:(1)p+=12 (2)strlen(s1)-i*12+i*13+1 (3)strncpy(rpi) (4)strcpy(rs3) (5)strcpy(rp)
    (1)p+=12 (2)strlen(s1)-i*12+i*13+1 (3)strncpy(r,p,i) (4)strcpy(r,s3) (5)strcpy(r,p) 解析:本题考查用C语言实现对字符串的操作。
    题目要求将字符串s1中出现的所有子串s2替换成s3,形成一个新串,但不破坏字符串s1。要不破坏字符串s1,只有用一个新串来存放处理结果;要用到新串,那么就需要重新分配空间。
    第(1)空在第一个循环体中,此循环体的作用在注释中已经给出,用来统计串s2在串s1中出现的次数,这里的统计变量已经给出,并将结果存放在统计变量i中,但每次统计成功后串s1的位置应该往后移动串s2的长度,由程序我们可以看出,串s1存放在指针变量p中,因此,指针变量p指的位置需要往后移动串s2的长度,而串s2的长度存放在变量12中。因此,此空答案为p+=12。
    第(2)空很明显是用来给变量i赋一个值,但根据s=r=(char*)malloc(i)语句我们可以推断出,当前变量i中存放的是新串的长度。而新串的长度应该等于串s1的长度减去串中x个串s2的长度,加上x个串s3的长度再加1,而在上面的循环中已经求出了串s2在串s1中出现的次数,结果存放在变量i中。因此,此空答案为strlen(sl)-i*12+i*13+1。
    第(3)空是在if(q !=NULL)成立的情况下运行的语句,而变量q指向的是s2在s1中首次出现的位置,如果条件成立,说明串s2在串s1中出现了,语句i=q-p用来表示出现的位置到s1开始位置的距离。在这些条件都清楚了后,应该往新的串中写字符了,首先写串s1的前i个字符,此空就是用来完成这个功能的,因此,此空答案为strncpy(r,p,i)。
    第(4)空是接着上一空而来的,在上面我们[分析]到,把串s1的前i个字符写入新串,那么在新串中接着要出现的应该是替换串s2的串s3,此空的任务应该是将串s3写入新串中,因此,此空答案为strcpy(r,s3)。
    第(5)空是在if(q !=NULL)不成立的情况下运行的语句,这说明串s2不在串s1中出现,在这种情况下,串应该不需要进行替换操作,而直接将串s1写入到新串中,此空的作用就是用来实现这个功能的,因此,此空答案为strcpy(r,p)。

  • 第3题:

    以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址

    #include <stdio.h>

    #include <string.h>

    char *scmp(char *s1, char *s2)

    { if(strcmp(s1,s2)<0)

    return(s1);

    else return(s2);

    }

    main( )

    { int i; char string[20], str[3][20];

    for(i=0;i<3;i++) gets(str[i]);

    strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/

    strcpy(string,scmp(string,str[2]));

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

    }

    若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为

    A.abcd

    B.abba

    C.abc

    D.abca


    正确答案:B
    解析:当第一次执行strcpy()函数时,把输入的前两个串中的较小者复制到string中,第二次调用strcpy()函数时,则是把前两者中的较小者与第三个串进行比较返回较小者,并复制到string中,故string存放了3个输入串中的最小者。

  • 第4题:

    以下程序的输出结果是______。includeincludefun(char*w,int n){ char t,*s

    以下程序的输出结果是______。 #include<stdio.h> #include<string.h> fun(char*w,int n) { char t,*s1,*s2; s1=w;s2=w+n-1; while(s1<s2) { t=*s1++; *s1=*s2-; *s2=t; } } main() { char*p; p="1234567"; fun(p,strlen(p)); puts(p); }

    A.1234567

    B.7654321

    C.1711717

    D.7177171


    正确答案:C
    解析:在子函数fun中,s1为字符串w的起始地址,s2为字符串的结束地址(字符'\0'除外),当执行循环结束循环, w="1711717"。

  • 第5题:

    阅读以下程序: include void main() { static int a[][3]={9,7,5,3,1,2,4,6,8}; int

    阅读以下程序:

    include<iostream.h>

    void main()

    {

    static int a[][3]={9,7,5,3,1,2,4,6,8};

    int i,j,s1=0,s2=0;

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

    for(j=0;j<3;j++)

    {

    if(i==j)s1=sl+a[i][j];

    if(i+j==2)s2=s2+a[i][j];

    }

    cout<<s1<<","<<s2<<endl;

    }

    则该程序的输出结果为【 】。


    正确答案:1810
    18,10

  • 第6题:

    下列的程序用来输出两个字符串前7个字符中对应相等的字符及其位置号,程序空白处应该填写的是( )。 #include<stdio.h> main() { Char sl[]="Chinese",s2[]="japnese"; int i; for(i=0;s1[i]!='\0'&&s2[i]!='\0';i++) if(s1[i]=s2[i]&&i<7) ____________________; }

    A.putchar(s2[i];putchar(i)

    B.puts(s1[i],i)

    C.printf("%c%d\n",s2[i],i)

    D.printf("%c",s1[i]);printf("%d\n",i)


    正确答案:C
    解析: putchar(s)的功能是把字符s输出到标准输出设备;puts(s1)是把s1指向的字符串输出到标准输出设备。

  • 第7题:

    阅读以下函数: fun(char*s1, char*s2) { int i=0; while(s1[i]==s2[i]&& s2[i]!='\0') i++; return(s1[i]==&& s2{i)!=='\0'); } 此函数的功能是( )。

    A.将s2所指字符串赋给s1

    B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

    C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

    D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0


    正确答案:C
    解析:在函数fun()中有两个字符型指针变量s1和s2,在函数中程序执行while循环,该循环退出条件有两个:一个是 s1[i]!=s2[i](两个字符串不相等);第二个是s1[i]和s2[i]相等均为\0(两个字符串相等)。循环退出后,执行return语句,即两个字符串相等则返回1,不相等则返回0。所以,C选项为所选。

  • 第8题:

    若已包括头文件<string.h>且已有定义char sl [18],s2={"ABCDE")和int i,现要将字符串”ABCDE”赋给sl,下列语句错误的是( )。

    A.strcpy(s1,s2)

    B.strcpy(s1,"ABCDE");

    C.sl="ABCDE";

    D.for(i=0;i<6;i++)sl[i]=s2[i]


    正确答案:C
    数组名sl是代表sl数组首地址的地址常量,因为“=”左边不能出现常量,所以s1="ABCDE"的方法是错误的。

  • 第9题:

    以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。 #include<string> char*scmp(char*s1,char*s2) { if(strcmp(s1,s2)<0) return(s1); else retrun(s2); } main() { int i;char string[20],str[3][20]; for(i=0;i<3;i+

    A.abcd

    B.abba

    C.abc

    D.abca


    正确答案:B

  • 第10题:

    有以下程序:include using namespace std;int main ( ){ char s1[10],s2[10]; char*p

    有以下程序: #include <iostream> using namespace std; int main ( ) { char s1[10],s2[10]; char *p=s1,*q=s2; cin>>s1>>s2; while (*p ! =' \0 ' ) p++; while (*q!='\0') *p++=*q++; *p='\0'; cout<<s1<<end1; return 0; }

    A.abcd0ghij

    B.abcd0ghij0

    C.abcd

    D.abcdghij


    正确答案:D
    解析:程序定义两个字符串指针p和q,并使指针分别指向字符串数组s1和s2。数组s1和s2通过输入的字符串赋初值。程序中第1个while语句,用来计算s1的长度,并把指针p移到数组s1的最后一个元素。第2个while语句,是将数组s2中的字符串合并到数组s1的后面。语句“*p'\0';”,是合并后的字符串s1的结束标志。所以最后s1中的字符串为abcdghij。

  • 第11题:

    下面程序的运行结果是______。 include include fun(char*w,int n) { char

    下面程序的运行结果是______。 #include<stdio.h> #include<string.h> fun(char*w,int n) { char t,*s1,*s2; s1=w;s2=w+n-1; while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t;} } main() { char*p; p="1234567"; fun(p,strlen(p)); puts(p); }

    A.7654321

    B.1714171

    C.1711717

    D.7177171


    正确答案:C

  • 第12题:

    以下程序的输出结果为( )。

    main( )

    { char s1[40]="country",s2[20]="side";

    int i=0,j=0;

    while(s1[i]!='\0') i++;

    while(s2[j]!='\0') s1[i++]=s2[j++];

    s1[i]=0;

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

    }

    A side

    B country

    C sidetry

    D countryside


    正确答案:D

  • 第13题:

    有以下程序并includeincludefun(char * w,int n){char t,*s1,*s2; s1=w;s2=

    有以下程序 并include<stdio.h> #include<string.h> fun(char * w,int n) { char t,*s1,*s2; s1=w; s2=w+n-1; while(s1<s2) { t=*s1++; * s1=*s2--; * s2=t; } } main() { char p[]="1234567"; fun(p,strlen(p)); puts(p); } 程序运行后的输出结果是( )

    A.1234567

    B.7654321

    C.1711717

    D.7177171


    正确答案:C

  • 第14题:

    对于下面的程序includeincludechar *scmp(char*s1,char*s2){if(strcmp(s1,

    对于下面的程序 #include<stdio.h> #include<string.h> char *scmp(char*s1,char*s2) { if(strcmp(s1,s2)<0)return(s1); else return(s2); } main() { int i:char string[20],sb[3][20]; for(i=0;i<3;i++)gets(str[i]); strcpy(string,scmp(str[0],str[1])); strcpy(string,scmp(string,str[21)); printf("%s\n",string); } 若运行时依次输入abcd、abba和abc三个字符串,则输出结果为______。

    A.abcd

    B.abba

    C.abc

    D.abca


    正确答案:B
    解析:本题自定义函数scrnp()的作用是比较字符串s1和s2的大小,如果s1s2,函数返回s1的值,否则返回s2的值。若运行时依次输入abcd、abba和abc三个字符串,执打strcpy(string,scmp(str[0],str[1]));后,string的值为abba,再执行strcpy(string,scmp(string,str[2]));,由于scmp(string,str[2])返回string的值abba,再拷贝到字符串数组string中,所以本题输出abba。

  • 第15题:

    以下程序中函数scmp功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。#includ<string. h>char *scmp(char *s1,char *s2){ if(strcmp(s1,s2)<0) return(s1); else return(s2);}main(){ int i;char string[20],str[3][20]; for(i=0;i<3;i++) gets(str[i]); strcpy(string,scmp(str[0],str[1])); //库函数 strcpy 对字符串进行复制 strcpy(string,scmp(stfing,str[2])); puts(string); }若运行时依次输入: abed、abba 和abc三个字符串,则输出结果为( )。

    A.abed

    B.abba

    C.abc

    D.abca


    正确答案:B

  • 第16题:

    对于下面的程序includeincludechar * scmp(char * s1,char * s2){if(strcm

    对于下面的程序 #include<stdio.h> #include<string.h> char * scmp(char * s1,char * s2) { if(strcmp(s1,s2)<0)return(s1); else return(s2); } main() { int i;char string[20],str[3][20]; for(i=0;i<3;i++)gets(str[i]); strcpy(string,scmp(str[0],str[1])); strcpy(string,scmp(string,str[2])); printf("%s\n",string); } 若运行时依次输入abcd、abba和abc三个字符串,则输出结果为 ______。

    A.abcd

    B.abba

    C.abc

    D.abca


    正确答案:B
    解析:本题自定义函数scmp()的作用是比较字符串s1和s2的大小,如果s1s2,函数返回s1的值,否则返回s2的值。若运行时依次输入abcd、abba和abc三个字符串,执行strcpy(string,scmp(str[0],str[1]));后,string的值为abba,再执行strcpy(string,scmp(string,str[2]));,由于scmp(stringstr[2])返回string的值abba,再拷贝到字符串数组string中,所以本题输出abba。

  • 第17题:

    以下程序的输出结果是 ______。includevoid main(){ char s1[]=”Hello”,s2[]="World

    以下程序的输出结果是 ______。 #include<iostream.h> void main(){ char s1[]=”Hello”,s2[]="World"; char *p1,*p2; int i; p1=s1; p2=s2; for(i=0;i<5;i++) if(*(pl+i)==*(p2+i)) cout<<*(p1+i); }

    A.H1

    B.Ho

    C.10

    D.1


    正确答案:D

  • 第18题:

    若已包括头文件,运行下列程序段时输出结果是()。int i=0;char s1[10]="ABCD

    若已包括头文件<stdio.h>和<string.h>,运行下列程序段时输出结果是( )。 int i=0; char s1[10]="ABCD",s2[10]="EFG"; strcat(s1,S2); while(s2[i++]!='\0') s2[i]=s1[i]; puts(s2);

    A.ABC

    B.ABCDEF

    C.EBCDEFG

    D.CBD


    正确答案:C
    解析: strcat(s1,s2)把s2连接到s1的后面,s1=ABCDEFG,执行while(s2[i++]!='\0')后i的值变为1,往后执行s2[i]=s1[i]时是从把s1的第二位给s2的第二位开始,把s1赋给s2。

  • 第19题:

    已知C源程序如下:

    / * longIntAdd * /

    include <stdio. h>

    include <string. h>

    define LENGTH 81

    void addLInt(char sl[],char s2[]); void reverse(char s[]) ; int main()

    {

    char intstrl[LENGTH],intstr2[LENGTH];

    printf("请输入超长整数的被加数和加数:\n")

    scanf("%s%s" ,intstrl ,intstr2) ; addLInt(intstrl ,intstr2) j printf("超长整数和为: %s" .intstrl); return 0;

    }

    void addLInt(char sl[] ,char s2[]) {

    int i=0,tmp,c=0;

    char s[LENGTH];

    if(strlen(s1)<strlen(s2)){ strcpy(s,sl); strcpy(sl,s2); strcpy(s2,s);

    }

    reverse(sl);reverse(s2);

    while(s2[i]! ='\0'){

    tmp=sl[i]-'0'+s2[i]-'0'+ c;

    sl[i] = tmp%10+,0';

    c=tmp/10;

    i++; } while(sl[i]! ='\0,&&c){

    tmp=sl[i] —'0' + c;

    sl[i] = tmp%10+'0';

    c=tmp/10;

    i++; } If(c){

    sl[i++] = c+'0';

    sl[i] = '\0'; } reverse(sl);

    }

    void reverse(cliar s[])

    {

    inti,j,c;

    for(i=0,j = strlen(s) -l;i<j;i++,j--){

    c=s[i]; s[i] = s[j]; s[j] = c; } }

    (1)画出程序中函数addLInt的控制流程图(10分);

    (2)设计一组测试用例,使该程序addLInt函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该函数的语句覆盖率或分支覆盖率无法达到100%,需说明为什么(10分)。


    正确答案:×
    (1)函数addLInt的控制流程图。 C2)测试用例 a.sl:“111111111111111l”s2:“2222222222222222” b. s1:“123456789” s2:“989” c.s1:“989” s2 :“123456789” d.sl :“999999999999” s2 :“111111” 解析:语句覆盖是指设计若干测试用例,运行被测程序,使得每个可执行语句至少执行一次。 语句覆盖率=被评价到的语句数量/可执行的语句数量×100%。 设计若干测试用例,运行被测程序使得每个判定的取真分支和取假分支至少评价一次。 判定覆盖率=被评价到的判定分支个数/判定分支的总数×100%。 当输入a、b、c、d中的测试用例后,语句覆盖率和分支覆盖率均为100%。

  • 第20题:

    以下程序的输出结果是_______。includeincludefun(char*w,int n){char t,*s

    以下程序的输出结果是_______。 #include<stdio.h> #include<string.h> fun(char*w,int n) { char t,*s1,*s2; s1=w;s2=w+n-1; while(s1<s2) { t=*s1++: *sl=*s2-; *s2=t; } } main() { char*p; p="1234567"; fun(p,strlen(p)); puts(p); }

    A.1234567

    B.7654321

    C.1711717

    D.7177171


    正确答案:C
    解析:在于函数fun中,s1为字符串w的起始地址,s2为字符串的结束地址(字符'\0'除外),当执行循环结束循环,w="1711717"。

  • 第21题:

    阅读以下函数 fun(char *s1,char *s2) { int i=0; while(s1[i]==s2[i]&&s2[i]!='\0')i++; return(s1[i]=='\0'&&s2[i]=='\0'); } 此函数的功能是

    A.将s2所指字符串赋给s1

    B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

    C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

    D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0


    正确答案:C
    解析:在函数fun()中有两个字符型指针变量s1和s2,在函数中程序执行while循环,该循环退出条件有两个:一个是s1[i]!=s2[1](两个字符串不相等):第二个是s1[1]和s2[i]相等均为“、0”(两个字符串相等)。循环退出后,执行return语句,即两个字符串相等则返回1,不相等则返回0。

  • 第22题:

    下述程序用来输出两个字符串前7个字符中对应相等的字符及其位置号,则程序空白上应该填写的是( )。

    #include<stdio.h>

    main

    { char s1[]="chinese",s2[]="japanese";

    int i;

    for(i=0;s1[i]='\0'&&s2[i]!='\0';i++)

    if(s1[i]==s2[i]&&i<7)

    _____________;

    }

    A.putchar(s2[i]);putchar(i)

    B.puts(s1[i],i)

    C.printf("%c%d\n",s2[i],i)

    D.printf("%C",s1[]);printf("%d\n",i)


    正确答案:A
    本题考查输出函数putchar的功能,即把字符输出到标准输出设备;puts是把指向的字符串输出到标准输出设备。

  • 第23题:

    若输入 "I am a boy!",下列程序的运行结果为______。 char connect(string1,string2,string) char string1[],string2[],string[]; { int i,j; for (i=0;stringl[i] !='\0';i++) string[i]=stringl[i]; for (j=0;string2[j] !='\0';j++) string[i+j]=string2[j]; string[i+j ] ='\0'; } main ( ) { char s1 [100] , s2 [100] , s [100]; printf ("\n 输入 string1: \n"); scanf("%s",s1); printf (" \n 输入 string2: \n" ); scanf ("%s", s2); connect (s1, s2, s); printf ("%s\n", s); }

    A.I am a boy!

    B.输入string2:

    C.I am

    D.I am a boy!


    正确答案:C

  • 第24题:

    下列程序的运行结果是()。      #include   #include   FUN(char *w,int n)  {   char temp,*s1,*s2; s1=w;  s2=w+n-1;  while(s1temp=*s1++;  *s1=*s2--;  *s2=temp;  }  }      main( )  {   char *p;  p=“1234567”;  FUN(p,strlen(p));  puts(p);  }


    正确答案:1711717