1、二级 C 语言笔试-405 及答案解析(总分:106.00,做题时间:90 分钟)一、选择题(总题数:40,分数:72.00)1.下列叙述中正确的是( )。A) 一个算法的空间复杂度大,则其时间复杂度必定大B) 一个算法的空间复杂度大,则其时间复杂度必定小C) 一个算法的时间复杂度大,则其空间复杂度必定小D) 上述三种说法都不对(分数:2.00)A.B.C.D.2.数据的存储结构是指( )。A) 数据所占的存储空间 B) 数据的逻辑结构在计算机中的存放形式C) 数据在计算机中的顺序存储方式 D) 存储在计算机外存中的数据(分数:2.00)A.B.C.D.3.下面描述中,不属于软件危机表现的是(
2、 )。 A) 软件过程不规范 B) 软件开发生产率低 C) 软件质量难以控制 D) 软件成本不断提高(分数:2.00)A.B.C.D.4.软件生命周期是指 A) 软件产品从提出、实现、使用维护到停止使用退役的过程 B) 软件从需求分析、设计、实现到测试完成的过程 C) 软件的开发过程 D) 软件的运行维护过程(分数:2.00)A.B.C.D.5.算法的时间复杂度是指A) 执行算法程序所需要的时间 B) 算法程序的长度C) 算法执行过程中所需要的基本运算次数 D) 算法程序中的指令条数(分数:2.00)A.B.C.D.6.下列数据结构中,能用二分法进行查找的是( )。A) 顺序存储的有序线性表
3、B) 结性链表C) 二叉链表 D) 有序线性链表(分数:2.00)A.B.C.D.7.有下列二叉树,对此二叉树中序遍历的结果为( )。(分数:2.00)A.B.C.D.8.以下叙述中正确的是_。A) C 语言比其他语言高级B) C 语言可以不用编译就能被计算机识别执行C) C 语言以接近英国国家的自然语言和数学语言作为语言的表达形式D) C 语言出现得最晚,具有其他语言的一切优点(分数:2.00)A.B.C.D.9.对如图所示的二叉树进行中序遍历的结果是(分数:2.00)A.B.C.D.10.下列说法不正确的是( )。A) 一个 C 语言源程序可以由一个函数组成也可以由多个函数组成B) mai
4、n()中的“()”是函数的参数部分,括号内可为空,但括号不能省略C) C 语言程序是以函数为基本单位的D) 在 C 语言程序中,注释行只能位于一条语句的后面(分数:1.00)A.B.C.D.11.以下选项中,能用作用户标识符的是A) void B) 8_8 C) _0_ D) unsigned(分数:1.00)A.B.C.D.12.以下选项中,能用作用户标识符的是A) void B) 8_8C) _0_ D) unsigned(分数:1.00)A.B.C.D.13.执行语句 printf(“%u/n“,+12345)的输出结果是( )。A) 12345 B) 0 C) -1 D) 非定值(分数
5、:2.00)A.B.C.D.14.若要用下面的程序片段使指针变量 P 指向一个存储整型变量的动态存储单元int *p;p=_malloc(sizeof(int);则应填入_。A) int B) int* C) (*int) D) (int*)(分数:1.00)A.B.C.D.15.下列程序的输出结果是( )。main()int a,b,d=25;a=d/10%9;b=aA) 6,1 B) 2,1 C) 6,0 D) 2,0(分数:2.00)A.B.C.D.16.下列能正确定义一维数组的选项是( )。A) int a5=0,1,2,3,4,5; B) char a=0,1,2,3,4,5;C)
6、char a=A,B,C; D) int a5=“0123“;(分数:2.00)A.B.C.D.17.下列程序的输出结果是( )。main()int a=4,b=5,c;if(aB) c=a*b;printf(“%d,%d,%d/n“,b,a,C);elsec=b/a;printf(“%d,%d,%d/n“,b,a,C);A) 4,5,12 B) 20C) 5,4,20 D) 12(分数:2.00)A.B.C.D.18.运行下列程序,若从键盘输入字母“a”,则输出结果是( )。Char c;c=getchar();if(c=aelse if(c=gelse printf(“input erro
7、r!/n“);putchar(C) ;A) f B) t C) e D) d(分数:2.00)A.B.C.D.19.有以下程序#includestdio.hmain()int y=9;for(y0;y-)if(y%3=0)printf(“%d“,-y);程序的运行结果是( )。A741 B963C852 D875421(分数:1.00)A.B.C.D.20.以下叙述中错误的是_。A) 改变函数形参的值,不会改变对应实参的值B) 函数可以返回地址值C) 可以给指针变量赋一个整数作为地址值D) 当在函数的开头包括头文件 stdio.h 时,可以给指针变量赋 NULL(分数:2.00)A.B.C.D
8、.21.下面程序main()int x=32;print(“%d/n“,x=x1);的输出是_。A) 100 B) 160 C) 120 D) 64(分数:2.00)A.B.C.D.22.现有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指定一个链表中连续的 3 个结点。(分数:1.00)A.B.C.D.23.若有说明语句 char c=/72;,则变量 cA) 包含 1 个字符 B) 包含 2 个字符C) 包含 3 个字符 D) 说明不合法,c 的值不确定(分数:2.00)A.B.C.D.24.有以下程序main() int a44=1,4,3,2,8,6,5,7,3,7,2,5
9、,4,8,6,1,i,j,k,t;for(i=0;i4;i+)for(j=0;j3;j+)fof(k=j+1;k4;k+)if(ajiaki)t=aji;aki;aki=t;/*按列排序*/for(i=0;i4;i+)printf(“%d,aii);程序运行后的输出结果是(分数:2.00)A.B.C.D.25.以下程序的输出结果是_。main()int a44=1,3,5,2,4,6,3,5,7printf(“%d%d%d%d/n“,a03,a12,a21,a30);A) 0650 B) 1470 C) 5430 D) 输出值不定(分数:2.00)A.B.C.D.26.下列程序的输出结果是(
10、)。void f(int *x, int *y)int t;t=*x,*x=*y;*y=t;main( )int a8=1,2,3,4,5,6,7,8,i,*p,*q;p=a;q=while(pq)f(p,q); p+ +; q-;for (i=0;i8;i+) printf(“%d,“,ai);A) 8,2,3,4,5,6,7,1 B) 5,6,7,8,1,2,3,4C) 1,2,3,4,5,6,7,8 D) 8,7,6,5,4,3,2,1(分数:2.00)A.B.C.D.27.对两个数组 a 和 b 进行下列初始化:char m=“1234567“;char n=1,2,3,4,5,6,7
11、;则下列叙述正确的是( )。A) 数组 m 与数组 n 完全相同B) 数组 m 与数组 n 长度相同C) 数组 m 比数组 n 长 1D) 数组 m 与数组 n 中都存放字符串(分数:2.00)A.B.C.D.28.在 C 语言中,函数返回值的类型最终取决于( )。A) 函数定义时在函数首部所说明的函数类型B) return 语句中表达式值的类型C) 调用函数时主调函数所传递的实参类型D) 函数定义时形参的类型(分数:2.00)A.B.C.D.29.设变量已正确定义,则下列能正确计算 f=n!的程序段是( )。A) f=0;for(i=1;i=n;i+)f*=i;B) f=1;for(i=1;
12、in;i+)f*=i;C) f=1;for(i=n;i1;i+)f*=i;D) f=1;for(i=n;i =2;i-)f*=i;(分数:2.00)A.B.C.D.30.若在某函数内部有定义:int a34;则数组 a 中各元素( )。A) 可在程序的运行阶段得到初值 0 B) 可在程序的编译阶段得到初值 0C) 不能得到确定的初值 D) 可在程序的编译或运行阶段得到初值 0(分数:1.00)A.B.C.D.31.以下关于字符串的叙述中正确的是_。(A) C 语言中有字符类型的常量和变量(B) 两个字符串中的字符个数相同时才能进行字符串大小的比较(C) 可以用关系运算符对字符串的大小进行比较(
13、D) 空串一定比空格打头的字符串小(分数:2.00)A.B.C.D.32.若有程序fun(int a,int bstatic int c=0;c+=a+b;return c;main()int x=5,y=3,z=7,r,r=fun(y,x+y),z);r=fun(xy);printf(“%d/n“,r);上面程序的输出结果是_。A) 23 B) 15 C) 19 D) 18(分数:2.00)A.B.C.D.33.下列函数的功能是fun(char *Da,char *b)while(*b=*a)!=/0) a+;b+;A) 将 a 所指字符串赋给 b 所指空间B) 使指针 b 指向 a 所指字
14、符串C) 将 a 所指字符串和 b 所指字符串进行比较D) 检查 a 和 b 所指字符串中是否有/0(分数:2.00)A.B.C.D.34.以下不正确的定义语句是( )。A) double x5=2.0,4.0,6.0,8.0,10.0;B) int y5.3=0,1,3,5,7,9;C) charc/=1,2,3,4,5;D) char c2=/x10,/xa,/x8;(分数:1.00)A.B.C.D.35.若已包括头文件stdio.h和string.h,运行下列程序段时输出结果是( )。int i=0;char s110=“ABCD“,s210=“EFG“;strcat(s1,s2);wh
15、ile(s2i+!=/0)s2i=s1i;puts(s2);A) ABC B) ABCDEF C) EBCDEFG D) CBD(分数:2.00)A.B.C.D.36.若有下列说明,则( )不是对 strcpy 库函数的正确的调用。strcpy 库函数用于复制一个字符串:char*str1=“abed“,str210,*str3=“hijklmn“,*str42,*str5=“aaaa“;A) strcpy(str2,str1) B) strcpy(str3,str1)C) strcpy(str4,str1) D) strcpy(str5,str1)(分数:2.00)A.B.C.D.37.下面
16、的程序执行后,文件 test.t 中内容是_。#includestdio.hvoid fun(char *fname,char *st)FILE*myf; int i;myf=fopen(fname,“W“);for(i=0;istrlen(st);i+)foutc(stimyf;fclose(myf);main()fun(“test.t“,“new world“);fun(“test.t“,“hello,“);A) hello, B) new worldhello C) new world D) hello,rid(分数:2.00)A.B.C.D.38.变量 a 中的数据用二进制表示的形式是
17、 01011101,变量 b 中的数据用二进制表示的形式是 11110000。若要求将 a 的高位取反,低 4 位不变,所要执行的运算是A) ab B) a|b C) a printf(“/n%d“,c); A) 9 B) 10 C) 12 D) 2(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:34.00)41.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_42.在面向对象方法中,对象之间进行通信的构造称为 1。(分数:2.00)填空项 1:_43.程序流程图中
18、的菱形框表示的是 1。(分数:4.00)填空项 1:_44.在一个容量为 32 的循环队列中,若头指针 front=3,尾指针 rear=2,则该循环队列中共有 1 个元素。(分数:2.00)填空项 1:_45.树中度为零的结点称为 1。(分数:2.00)填空项 1:_46.在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块),其中U /U的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。(分数:2.00)填空项 1:_47.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于U /U的联系。(分数:
19、2.00)填空项 1:_48.人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字是 1。(分数:2.00)填空项 1:_49.在链表的运算过程中,能够使空表与非空表的运算统一的结构是 1。(分数:2.00)填空项 1:_50.下面程序的输出结果是_。main()int i=0,a=0;while(i20)for(;)if(i%10)=0)break;else i-;i+=11;a+=i;printf(“%d/n“,a);(分数:2.00)填空项 1:_51.以下程序运行后的输出结果是_。#includestdio.hmain()int a=1,b=7;do b=b/2;a
20、+=b;while(b1);printf(“%d/n“,a);(分数:4.00)填空项 1:_52.已有定义:double*P;,请写出完整的语句,利用 malloc 函数使 p 指向一个双精度型的动态存储单元 1。(分数:2.00)填空项 1:_53.有如下程序段:main(int argc,char *argv)int n,i=0;while(argv1i!=/0)n=fun();i+;printf(“%d/n“,n*argc);int fun()static int s=0;s+=1;return s;假设程序经编译、连接后生成可执行文件 exam,exe,若键入如下命令行:exam l
21、23回车则运行结果为U /U。(分数:2.00)填空项 1:_54.以下程序运行后的输出结果是_。int f(int a,int n)if(n=1)return f(a,n-1)+an-1;else return 0;main()int aa5=1,2,3,4,5),s;s=f(aa,5);printf(“%d/n“,s);(分数:2.00)填空项 1:_55.一棵二又树的中序遍历结果为 DBEAFC,前序遍历结果为 ABDECF,则后序遍历结果为_。(分数:2.00)填空项 1:_二级 C 语言笔试-405 答案解析(总分:106.00,做题时间:90 分钟)一、选择题(总题数:40,分数:
22、72.00)1.下列叙述中正确的是( )。A) 一个算法的空间复杂度大,则其时间复杂度必定大B) 一个算法的空间复杂度大,则其时间复杂度必定小C) 一个算法的时间复杂度大,则其空间复杂度必定小D) 上述三种说法都不对(分数:2.00)A.B.C.D. 解析:解析 算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况,它们之间没有内在联系。2.数据的存储结构是指( )。A) 数据所占的存储空间 B) 数据的逻辑结构在计算机中的存放形式C) 数据在计算机中的顺序存储方式 D) 存储在计算机外存中的数据(分数:2.00)A.B. C.D.解析:解析 数据的存储结构,又称为数据的物理结
23、构,是数据的逻辑结构在计算机中的存放形式,数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。3.下面描述中,不属于软件危机表现的是( )。 A) 软件过程不规范 B) 软件开发生产率低 C) 软件质量难以控制 D) 软件成本不断提高(分数:2.00)A. B.C.D.解析:解析 软件危机主要表现在以下 6 个方面: 软件需求的增长得不到满足。 软件开发成本和进度无法控制。 软件质量难以保证。 软件不可维护或维护程序非常低。 软件的成本不断提高。 软件开发生产率的提高赶不上硬件的发展和应用需求的增长。4.软件生命周期是指 A) 软件产品从提出、实现、使用维护到停止使用退役的过程 B) 软
24、件从需求分析、设计、实现到测试完成的过程 C) 软件的开发过程 D) 软件的运行维护过程(分数:2.00)A. B.C.D.解析:解析 本题考查软件生命周期的概念,属于记忆型题目。软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的过程。选项 A 正确。5.算法的时间复杂度是指A) 执行算法程序所需要的时间 B) 算法程序的长度C) 算法执行过程中所需要的基本运算次数 D) 算法程序中的指令条数(分数:2.00)A.B.C. D.解析:解析 算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算的次数;算
25、法的空间复杂度一般是指执行这个算法所需要的内存空间。6.下列数据结构中,能用二分法进行查找的是( )。A) 顺序存储的有序线性表 B) 结性链表C) 二叉链表 D) 有序线性链表(分数:2.00)A. B.C.D.解析:解析 二分法查找只适用于顺序存储的有序线性表,对于顺序存储的非有序线性表和线性链表。都只能采用顺序查找。7.有下列二叉树,对此二叉树中序遍历的结果为( )。(分数:2.00)A.B. C.D.解析:解析 对二叉树的中序遍历是指:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,注意依旧按照“左子树一根结点一右子树”的顺序。本题的遍历顺序是这样的:首先访问左子树
26、:BDEY:在左子树 BDEY 中,也按中序遍历,先访问左子树 DY;在左子树 DY 中,也按中序遍历,先访问左子树,左子树没有,则访问根结点 D,然后访问右子树 Y;接着访问根 B,再访问右子树 E;访问左子树 BDEY 后,接着访问根结点八,接着访问右子树 CFXZ;右子树 CFXZ 的访问顺序同理可得:FCZX。8.以下叙述中正确的是_。A) C 语言比其他语言高级B) C 语言可以不用编译就能被计算机识别执行C) C 语言以接近英国国家的自然语言和数学语言作为语言的表达形式D) C 语言出现得最晚,具有其他语言的一切优点(分数:2.00)A.B.C. D.解析:解析 C 语言是于 19
27、721973 年,由 D. M. Ritehie 在贝尔实验室为描述和实现 UNIX 操作系统而在 B 语言的基础上设计出来的。C 语言同时具备高级语言和低级语言的特点,既适用于编写系统软件,义可用于编写应用软件。计算机不能直接执行 C 语言的源程序,必须编译生成目标程序后才能执行。9.对如图所示的二叉树进行中序遍历的结果是(分数:2.00)A. B.C.D.解析:解析 二叉树的中序遍历递归算法为:如果根不空,则按中序次序访问左子树;访问根结点;按中序次序访问右子树。否则返回。本题中,根据中序遍历算法,应首先按照中序次序访问以 C 为根结点的左子树,然后再访问根结点 F,最后才访问以 E 为根
28、结点的右子树。遍历以 C 为根结点的左子树同样要遵循中序遍历算法,因此中序遍历结果为 ACBD:然后遍历根结点 F;遍历以 E 为根结点的右子树,同样要遵循中序遍历算法,因此中序遍历结果为 EG。最后把这 3 部分的遍历结果按顺序连接起来,中序遍历结果为 ACBDFEG。10.下列说法不正确的是( )。A) 一个 C 语言源程序可以由一个函数组成也可以由多个函数组成B) main()中的“()”是函数的参数部分,括号内可为空,但括号不能省略C) C 语言程序是以函数为基本单位的D) 在 C 语言程序中,注释行只能位于一条语句的后面(分数:1.00)A.B.C.D. 解析:解析 本题涉及 C 语
29、言基本的 3 个知识点:C 语言是以函数为基本单位的,每一个函数完成相对独立的功能,一个程序可以包括多个函数,但有且仅有一个主函数:主函数 main()的圆括号内是填写参数的,可以没有参数,但括号不可以省略;程序的注释部分应该在“/ */”之间,它允许出现在程序的任何位置。11.以下选项中,能用作用户标识符的是A) void B) 8_8 C) _0_ D) unsigned(分数:1.00)A.B.C. D.解析:解析 C 语言用户标识符可以由字母、数字和下画线组成,且第一个字符不能是数字。选项 B 的第一个字母不合法;关键字不能用作用户标识符,选项 A、D 不合法。12.以下选项中,能用作
30、用户标识符的是A) void B) 8_8C) _0_ D) unsigned(分数:1.00)A.B.C. D.解析:解析 C 语言的标识符命名规则为:只能由字母、数值和下划线 3 种字符组成;第一个字符必须是字母或下划线;不能与 C 语言中的关键字或保留字相同。13.执行语句 printf(“%u/n“,+12345)的输出结果是( )。A) 12345 B) 0 C) -1 D) 非定值(分数:2.00)A. B.C.D.解析:解析 “%u”表示输出无符号的整数(注意:如果输出值前有符号,将自动转化为相应的无符号数输出)。14.若要用下面的程序片段使指针变量 P 指向一个存储整型变量的动
31、态存储单元int *p;p=_malloc(sizeof(int);则应填入_。A) int B) int* C) (*int) D) (int*)(分数:1.00)A.B.C.D. 解析:评析 不论 p 是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型*)。15.下列程序的输出结果是( )。main()int a,b,d=25;a=d/10%9;b=aA) 6,1 B) 2,1 C) 6,0 D) 2,0(分数:2.00)A.B. C.D.解析:解析 算术运行符“/”“%”的优先级处于同一级,并且两者的结合性都是从左到右。所以算术表达式运算过
32、程为:a=25/10%9=2%9=2:当逻辑运算符“ B) char a=0,1,2,3,4,5;C) char a=A,B,C; D) int a5=“0123“;(分数:2.00)A.B. C.D.解析:解析 在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项 A)错误;选项 C 中定义的是一个字符变量 C;选项 D)中整型数组 a 中只能存储整型数据,而不能存储字符串常量“0123”。17.下列程序的输出结果是( )。main()int a=4,b=5,c;if(aB) c=a*b;printf(“%d,%d,%d/n“,b,a,C);elsec=b/a;print
33、f(“%d,%d,%d/n“,b,a,C);A) 4,5,12 B) 20C) 5,4,20 D) 12(分数:2.00)A.B.C. D.解析:解析 本题考查 if else 语句。第一个 if 语句,先判断条件,发现 ab 成立,执行下列的复合语句,得 c=a*b=20,b、a 的值不变。18.运行下列程序,若从键盘输入字母“a”,则输出结果是( )。Char c;c=getchar();if(c=aelse if(c=gelse printf(“input error!/n“);putchar(C) ;A) f B) t C) e D) d(分数:2.00)A.B.C. D.解析:解析
34、首先,getchar 函数通过键盘读入字符a,即 c=a(其实 c 得到的是字符 a 的 ASCII 码值),然后判断 if 语句的控制条件,发现a=a的输出是_。A) 100 B) 160 C) 120 D) 64(分数:2.00)A.B.C.D. 解析:评析 是 C 语言中规定的左移运算符,例如,a=a2,这个语句即是将 a 的二进制数左移两位,左移位相当于该数乘于 2,左移两位相当于该数乘以 2 的 2 次方。所以,x1=32*2=64。22.现有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指定一个链表中连续的 3 个结点。(分数:1.00)A.B.C.D. 解析:解析 由
35、题目中线性链表的定义可知,要将 q 和 r 所指的结点交换前后位置,只要使 q 指向 r 的后一个结点,p 指向 r 结点,r 指向 q 结点即可。而在选项 D 中,r-next=q,这时 r 指向的结点为q;p-next=r,这时 p 指向的结点为 r;q-next=r-next,因为 r 结点已经指向 q,所以执行这个语句后 q 又指向 q,所以选项 D 不能完成此操作。23.若有说明语句 char c=/72;,则变量 cA) 包含 1 个字符 B) 包含 2 个字符C) 包含 3 个字符 D) 说明不合法,c 的值不确定(分数:2.00)A. B.C.D.解析:解析 C 语言中允许用一
36、种特殊的字符常量,即以“/”开头的字符序列,称为转义字符。其中“/ddd“表示用八进制数表示一个字符的 ASCII 码值,本题中/72表示一个转义字符,因此变量 c 包含一个字符。24.有以下程序main() int a44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,j,k,t;for(i=0;i4;i+)for(j=0;j3;j+)fof(k=j+1;k4;k+)if(ajiaki)t=aji;aki;aki=t;/*按列排序*/for(i=0;i4;i+)printf(“%d,aii);程序运行后的输出结果是(分数:2.00)A. B.C.D.解析:解析 奉题利用
37、多重 for 循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。25.以下程序的输出结果是_。main()int a44=1,3,5,2,4,6,3,5,7printf(“%d%d%d%d/n“,a03,a12,a21,a30);A) 0650 B) 1470 C) 5430 D) 输出值不定(分数:2.00)A. B.C.D.解析:评析 对未给出初始值的整数数组元素,被默认初始化为零。26.下列程序的输出结果是( )。void f(int *x, int *y)int t;t=*x,*x
38、=*y;*y=t;main( )int a8=1,2,3,4,5,6,7,8,i,*p,*q;p=a;q=while(pq)f(p,q); p+ +; q-;for (i=0;i8;i+) printf(“%d,“,ai);A) 8,2,3,4,5,6,7,1 B) 5,6,7,8,1,2,3,4C) 1,2,3,4,5,6,7,8 D) 8,7,6,5,4,3,2,1(分数:2.00)A.B.C.D. 解析:解析 函数 f()的功能是对两个数据互换。在主函数中指针变量 p 和 q 分别指向数组 a8的首和尾,在 while 循环中实现从首尾开始数组元素的互换操作。27.对两个数组 a 和 b
39、 进行下列初始化:char m=“1234567“;char n=1,2,3,4,5,6,7;则下列叙述正确的是( )。A) 数组 m 与数组 n 完全相同B) 数组 m 与数组 n 长度相同C) 数组 m 比数组 n 长 1D) 数组 m 与数组 n 中都存放字符串(分数:2.00)A.B.C. D.解析:解析 本题考查字符数组和字符串赋值给数组的一些区别。语句“char m=“1234567“;”定义了一个字符型数组并进行了初始化,C 语言规定,在字符串的末尾自动加上串结束标记/0,因此数组 m 的长度是 8:而数组 n 是按照字符方式对数组进行初始化,系统不会自动加上串结束标记/0,因此
40、数组 n 的长度是 7。28.在 C 语言中,函数返回值的类型最终取决于( )。A) 函数定义时在函数首部所说明的函数类型B) return 语句中表达式值的类型C) 调用函数时主调函数所传递的实参类型D) 函数定义时形参的类型(分数:2.00)A. B.C.D.解析:解析 在 C 语言中,应当在定义函数时指定函数值的类型凡不加类型说明的函数,默认按整型处理。在定义函数时对函数值说明的类型一般应该和 return 语句中的表达式类型一致。如果函数值的类型和 return 语句中的表达式类型不一致,则以函数值的类型为准,由系统自动进行转换。即函数类型决定返回值的类型。29.设变量已正确定义,则下
41、列能正确计算 f=n!的程序段是( )。A) f=0;for(i=1;i=n;i+)f*=i;B) f=1;for(i=1;in;i+)f*=i;C) f=1;for(i=n;i1;i+)f*=i;D) f=1;for(i=n;i =2;i-)f*=i;(分数:2.00)A.B.C.D. 解析:解析 要正确计算函数 f=n!,由 n!的数学定义可知 n!=n*(n-1)*(n-2)*1。在选项 A 中,由于 f 的初值为 0,在 for 循环语句中,f 依次乘以 1,2,3, n。最后计算 f=n!=0,所以选项 A 不正确。在选项 B 中,f 的初值为 1,在 for 循环语句中,f 依次乘
42、以 1,2, 3,(n-1)。最后计算得到 f=(n-1)!,所以选项 B 不正确。在选项 C)中,f 的初值为 1,在 for 循环语句中, f 依次乘以 n,n+1,n+2,,所以选项 C)不正确。在选项 D)中,f 的初值为 1,在 for 循环语句中,f 依次乘以 n,n-1,n-2,2。最后计算 f=n!,所以选项 D)正确。30.若在某函数内部有定义:int a34;则数组 a 中各元素( )。A) 可在程序的运行阶段得到初值 0 B) 可在程序的编译阶段得到初值 0C) 不能得到确定的初值 D) 可在程序的编译或运行阶段得到初值 0(分数:1.00)A.B.C. D.解析:解析
43、在函数内部定义的存储类型为 auto 的变量或数组,如果没有进行初始化,就不能得到确定值。31.以下关于字符串的叙述中正确的是_。(A) C 语言中有字符类型的常量和变量(B) 两个字符串中的字符个数相同时才能进行字符串大小的比较(C) 可以用关系运算符对字符串的大小进行比较(D) 空串一定比空格打头的字符串小(分数:2.00)A.B.C.D. 解析:32.若有程序fun(int a,int bstatic int c=0;c+=a+b;return c;main()int x=5,y=3,z=7,r,r=fun(y,x+y),z);r=fun(xy);printf(“%d/n“,r);上面程
44、序的输出结果是_。A) 23 B) 15 C) 19 D) 18(分数:2.00)A. B.C.D.解析:评析 static 声明的外部变量只限于彼本文件引用,而不能被其他文件引用。用 static 来声明一个变量的作用有:对局部变量用 static 声明,则为该变量分配的空间在整个程序执行期间始终存在;全部变量用 static 声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。调用第一个fun,其两个实参的值为(3,5+3)与 7 即 8 与 7,在函数 fun 执行结束返回 15。第二次调用 fun 时,由于static 为静态类型,其值保留,执行 fun(5,3)后,其返回值为
45、 23,故选 A。33.下列函数的功能是fun(char *Da,char *b)while(*b=*a)!=/0) a+;b+;A) 将 a 所指字符串赋给 b 所指空间B) 使指针 b 指向 a 所指字符串C) 将 a 所指字符串和 b 所指字符串进行比较D) 检查 a 和 b 所指字符串中是否有/0(分数:2.00)A. B.C.D.解析:解析 表达式*b=*a 是将 a 所指的字符赋给 b 所指的空间,然后,指针 a 和 b 依次后移,直到到达指针 a 所指字符串的结尾。34.以下不正确的定义语句是( )。A) double x5=2.0,4.0,6.0,8.0,10.0;B) int
46、 y5.3=0,1,3,5,7,9;C) charc/=1,2,3,4,5;D) char c2=/x10,/xa,/x8;(分数:1.00)A.B. C.D.解析:解析 在一维数组中要注意的是下标常量表达式的值必须是大于等于零,并且小于自身元素的个数,选项 B) 的下标不是整数,所以错误。35.若已包括头文件stdio.h和string.h,运行下列程序段时输出结果是( )。int i=0;char s110=“ABCD“,s210=“EFG“;strcat(s1,s2);while(s2i+!=/0)s2i=s1i;puts(s2);A) ABC B) ABCDEF C) EBCDEFG D) CBD(分数:2.00)A.B.C. D.解析:解析 strcat(s1,s2)把 s2 连接到 s1 的后面,s1=ABCDEFG,执行 while(s2i+!=/0)后 i 的值变为 1,往后执行 s2i=s1i时是从把 s1 的第二位给 s2 的第二位开始,把 s1 赋给 s2。36.若有下列说明,则( )不是对 strcpy 库函数的正确的调用。strcpy 库函数用于复制一个字符串:char*str1=“abed“,str210,*str3=“hijklmn“,*str42,*str5=“aaa