1、福建省二级 C语言-3 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:42,分数:84.00)1.若有语句 int a=5, *p1= float f=10.5, *p2= ,则以下正确的赋值语句是_。(分数:2.00)A.f=*p1+*p2;B.p2=p1;C.p1=D.p2=2.若有: (1)int a=10, *pa; *pa=a; (2)int a=10, *pa= 则以下叙述正确的是_。(分数:2.00)A.(1)与(2)都能使指针 pa指向变量 aB.(1)将可能使系统出现无法预知的错误C.(2)将可能使系统出现无法预知的错误D.(1)和(2)都将可能使
2、系统出现无法预知的错误3.以下程序运行后的输出结果是_。 #includestdio.h int main() char c, *pc= int a, *pa= double f, *pf= printf(“%d %d %d/n“, sizeof(pc), sizeof(pa), sizeof(pf); return 0; (分数:2.00)A.1 4 8B.4 4 4C.4 4 8D.1 1 14.若有语句 int a10=1, 2, 3, *pa=a; ,则以下叙述错误的是_。(分数:2.00)A.pa与 a的值相等B.pa2与 a2的值相等C.*(pa+2)与 a2的值相等D.a+与 p
3、a+的作用相同5.若有语句 int a, b10, *point=b; ,则以下各项均代表地址的是_。(分数:2.00)A.B.k=*p1*(*p2);C.p1=p2;D.p2=k;7.以下程序运行后的输出结果是_。 #includestdio.h int main() int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, *P=a; printf(“%d/n“, *(a+1)+*(p+2); return 0; (分数:2.00)A.2B.3C.4D.58.以下程序运行后的输出结果是_。 #includestdio.h int main() int a=10, 20,
4、 30, 40, 50, 60, 70, *p1, *p2; p1= p1+, p2-; printf(“%d/n“, p2-p1); return 0; (分数:2.00)A.4B.6C.40D.609.以下程序实现将数组元素中的最大值存放到 a0中,则 if语句中的条件表达式应是_。 #includestdio.h int main() int a10=3, 9, 6, 2, 15, 10, 25, 8, 14, 12, *p=a, i; p+; for(i=1; i10; i+, p+) if(_) a0=*p; printf(“%d“, *a); return 0; (分数:2.00)
5、A.pa0B.paC.*p*aD.*p*a010.以下程序执行后的输出结果是_。 #includestdio.h int main() int a33=1, 2, 3, 4, 5, 6, 7, 8, 9; int s, *p; p= s=(*p)+*(p+1)+*(p+2); printf(“%d“, s); return 0; (分数:2.00)A.6B.12C.15D.1811.若有以下语句: int a43, (*p)3; p=a; 则能正确引用 a数组元素的是_。(分数:2.00)A.*(p+4)B.p3C.*(p3+2)D.*(p+3)+212.以下程序运行后的输出结果是_。 #in
6、cludestdio.h int main() int a34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, (*p)4; p=a; p+; printf(“%d“, *(*(p+1)+2); return 0; (分数:2.00)A.4B.5C.7D.1113.设 char*s=“ab/t/071a/0bc“; ,则指针变量 s指向的字符串的长度是_。(分数:2.00)A.3B.4C.5D.814.下列语句中,能使 str存放或指向字符串“abc“的是_。(分数:2.00)A.char str=“a“,“b“,“c“;B.char str4=“a“, “b“,
7、 “c“;C.char*str, *str=“abc“;D.char*str; scanf(“%s“, str);15.以下程序段的运行结果是_。 char*s=“123456“; s+=3; printf(“%s/n“, s);(分数:2.00)A.456B.123456C.4D.345616.以下程序段的运行结果是_。 char s17=“abcdef“, s24=“123“; strcpy(s1, s2); printf(“%s %c“, s1, s14);(分数:2.00)A.123B.123 eC.abcD.abc e17.执行以下程序,其运行结果是_。 #includestdio.
8、h #includestring.h int main() char*p1, *p2, str10=“ABCDEFG“; p1=“abcde“; p2=“12345“; strcpy(str+1, p1+2); strcpy(str+3, p2+3); printf(“%s“, str); return 0; (分数:2.00)A.Acd45B.cd45C.Acde123D.Acde45618.设有 char s112=“abcde“, s2=“1234“, *p; ,以下能正确实现字符串操作的语句是_。(分数:2.00)A.strcat(p, s1);B.strcat(p, s2);C.st
9、rcat(s1, s2);D.strcat(s2, s1);19.执行以下程序段,其运行结果是_。 #includestdio.h #includestring.h int main() char s120=“abcdef“, s2=“1234“; strcat(s1, s2); printf(“%d/n“, strlen(s1); return 0; (分数:2.00)A.4B.6C.10D.1120.执行以下程序,其运行结果是_。 #includestdio.h #includestring.h int main() char s120=“abcdef“, s2=“bbaxyz“, s32
10、0; if(strcmp(s1+1, s2)0) strcpy(s3, s1); else strcpy(s3, s2+1); printf(“%s/n“, s3); return 0; (分数:2.00)A.abcdefB.bbaxyzC.bcdefD.baxyz21.以下程序段的运行结果是_。 int a34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; int*p3, i; for(i=0; i3; i+) pi=ai; printf(“%d, %d“, *(p1+1), *p2);(分数:2.00)A.6,9B.5,7C.6,6D.9,922.以下程序的
11、运行结果是_。 #includestdio.h #includestring.h int main() char*str5=“ENGLISH“, “MATH“, “MUSIC“, “CHEMISTRY“, “PHYSICS“, r20; char*q; int i; q=str; strcpy(r, *q); for(i=0; i4; i+) if(strcmp(r, *(+q)0) strcpy(r, *q); printf(“%s/n“, r); return 0; (分数:2.00)A.ENGLISHB.CHEMISTRYC.PHYSICSD.MATH23.下列关于函数定义的描述中,错误
12、的是_。(分数:2.00)A.定义函数时函数的存储类型可以省略B.定义函数时函数名和函数类型必须指明C.定义函数时必须有函数体D.定义函数时必需指明函数参数24.下列关于函数(原型)声明的描述中,错误的是_。(分数:2.00)A.函数声明可放在函数体内,也可放在函数体外B.函数声明既要给出函数名和类型,又要指出函数参数C.函数调用前必须给出被调函数的函数声明,否则出错D.被调函数的定义在主调函数前面时,可以不用函数声明25.以下正确的定义函数首部的形式是_。(分数:2.00)A.float func(int n; float x)B.float func(int n, float x);C.f
13、loat func(int n; float x);D.float func(int n, float x)26.下列关于函数参数的描述中,错误的是_。(分数:2.00)A.定义函数时可以有参数,也可以没有参数B.形参是变量名时,实参也只能是变量名,不可以是表达式C.函数的形参在该函数被调用前是没有确定值的D.要求函数的形参和对应的实参个数应相等,类型应赋值兼容27.下面说法中正确的是_。(分数:2.00)A.实参占用存储单元,形参不占用存储单元B.相对应的实参与形参共用同一存储单元C.相对应的实参与形参同名时,它们共用同一存储单元D.相对应的实参与形参占用不同的存储单元28.实参为简单变量时
14、,与其对应形参之间的数据传递方式为_。(分数:2.00)A.由用户另外指定传递方式B.双向数值传递C.单向数值传递D.地址传递29.实参是数组名,则传递给对应形参的是_。(分数:2.00)A.数组的地址B.数组的长度C.数组中每一个元素的地址D.数组中每一个元素的值30.下列关于函数返回值的论述中,错误的是_。(分数:2.00)A.函数返回值能够实现函数间的数据传递B.函数返回值是由 return表达式实现的C.函数返回的值和值的类型是由返回语句中表达式的值和类型决定的D.一个函数可有多条返回语句,但只可有一个返回值31.下列关于函数的论述中正确的是_。(分数:2.00)A.不允许函数嵌套定义
15、,但允许函数嵌套调用B.不允许函数嵌套调用,但允许函数嵌套定义C.函数的定义和调用都允许嵌套D.函数的定义和调用都不允许嵌套32.以下说法不正确的是_。(分数:2.00)A.所有的形式参数都是局部变量B.不同函数中允许说明并使用相同名字的变量C.函数内定义的变量其有效范围不超出该函数D.函数内的复合语句中说明的变量在该函数范围内有效33.在主调函数中有对函数 fun的调用语句: fun(a, b), (i, j, k); 那么 fun的形参个数是_。(分数:2.00)A.1B.2C.4D.534.在说明语句:int*func(int, int); 中,func 代表的是_。(分数:2.00)A
16、.一个用来指向整型数据的指针变量B.一个返回值为整型指针的函数名C.一个用来指向函数的指针变量D.一个用来指向一维数组的行指针变量35.设有函数 char*fun(char*p)return p;,则该函数的返回值是_。(分数:2.00)A.无确切的值B.形参 p中存放的地址值C.一个临时存储单元的地址D.形参 p自身的地址值36.以下程序的运行结果是_。 void swap28(int n0, int n1) int temp; temp=n0; n0=n1; n1=temp; void swap14(int n) int temp; temp=n0; n0=n1; n1=temp; int
17、 main() int a2=2, 8, b2=1, 4; swap28(a0, a1); swap14(b); printf(“%d %d %d %d/n“, a0, a1, b0, b1); return 0; (分数:2.00)A.2 8 1 4B.2 8 4 1C.8 2 4 1D.8 2 1 437.以下程序的运行结果是_。 #includestdio.h #includestring.h void space(char*str) int i, t; char ts81; for(i=0, t=0; stri!=“/0“; i+=1) if(*(str+i)!=“ “) tst=“/
18、0“; strcpy(str, ts); int main() char s81=“a b c d e f g“; space(s); puts(s); return 0; (分数:2.00)A.bcdefgB.abcefgC.BCDEFGD.ABCEFG38.以下程序的运行结果是_。 int fun(char*s) char*q=s; while(*q!=“/0“)q+; return(q-s); int main() char*p=“abc123“; printf(“%d/n“, fun(p); return 0; (分数:2.00)A.3B.6C.0D.abc12339.以下程序的运行结
19、果是_。 #includestdio.h void fun(int*p, int*q) printf(“%d%d“, *p, *q); *p=7; *q=8; int main() int x=55, y=66; fun( printf(“%d%d/n“, x, y); return 0; (分数:2.00)A.556678B.556687C.665578D.66558740.若下列函数 fun()被调用 3次后,n 的值为_。 void fun() static int n=1; +n; (分数:2.00)A.1B.3C.2D.441.以下程序的运行结果是_。 #includestdio.h
20、 int main() void fun(int); int i=5; fun(i); printf(“/n“); return 0; void fun(int n) if(n0)fun(n-1); printf(“%d“, n); (分数:2.00)A.543210B.012345C.54321D.1234542.下面程序运行时,若输入整数 30,则输出结果是_。 #includestdio.h int main() void func(int); int intnum; printf(“Please input a integer number:/n“); scanf(“%d“, func
21、(intnum); printf(“/n“); return 0; void func(int n) if(n/30)func(n/3-3); printf(“%d“, n); (分数:2.00)A.-1 7 30B.30 7 -1C.30 7D.-1二、填空题(总题数:8,分数:16.00)43.以下程序实现了数组元素按相反顺序进行存放。 #includestdio.h int main() int i, a10, temp; int* p, *low, *high; 1; for(i=0; i10; i+) scanf(“%d“, p+ 2); /*输入数组元素*/ for(i=0; i1
22、0; i+) printf(“%d“, *p); /*输出原数组元素*/ 3; printf(“/n“); for(low= lowhigh; 4) temp=*high; *high=*low; *low=temp; for(i=0; i10; i+) printf(“%d“, ai); /*输出变换后的数组元素*/ return 0; (分数:2.00)44.以下程序使用指向行数组的指针变量的方法,实现将二维数组 a43中的第 m行与第 n行元素的对调(m=4, n=4)。 #includestdio.h int main() int a43=1, 3, 5, 7, 9, 11, 13,
23、15, 17, 19, 21, 23; int i, j, 1; int m, n, temp; scanf(“%d%d“, p=a; for(i=0; i3; i+) temp=*(*(p+m-1)+i); *(*(p+m-1)+i)= 2; *(*(p+n-1)+i)=temp; for(i=0; i4; i+) for(j=0; j3; j+) printf(“%4d“, *(*p+j); 3; printf(“/n“); return 0; (分数:2.00)45.以下程序实现将十进制正整数转换为十六进制数,且十六进制数用字符串表示。 #includestdio.h #includes
24、tring.h int main() int a, b, i; char s5, *p=s; scanf(“%d“, while(a0) 1; if(b9) *p=b+“A“-10; else 2; a=a/16; p+; *p=0; for(i= 3; i=0; i-) putchar(si); return 0; (分数:2.00)46.以下程序用于计算一个英文句子中最长单词的长度。假设句子中只含有英文字母和空格,空格为单词之间的分隔符。 #includestdio.h int main() char*p, s=“I am a student“; int max=0, t; p=s; wh
25、ile( 1) t=0; while(*p!=“ p+; if(maxt) max=t; 3; printf(“max=%d“, max); return 0; (分数:2.00)47.从字符串 s1中删除字符串 s2所包含的字符。例如:s1 为“helloword“,s2 为“eo“,程序执行后,s1变为“hllwrd“。 #includestdio.h int main() char s181=“helloword“, se81=“eo“; char*p1=s1, *p2, *p3; 1; while(*p1) p2=s2; while(*p2 if(*p2=“/0“) *p3+=*p1;
26、 p1+; 3; printf(“%s/n“, s1); return 0; (分数:2.00)48.输入一字符串 str,判断其中“(”与“)”是否配对,即“(”与“)”个数相等,且从第一个字符开始,任何时候“)”的个数都不超过“(”的个数。 #includestdio.h int main() char str81, *p=str; int k=0; gets(str); while(*p!=0) if( 1) k+; else if(*p=“)“) 2; if(k0) break; p+; if( 3) printf(“RIGHT/n“); /*配对*/ else printf(“ERR
27、OR/n“); /*不配对*/ return 0; (分数:2.00)49.恺撒加密方法就是把明文中所有字母都用它右边的第 k个字母替代,并认为最后一个字母的右边又是第一个字母。这种映射关系表示为如下函数:F(a)=(c+k)mod n。其中,c 表示明文字母在字母表中的位置序号,n 为字母表中字母个数,k 为密钥。 例如:明文为 write,密钥 k=5,则密文为 bwnyj。 以下程序实现在 26个小写英文字母集中的恺撒加密算法。 #includestdio.h int main() char str181, str281, *p1=str1, *p2=str2; int k=5; get
28、s(str1); while( 1) *p2=*p1+k; if(*p2“z“) 2; p1+; p2+; 3; puts(str2); return 0; (分数:2.00)50.从字符串 str中获取一子串,并将其存放到 str1中,该子串从 str的第 k个字符开始取 n个字符,若不足 n个字符,则取到 str的最后一个字符为止。 #includestdio.h #includestring.h int main() char str81, str181; char*p=str, 1=str1; int k, n; gets(str); scanf(“%d %d“, if(k=strle
29、n(str) 2; while(n0) n-; *p1=0; puts(str1); return 0; (分数:2.00)福建省二级 C语言-3 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:42,分数:84.00)1.若有语句 int a=5, *p1= float f=10.5, *p2= ,则以下正确的赋值语句是_。(分数:2.00)A.f=*p1+*p2; B.p2=p1;C.p1=D.p2=解析:解析 一个指针变量只能指向由定义限定的同一类型的变量。即 p1只能指向 int型的变量,p2只能指向 float型的变量,故可排除选项 B、C、D。选项 A中是将
30、一个 int型的变量值与一个 float型的变量值相加后赋值给一个 float型的变量,这是允许的。2.若有: (1)int a=10, *pa; *pa=a; (2)int a=10, *pa= 则以下叙述正确的是_。(分数:2.00)A.(1)与(2)都能使指针 pa指向变量 aB.(1)将可能使系统出现无法预知的错误 C.(2)将可能使系统出现无法预知的错误D.(1)和(2)都将可能使系统出现无法预知的错误解析:解析 在(1)中,指针变量 pa没有被赋值,它的值是随机的,语句*pa=a 是把变量 a的值送到 pa所指的内存单元,若 pa的值刚好指向没有被使用的内存单元,则可出现正常的结果
31、,而若 pa的值指向系统所占用的内存单元,则完全可能产生无法预知的错误,甚至出现“死机”。(2)是对指针变量 pa初始化,使 pa指向变量 a。3.以下程序运行后的输出结果是_。 #includestdio.h int main() char c, *pc= int a, *pa= double f, *pf= printf(“%d %d %d/n“, sizeof(pc), sizeof(pa), sizeof(pf); return 0; (分数:2.00)A.1 4 8B.4 4 4 C.4 4 8D.1 1 1解析:解析 指针变量同普通变量一样,它也占用内存单元,而且每个指针变量占用内
32、存单元的数量是相同的,在 Visual C+中,每个指针变量都占用 4个字节。4.若有语句 int a10=1, 2, 3, *pa=a; ,则以下叙述错误的是_。(分数:2.00)A.pa与 a的值相等B.pa2与 a2的值相等C.*(pa+2)与 a2的值相等D.a+与 pa+的作用相同 解析:解析 通过初始化*pa=a;将使 pa与 a的值相等,ai、pai与*(pa+i)是等价的,但是,数组名 a是数组 a的首地址值,是一个常量,故不能进行 a+操作,而 pa是指针变量,可以进行 pa+操作。5.若有语句 int a, b10, *point=b; ,则以下各项均代表地址的是_。(分数
33、:2.00)A.B.k=*p1*(*p2);C.p1=p2;D.p2=k; 解析:解析 p2 是指针变量,不能把 int型变量的值赋值给指针变量。7.以下程序运行后的输出结果是_。 #includestdio.h int main() int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, *P=a; printf(“%d/n“, *(a+1)+*(p+2); return 0; (分数:2.00)A.2B.3C.4D.5 解析:解析 数组名 a表示数组 a的首地址,即 a0元素的地址,a+1 是 a1的地址,*(a+1)就是 a1;P是指针变量,指向 a,*(p+2)就
34、是 a2,故*(a+1)+*(p+2)=a1+a2=5。8.以下程序运行后的输出结果是_。 #includestdio.h int main() int a=10, 20, 30, 40, 50, 60, 70, *p1, *p2; p1= p1+, p2-; printf(“%d/n“, p2-p1); return 0; (分数:2.00)A.4 B.6C.40D.60解析:解析 设 p1、p2 是指向数组 a的指针变量,p1= p1+, p2-; 后,p1、p2 分别指向 a1和 a5,两指针变量 p2、p1 相减所得结果是指两个指针所指数组元素之间相差的元素个数,即为 4。9.以下程序
35、实现将数组元素中的最大值存放到 a0中,则 if语句中的条件表达式应是_。 #includestdio.h int main() int a10=3, 9, 6, 2, 15, 10, 25, 8, 14, 12, *p=a, i; p+; for(i=1; i10; i+, p+) if(_) a0=*p; printf(“%d“, *a); return 0; (分数:2.00)A.pa0B.paC.*p*a D.*p*a0解析:解析 通过 for循环,将 a0与 a1a9各元素依次进行比较,只要后者值大,就将其赋值给a0,这样就可把数组 a中的最大值存放到 a0。*a 就是 a0,循环前
36、,p 的值指向 a1,每次循环都进行一次 p+操作,所以*p 便可依次表示 a1a9。10.以下程序执行后的输出结果是_。 #includestdio.h int main() int a33=1, 2, 3, 4, 5, 6, 7, 8, 9; int s, *p; p= s=(*p)+*(p+1)+*(p+2); printf(“%d“, s); return 0; (分数:2.00)A.6B.12C.15D.18 解析:解析 p 是指向二维数组元素的指针变量,由于有 p= p=a; 则能正确引用 a数组元素的是_。(分数:2.00)A.*(p+4)B.p3C.*(p3+2) D.*(p+
37、3)+2解析:解析 P 为指向行数组的指针变量,pi表示数组 a第 i+1行的首地址,*(p3+2)表示间接访问a32,是数组 a的元素。*(P+4)表示的是 a40,已越界;p3和*(p+3)+2 表示的都是数组元素的地址。12.以下程序运行后的输出结果是_。 #includestdio.h int main() int a34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, (*p)4; p=a; p+; printf(“%d“, *(*(p+1)+2); return 0; (分数:2.00)A.4B.5C.7D.11 解析:解析 p 为指向行数组的指针变量
38、,p=a; p+; 后,p 指向 a1;*(p+1)表示元素 a20的地址,*(*(p+1)+2)就表示间接访问 a22,其值为 11。13.设 char*s=“ab/t/071a/0bc“; ,则指针变量 s指向的字符串的长度是_。(分数:2.00)A.3B.4C.5 D.8解析:解析 “/t“、“/071“都是一个转义字符,“/071“中的“0“是指八进制,而不是字符串结束符,“/071“表示 ASCII码值为八进制 71即十进制 57的字符,即“9“,“/0bc“中的“/0“是字符串结束符。14.下列语句中,能使 str存放或指向字符串“abc“的是_。(分数:2.00)A.char s
39、tr=“a“,“b“,“c“;B.char str4=“a“, “b“, “c“; C.char*str, *str=“abc“;D.char*str; scanf(“%s“, str);解析:解析 使用字符数组可以存放一个字符串,但必须有值为“/0“的元素作为字符串的结束符,故选项 A不行;选项 C从语法上就是错误的;选项 D中的 str所指位置没有事先分配,对其输入字符串将是危险的,这也是初学者最容易犯的错误;选项 B中的 str3=0作为字符串的结束符。15.以下程序段的运行结果是_。 char*s=“123456“; s+=3; printf(“%s/n“, s);(分数:2.00)A
40、.456 B.123456C.4D.3456解析:解析 把一个字符串赋值给一个字符指针变量,其实质是分配一部分连续单元存放字符串,然后把连续单元的首地址赋值给字符指针变量。当执行 s+=3; 后,s 指向第 4个字符“4“,故结果应是 A。16.以下程序段的运行结果是_。 char s17=“abcdef“, s24=“123“; strcpy(s1, s2); printf(“%s %c“, s1, s14);(分数:2.00)A.123B.123 e C.abcD.abc e解析:解析 字符串复制函数 strcpy(s1, s2)的作用是将 s2复制给 s1,即 s10=“1“, s11=
41、“2“, s12=“3“, s13=“/0“,但从 s14开始的元素并没有被改变,故 s1为“123“,s14元素保持不变。17.执行以下程序,其运行结果是_。 #includestdio.h #includestring.h int main() char*p1, *p2, str10=“ABCDEFG“; p1=“abcde“; p2=“12345“; strcpy(str+1, p1+2); strcpy(str+3, p2+3); printf(“%s“, str); return 0; (分数:2.00)A.Acd45 B.cd45C.Acde123D.Acde456解析:解析 执行
42、 strcpy(str+1, p1+2); 后,str0=“A“保持不变,而 str1str4变为 p1+2表示的字符串,即 str1=“c“,str2=“d“,str3=“e“,str4=“/0“。执行 strcpy(str+3, p2+3); 后,str0str2保持不变,而 str3str5变为 p2+3表示的字符串,即 str3=“4“,str4=“5“,str5=“/0“。因此,str 的值为“Acd45“。18.设有 char s112=“abcde“, s2=“1234“, *p; ,以下能正确实现字符串操作的语句是_。(分数:2.00)A.strcat(p, s1);B.str
43、cat(p, s2);C.strcat(s1, s2); D.strcat(s2, s1);解析:解析 字符串连接函数 strcat(p1, p2)的功能是把 p2字符串连接到 p1字符串的末尾。在使用这一函数时,必须特别注意 p1是否定义了足够多的存储单元用于存放 p2。在选项 A、B 中,p 未指向定义的单元,是随机值,这种操作是危险的。选项 D中连接后的字符串需要占用 10个单元,而 s2只定义了 5个单元,所以将使数组 s2存储越界,这也是危险的。19.执行以下程序段,其运行结果是_。 #includestdio.h #includestring.h int main() char s
44、120=“abcdef“, s2=“1234“; strcat(s1, s2); printf(“%d/n“, strlen(s1); return 0; (分数:2.00)A.4B.6C.10 D.11解析:解析 字符串连接函数 strcat(s1, s2)的功能是把 s2字符串连接到 s1字符串的末尾。strcat(s1, s2);后,s1 等于“abcdef1234“;strlen(s1)函数的功能是返回 s1的长度,即 s1对应的字符个数(不含结束字符)。20.执行以下程序,其运行结果是_。 #includestdio.h #includestring.h int main() cha
45、r s120=“abcdef“, s2=“bbaxyz“, s320; if(strcmp(s1+1, s2)0) strcpy(s3, s1); else strcpy(s3, s2+1); printf(“%s/n“, s3); return 0; (分数:2.00)A.abcdef B.bbaxyzC.bcdefD.baxyz解析:解析 函数 strcmp(p1, p2)的功能是根据 p1指向的字符串和 p2指向的字符串的大小关系决定返回值:当 p1指向的字符串大于 p2指向的字符串时,返回正整数;当 p1和 p2指向的字符串相等时,返回0;当 p1指向的字符串小于 p2指向的字符串时,
46、返回负整数。strcmp(s1+1, s2)中,s1+1 指向的字符串是“bcdef“,其第 2个字符“c“大于 s2指向的字符串“bbaxyz“中的第 2个字符“b“,故执行 strcpy(s3, s1);语句,使 s3等于 s1,即为“abcdef“。21.以下程序段的运行结果是_。 int a34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; int*p3, i; for(i=0; i3; i+) pi=ai; printf(“%d, %d“, *(p1+1), *p2);(分数:2.00)A.6,9 B.5,7C.6,6D.9,9解析:解析 p 是指针数组,pi是指针变量;对于二维数组 a34,ai可理解为由第 i