1、二级 C语言笔试-244 及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:50.00)1.若有定义和语句:int*pp,*p, a=20,b=1O;pp= p= p= printf (“%d,%d/n“,*p,*pp);则输出结果是( )。(分数:1.00)A.20,10B.20,20C.10,20D.10,102.判断 char型变量 c1是否为小写字母的正确表达式为( )(分数:1.00)A.a=c 1=zB.(c1=a)|(c1=z)C.(a=c1|(z=c1)D.(c1=a)D.float 3_asd=3e-3:8.下列叙述中正确的是( )。(分数:
2、1.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对9.若各选项中所用变量已正确定义,fun()函数中通过 return语句返回一个函数值,下列选项中错误的程序是( )。(分数:1.00)A.main( )x=fun(2,10);float fun(int a,intb)B.float fun(int a,intb)main( )xfun(i,j);C.float fun(int, int);main( )x=fun(2,10);float fun(int a, intb
3、)D.main( ) float fun(int i,intj);x=fun(i,j);float fun(int a, intb)10.下列描述中正确的是( )。(分数:1.00)A.在 C语言程序中预处理是指完成宏替换和文件包含指定的文件的调用B.预处理指令只能位于 C源程序文件的首部C.预处理命令可以放在程序中的任何位置D.预处理命令结尾需要加分号11.下列程序的输出结果是( )。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);(分数:2.
4、00)A.4,5,12B.20C.5,4,20D.1212.下列说法中不正确的是( )。(分数:2.00)A.指针是一个变量B.指针中存放的是数值C.指针可以进行加、减等算术运算D.指针变量占用存储空间13.下列叙述中正确的是( )。(分数:2.00)A.软件交付使用后还需要进行维护B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令14.下列二维数组的说明中,不正确的是( )。(分数:2.00)A.float a4=0,1,8,5,9;B.int a34C.#define N 5 float aN3D.int a29.5;15.下列程
5、序的输出结果是( )。#include stdio.hmain()int a=O,i;for (i=1;i5;i+)swich(i)case 0:case 3:a+=1;case 1:case 2:a+=2;default:a+=3;printf (“%d“,(分数:2.00)A.;while(-k) printf(“%d“, k-=3);printf(“/n“);执行后的输出结果是( )。(分数:1.00)A.1B.2C.4D.死循环26.下列描述错误的是( )。(分数:1.00)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独
6、立性好”这个特征D.类是具有共同属性、共同方法的对象的集合27.在 C语言中,while 和 dowhile循环的主要区别是( )。(分数:1.00)A.dowhile的循环体不能是复合语句B.dowhile允许从循环体外转到循环体内C.while的循环体至少被执行一次D.dowhile的循环体至少被执行一次28.下列程序的输出结果是( )。main()int i=1,j=2,k=3;if(i+=1int i,j;gets(s);for(i=j=0;si !=/0;i+)if(si!=c)_;sj=/O;puts(s);(分数:2.00)填空项 1:_55.下列程序的运行结果是_。#inclu
7、de stdio.hfunc (a,b)static int m=0,i=2;i+=m+ 1;m=i+a+b;return(m);main()int k=5,m=3,p;p= func (k, m);printf(“%d“, p);p= func (k, m);printf(“%d、n“ ,p);(分数:2.00)填空项 1:_二级 C语言笔试-244 答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:50.00)1.若有定义和语句:int*pp,*p, a=20,b=1O;pp= p= p= printf (“%d,%d/n“,*p,*pp);则输出结果是(
8、)。(分数:1.00)A.20,10B.20,20C.10,20D.10,10 解析:解析本题考查指针变量的赋值。*pp是定义了一个指向指针的指针变量,语句 pp=D.float 3_asd=3e-3:解析:解析C 语言规定,标识符是由字母、数字或下画线组成,并且它的第一个字符必须是字母或者下画线。另外 C语言规定了一些专用的标识符,它们有着固定的含义,不能更改。int 就是表达变量类型的标识符,它不能再用做变量名和函数名。do 是 c语言的一个关键字,出不能再用做变量名和函数名。8.下列叙述中正确的是( )。(分数:1.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间
9、复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对 解析:解析算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况,它们之间没有内在联系。9.若各选项中所用变量已正确定义,fun()函数中通过 return语句返回一个函数值,下列选项中错误的程序是( )。(分数:1.00)A.main( )x=fun(2,10);float fun(int a,intb) B.float fun(int a,intb)main( )xfun(i,j);C.float fun(int, int);main( )x=fun(2,10);float
10、fun(int a, intb)D.main( ) float fun(int i,intj);x=fun(i,j);float fun(int a, intb)解析:解析C 语言规定,函数必须先定义,后调用(函数的返回值类型为 int或 char时除外)。在选项 A)中,调用的子函数在调用后面定义,所以不正确。在选项 B)、C)中,被调用函数在主调函数之前定义,再在主函数中调用,所以是正确的;在选项 D)中,在主调函数中先对子函数 float fun(int i,int j)进行了定义,然后进行调用。10.下列描述中正确的是( )。(分数:1.00)A.在 C语言程序中预处理是指完成宏替换和
11、文件包含指定的文件的调用B.预处理指令只能位于 C源程序文件的首部C.预处理命令可以放在程序中的任何位置 D.预处理命令结尾需要加分号解析:解析本题考查预处理命令的特点,编译预处理命令的特点:为了区别一般的语句,预处理命令行都必须以“#”号开始,结尾不加分号;预处理命令可以放在程序中的任何位置;在程序中凡是以“#”号开始的语句行都是预处理命令行。11.下列程序的输出结果是( )。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);(分数:2.00)A
12、.4,5,12B.20C.5,4,20 D.12解析:解析本题考查 if else语句。第一个 if语句,先判断条件,发现 ab 成立,执行下列的复合语句,得 c=a*b=20,b、a 的值不变。12.下列说法中不正确的是( )。(分数:2.00)A.指针是一个变量B.指针中存放的是数值 C.指针可以进行加、减等算术运算D.指针变量占用存储空间解析:解析指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。13.下列叙述中正确的是( )。(分数:2.00)A.软件交付使用后还需要进行维护 B.软件一旦交付使用就不需要再进行维护C.软件交付使用后
13、其生命周期就结束D.软件维护是指修复程序中被破坏的指令解析:解析软件生命周期一般可以分为软件定义,软件开发及软件运行维护 3个阶段。软件交付并投入运行后,需要不断地进行维护,并根据新提出的需求进行必要而且可能的扩展和删改。14.下列二维数组的说明中,不正确的是( )。(分数:2.00)A.float a4=0,1,8,5,9;B.int a34C.#define N 5 float aN3D.int a29.5; 解析:解析C 语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式:二维数组的一般定义格式是:类型说明符数组名常量表达式常量表达式。15
14、.下列程序的输出结果是( )。#include stdio.hmain()int a=O,i;for (i=1;i5;i+)swich(i)case 0:case 3:a+=1;case 1:case 2:a+=2;default:a+=3;printf (“%d“,(分数:2.00)A.;while(-k) printf(“%d“, k-=3);printf(“/n“);执行后的输出结果是( )。(分数:1.00)A.1 B.2C.4D.死循环解析:解析在程序语句中,k 的初始值为 5,进行第 1次 while循环后,k 自减 1为 4,非 0,执行循环体里的 printf语句,输出 1,此
15、时 k 的值变为 1。程序执行第 2次循环时,k 自减 1变为 0,为假,退出while循环语句。所以程序的最后结果为 1。26.下列描述错误的是( )。(分数:1.00)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征 D.类是具有共同属性、共同方法的对象的集合解析:解析对象的封装性是指从外面看只能看到对象的外部特性;而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。27.在 C语言中,while 和 dowhile循环的主要区别是( )。(分数:1.00)A.dowhile的循环体不能是复合语句
16、B.dowhile允许从循环体外转到循环体内C.while的循环体至少被执行一次D.dowhile的循环体至少被执行一次 解析:解析本题考查 while和 dowhile循环的区别。while 循环的控制出现在循环体之前,只有当while后面的表达式的值为非零时,才可能执行循环体;在 dowhile构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。28.下列程序的输出结果是( )。main()int i=1,j=2,k=3;if(i+=1”,其返回值等 8。所以变量 sum的值等于 8。37.下列能正确定义且赋初值的语句是( )。(分
17、数:1.00)A.int n1=n2=10;B.char c=32; C.float f=f+1.1;D.double x=12.3E2.5;解析:解析C 语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。在选项 A)中在给 n1和 n2进行赋初值,但变量 n2没有定义;在选项 C)中定义变量 f时,不能在赋值表达式的右边出现变量f自身,所以选项 C)错误;在选项 D)用指数表达式的常量中,字母 E后面的数应该为整数,而不应该为小数形式。因此,选项 B)正确。38.设有变量说明 int(*p)m,其中的标识符 p是( )。(分数:1.00)A.m个指向整型变量的指针B.指向 m个整型
18、变量的指针C.一个指向具有 m个整型元素的一维数组的指针 D.具有 m个指针元素的一维指针数组,每个元素都指向整型变量解析:解析本题考查指向数组的指针变量的声明。这里的 p表示一个指向数组的指针:*p 表示指针 p指向地址的内容。39.简单的交换排序方法是( )。(分数:1.00)A.快速排序B.选择排序C.堆排序D.冒泡排序 解析:解析所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。40.下列特征中不是面向对象方法的主要特征的是( )。(分数:1.00)A.多态性B.
19、继承C.封装性D.模块化 解析:解析面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的特点。二、填空题(总题数:15,分数:30.00)41.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_ (正确答案:自顶向下)解析:解析在程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括
20、为:自顶向下,逐步细化。42.注释一般分为序言性注释和 1 注释。(分数:2.00)填空项 1:_ (正确答案:功能性)解析:解析注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么。43.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_ (正确答案:对象)解析:解析在面向对象的程序设计方法中,类是具有相同的属性或方法的对象的抽象,对象是类的实例。44.某二叉树中度为 2的结点有 18个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)
21、解析:解析在任意一棵二叉树中,度数为 0的结点(即叶子结点)总比度为 2的结点多一个,因此该二叉树中叶子结点为 18+1=19。45.数据流图的类型有 1 和事务型。(分数:2.00)填空项 1:_ (正确答案:变换型)解析:解析典型的数据流类型有两种:变换型和事务型。46.x、y、x 均为 int型变量,描述“x、y 和 z中至少有两个为正数“的表达式是 1。(分数:2.00)填空项 1:_ (正确答案:(x0)int i,j;gets(s);for(i=j=0;si !=/0;i+)if(si!=c)_;sj=/O;puts(s);(分数:2.00)填空项 1:_ (正确答案:sj+=si
22、)解析:解析循环开始后如果数组 s中储存值与字符 c相同,则 i+直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过 j+将下标加 1,指向下一元素要存储的位置。55.下列程序的运行结果是_。#include stdio.hfunc (a,b)static int m=0,i=2;i+=m+ 1;m=i+a+b;return(m);main()int k=5,m=3,p;p= func (k, m);printf(“%d“, p);p= func (k, m);printf(“%d、n“ ,p);(分数:2.00)填空项 1:_ (正确答案:11 23)解析:解析在主函数中第一次调用 func子函数时,m=0,i=2,i=i+m+1=3,m=i+a+b=3+5+3=11。因为在子函数中将 m和 i定义成了 static类型,所以在子函数中对 m和 i进行的改变在下一次调用子函数时能进行保存,所以第二次调用子函数时,m=11,i=3,则 i=i+m+1=15, m=i+a+b=15+5+3=23。