1、二级 C 语言-442 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:48,分数:100.00)1.若有定义:int x10,*pt=x;,则对 x 数组元素的正确引用是_。(分数:2.00)A.pt+3B.* for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序的运行结果是_。(分数:2.00)A.20B.25C.45D.363.有以下程序: #includestdio.h main() int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0;i12;i+) csi+; for(i
2、=1;i5;i+) printf(“%d“,ci); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.2 3 4 4B.4 3 3 2C.1 2 3 4D.1 1 2 34.下列定义数组的语句中正确的是_。(分数:2.00)A.#define N 10int xN;B.int N=10;int xN;C.int x010;D.int x;5.下列选项中能正确定义数组的语句是_。(分数:2.00)A.int num0.2008;B.int num;C.int N=2008;int numN;D.#define N 2008int numN;6.若要求定义具有 10 个 in
3、t 型元素的一维数组 a,则以下定义语句中错误的是_。(分数:2.00)A.#define n 5int a2*n;B.int n=10,an;C.int a5+5;D.#define N 10int aN;7.设有定义:double a10,*s=a;,以下能够代表数组元素 a3的是_。(分数:2.00)A.(*s)3B.*(s+3)C.*s3D.*s+38.有以下程序: #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序的运行结果是_。(分数:2.00)A.3 5
4、7B.7 5 3C.3 6 9D.7 5 19.下列定义语句中错误的是_。(分数:2.00)A.int x43=1,2,3,1,2,3,1,2,3,1,2,3;B.int x4=1,2,3,1,2,3,1,2,3,1,2,3;C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;10.下列定义数组的语句中错误的是_。(分数:2.00)A.int x23=1,2,3,4,5,6;B.int x3=0;C.int x3=1,2,3,4,5,6;D.int x23=1,2,3,4,5,6;11.下列定义数组的语句中错误的是_。(分数:2.00)A.int num3=1,2,3,4,
5、5,6;B.int num24=1,2,3,4,5,6;C.int num=1,2,3,4,5,6;D.int num4=1,2,3,4,5,6;12.若有定义语句:char s10=“1234567/0/0“;,则 strlen(s)的值是_。(分数:2.00)A.7B.8C.9D.1013.有以下程序: #includestdio.h #includestring.h main() char p20=“a“,“b“,“c“,“d“,q=“abc“,r=“abcde“; strcat(p,r); strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p);
6、程序的运行结果是_。(分数:2.00)A.11B.9C.6D.714.有以下程序(strcat 函数用于连接两个字符串): #includestdio.h #includestring.h main() char a20=“ABCD/0EFG/0“,b=“IJK“; strcat(a,b); printf(“%s/n“,a); 程序的运行结果是_。(分数:2.00)A.IJKB.ABCDE/0FG/0IJKC.ABCDIJKD.EFGIJK15.有以下程序: char name20; int nun; scanf(“name=%S num=%d“,name, 当执行上述程序,并从键盘输入:na
7、me=Lili nun=1001回车后,name 的值为_。(分数:2.00)A.name=Lili num=1001B.name=LiliC.Lili num=D.Lili16.有以下程序: #includestdio.h main() char ch=“uvwxyz“,*pc;pc=ch; printf(“%c/n“,*(pc+5); 程序的运行结果是_。(分数:2.00)AzB.0C.元素 ch5的地址D.字符 y 的地址17.有以下程序: #includestdio.h main() char s=“012xy“; int 1,n=0; for(i=0;si!=0;i+) if(si=
8、“a“ printf(“%d/n“,n); 程序的运行结果是_。(分数:2.00)A.0B.2C.3D.518.若有以下定义和语句: #includestdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d%d/n“,strlen(s1),strlen(s2); 程序的运行结果是_。(分数:2.00)A.10 7B.10 5C.5 5D.5 819.有以下程序: #includestdio.h main() char s=“abcde“; s+=2; printf(“%d/n“,s 0); 程序的运行结果是_。(分数:2.00)A.输出字符 c 的
9、ASCII 码B.程序出错C.输出字符 cD.输出字符 a 的 ASCII 码20.有以下程序: #includestdio.h void fun(char*t,char*s) while(*t!=0)t+; while(*t+=*s+)!=0); main() char ss10=“acc“,aa10=“bbxxyy“; fun(ss,aa); printf(“%s,%s/n“,ss,aa); 程序的运行结果是_。(分数:2.00)A.acc,hbxxyyB.accbbxxyy,bbxxyyC.accxxyy,bhxxyyD.accxyy,bbxxyy21.设有定义:char p=“1“,“
10、2“,“3“,*q=p;,以下不能计算出一个 char 型数据所占字节数的表达式是_。(分数:2.00)A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sized(p0)22.设有定义:char s81;int i=0;,以下不能将一行(不超过 80 个字符)带有空格的字符串正确读入的语句或语句组是_。(分数:2.00)A.gets(s);B.while(si+=getehar()!=“/n“);si=“/0“;C.scanf(“%s“,s);D.doscanf(“%c“,while(si+!=“/n“);si=“/0“;23.若有定义语句:char*s1=“OK
11、“,*s2=“ok“;,以下选项中,能够输出“OK”的语句是_。(分数:2.00)A.if(strcmp(s1,s2)!=0)puts(s2);B.if(strcmp(s1,s2)!=0)puts(s1);C.if(strcmp(s1,s2)=1)puts(s1);D.if(strcmp(s1,s2)=0)puts(s1);24.若要求从键盘读入含有空格字符的字符串,应使用函数_。(分数:2.00)A.getchar()B.getc()C.gets()D.scanf()25.下列选项中,能够满足“只要字符串 s1 等于字符串 s2,则执行 ST”要求的是_。(分数:2.00)A.if(s1-s
12、2=0)ST;B.if(s1=s2)ST;C.if(strcp)r(s1,s2)=1)ST;D.if(strcmp(s2,s1)=0)ST;26.若有代数式 (分数:2.00)A.sqrt(fabs(pow(n,x)+exp(x)B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(abs(nx+ex)D.sqrt(fabs(pow(x,n)+exp(x)27.下列叙述中错误的是_。(分数:2.00)A.可以给指针变量赋一个整数作为地址值B.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.当在程序的开头包含头文件 stdio.h 时,可以给指针变量赋 NULL
13、 值28.若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是_。(分数:2.00)A.函数的形参和实参分别占用不同的存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的实参和其对应的形参共占同一存储单元29.下列叙述中错误的是_。(分数:2.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参30.下列关于 return 语句的叙述中正确的是_。(分数:2.00)A.一个自定义函数中必须有一条 return 语句B
14、.一个自定义函数中可以根据不同情况设置多条 return 语句C.定义成 void 类型的函数中可以有带返回值的 return 语句D.没有 return 语句的自定义函数在执行结束时不能返回到调用处31.已定义以下函数 int fun(int*p)return*p; fun 函数的返回值是_。(分数:2.00)A.一个整数B.不确定的值C.形参 p 中存放的值D.形参 p 的地址值32.下列叙述中错误的是_。(分数:2.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有 retur
15、n 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式33.若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,下列选项中错误的程序是_。(分数:2.00)A.main().x=fun(2,10);.float fun(int a,int B).Bfloat fun(int a,int B).main().x=fun(i,j);.B.float fun(int,int);main().x=fun(2,10);.float fun(int a,intC.D.main().float fun(int i,int j);.x=fun
16、(i,j);.float fun(int a,int B).34.有以下程序: #includestdio.h void fun(int a,int b) int t; t=a; a=b; b=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; for(i=0;i10;i+=2) fun(ci,ci+1); for(i=0;i10;i+) printf(“%d,“,ci); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.1,2,3,4,5,6,7,8,9,0,B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2
17、,1,D.0,1,2,3,4,5,6,7,8,9,35.有以下程序: #includestdio.h double f(double x); main() double a=0;int i; for(i=0;i30;i+=10)a+=f(double)i); printf(“%3.0f/n“,a); double f(double x) return x*x+1; 程序的运行结果是_。(分数:2.00)A.500B.40lC.503D.140436.有以下程序: #includestdio.h main() int m=1,n=2,*p= r=p; p=q; q=r; printf(“%d,%
18、d,%d,%d/n“,m,n,*p,*q); 程序的运行结果是_。(分数:2.00)A.2,1,1,2B.1,2,1,2C.2,1,2,1D.1,2,2,137.若有函数首部 int fun(double x10,int*n),则下列针对此函数的函数声明语句中正确的是_。(分数:2.00)A.int fun(double,int);B.int fun(double *,int *);C.int fun(double*x,int n);D.int fun(double x,int*n);38.有以下程序: #includestdio.h int f(int x); main() int n=1,
19、m; m=f(f(f(n); printf(“%d/n“,m); int f(int x) return x*2; 程序的运行结果是_。(分数:2.00)A.8B.2C.4D.139.有以下程序: #includestdio.h int fun(int x,int y) if(x!=y) return(x+y)/2); else return(x); main() int a=4,b=5,c=6; printf(“%d/n“,fun(2*a,fun(b,c); 程序的运行结果是_。(分数:2.00)A.6B.3C.8D.1240.有以下程序: #includestdio.h int f(int
20、 x,int y) return(y-x)*x); main() int a=3,b=4,c=5,d; d=f(f(a,b),f(a,c); printf(“%d/n“,d); 程序的运行结果是_。(分数:2.00)A.7B.10C.8D.941.设有如下函数定义: #includestdio.h int fun(int k) if(k1)return 0; else if(k=1)return 1; else return fun(k-1)+1; 若执行调用语句 n=fun(3);,则函数 fun 总共被调用的次数是_。(分数:2.50)A.2B.3C.4D.542.有以下程序: #incl
21、udestdio.h int fun(int x) int p; if(x=0|x=1) return(3); p=x-fun(x-2); return p; main() printf(“%d/n“,fun(7); 程序的运行结果是_。(分数:2.50)A.2B.3C.7D.043.有以下程序: #includestdio.h void f(int b) int i; for(i=2;i6;i+) bi*=2; main() int a10=1,2,3,4,5,6,7,8,9,10,i; f(a); for(i=0;i10;i+) printf(“%d,“,ai); 程序的运行结果是_。(分
22、数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.1,2,6,8,10,12,7,8,9,10,C.1,2,3,4,10,12,14,16,9,10,D.1,2,6,8,10,12,14,16,9,10,44.在一个 C 源程序文件中所定义的全局变量,其作用域为_。(分数:2.50)A.由具体定义位置和 extern 说明来决定范围B.所在程序的全部范围C.所在函数的全部范围D.所在文件的全部范围45.在 C 语言中,只有在使用时才占用内存单元的变量,其存储类型是_。(分数:2.50)A.auto 和 staticB.extern 和 registerC.auto 和 regis
23、terD.static 和 register46.有以下程序: #includestdio.h int fun() static int x=1; x*=2; return x; main() int i,s=1; for(i=1;i=3;i+) s*=fun(); printf(“%d/n“,s); 程序的运行结果是_。(分数:2.50)A.10B.30C.0D.6447.有以下程序: #includestdio.h int fun(int x,int n) static int sum=0,i; for(i=0;in;i+) sum+=xi; return sum; main() int
24、a=1,2,3,4,5,b=6,7,8,9,s=0; s=fun(a,5)+fun(b,4); printf(“%d/n“,s); 程序的运行结果是_。(分数:2.50)A.55B.50C.45D.6048.下列叙述中错误的是_。(分数:2.50)A.C 程序函数中定义的自动变量,系统不自动赋确定的初值B.在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内C.C 程序函数中定义的赋有初值的静态变量,每调用一次函数赋一次初值D.C 程序函数的形参不可以说明为 static 型变量二级 C 语言-442 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题
25、数:48,分数:100.00)1.若有定义:int x10,*pt=x;,则对 x 数组元素的正确引用是_。(分数:2.00)A.pt+3B.* for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序的运行结果是_。(分数:2.00)A.20B.25 C.45D.36解析:解析 统计 19 这 9 个数中的奇数和,此题考查指向数组的指针。C 语言规定数组名代表数组的首地址,也就是第一个元素的地址,因此*(t+i)代表数组的第 i+1 个元素。程序的运行结果是1+3+5+7+9=25。3.有以下程序: #includestdio.h main() int
26、 s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0;i12;i+) csi+; for(i=1;i5;i+) printf(“%d“,ci); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.2 3 4 4B.4 3 3 2 C.1 2 3 4D.1 1 2 3解析:解析 在 for(i=0;i12;i+)csi+中,数组元素 si的值作为数组 c 的下标,当退出循环时,数组 c 的 4 个元素的值分别为 4、3、3、2,因此 B 选项正确。4.下列定义数组的语句中正确的是_。(分数:2.00)A.#define N 10int xN
27、; B.int N=10;int xN;C.int x010;D.int x;解析:解析 数组说明的一般形式为:类型说明符数组名常量表达式。B 选项中 N 是变量,不能用变量定义数组长度。C 选项中数组长度是一串非法的数字。定义数组时必须为其指明长度,D 选项中的数组长度为空,所以非法。5.下列选项中能正确定义数组的语句是_。(分数:2.00)A.int num0.2008;B.int num;C.int N=2008;int numN;D.#define N 2008int numN; 解析:解析 C 语言不允许定义动态数组,定义数组的大小必须为常量表达式。A 选项错误,C 语言中的数组没有
28、此类型的定义方法;B 选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C 选项错误,N 为变量,不能用来定义数组大小。D 选项正确。6.若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是_。(分数:2.00)A.#define n 5int a2*n;B.int n=10,an; C.int a5+5;D.#define N 10int aN;解析:解析 一维数组的定义方式为:类型说明符数组名常量表达式;注意定义数组时,元素个数不能是变量,因此应该选择 B 选项。7.设有定义:double a10,*s=a;,以下能够代表数组元素 a3的
29、是_。(分数:2.00)A.(*s)3B.*(s+3) C.*s3D.*s+3解析:解析 题中,首先定义了 double 型的数组 a,并将数组首地址赋给指针 s。s3能够表示 a3,故选项 A、C 不能表示 a3;选项 D 的*s+3=a0+3。故本题答案为 B 选项。8.有以下程序: #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序的运行结果是_。(分数:2.00)A.3 5 7 B.7 5 3C.3 6 9D.7 5 1解析:解析 二维数组 t3实际上指 t33
30、=9,8,7,6,5,4,3,2,1,通过循环语句 for 语句可以得到 i=0,t20=3、i=1,t11=5、i=2,t02=7、i=3 时循环结束,即 t20=3、t11=5、t02=7,因此 A 选项正确。9.下列定义语句中错误的是_。(分数:2.00)A.int x43=1,2,3,1,2,3,1,2,3,1,2,3;B.int x4=1,2,3,1,2,3,1,2,3,1,2,3; C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;解析:解析 二维数组定义的一般形式是:类型说明符数组名常量表达式 1常量表达式 2。其中常量表达式 1 表示第一维下标的长度,常量
31、表达式 2 表示第二维下标的长度。如对二维数组的全部元素赋初值,则第一维的长度可以不给出。但如果对 x4赋值,只确定行数,而不确定列数,就无法正确赋值,因此 B 选项正确。10.下列定义数组的语句中错误的是_。(分数:2.00)A.int x23=1,2,3,4,5,6;B.int x3=0;C.int x3=1,2,3,4,5,6;D.int x23=1,2,3,4,5,6; 解析:解析 D 选项中 x23定义的是一个 2 行 3 列的二维数组,而在给数组元素赋值时却赋成了 3 行,所以错误。11.下列定义数组的语句中错误的是_。(分数:2.00)A.int num3=1,2,3,4,5,6
32、;B.int num24=1,2,3,4,5,6; C.int num=1,2,3,4,5,6;D.int num4=1,2,3,4,5,6;解析:解析 B 选项中定义的数组为 2 行 4 列,而赋值时赋成了 3 行,所以出错。12.若有定义语句:char s10=“1234567/0/0“;,则 strlen(s)的值是_。(分数:2.00)A.7 B.8C.9D.10解析:解析 strlen()函数是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。本题中的字符串从第一个字符开始,遇到第一个结束标识“/0“为止,注意“/0“不占字符串长度,所以字符串长度为 7,因此 A 选项正确。
33、13.有以下程序: #includestdio.h #includestring.h main() char p20=“a“,“b“,“c“,“d“,q=“abc“,r=“abcde“; strcat(p,r); strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p); 程序的运行结果是_。(分数:2.00)A.11B.9C.6 D.7解析:解析 strcpy:字符串复制函数;strlen:求字符串长度函数(注意:不包含字符串结束标记字符“/0“);strcat:字符串连接函数。执行完语句 strcat(p,r);后,p 数组中存储的元素为a,b,c,d,
34、a,b,c,d,e;执行语句 strcpy(p+strlen(q),q);得到的结果是将 q 所指向的字符串复制至 p+strlen(q)开始的存储位置,因为 strlen 的值为 3,即 p+3 开始存储 q 中的元素,所以执行完strcpy(p+strlen(q),q)语句后,字符数组 p20的存储元素为 a,b,c,a,b,c;所以 strlen(p)的结果为 6,因此 C 选项正确。14.有以下程序(strcat 函数用于连接两个字符串): #includestdio.h #includestring.h main() char a20=“ABCD/0EFG/0“,b=“IJK“; s
35、trcat(a,b); printf(“%s/n“,a); 程序的运行结果是_。(分数:2.00)A.IJKB.ABCDE/0FG/0IJKC.ABCDIJK D.EFGIJK解析:解析 字符数组 a 中包含两个“/0“,遇到第一个“/0“时就表示字符串 a 结束。字符串处理函数strcat(字符数组 a,字符数组 b),功能是连接两个字符数组中的字符串,把字符串 b 连接到字符串 a 的后面,结果放在字符数组 a 中。连接时将字符串 a 后的“/0“取消,只在新串最后保留一个“/0“。本题相当于将“ABCD“和“IJK“连接,因此 C 选项正确。15.有以下程序: char name20;
36、int nun; scanf(“name=%S num=%d“,name, 当执行上述程序,并从键盘输入:name=Lili nun=1001回车后,name 的值为_。(分数:2.00)A.name=Lili num=1001B.name=LiliC.Lili num=D.Lili 解析:解析 在输入格式控制“name=%s num=%d”中,普通字符“name=num=”在输入时要原样输入,而格式控制符%s 和%d 对应各自的输入项,将输入的数据赋给相应的输入项。本题中输入“name=Lili num=1001回车”后,将字符串 Lili 赋给字符数组 name,整数 1001 赋给变量
37、num,因此 D 选项正确。16.有以下程序: #includestdio.h main() char ch=“uvwxyz“,*pc;pc=ch; printf(“%c/n“,*(pc+5); 程序的运行结果是_。(分数:2.00)Az B.0C.元素 ch5的地址D.字符 y 的地址解析:解析 语句 pc=ch;使得指针变量指向字符数组 ch 的首地址,即指向字符“u“,则 pc+5 指向的是字符向后移动 5 位,指向字符“z“,所以输出的*pc+5 的值即为“z“,因此 A 选项正确。17.有以下程序: #includestdio.h main() char s=“012xy“; int
38、 1,n=0; for(i=0;si!=0;i+) if(si=“a“ printf(“%d/n“,n); 程序的运行结果是_。(分数:2.00)A.0B.2 C.3D.5解析:解析 程序首先给字符数组 s赋值为“012xy“,for 循环语句的功能是遍历字符串,通过 if 条件语句对字符串中的小写字母进行计数,字符串中小写字母为 2 个,即 n=2,因此 B 选项正确。18.若有以下定义和语句: #includestdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d%d/n“,strlen(s1),strlen(s2); 程序的运行结果是_。(分
39、数:2.00)A.10 7B.10 5C.5 5 D.5 8解析:解析 strlen 函数返回字符串的长度,求字符串长度时,遇到结束标志“/0“为止,但是长度不包括结束标识。字符数组 s1 的后 5 个元素没有赋值,都为“/0“,即“abcd!“后为“/0“,所以 strlen(s1)的值为 5。字符指针 s2 所指向的字符串中,/n 为转义字符换行符,表示 1 个字符,/也为转义字符,代表/,也是 1 个字符,其后为字符串结束标识“/0“,所以 strlen(s2)的值也为 5,因此 C 选项正确。19.有以下程序: #includestdio.h main() char s=“abcde“
40、; s+=2; printf(“%d/n“,s 0); 程序的运行结果是_。(分数:2.00)A.输出字符 c 的 ASCII 码B.程序出错 C.输出字符 cD.输出字符 a 的 ASCII 码解析:解析 本题重点考查数组名的概念。在 C 语言中,数组名类似于一个指向数组首地址的指针常量,一旦定义就不能修改其内容。所以本题中的“s+=2”;语句让数组名 s 的内容加 2 是错误的,编译无法通过,因此 B 选项正确。20.有以下程序: #includestdio.h void fun(char*t,char*s) while(*t!=0)t+; while(*t+=*s+)!=0); main
41、() char ss10=“acc“,aa10=“bbxxyy“; fun(ss,aa); printf(“%s,%s/n“,ss,aa); 程序的运行结果是_。(分数:2.00)A.acc,hbxxyyB.accbbxxyy,bbxxyy C.accxxyy,bhxxyyD.accxyy,bbxxyy解析:解析 本题重点考查 while 循环语句的简单应用。在函数 fun()中,前一个 while 循环的作用是:如果形参指针 t 所指内容不为 0,则让 t 增 1,直到它指向 0。后一个 while 循环的作用是:将 s 所指内容赋给 t 所指地址,然后两者同时增 1,直到赋给 t 的内容为
42、 0。由此可见,函数 fun()的作用就是将形参 s 所指字符串连接到形参 t 所指字符串末尾,相当于库函数中的 strcat()。主函数中使用 fun()将数组aa 中的字符串连接到了数组 ss 中原有字符串之后,所以执行完后,ss 中的字符串为“accbbxxyy”。程序最后输出的结果是:accbbxxyy,bbxxyy,因此 B 选项正确。21.设有定义:char p=“1“,“2“,“3“,*q=p;,以下不能计算出一个 char 型数据所占字节数的表达式是_。(分数:2.00)A.sizeof(p) B.sizeof(char)C.sizeof(*q)D.sized(p0)解析:解析
43、 根据题目中的定义可知道 sizeof(p),计算的是数组 p 中所有元素所占用的字节数,而不是 char 型数据所占的字节数。22.设有定义:char s81;int i=0;,以下不能将一行(不超过 80 个字符)带有空格的字符串正确读入的语句或语句组是_。(分数:2.00)A.gets(s);B.while(si+=getehar()!=“/n“);si=“/0“;C.scanf(“%s“,s); D.doscanf(“%c“,while(si+!=“/n“);si=“/0“;解析:解析 使用 scanf()输入字符串时,空格和回车符都作为输入数据的分隔符而不能被读入,而应该使用 get
44、s(s)。23.若有定义语句:char*s1=“OK“,*s2=“ok“;,以下选项中,能够输出“OK”的语句是_。(分数:2.00)A.if(strcmp(s1,s2)!=0)puts(s2);B.if(strcmp(s1,s2)!=0)puts(s1); C.if(strcmp(s1,s2)=1)puts(s1);D.if(strcmp(s1,s2)=0)puts(s1);解析:解析 strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII 码值大小),以第一个不相同字符的大小作为比较结果。因为“OK“ok“,所以 strcmp(s1,s2)为负
45、值,只有 B 选项正确。24.若要求从键盘读入含有空格字符的字符串,应使用函数_。(分数:2.00)A.getchar()B.getc()C.gets() D.scanf()解析:解析 scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格;getchar()函数用于输入字符,其调用格式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量 ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入回车键时,读入才开始执行。gets()函数的调用形式为:gets(str_adr),其中 str_adr。是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets 函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf),其中 pf 是文件指针,函数的功能是从 pf 指定的文件中读入一个字符,并把它作为函数值返回。因此 C 选项正确。25.下列选项中,能够满足“只要字符串 s1 等于字符串 s2,则执行