1、二级 C 语言笔试 339 及答案解析(总分:80.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:50.00)1.sizeof(float)是( )。(分数:1.00)A.一种函数调用B.一种函数定义C.一个浮点表达式D.一个整型表达式2.下列合法的声明语句是( )。(分数:1.00)A.int_abc=50;B.double int=3+5e2.5;C.long do=1L;D.float 3_asd=3e-3:3.若各选项中所用变量已正确定义,fun()函数中通过 return 语句返回一个函数值,下列选项中错误的程序是( )。(分数:1.00)A.main( ) x=
2、fun(2,10); float fun(int a,int B.float fun(int a,int main( ) xfun(i,;C.float fun(int, in; main( ) x=fun(2,10); float fun(int a, int D.main( ) float fun(int i,int ; x=fun(i,; float fun(int a, int 4.下列程序的输出结果是( )。 main () int a=4,b=5,c; if(ab) c=a*b; printf(“%d,%d,%d/n“,b,a,c); else c=b/a;printf(“%d,%
3、d,%d/n“,b,a, c); (分数:1.00)A.4,5,12B.20C.5,4,20D.125.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是( )。(分数:1.00)A.实参与其对应的形参共占存储单元B.只有当实参与其对应的形参同名时才共占存储单元C.实参与其对应的形参分别占用不同的存储单元D.实参将数据传递给形参后,立即释放原先占用的存储单元6.在 C 语言程序中,下列说法正确的是( )。(分数:1.00)A.函数的定义和函数的调用均可以嵌套B.函数的定义不可以嵌套,但函数的调用可以嵌套C.函数的定义可以嵌套,但函数的调用不可以嵌套D.函数的定义和函数的调用均不可以嵌套
4、7.C 语言结构体类型变量在程序执行期间( )。(分数:1.00)A.所有成员一直驻留在内存中B.没有成员驻留在内存中C.部分成员驻留在内存中D.只有一个成员驻留在内存中8.下列特征中不是面向对象方法的主要特征的是( )。(分数:1.00)A.多态性B.继承C.封装性D.模块化9.若有定义和语句: 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,1010.对长度为 n 的线性表进行顺序查找,在最坏的情况下需要比较的次数为( )。(分数:1
5、.00)A.125B.n/2C.nD.n+111.下列叙述中正确的是( )。(分数:2.00)A.软件交付使用后还需要进行维护B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令12.若 ch 为 char 型变量,k 为 int 型变量(已知字符 a 的 ASCII 码是 97),则执行下列语句后输出的结果为( )。 ch=b; k=10; printf(“%x,%O,“,ch,ch,k); printf(“k=%d/n“,k);(分数:2.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为
6、 0 值或不定值C.62,142,k=%dD.62,142,k=%1013.设 x、y 和 z 是 int 型变量,且 x=4,y=6,z=8,则下列表达式中值为 0 的是( )。(分数:2.00)A.x (分数:2.00)A.19B.18C.6D.820.有下列程序: main( ) int k=5; while(-k) printf(“%d“, k-=3); printf(“/n“); 执行后的输出结果是( )。(分数:2.00)A.1B.2C.4D.死循环21.下列程序的输出结果是( )。 main() int i=1,j=2,k=3; if(i+=1 int i,j; gets(s);
7、 for(i=j=0;si !=/0;i+) if(si!=c)_; sj=/O; puts(s); (分数:2.00)填空项 1:_55.下列程序的运行结果是_。 #include stdio.h func (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 语言笔试 339 答案解析(总分:80.00,做题时间:9
8、0 分钟)一、B选择题/B(总题数:40,分数:50.00)1.sizeof(float)是( )。(分数:1.00)A.一种函数调用B.一种函数定义C.一个浮点表达式D.一个整型表达式 解析:解析sizeof (float)是 c 语言内部规定的用于计算单精度型变量(float)在计算机的内存中所占用的字节数量的函数,返回一个整数值。2.下列合法的声明语句是( )。(分数:1.00)A.int_abc=50; B.double int=3+5e2.5;C.long do=1L;D.float 3_asd=3e-3:解析:解析C 语言规定,标识符是由字母、数字或下画线组成,并且它的第一个字符必
9、须是字母或者下画线。另外 C 语言规定了一些专用的标识符,它们有着固定的含义,不能更改。int 就是表达变量类型的标识符,它不能再用做变量名和函数名。do 是 c 语言的一个关键字,出不能再用做变量名和函数名。3.若各选项中所用变量已正确定义,fun()函数中通过 return 语句返回一个函数值,下列选项中错误的程序是( )。(分数:1.00)A.main( ) x=fun(2,10); float fun(int a,int B.float fun(int a,int main( ) xfun(i,;C.float fun(int, in; main( ) x=fun(2,10); flo
10、at fun(int a, int D.main( ) float fun(int i,int ; x=fun(i,; float fun(int a, int 解析:解析C 语言规定,函数必须先定义,后调用(函数的返回值类型为 int 或 char 时除外)。在选项 A)中,调用的子函数在调用后面定义,所以不正确。在选项 B)、C)中,被调用函数在主调函数之前定义,再在主函数中调用,所以是正确的;在选项 D)中,在主调函数中先对子函数 float fun(int i,int j)进行了定义,然后进行调用。4.下列程序的输出结果是( )。 main () int a=4,b=5,c; if(a
11、b) c=a*b; printf(“%d,%d,%d/n“,b,a,c); else c=b/a;printf(“%d,%d,%d/n“,b,a, c); (分数:1.00)A.4,5,12B.20C.5,4,20 D.12解析:解析本题考查 if else 语句。第一个 if 语句,先判断条件,发现 ab 成立,执行下列的复合语句,得 c=a*b=20,b、a 的值不变。5.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是( )。(分数:1.00)A.实参与其对应的形参共占存储单元B.只有当实参与其对应的形参同名时才共占存储单元C.实参与其对应的形参分别占用不同的存储单元 D.实参
12、将数据传递给形参后,立即释放原先占用的存储单元解析:解析本题考查函数调用时的参数传递。函数的形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。 在函数调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间不影响。6.在 C 语言程序中,下列说法正确的是( )。(分数:1.00)A.函数的定义和函数的调用均可以嵌套B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义可以嵌套,但函数的调用不可以嵌套D.函数的定义和函数的调用均不可以嵌套解析:解析本题考查函数调用的基本概念。因为函数的结果是个未知量,而函数定义时不能使用未知量,所以函数定义
13、不可以嵌套,但函数的调用可以嵌套。7.C 语言结构体类型变量在程序执行期间( )。(分数:1.00)A.所有成员一直驻留在内存中 B.没有成员驻留在内存中C.部分成员驻留在内存中D.只有一个成员驻留在内存中解析:解析c 语言结构体类型变量在程序执行期间所有成员一直驻留在内存中。8.下列特征中不是面向对象方法的主要特征的是( )。(分数:1.00)A.多态性B.继承C.封装性D.模块化 解析:解析面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的
14、特点。9.若有定义和语句: 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,10 解析:解析本题考查指针变量的赋值。 *pp 是定义了一个指向指针的指针变量,语句 pp= (分数:2.00)A.19 B.18C.6D.8解析:解析本题考查 switch 语句。当 i=1 时,执行 case 1,因为没有遇到 break 语句,所以依次往下运行,a=a+2=2,a=a+3=5;当 i=2 时,执行 case 2,因为没有遇到 break 语
15、句,所以依次柱下运行,a=a+2=7, a=a+3=10:当 i=3 时,执行 case 3,a=a+1=11,因为没有遇到 break 语句,所以依次往下运行,a=a+2=13,a=a+3=16;当 i=4 时,执行 default,a=a+3=19,结束循环。20.有下列程序: main( ) int k=5; while(-k) printf(“%d“, k-=3); printf(“/n“); 执行后的输出结果是( )。(分数:2.00)A.1 B.2C.4D.死循环解析:解析在程序语句中,k 的初始值为 5,进行第 1 次 while 循环后,k 自减 1 为 4,非 0,执行循环体
16、里的 printf 语句,输出 1,此时 k 的值变为 1。程序执行第 2 次循环时,k 自减 1 变为 0,为假,退出while 循环语句。所以程序的最后结果为 1。21.下列程序的输出结果是( )。 main() int i=1,j=2,k=3; if(i+=1”,其返回值等 8。所以变量 sum 的值等于 8。38.下列能正确进行字符串赋值的是( )。(分数:1.00)A.char s5=“ABCDE“;B.char s5=A,B,C,D,E;C.char*s;s=“ABCDE“; D.char*s;printf(“%s“,;解析:解析字符串存储要有结束符“/0”且要占用一个空间,选项
17、A)、B 的空间不够;printf 用来输出字符,不能输入字符串。39.在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。(分数:1.00)A.调用语句B.命令C.口令D.消息 解析:解析在面向对象方法中,对象之间通过消息进行通信。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎么完成这些处理,接受者独立决定采用什么方式完成所需的处理。40.下列描述错误的是( )。(分数:1.00)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征 D.类是具有共同属性、共同方法的对
18、象的集合解析:解析对象的封装性是指从外面看只能看到对象的外部特性;而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。二、B填空题/B(总题数:15,分数:30.00)41.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_ (正确答案:自顶向下)解析:解析在程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括为:自顶向下,逐步细化。42.注释一般分为序言性注释和 1 注释。(分数:2.00)填空项 1:_ (正确
19、答案:功能性)解析:解析注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么。43.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_ (正确答案:对象)解析:解析在面向对象的程序设计方法中,类是具有相同的属性或方法的对象的抽象,对象是类的实例。44.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:解析在任意一棵二叉树中,度数为 0 的结点(即叶子结点)总比度为 2 的结点多一个,因此该二叉树
20、中叶子结点为 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)解析:解析循环开始后如果数组 s 中储存值与字符 c 相同,则 i+直接跳过当
21、前值;如果不相同,则将当前值赋予数组指定位置,并通过 j+将下标加 1,指向下一元素要存储的位置。55.下列程序的运行结果是_。 #include stdio.h func (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。