1、二级 C 语言分类模拟题 538 及答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:40,分数:56.00)1.设有如下程序段 #includestdio.h char s20=“Beijing“, *p; p=s; 则执行 p=s;语句后,以下叙述正确的是_。(分数:2.00)A.可以用*p 表示 s0B.s 数组中元素的个数和 p 所指字符串长度相等C.s 和 p 都是指针变量D.数组 s 中的内容和指针变量 p 中的内容相同2.设有下列程序段: char str=“HelloWorld“; char*ptr; ptr=str; 执行上面的程序段后,*(ptr+10)
2、的值为_。(分数:2.50)A.“/0“B.“0“C.不确定的值D.“0“的地址3.构成计算机软件的是_。(分数:1.00)A.源代码B.程序和数据C.程序和文档D.程序、数据及相关文档4.以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处。 #include stdio.h main() int a10,i=0; while(i10)scanf(“%d“, _ ); (分数:1.00)A.a+(i+)B. switch(x) case 0: b+; case 1: a+; case 2: a+; b+; printf(“a=%d, b=%d/n“, a, b); 该程序的
3、输出结果是_。(分数:2.50)A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=27.某带链栈的初始状态为 top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数为_。(分数:1.00)A.1B.0C.20D.不确定8.有以下程序: #includestdio.h main() int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+) if(j%2)continue; x+; x+; printf(“x=%d/n“,x); 程序执行后的输出结果是_。(分数:1.00)A.x=4B
4、.x=8C.x=6D.x=129.以下不能正确计算代数式 sin2()值的 C 语言表达式是 _ 。(分数:1.00)A.1/3*sin(1/2)*sin(1/2)B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5),2)/3D.1/3.0*pow(sin(1.0/2),2)10.有以下程序 #includestdio.h main() int n=2, k=0; while(k+ printf(“%d%d/n“, k, n); 程序运行后的输出结果是_。(分数:1.00)A.02B.13C.57D.1211.若有以下程序 #includestdio.h void sp(in
5、t *a) int b=2; a= *a=*a*2; printf(“%d,“, *a); main() int k=3, *p= sp(p); printf(“%d, %d/n“, k, *p); 则程序的输出结果是_。(分数:2.00)A.4, 3, 4B.4, 3, 3C.6, 3, 6D.6, 6, 612.以下函数的功能是:计算 a 的 n 次方作为函数值返回。 double fun(double a,int n) int i;double s=1.0; for(i=1;i=n;i+)s=_; return s; 为实现上述功能,函数中下划线处应填入的是_。(分数:1.00)A.s*
6、iB.s*aC.s+i*iD.s+a*a13.以下选项中,与 k=n+完全等价的表达式是_。(分数:1.00)A.k=n, n=n+1B.n=n+1, k=nC.k=+nD.k+=n+114.以下叙述中正确的是( )。(分数:1.00)A.调用 printf 函数时,必须要有输出项B.使用 putchar 函数时,必须在之前包含头文件 stdio.hC.在 C 语言中,整数可以以十二进制、八进制或十六进制的形式输出D.调用 getchar 函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码15.下列说法中,不正确的是_。(分数:2.00)A.主函数 main 中定义的变量在整个文件或
7、程序中有效B.不同函数中,可以使用相同名字的变量C.形式参数是局部变量D.在函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效16.若有如下程序: sub(int a,int b,int c) c=a+b; return(c); main() int x=3,y=4,z=6; sub(x,y,z); printf(“%d”,z); 则程序运行后的输出结果是( )。(分数:1.00)A.3B.6C.7D.417.若有说明:int n=2, *p=,则以下非法的赋值语句是_。(分数:1.00)A.p=q;B.*p=q;C.n=*q;D.p=n;18.有以下程序: #include in
8、t fun(int(*s)4,int n,int k)int m,i;m=s0k;for (i=l;in;i+)if (sikm)m=sik;return m;main()int a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34;printf(“%d/n“,fun(a,4,0);程序的运行结果是 。 A.4 B.34 C.31 D.32A B C D C解析 本题考查的是二维数组的定义、赋初值和对二维数组元素的引用。在 fun()函数中,首先将 s0k的值赋给 m,然后通过 for 循环,遍历 s1k-sn-1k之中的数,将遇到的比 m 大的数保存
9、到 m 中。很显然,这是搜索最大值的算法,搜索的是 s0ksn-1k之间的最大值。所以,主函数中 fun (a,4,0)的功能就是搜索 a00-a30之间的最大值,这 4 个值分别是 1、11、21、31,所以最终输出结果是 31,应该选择 C)。(分数:2.00)A.4B.34C.31D.3219.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书20.阅读下面程序,则执行后的结果是 #include “stdio, h“ main() char str=“tomeetme“, *p; for(p=st
10、r; pstr+7; p+=2)putchar(*p); printf(“/n“); (分数:2.00)A.tomeetmeB.tmemC.oeteD.tome21.有以下程序 #includestdio.h main() char ch=“Z“; ch=(ch-“A“+1)%26+“A“; putchar(ch); 程序的运行结果是(分数:2.00)AZBYCBDA22.有以下程序: main() int y=1,x=2,z=3; printf(“%d,%d/n“,(Hx,y+),z+2); 执行后的输出结果是_。(分数:2.00)A.3,5B.2,5C.3,3D.1,523.一名工作人员可
11、以使用多台计算机,而一台计算机可被多名工作人员使用,则实体工作人员与实体计算机之间的联系是_。(分数:1.00)A.一对一B.一对多C.多对多D.多对一24.有两个关系 R 和 T 如下: (分数:1.00)A.选择B.投影C交D并25.深度为 7 的二叉树共有 127 个节点,则下列说法中错误的是_。(分数:1.00)A.该二叉树有一个度为 1 的节点B.该二叉树是满二叉树C.该二叉树是完全二叉树D.该二叉树有 64 个叶子节点26.有以下程序: #include stdio.h main() char a 44=“; int i,j; for(i=0;i4; i+) ai0=ai3=“#“
12、; for(j=1; j3; j+) a0j=a 3j=“#“; if(i!=0) for(i=1;i3;i+) for(j=0; j4;j+) printf(“%2c“ ,aij); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.#o o#o o#B.# # # # o o #C.# o o # # # #D.# # # # # # #27.以下选项中可用作 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2B1e0CE9D.9.12E28.当执行下面的程序时,如果输入 ABC,则输出结果是_。 #include “stdio.h“ #include “st
13、ring.h“ main() char ss10=“12345“; gets(ss);strcat(ss,“6789“); printf(“%s/n“,ss); (分数:1.00)A.ABC6789B.ABC67C.12345ABC6D.ABC45678929.结构化程序设计的基本原则不包括_。(分数:2.50)A.多态性B.自顶向下C.模块化D.逐步求精30.以下叙述中错误的是_。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看做一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句31.有以下程序 #include stdio.h ma
14、in() int a=5,b=1,t; t=(a2)|b; printf(“%d/n“,t); 程序运行后的输出结果是_。(分数:1.00)A.6B.11C.21D.132.下列叙述中错误的是_。(分数:2.00)A.C 程序可以由多个程序文件组成B.一个 C 语言程序只能实现一种算法C.C 程序可以由一个或多个函数组成D.一个 C 函数可以单独作为一个 C 程序文件存在33.以下定义数组的语句中错误的是_。(分数:1.00)A.int num3=1,2,3,4,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
15、,4,5,6;34.函数调用语句:fun(exp1, exp2), (exp1, exp2, exp3);含有的实参个数是_。(分数:1.00)A.1B.4C.5D.235.设有以下定义: char s1=“0123“; char s2= “0“,“1“,“2“,“3“; 则以下叙述正确的是_。(分数:1.00)A.数组 s1 的长度小于 s2 的长度B.数组 s1 和 s2 的长度相同C.数组 s1 的长度大于 s2 的长度D.数组 s1 和 s2 完全等价36.有以下程序(strcpy 为字符串复制函数,strcat 为字符串连接函数): #includestdio.h #includes
16、tring.h main() char a10=“abc“,b10=“012“,c10=“xyz“; strcpy(a+1,b+2); puts(strcat(a,c+1); 程序运行后的输出结果是_。(分数:1.00)A.a12xyzB.bc2yzC.a2yzD.12yz37.有以下程序,程序中库函数“islower (ch)”用以判断 ch 中的字母是否为小写字母 #include stdio.h #include ctype.h void fun(char *P) int i=0; while(pi) if(pi=“ i+; main() char s1100=“ab cd EFG!“;
17、 fun(s1); printf(“%s/n“,s1); 程序运行后的输出结果是_。(分数:1.00)A.ab cd EFG !B.Ab Cd EFg !C.aB cD EFG !D.ab cd EFg !38.以下叙述中错误的是_。(分数:2.00)A.C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令B.C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一个文本文件中D.C 语言源程序经编译后生成后缀为.obj 的目标程序39.下面程序段的运行结果是( )。 char a=“ab
18、cdefgh“; char *p=a; p+=3; printf(“%d/n“,strlen(strcpy(p,“ABCD“);(分数:1.00)A.8B.12C.4D.740.当变量 c 的值不为 2、4、6 时,值也为“真”的表达式是_。(分数:2.50)A.(c=2)|(c=4)|(c=6)B.(c=2 p=s; 则执行 p=s;语句后,以下叙述正确的是_。(分数:2.00)A.可以用*p 表示 s0 B.s 数组中元素的个数和 p 所指字符串长度相等C.s 和 p 都是指针变量D.数组 s 中的内容和指针变量 p 中的内容相同解析:解析 本题主要考查的是字符数组、字符串和字符指针的一些
19、概念。数组元素个数,是在定义数组的时候确定的,本题的 s 数组元素个数是 20。而字符串长度,是从该字符串的第 1 个字符开始,一直到/0 字符为止,所历经的字符个数,/0 不算在内。所以本题 p 所指字符串(“Beijing“)的长度为 7。因此选项 B 的叙述不正确。s 是数组名,而不是指针变量,因此选项 C 不正确。数组 s 中除了包含字符串“Beijing”外,还包含其后的 20 个以内字节的内容,而指针变量 p 中包含的只是数组 s 的首地址。因此选项 D 的说法也不正确。2.设有下列程序段: char str=“HelloWorld“; char*ptr; ptr=str; 执行上
20、面的程序段后,*(ptr+10)的值为_。(分数:2.50)A.“/0“ B.“0“C.不确定的值D.“0“的地址解析:解析 本题主要考查字符数组和指针,在 C 语言中,字符型数组在存放字符串时会自动在末尾加上“/0“,所以数组 str 有 11 个元素;ptr 指向数组 str 的首地址,ptr+10 是指向 str10,*(ptr+10)是引用 str10的值。3.构成计算机软件的是_。(分数:1.00)A.源代码B.程序和数据C.程序和文档D.程序、数据及相关文档 解析:解析 软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D 选项。4.以下程序中给数组所有
21、元素输入数据,请从选项中选择正确的答案填入下划线处。 #include stdio.h main() int a10,i=0; while(i10)scanf(“%d“, _ ); (分数:1.00)A.a+(i+) B. switch(x) case 0: b+; case 1: a+; case 2: a+; b+; printf(“a=%d, b=%d/n“, a, b); 该程序的输出结果是_。(分数:2.50)A.a=2,b=1 B.a=1,b=1C.a=1,b=0D.a=2,b=2解析:解析 当 x 为 1 时,执行 case 1,a 自加等于 1,因为 case 1 后没有 br
22、eak,接着执行 case 2,此时 a 的值为 2,b 自加为 1,故选择 A 选项。7.某带链栈的初始状态为 top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数为_。(分数:1.00)A.1 B.0C.20D.不确定解析:解析 带链的栈是具有栈属性的链表。线性链表的存储单元是不连续的,为把存储空间中一些离散的空闲存储结点利用起来,把所有空闲的结点组织成一个带链的栈,称为可利用栈。线性链表执行删除操作运算时,被删除的结点可以“回收”到可利用栈,对应于可利用栈的入栈运算,线性链表执行插入运算时,需要一个新的结点,可以在可利用栈中取栈顶
23、结点,对应于可利用栈的退栈运算。可利用栈的入栈运算和退栈运算只需要改动 top 指针即可。当 top=bottom=20 时链栈中的元素个数为 1。故本题答案为 A选项。8.有以下程序: #includestdio.h main() int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+) if(j%2)continue; x+; x+; printf(“x=%d/n“,x); 程序执行后的输出结果是_。(分数:1.00)A.x=4B.x=8 C.x=6D.x=12解析:解析 coutinue 的作用是跳出循环体中剩余的语句而进行下一次循环。第一次执行外循
24、环 i 的值为 0,执行 x+,x 的值变为 1,第一次执行内层循环 j 的值为 0,不满足 if 条件,执行 x+,x 的值变为2,第二次内循环 j 的值为 1,if 条件成立,跳出本次循环,第三次执行内循环 j 的值为 2,不满足 if 条件,x 的值变为 3,第四次执行内循环 j 的值为 3 满足条件跳出本次内循环,x 的值加 1,即为 4,第一次外循环结束。第二次执行外循环时,同理,i 的值被加了,4 次,变为 8,所以选择 B 选项。9.以下不能正确计算代数式 sin2()值的 C 语言表达式是 _ 。(分数:1.00)A.1/3*sin(1/2)*sin(1/2) B.sin(0.
25、5)*sin(0.5)/3C.pow(sin(0.5),2)/3D.1/3.0*pow(sin(1.0/2),2)解析:解析 选项 A 中传递给 sin()函数的参数表达式 1/2 计算出来的结果为整数 0,所以不能正确计算出题目要求的值,而其余选项中,除号两边都至少有个运算分量是实数,故应该选择 A。10.有以下程序 #includestdio.h main() int n=2, k=0; while(k+ printf(“%d%d/n“, k, n); 程序运行后的输出结果是_。(分数:1.00)A.02B.13C.57D.12 解析:解析 本题判断 while 语句中的逻辑关系的真假。“
26、 a= *a=*a*2; printf(“%d,“, *a); main() int k=3, *p= sp(p); printf(“%d, %d/n“, k, *p); 则程序的输出结果是_。(分数:2.00)A.4, 3, 4B.4, 3, 3 C.6, 3, 6D.6, 6, 6解析:解析 sp 函数内 a 为 b 的地址,*a 为 2*2 值为 4,main 函数内 k 为 3,p 为 k 的地址,*p 值为3,所以答案选择 B。12.以下函数的功能是:计算 a 的 n 次方作为函数值返回。 double fun(double a,int n) int i;double s=1.0;
27、for(i=1;i=n;i+)s=_; return s; 为实现上述功能,函数中下划线处应填入的是_。(分数:1.00)A.s*iB.s*a C.s+i*iD.s+a*a解析:解析 s 为 a 的(i-1)次方的结果,所以令 s=s*a 即可得到 a 的 i 次方。13.以下选项中,与 k=n+完全等价的表达式是_。(分数:1.00)A.k=n, n=n+1 B.n=n+1, k=nC.k=+nD.k+=n+1解析:解析 题中的表达式是先让 n 参与赋值运算,然后再对本身进行自加,所以选 A。14.以下叙述中正确的是( )。(分数:1.00)A.调用 printf 函数时,必须要有输出项B.
28、使用 putchar 函数时,必须在之前包含头文件 stdio.h C.在 C 语言中,整数可以以十二进制、八进制或十六进制的形式输出D.调用 getchar 函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码解析:解析 本题考查了 C 语言的一些基本概念。printf()函数可以只有控制项而没有输出项,例如,printf(“Hello!“); ,所以选项 A)不正确。C 语言中不支持整数以十二进制输出,因此选项 C)不正确。getchar()函数从键盘读入一个字符,而不管该字符为数字还是字母,因此输入 ASCII 码的话,只能读到第 1 个数字字符,所以选项 D)不正确。故应该选择
29、 B),putchar 是 C 语言中的库函数,使用时必须包含stdio.h。15.下列说法中,不正确的是_。(分数:2.00)A.主函数 main 中定义的变量在整个文件或程序中有效 B.不同函数中,可以使用相同名字的变量C.形式参数是局部变量D.在函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效解析:16.若有如下程序: sub(int a,int b,int c) c=a+b; return(c); main() int x=3,y=4,z=6; sub(x,y,z); printf(“%d”,z); 则程序运行后的输出结果是( )。(分数:1.00)A.3B.6 C.7D
30、.4解析:解析 本题定义了个子函数 sub(),因为 sub()的形参为 int 型变量,而不是指针,即为传值调用,所以 sub()函数不会改变实参 x、y、z 的值,故最后输出结果为 6,应该选择 B。17.若有说明:int n=2, *p=,则以下非法的赋值语句是_。(分数:1.00)A.p=q;B.*p=q;C.n=*q;D.p=n; 解析:解析 选项 A 是两个指针变量之间的赋值;而选项 B 是把 q 的值赋给 p 指向的整型变量,虽然不常用,但也是对的;选项 C 是把 q 指向的变量的值赋值给 n,也是没有问题的;而选项 D 中,整型数据和指针型数据之间不能进行赋值运算,所以是错误的
31、。18.有以下程序: #include int fun(int(*s)4,int n,int k)int m,i;m=s0k;for (i=l;in;i+)if (sikm)m=sik;return m;main()int a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34;printf(“%d/n“,fun(a,4,0);程序的运行结果是 。 A.4 B.34 C.31 D.32A B C D C解析 本题考查的是二维数组的定义、赋初值和对二维数组元素的引用。在 fun()函数中,首先将 s0k的值赋给 m,然后通过 for 循环,遍历 s1k-s
32、n-1k之中的数,将遇到的比 m 大的数保存到 m 中。很显然,这是搜索最大值的算法,搜索的是 s0ksn-1k之间的最大值。所以,主函数中 fun (a,4,0)的功能就是搜索 a00-a30之间的最大值,这 4 个值分别是 1、11、21、31,所以最终输出结果是 31,应该选择 C)。(分数:2.00)A.4B.34C.31 D.32解析:解析 本题考查的是二维数组的定义、赋初值和对二维数组元素的引用。在 fun()函数中,首先将 s0k的值赋给 m,然后通过 for 循环,遍历 s1k-sn-1k之中的数,将遇到的比 m 大的数保存到 m 中。很显然,这是搜索最大值的算法,搜索的是 s
33、0ksn-1k之间的最大值。所以,主函数中 fun (a,4,0)的功能就是搜索 a00-a30之间的最大值,这 4 个值分别是 1、11、21、31,所以最终输出结果是 31,应该选择 C)。19.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析 需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择 D。20.阅读下面程序,则执行后的结果是 #include “stdio, h“ main() char str=“tomeetme“, *p; f
34、or(p=str; pstr+7; p+=2)putchar(*p); printf(“/n“); (分数:2.00)A.tomeetmeB.tmem C.oeteD.tome解析:解析 存放字符串的字符数组的名字就是这个字符串的首地址。本题的功能是对字符串“tomeetme”进行选择式输出,从第一个字母开始,每输出一个字符即跳过一个。21.有以下程序 #includestdio.h main() char ch=“Z“; ch=(ch-“A“+1)%26+“A“; putchar(ch); 程序的运行结果是(分数:2.00)AZBYCBDA 解析:22.有以下程序: main() int y
35、=1,x=2,z=3; printf(“%d,%d/n“,(Hx,y+),z+2); 执行后的输出结果是_。(分数:2.00)A.3,5B.2,5C.3,3D.1,5 解析:23.一名工作人员可以使用多台计算机,而一台计算机可被多名工作人员使用,则实体工作人员与实体计算机之间的联系是_。(分数:1.00)A.一对一B.一对多C.多对多 D.多对一解析:解析 因为一名工作人员可以操作多台计算机,而一台计算机又可以被多名工作人员使用,所以两个实体之间是多对多的关系,选择 C。24.有两个关系 R 和 T 如下: (分数:1.00)A.选择 B.投影C交D并解析:解析 选择是建立一个含有与原始关系相
36、同列数的新表,但是行只包括那些满足某些特定标准的原始关系行。25.深度为 7 的二叉树共有 127 个节点,则下列说法中错误的是_。(分数:1.00)A.该二叉树有一个度为 1 的节点 B.该二叉树是满二叉树C.该二叉树是完全二叉树D.该二叉树有 64 个叶子节点解析:解析 在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。完全二叉树指除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干节点。满二叉树指除最后一层外,每一层上的所有节点都有两个子节点的二叉树。深度为 7 的二叉树,前 6 层共有节点个数为 2 6 -1=63,则第 7 层有 1
37、27-63=64 个节点,即第 7 层节点数达到最大值,故此二叉树为满二叉树,也是完全二叉树,该二叉树没有度为 1 的节点,有 64 个叶子节点。故正确答案为 A 选项。26.有以下程序: #include stdio.h main() char a 44=“; int i,j; for(i=0;i4; i+) ai0=ai3=“#“; for(j=1; j3; j+) a0j=a 3j=“#“; if(i!=0) for(i=1;i3;i+) for(j=0; j4;j+) printf(“%2c“ ,aij); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.#o o
38、#o o# B.# # # # o o #C.# o o # # # #D.# # # # # # #解析:解析 程序的执行过程为:定义 4 行 4 列二维数组字符 a 并且初始化为 a00=“,其他元素均为 0。执行 for 循环将数组第一列和第四列赋值为#。执行 for 循环将数组第一行和第四行的第二个到第三个元素赋值为#,然后将剩余元素全部赋值为0。此时矩阵为#,#,#,#,#,o,o,#,#,o,o,#,#,#,#,#。之后输出矩阵第二行与第三行元素为:# o o #回车# o o #,故 A选项正确。27.以下选项中可用作 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2
39、B1e0 CE9D.9.12E解析:解析 e 前 e 后有数字,e 后数值为整数,所以 A、C、D 错误。28.当执行下面的程序时,如果输入 ABC,则输出结果是_。 #include “stdio.h“ #include “string.h“ main() char ss10=“12345“; gets(ss);strcat(ss,“6789“); printf(“%s/n“,ss); (分数:1.00)A.ABC6789 B.ABC67C.12345ABC6D.ABC456789解析:解析 sdtrcat(str1,str2)合并字符串函数的作用是把 str2 所指字符串的内容连接到 st
40、r1 字符串的后面,自动删去 str1 原来串中的“/0“。为了进行这项操作,要求 str1 所指的字符串后面有足够的空间来容纳 str2 所指字符串中的内容。函数值为 str1 所指第一个字符的地址。29.结构化程序设计的基本原则不包括_。(分数:2.50)A.多态性 B.自顶向下C.模块化D.逐步求精解析:解析 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 go to 语句,多态性是面向对象的程序设计的思想,因此本题答案为 A。30.以下叙述中错误的是_。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看做一条语句C.空语句出现在任何位置都不会影响程序运
41、行 D.赋值表达式末尾加分号就构成赋值语句解析:解析 C 程序中所有语句都必须由一个分号“;”作为结束符。如果只有一个分号,这个分号也是一条语句,称为“空语句”,程序执行时不产生任何动作。程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号也会导致逻辑上的错误,影响程序的运行。所以选项 C 的说法是错误的。31.有以下程序 #include stdio.h main() int a=5,b=1,t; t=(a2)|b; printf(“%d/n“,t); 程序运行后的输出结果是_。(分数:1.00)A.6B.11C.21 D.1解析:解析 a2 的值为 20,20|1 结果为 21,
42、所以答案选择 C。32.下列叙述中错误的是_。(分数:2.00)A.C 程序可以由多个程序文件组成B.一个 C 语言程序只能实现一种算法 C.C 程序可以由一个或多个函数组成D.一个 C 函数可以单独作为一个 C 程序文件存在解析:解析 在一个 C 语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以 B 选项错误。33.以下定义数组的语句中错误的是_。(分数:1.00)A.int num3=1,2,3,4,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;解析:解析 B 选项中定义的数组
43、为 2 行 4 列,而赋值时赋成了 3 行所以出错。34.函数调用语句:fun(exp1, exp2), (exp1, exp2, exp3);含有的实参个数是_。(分数:1.00)A.1B.4C.5D.2 解析:解析 函数名后括号内的数据称为“函数参数”,其中列出的是各个参数的数据类型和名称。调用函数时,括号里面的实参应该与形参的个数与数据类型一致。函数 fun 参数列表中有两个参数,分别是逗号表达式“(exp1,exp2)”的值与“(exp1,exp2,exp3)”的值,故 D 选项正确。35.设有以下定义: char s1=“0123“; char s2= “0“,“1“,“2“,“3“
44、; 则以下叙述正确的是_。(分数:1.00)A.数组 s1 的长度小于 s2 的长度B.数组 s1 和 s2 的长度相同C.数组 s1 的长度大于 s2 的长度 D.数组 s1 和 s2 完全等价解析:解析 在对数组进行初始化时应该注意,如果对数组的全部元素赋以初值,定义时可以不指定数组长度。为字符数组 s1 赋值字符串“0123”时,将字符串中字符依次放入数组中,然后在最后一个字符后添加一个结束字符/0,所以数组 s1 长度为 5。而数组 s2 根据初始化规则,只需要 4 个单元即可放下所有初始化值,故数组长度为 4。所以数组 s1 的长度大于 s2 的长度,C 选项正确。两个数组等价是指两
45、个数组长度和类型以及对应每个元素值均相同,所以 s1 和 s2 不是完全等价,D 选项错误。36.有以下程序(strcpy 为字符串复制函数,strcat 为字符串连接函数): #includestdio.h #includestring.h main() char a10=“abc“,b10=“012“,c10=“xyz“; strcpy(a+1,b+2); puts(strcat(a,c+1); 程序运行后的输出结果是_。(分数:1.00)A.a12xyzB.bc2yzC.a2yz D.12yz解析:解析 本题考查字符串处理函数 strcpy 和 strcat。执行完 strcpy(a+1
46、,b+2);后,a 变为 a2,执行完 strcat(a,c+1)后,a 变为 a2yz,所以答案为 C 选项。37.有以下程序,程序中库函数“islower (ch)”用以判断 ch 中的字母是否为小写字母 #include stdio.h #include ctype.h void fun(char *P) int i=0; while(pi) if(pi=“ i+; main() char s1100=“ab cd EFG!“; fun(s1); printf(“%s/n“,s1); 程序运行后的输出结果是_。(分数:1.00)A.ab cd EFG !B.Ab Cd EFg !C.aB cD EFG ! D.ab cd EFg !解析:解析 fun 函数将空格之前的小写字母修改为大写字母,所以答案选 C。38.以下叙述中错误的是_。(分数:2.00)A.C 语