1、二级 C 语言笔试-375 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.下列关于队列的叙述中正确的是A) 在队列中只能插入数据 B) 在队列中只能删除数据C) 队列是先进先出的线性表 D) 队列是先进后出的线性表(分数:2.00)A.B.C.D.2.对于存储同样的一组数据元素而言A) 顺序结构比链接结构易于扩充空间B) 顺序结构与链接结构相比,更有利于对元素进行插入、删除运算C) 顺序结构占用整块空间,而链接结构不要求整块空间D) 顺序结构比链接结构多占存储空间(分数:2.00)A.B.C.D.3.算法的有穷性是指A) 算法程序的运行时
2、间是有限的 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) 用 E-R 图能够表示实体集之间一对一的联系、一对多的联系和多对多的联系B) 用 E-R 图只能表示实体集之间一对
3、一的联系C) 用 E-R 图只能表示实体集之间一对多的联系D) 用 E-R 图表示的概念数据模型只能转换为关系数据模型(分数:2.00)A.B.C.D.7.结构化程序设计主要强调的是A) 程序的规模 B) 程序的效率C) 程序设计语言的先进性 D) 程序的易读性(分数:2.00)A.B.C.D.8.下面关于数据库系统的叙述中正确的是A) 数据库系统减少了数据冗余B) 数据库系统避免了一切冗余C) 数据库系统中数据的一致性是指数据类型的一致D) 数据库系统比文件系统能管理更多的数据(分数:2.00)A.B.C.D.9.层次型、网状型和关系型数据库的划分原则是A) 数据之间的联系方式 B) 记录长
4、度C) 联系的复杂程度 D) 文件的大小(分数:2.00)A.B.C.D.10.有两个关系 R 和 T 如下:(分数:2.00)A.B.C.D.11.下列叙述中错误的是A) 一个 C 语言程序只能实现一种算法 B) C 程序可以由多个程序文件组成C) C 程序可以由一个或多个函数组成 D) 一个 C 函数可以单独作为一个 C 程序文件存在(分数:1.00)A.B.C.D.12.按照 C 语言规定的用户标识符命名规则,不能出现在标识符中的是A) 大写字母 B) 连接符 C) 数字字符 D) 下划线(分数:1.00)A.B.C.D.13.以下选项中不属于字符常量的是A) “E“ B) E C) /
5、xCC D) /072(分数:1.00)A.B.C.D.14.以下定义语句中正确的是A) int a=b=0; B) char A=65+1, b=b; C) float a=1, * b=a, * c=b; D) double a=0.0; b=1.1;(分数:1.00)A.B.C.D.15.设有定义:float x=123.4567; ,则执行 printf(“%f/n“,(int)(x*100+0.5)/100.0)语句后的输出结果是A) 123.460000 B) 123.456700 C) 123.450000 D) 123(分数:1.00)A.B.C.D.16.设有定义:int m
6、=0; 以下选项的 4 个表达式中与其他 3 个表达式的值不相同的是A) +m B) m+=1 C) m+ D) m+1(分数:1.00)A.B.C.D.17.若变量已正确定义,有以下程序段:int a=3, b=5, c=7; if(ab) a=b; c=a; if(c!=a)c=b; printf(“%d, %d, %d/n“, a, b, c); 其输出结果是A) 程序段有语法错误 B) 3,5,3 C) 3,5,5 D) 3,5,7(分数:1.00)A.B.C.D.18.若有定义:float x=1.5; int a=1, b=3, c=2; ,则正确的 switch 语句是A) sw
7、itch(x)case 1.0:printf(“ * /n“); case 2.0:printf(“* * /n“); B) switch(int) x); case 1:printf(“ * /n“); case 2:printf(“ * * /n“); C) switch(a+b)case 1 :printf(“ * /n“); case 2+1:printf(“ * * /n“); D) switch(a+b)case 1 :printf(“ * /n“); case c:printf(“ * * /n“);(分数:1.00)A.B.C.D.19.设有以下程序段:int x=0,s=0;
8、 while(!x!=0)s+=+x; printf(“%d“, s); 则A) 运行程序段后输出 0 B) 运行程序段后输出 1C) 程序段中的控制表达式是非法的 D) 程序段执行无限次(分数:1.00)A.B.C.D.20.有以下程序#includestdio.hmain()int n=2, k=0; while(k+n+2); printf(“%d%d/n“, k, n); 程序运行后的输出结果是A) 0 2 B) 1 3 C) 5 7 D) 1 2(分数:1.00)A.B.C.D.21.若有定义:int x=0, * p=x; ,则语句 printf(“%d/n“,*p)的输出结果是A
9、) 随机值 B) O C) x 的地址 D) p 的地址(分数:2.00)A.B.C.D.22.以下叙述中错误的是A) C 语句必须以分号结束 B) 复合语句在语法上被看作一条语句C) 空语句出现在任何位置都不会影响程序运行 D) 赋值表达式末尾加分号就构成赋值语句(分数:2.00)A.B.C.D.23.有以下程序:#includestdio.hint f(int x)int y; if(x=0|x=1) return(3); y=x* x-f(x-2);return y; main()int z; z=f(3);printf(“%d/n“, z); 程序的运行结果是A) 0 B) 9 C)
10、6 D) 8(分数:2.00)A.B.C.D.24.在 C 语言中,运算对象必须是整型数的运算符是A) % B) / C) %和/ D) *(分数:2.00)A.B.C.D.25.设有定义语句 int(*f)(int); ,则以下叙述正确的是A) f 是基类型为 mt 的指针变量B) f 是指向函数的指针变量,该函数具有一个 int 类型的形参C) f 是指向 int 类型一维数组的指针变量D) f 是函数名,该函数的返回值是基类型为 int 类型的地址(分数:2.00)A.B.C.D.26.以下不能正确定义二维数组的选项是A) int a22=1, 2; B) int a2=1, 2, 3,
11、 4; C) int a22=1, 2, 3; D) inta2=1, 2, 3, 4(分数:2.00)A.B.C.D.27.若要求从键盘读入含有空格字符的字符串,应使用函数A) getc() B) gets() C) getchar() D) scanf()(分数:2.00)A.B.C.D.28.以下程序运行后的输出结果是main()char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(“%d%f/n“,n, x); A) 2 20.000000 B) 100, 20.000000 C) 2 40.000000 D)
12、100 40.000000(分数:2.00)A.B.C.D.29.以下叙述中错误的是A) 改变函数形参的值,不会改变对应实参的值B) 函数可以返回地址值C) 可以给指针变量赋一个整数作为地址值D) 当在程序的开头包含头文件“stdio.h”时,可以给指针变量赋 NULL(分数:2.00)A.B.C.D.30.以下是 if 语句的基本形式:if(表达式)语句其中“表达式”_。A) 必须是逻辑表达式 B) 必须是关系表达式C) 必须是逻辑表达式或关系表达式 D) 可以是任意合法的表达式(分数:2.00)A.B.C.D.31.现有如下程序段:#include “stdio.h“main()int a
13、56=23, 3, 65, 21, 6, 78, 28, 5, 67, 25, 435, 76, 8, 22, 45, 7, 8, 34, 6, 78, 32, 4, 5, 67, 4, 21, 1; int i=0, j=5; printf(“%d/n“, *(a00+2*i+j-2); 则程序的输结果是A) 78 B) 23 C) 21 D) 28(分数:2.00)A.B.C.D.32.下面程序的输出结果是#include stdio.h#include string.hmain()char p120=“abc“, *p2=“ABC“, str50=“xyz“; strcpy(str+2,
14、 strcat(p1, p2); printf(“%s/n“, str); A) xyzabcABC B) zabcABC C) xyabcABC D) yzabcABC(分数:2.00)A.B.C.D.33.有以下程序,程序中库函数 islower(ch)用以判断 ch 中的字母是否为小写字母。#includestdio.h#includectype.hvoid fun(char * p)inti=0:while(pij)if(pi=“islower(pi-1)pi-1=pi-1-a+A;+; main()char s1100=“ab cd EFG!“;fun(s1); printf(“%s
15、/n“, s1); 程序运行后的输出结果是A) ab cd EFG! B) Ab Cd EFg! C) aB cD EFG! D) ab cd EFg!(分数:2.00)A.B.C.D.34.以下程序运行后的输出结果是void swap(int x, int y)int t; t=x;x=y;y=t; main()int a=15, b=16; swap(a, b); printf(“% d % d“, a, b); A) 15, 16 B) 16, 15 C) 15, 15 D) 16, 16(分数:2.00)A.B.C.D.35.有以下程序:#include string.hstruct
16、STUchar name 10; int num; void f(char * name, int num)struct STU s2= “ SunDan“, 20044, “ Penghua“, 20045; num=s0.num; strcpy(name, s0.name); main()struct STU s2= “YangSan“, 20041, “ LiSiGuo“, 20042 , * p; p=s1; f(p-name, p-num); printf(“ % s % d/n“, p- name, p-num); 程序运行后的输出结果是A) SunDan 20042 B) Sun
17、Dan 20044 C) LiSiGuo 20042 D) YangSan 20041(分数:2.00)A.B.C.D.36.以下程序的输出结果是#includestdio.hint a33=1, 3, 5, 7, 9, 11, 13, 15, 17, , *p; main()p=(int *)malloc(sizeof(int); f(p, a); printf(“%d/n“, *p); free(p); f(int *s, int p3)*s=p11; A) 1 B) 7 C) 9 D) 13(分数:2.00)A.B.C.D.37.在 C 语言中,变量的隐含存储类别是A) auto B)
18、static C) extem D) 无存储类别(分数:2.00)A.B.C.D.38.以下选项中,能定义 s 为合法的结构体变量的是A) typedef struct ABCdouble a; char b10; s; B) structdouble a; char b10; s; C) struct ABCdouble a; char b10; ABC s; D) typedef ABCdouble a; char b10; ABC s;(分数:2.00)A.B.C.D.39.以下程序运行后的输出结果是#include string.hmain()char m20= a, b, c, d,
19、 n=“abe“, k=“abcde“; strcpy (m+strlen (n), k); strcat (m, n); prinff(“ % d% d /n“, sizeof(m), strlen (m); A) 20 11 B) 9 9 C) 20 9 D) 11 11(分数:2.00)A.B.C.D.40.以下程序的运行结果是#include stdio.hmain()int a=1, b=2, c=3, x; x=(ab)c; printf(“%d/n“, x); A) 0 B) 1 C) 2 D) 3(分数:2.00)A.B.C.D.二、填空题(总题数:12,分数:30.00)41
20、.设有下列二叉树:(分数:2.00)填空项 1:_42.软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、可修改性等特性,其中最重要的是 1。(分数:2.00)填空项 1:_43.数据库系统在三级模式之间提供了两层映射,这两层映射是 1 和模式/内模式映射。(分数:2.00)填空项 1:_44.测试的目的是暴露错误,评价程序的可靠性;而 1 的目的是发现错误的位置并改正错误。(分数:2.00)填空项 1:_45.关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、 1 和自定义完整性。(分数:2.00)填空项 1:_46.已知字符 A 的 ASCII 代码值为 65,以下程序
21、运行时若从键盘输入:B33回车,则输出结果是_。#includestdio.hmain()char a, b; a=getchar(); scanf(“%d“, b); a=a-A+0; b=b*2; printf(“% c % c/n“, a, b); (分数:2.00)填空项 1:_以下程序的定义语句中,x1的初值是 (7) ,程序运行后输出的内容是 (8) 。#includestdio.hmain()int x=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, *p4, 1; for(i=0; i4; i+)pi=x2*i+1;
22、 printf(“%d“, pi0); printf(“/n“); (分数:4.00)填空项 1:_填空项 1:_以下函数 rotade 的功能是:将 a 所指 N 行 N 列的二维数组中的最后一行放到 b 所指二维数组的第 0 列中,把 a 所指二维数组中的第 0 行放到 b 所指二维数组的最后一列中,b 所指二维数组中其他数据不变,请填空。#define N 4void rotade(int aN, int bN)int I, j; for(I=0; IN;I+)bIN-1= (9) ; (10) =aN-1I;(分数:4.00)填空项 1:_填空项 1:_47.以下程序的运行结果是_。#
23、includestdio.hmain()int fun(); fun(); fun()static int a3=0, 1, 2; int i; for(i=0; i3; i+)ai+=ai; for(i=0; i3; i+)printf(“%d, “, ai); printf(“/n“);(分数:2.00)填空项 1:_48.以下程序的输出结果是_。int fun(int*x, int n)if(n=0) return x0; else return x0+fun(x+l, n-1); main()int a=1, 2, 3, 4, 5, 6, 7; printf(“%d/n“, fun(a
24、, 3);(分数:2.00)_49.以下程序用来输出结构体变量 ex 所占存储单元的字节数,请填空。struct stchar name20; double score; ; main()struct st ex; printf(“ex size:%d/n“, sizeof(_);(分数:2.00)填空项 1:_以下程序的功能是从名为“filea. dat”的文本文件中逐个读入字符并显示在屏幕上,请填空。#includestdio.hmain()FILE *fp; char ch; fp=fopen( (14) ); ch=fgetc(fp);while( (15) (fp)putchar(c
25、h); ch=fgetc(fp); putchar(/n); fclose(fp); (分数:4.00)填空项 1:_填空项 1:_二级 C 语言笔试-375 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.下列关于队列的叙述中正确的是A) 在队列中只能插入数据 B) 在队列中只能删除数据C) 队列是先进先出的线性表 D) 队列是先进后出的线性表(分数:2.00)A.B.C. D.解析:解析 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(f
26、ront)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的。2.对于存储同样的一组数据元素而言A) 顺序结构比链接结构易于扩充空间B) 顺序结构与链接结构相比,更有利于对元素进行插入、删除运算C) 顺序结构占用整块空间,而链接结构不要求整块空间D) 顺序结构比链接结构多占存储空间(分数:2.00)A.B.C. D.解析:解析 顺序结构中,元素之间的关系通过存储单元的邻接关系来表示,其存储空间必须占用整块空间;链接结构中,结点之间的关系通过指针来表示,不要求整块空间。3.算法的有穷性是指A) 算法程序的运行时间是有限的 B) 算法程序所处理的数据量是有限的C) 算法程序的长度是有限的
27、 D) 算法只能被有限的用户使用(分数:2.00)A. B.C.D.解析:解析 算法具有 5 个特性:有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义;可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现;输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合;输出:一个算法有一个或多个输出。4.下面的描述中,不属于软件危机表现的是A) 软件过程不规范 B) 软件质量难以控制C) 软件开发生产率低 D) 软件成本不断
28、提高(分数:2.00)A. B.C.D.解析:解析 软件危机是计算机软件在它的开发和维护过程中所遇到的一系列严重问题。主要表现在以下 6 个方面:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件可维护性差;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。5.软件的_设计又称总体结构设计,其主要任务是建立软件系统的总体结构。A) 概要 B) 抽象 C) 逻辑 D) 规划(分数:2.00)A. B.C.D.解析:解析 软件设计分为概要设计和详细设计。概要设计又称总体结构设计,其主要任务是建立软件系统的总体结构。6.下列叙述中,正确的是A) 用
29、E-R 图能够表示实体集之间一对一的联系、一对多的联系和多对多的联系B) 用 E-R 图只能表示实体集之间一对一的联系C) 用 E-R 图只能表示实体集之间一对多的联系D) 用 E-R 图表示的概念数据模型只能转换为关系数据模型(分数:2.00)A. B.C.D.解析:解析 两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。7.结构化程序设计主要强调的是A) 程序的规模 B) 程序的效率C)
30、 程序设计语言的先进性 D) 程序的易读性(分数:2.00)A.B.C.D. 解析:解析 结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用 goto语句,总的来说可使程序结构良好、易读、易理解、易维护。8.下面关于数据库系统的叙述中正确的是A) 数据库系统减少了数据冗余B) 数据库系统避免了一切冗余C) 数据库系统中数据的一致性是指数据类型的一致D) 数据库系统比文件系统能管理更多的数据(分数:2.00)A. B.C.D.解析:解析 数据的共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一
31、数据在不同位置出现时应保持相同的值。9.层次型、网状型和关系型数据库的划分原则是A) 数据之间的联系方式 B) 记录长度C) 联系的复杂程度 D) 文件的大小(分数:2.00)A. B.C.D.解析:解析 数据库按数据模型分为层次型数据库、网状型数据库、关系型数据库,数据模型即数据之间的联系方式。因此正确选项为 A)。10.有两个关系 R 和 T 如下:(分数:2.00)A. B.C.D.解析:解析 从关系中找出满足给定条件元组的操作称为选择。选择是从行的角度进行的运算,即从水平方向抽取记录。由图可知关系 R 通过运算得到关系 T,关系 T 与关系 R 相比,属性的个数没有发生变化,记录的条数
32、发生了变化。因此所使用的运算应该是选择,故本题答案为 A)。11.下列叙述中错误的是A) 一个 C 语言程序只能实现一种算法 B) C 程序可以由多个程序文件组成C) C 程序可以由一个或多个函数组成 D) 一个 C 函数可以单独作为一个 C 程序文件存在(分数:1.00)A. B.C.D.解析:解析 一个 C 程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C 语言程序可以实现多种算法。12.按照 C 语言规定的用户标识符命名规则,不能出现在标识符中的是A) 大写字母 B) 连接符 C) 数字字符 D) 下划线(分数:1.00)A.B. C.D.解析:解析 本题考查的是标识符
33、。C 语言规定标识符只能由字母、数字和下划线 3 种字符组成,且第一个字符必须为字母或下划线。13.以下选项中不属于字符常量的是A) “E“ B) E C) /xCC D) /072(分数:1.00)A. B.C.D.解析:解析 在 C 语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项 B)、C)和 D)为正确的字符常量,而选项 A)是用双引号括起来的字符,表示一个字符串常量。14.以下定义语句中正确的是A) int a=b=0; B) char A=65+1, b=b; C) float a=1, * b=a, * c=b; D) double a=0.0
34、; b=1.1;(分数:1.00)A.B. C.D.解析:解析 本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开,因此选项 A)和 D)错误。在选项 C)中,变量 c 是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量 b,故选项 C)错误。15.设有定义:float x=123.4567; ,则执行 printf(“%f/n“,(int)(x*100+0.5)/100.0)语句后的输出结果是A) 123.460000 B) 123.456700 C) 123.450000 D) 123(分数:1.00)A. B.C.D.解析:解析 (x*100+0.5
35、)的计算结果为 12346.17。由于类型转换运算符()的优先级高于除法运算符/,所以先执行(int)12346.17,将 12346.17 转换为整型数 12346,再执行 12346/100.0,并在输出时按照格式化输出%f 的要求,将计算结果转换为 float 型后再输出。所以,最终结果为 123.460000。16.设有定义:int m=0; 以下选项的 4 个表达式中与其他 3 个表达式的值不相同的是A) +m B) m+=1 C) m+ D) m+1(分数:1.00)A.B.C. D.解析:解析 选项中的 4 个表达式执行后,m 的值都递增 1。选项 C)中,表达式的值是 m 递增
36、前的值,为 0。选项 A)、B)、D)中,表达式的值都是 m 递增后的值,为 1。17.若变量已正确定义,有以下程序段:int a=3, b=5, c=7; if(ab) a=b; c=a; if(c!=a)c=b; printf(“%d, %d, %d/n“, a, b, c); 其输出结果是A) 程序段有语法错误 B) 3,5,3 C) 3,5,5 D) 3,5,7(分数:1.00)A.B. C.D.解析:解析 两个 if 语句的判断条件都不满足,程序只执行了 c=a 这条语句,所以变量 c 的值等于 3,变量 b 的值没有变化,程序输出的结果为 3, 5, 3。18.若有定义:float
37、 x=1.5; int a=1, b=3, c=2; ,则正确的 switch 语句是A) switch(x)case 1.0:printf(“ * /n“); case 2.0:printf(“* * /n“); B) switch(int) x); case 1:printf(“ * /n“); case 2:printf(“ * * /n“); C) switch(a+b)case 1 :printf(“ * /n“); case 2+1:printf(“ * * /n“); D) switch(a+b)case 1 :printf(“ * /n“); case c:printf(“ *
38、 * /n“);(分数:1.00)A.B. C.D.解析:解析 C 语言中,switch 语句专用于实现多分支结构程序,其特点是各分支清晰且直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式各不相同。19.设有以下程序段:int x=0,s=0; while(!x!=0)s+=+x; printf(“%d“, s); 则A) 运行程序段后输出 0 B) 运行程序段后输出 1C) 程序段中的控制表达式是非法的 D) 程序段执行无限次(分数:1.00)A.B. C.D.解析:解析 考查 whil
39、e 语句的使用,逻辑非运算符和不等于运算符的区别,逻辑非运算符“!”的优先级大于不等于运算符“!=”的优先级。20.有以下程序#includestdio.hmain()int n=2, k=0; while(k+n+2); printf(“%d%d/n“, k, n); 程序运行后的输出结果是A) 0 2 B) 1 3 C) 5 7 D) 1 2(分数:1.00)A.B.C.D. 解析:解析 本题考查逻辑运算符的“短路”现象,由于 k 的值为 0,表达式首先去求 k+的值,因为表达式 k+的值为 0,系统完全可以确定逻辑表达式的运算结果总是为 0,因此将跳过 n+2,不再对它进行求值,即 k
40、的值加 1,n 的值不变。21.若有定义:int x=0, * p=x; ,则语句 printf(“%d/n“,*p)的输出结果是A) 随机值 B) O C) x 的地址 D) p 的地址(分数:2.00)A.B. C.D.解析:解析 题中定义的语句等价于以下语句:int x=0, *p; p=x; ,故本题定义一个整型变量 x 和一个指向整型的指针 p,并把变量 x 的地址赋值给p,即 p 为指向整型变量 x 的指针,则*p 表示 p 所指向的整型变量 x 的数值。22.以下叙述中错误的是A) C 语句必须以分号结束 B) 复合语句在语法上被看作一条语句C) 空语句出现在任何位置都不会影响程
41、序运行 D) 赋值表达式末尾加分号就构成赋值语句(分数:2.00)A.B.C. D.解析:解析 本题考查的是 C 语句。“空语句出现在任何位置都不会影响程序运行”这句话是错误的,例如在 for 循环中,循环条件语句为空时,则不判断循环条件,循环将无休止地进行下去,导致了此循环为死循环。23.有以下程序:#includestdio.hint f(int x)int y; if(x=0|x=1) return(3); y=x* x-f(x-2);return y; main()int z; z=f(3);printf(“%d/n“, z); 程序的运行结果是A) 0 B) 9 C) 6 D) 8(
42、分数:2.00)A.B.C. D.解析:解析 函数 int f(int x)是一个递归函数调用,当 x 的值等于 0 或 1 时,函数值等于 3,其他情况下 y=x2-f(x-2),所以在主函数中执行语句 z=f(3)时,y=3*3-f(3-2)=9-f(1)=9-3=6。24.在 C 语言中,运算对象必须是整型数的运算符是A) % B) / C) %和/ D) *(分数:2.00)A. B.C.D.解析:解析 在 C 语言中,“%”运算符两侧的运算数必须是整型。25.设有定义语句 int(*f)(int); ,则以下叙述正确的是A) f 是基类型为 mt 的指针变量B) f 是指向函数的指针
43、变量,该函数具有一个 int 类型的形参C) f 是指向 int 类型一维数组的指针变量D) f 是函数名,该函数的返回值是基类型为 int 类型的地址(分数:2.00)A.B. C.D.解析:解析 本题考查的是指向函数的指针。语句 int(*f)(int);是对一个函数的声明,其中 f 是指向该函数的指针,该函数有一个整型参数,函数返回值类型为整型。26.以下不能正确定义二维数组的选项是A) int a22=1, 2; B) int a2=1, 2, 3, 4; C) int a22=1, 2, 3; D) inta2=1, 2, 3, 4(分数:2.00)A.B.C.D. 解析:解析 本题
44、的考查点是二维数组的定义和初始化。选项 A)定义的数组中各元素实际上是这样的:1,02,0选项 B)定义的数组中各元素实际上是这样的:1,23,4选项 C)定义的数组中各元素实际上是这样的:1,02,3选项 D)错在省略了第 2 维的长度。C 语言中在对数组进行初始化时,如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第 1 维的长度可以不指定,但第 2 维的长度不能省略。27.若要求从键盘读入含有空格字符的字符串,应使用函数A) getc() B) gets() C) getchar() D) scanf()(分数:2.00)A.B. C.D.解析:解析 scanf()语句用“空
45、格”区别不同的字符串,遇到空格结束,所以不能读入空格;getc()与 getchar()语句不能用于字符串的读入。28.以下程序运行后的输出结果是main()char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(“%d%f/n“,n, x); A) 2 20.000000 B) 100, 20.000000 C) 2 40.000000 D) 100 40.000000(分数:2.00)A. B.C.D.解析:解析 对于 C 语言中的赋值运算符,必须遵循以下规则:赋值运算符的优先级别只高于逗号运算符,比其他任何运算符的优
46、先级都低,并且具有自右向左的结合性。因此先得到变量 c 的值为 50,变量n 经过计算结果为 2,最后通过变量 f 的值 10 和 n 的值 2 相乘得到变量 x 的值,为 20.000000。因此选项A)正确。29.以下叙述中错误的是A) 改变函数形参的值,不会改变对应实参的值B) 函数可以返回地址值C) 可以给指针变量赋一个整数作为地址值D) 当在程序的开头包含头文件“stdio.h”时,可以给指针变量赋 NULL(分数:2.00)A.B.C. D.解析:解析 函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对应实参的值,选项 A)正确。指针类型的函数可以返回地址值,选项 B)正
47、确。在文件 stdio.h 中,NULL 被定义为 void 型的指针,选项 D)也正确。指针变量的值只能是存储单元地址,而不能是一个整数,选项 C)错误。30.以下是 if 语句的基本形式:if(表达式)语句其中“表达式”_。A) 必须是逻辑表达式 B) 必须是关系表达式C) 必须是逻辑表达式或关系表达式 D) 可以是任意合法的表达式(分数:2.00)A.B.C.D. 解析:解析 C 语言中 if(表达式)中表达式的值可以是任意合法的表达式,如果表达式的值为 0,表示条件为假,如果表达式的值非 0,表示条件为真。31.现有如下程序段:#include “stdio.h“main()int a56=23, 3, 65, 21, 6, 78, 28, 5, 67, 25, 435, 76, 8, 22, 45, 7, 8, 34, 6, 78, 32, 4, 5, 67, 4, 21, 1; int i=0, j=5; printf(“%d/n“, *(a00+2*i+j-2); 则程序的