1、二级 C 语言-34 及答案解析(总分:58.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:45.00)1.设 int 型占 2 个字节,则 unsigned int 所能表示的数据范围是_。 A. 065535 B. -3276932767 C. 165536 D. 032767(分数:1.00)A.B.C.D.2.C 语言规定,在一个源程序中,main 函数的位置 A. 必须在最开始 B. 必须在系统调用的库函数的后面 C. 可以任意 D. 必须在最后(分数:1.00)A.B.C.D.3.以下选项中不合法的标识符是U /U。 A. print B. FOR C. ai=
2、aj;aj=t;fun(a,+i,-j);main() int a=1,2,3,4,5,6,i;fun(a,0,5);for(i=0;i6;i+)printf(“%d“,ai);执行后的输出结果是 _。 A. 6 5 4 3 2 1 B. 4 3 2 1 5 6 C. 4 5 6 1 2 3 D. 1 2 3 4 5 6(分数:2.00)A.B.C.D.8.以下语句或语句组中,能正确进行字符串赋值的是( )。 A. char *sp; *sp=“right!“; B. char s10; s=“right!“; C. char s10; *s=“right!“; D. char *sp=“ri
3、ght!“;(分数:1.00)A.B.C.D.9.若有如下定义:int x=6,y=3,z=2;则表达式“x=y|yz 该语句所表示的含义是 _。 (分数:2.00)A.B.C.D.11.已知在 ASCII 字符集中,数字 0 的序号为 48,下列程序的输出结果为_。main() char a=0,b=9;printf(“%d,%c/n“,a,b) ; A. 因输出格式不合法 B. 48,57 C. 0,9 D. 48,9(分数:1.00)A.B.C.D.12.数据的存储结构是指U /U。 A. 存储在外存中的数据 B. 数据所占的存储空间量 C. 数据在计算机中的顺序存储方式 D. 数据的逻
4、辑结构在计算机中的表示(分数:1.00)A.B.C.D.13.有以下程序:#includestdio.hmain()char c6;int i=0;for(;i6;ci=getchar(),i+);for(i=O;i6;i+)putchar(ci);printf(“/n“);如果从键盘上输入:ab回车c回车def回车则输出结果为_。 A. a B. a C. ab D. abcdef b b c c c d d d e f (分数:1.00)A.B.C.D.14.软件设计中模块划分应遵循的准则是U /U。 A.低内聚、低耦合 B.高内聚、低耦合 C.低内聚、高耦合 D.高内聚、高耦合(分数:1
5、.00)A.B.C.D.15.下列关于队列的叙述中,正确的是 A. 在队列中只能插入数据 B. 在队列中只能删除数据 C. 队列是先进先出的线性表 D. 队列是先进后出的线性表(分数:1.00)A.B.C.D.16.设 q1 和 q2 是指向一个 int 型一维数组的指针变最,k 为 float 型变量,下列小能正确执行的语句是U /U。 A. k=*q1*(*q2); B. q1=k; C. q1=q2; D. k=*q1+*q2;(分数:2.00)A.B.C.D.17.以下程序的输出结果是#includestdi0hmain() int i=0,a=0;while(i20) for(;)
6、if(i%10)=0)break;elsei-;i+=11;a+=i;printf(“%d/n”,A) ; A. 21 B. 32 C. 33 D. 11(分数:1.00)A.B.C.D.18.设有以下定义: int a=0;double b=1.25;char c=A; #define d 2 则下面语句中错误的是U /U。 A) a+; B) b+; C) c+;D) d+;(分数:2.00)A.B.C.D.19.以下合法的赋值语句是_。 A. X=Y=100 B. D-; C. X+Y; D. C=int(A+B)(分数:1.00)A.B.C.D.20.在函数 scanf 的格式控制中,
7、格式说明的类型与输入项的类型应该对应匹配。如果类型不匹配,系统将U /U。 A. 不予接收 B. 并不给出出错信息,但不能得到正确的数据 C. 能接收到正确输入 D. 给出出错信息,不予接收输入(分数:1.00)A.B.C.D.21.以下程序中与语句 k=ab?(bc?1:0):0;功能等价的是 A. if(ab) n+=m;return n;main() int n=0;printf(“%d,“,f(+n);printf(“%d/n“,f(n+);程序运行后的输出结果是U /U。 A.1,2 B.1,1 C.2,3 D.3,3(分数:2.00)A.B.C.D.29.设有以下语句:int a=
8、1,b=2,c;c=a(b2);执行后,c 的值为U /U。 A.6 B.7 C.8 D.9(分数:1.00)A.B.C.D.30.以下程序运行后,输出结果是( )。#define PT 5.5#define S(x) PT*x*x#includestdio.hmain() int a=1, b=2; printf(“%4.1f/n“, S(a+b) ); A. 49.5 B. 9.5 C. 22 D. 45.0(分数:1.00)A.B.C.D.31.下列叙述中正确的是U /U。 A. 软件交付使用后还需要进行维护 B. 软件一旦交付使用就不需要再进行维护 C. 软件交付使用后其生命周期就结束
9、 D. 软件维护是指修复程序中被破坏的指令(分数:2.00)A.B.C.D.32.有以下程序段typedef struct node(int data; struct node *next;) *NODE;NODE p;以下叙述中正确的是_。 A. P 是指向 struct node 结构变量的指针的指针 B. NODE p;语句出错 C. P 是指向 struct node 结构变量的指针 D. P 是 struct node 结构变量(分数:2.00)A.B.C.D.33.下面的程序 ASC。main() int x=3,y=0,z=0;if(x=y+z)printf(“*“);elsep
10、rintf(“#“); A. 有语法错误不能通过编译 B. 输出* C. 可以通过编译,但是不能通过连接,因而不能运行 D. 输出#(分数:1.00)A.B.C.D.34.若有以下定义:struct link int data;struct link * next;a,b,c,*p,*q;且变量 a 和 b 之间已有如下图所示的链表结构:(分数:1.00)A.B.C.D.35.栈底至栈顶依次存放元素 A、B、C、D,在第五个元素 E 入栈前,栈中元素可以出栈,则出栈序列可能是U /U。 A.ABCED B.DCBEA C.DBCEA D.CDABE(分数:1.00)A.B.C.D.二、B填空题
11、/B(总题数:1,分数:13.00)以下程序的功能是:求出数组 x 中各相邻两个元素的和依次存放到 a 数组中,然后输出。请填空。main() int x10,a9,i;for (i=0;i10;i+)scanf(“%d“,xi);forU U 12 /U /U10;i+)ai-1=xi+U U 13 /U /U:for (i=0;19;i+)printf(“%d“,ai);printf(“/n“);(分数:13.00)填空项 1:_填空项 1:_(3).以下程序运行后的输出结果是_。 struct NODE int hum; struct NODE *next; ; main ( ) str
12、uct NODE s3=1, /0 ,2, /0 ,3, /0 ,*p,*q,*r; int sum=0: s0.next=s+1; s1.next=s+2; s2.next=s: p=s; q=p-next; r=q-next; sum+=q-nexs-num; sum+=r next-next-num: prlntf(“%d/n“,sum ; (分数:3.25)填空项 1:_(4).若 a 是 int 型变量,则表达式(a=2*3,a*2),a+6 的值为_。(分数:3.25)填空项 1:_二级 C 语言-34 答案解析(总分:58.00,做题时间:90 分钟)一、B选择题/B(总题数:3
13、5,分数:45.00)1.设 int 型占 2 个字节,则 unsigned int 所能表示的数据范围是_。 A. 065535 B. -3276932767 C. 165536 D. 032767(分数:1.00)A. B.C.D.解析:解析 本题 int 型占 2 个字节,即 16 位,unsigned int 所能表示的数据范围是 0(2 16-1),即065535。2.C 语言规定,在一个源程序中,main 函数的位置 A. 必须在最开始 B. 必须在系统调用的库函数的后面 C. 可以任意 D. 必须在最后(分数:1.00)A.B.C. D.解析:解析 C 程序总是从 main 函数
14、开始执行,但 main 函数在程序中的位置可以是任意的。3.以下选项中不合法的标识符是U /U。 A. print B. FOR C. ai=aj;aj=t;fun(a,+i,-j);main() int a=1,2,3,4,5,6,i;fun(a,0,5);for(i=0;i6;i+)printf(“%d“,ai);执行后的输出结果是 _。 A. 6 5 4 3 2 1 B. 4 3 2 1 5 6 C. 4 5 6 1 2 3 D. 1 2 3 4 5 6(分数:2.00)A. B.C.D.解析:解析 本题考查指针变量作函数形参的问题。指针变量作函数的形参,实现的是地址传递,形参的改变可以
15、影响实参。fun 由数的功能是将 a 所指数组中的内容逆置。在 main 函数中调用 fun 函数后,实参数组 s 中元素的值变为:a0=6、 a1=5、a2=4、a3=3、a4=2、a5=1。8.以下语句或语句组中,能正确进行字符串赋值的是( )。 A. char *sp; *sp=“right!“; B. char s10; s=“right!“; C. char s10; *s=“right!“; D. char *sp=“right!“;(分数:1.00)A.B.C.D. 解析:在选项 A 中,首先定义了一个字符指针 sp,然后将个字符串赋给甲所指的地址,这是错误的。因为 sp 是一个
16、未经初始化的野指针,不知其指向哪儿,往一个不确定的地址中写数据很容易让程序出错。选项 B 首先定义了一个字符数组,然后将一个字符串赋给数组名,这是错误的。因为数组名是一个指针常量,不可以被改变。选项 C 首先定义了个字符数组,然后将个字符串赋给数组的第一个元素,这也是错误的。因为字符串在表达式中相当于一个常字符指针,将一个指针值赋给一个字符型变量是行不通的。选项 D 是定义一个字符指针 sp,同时使其指向一个字符串常量,即将个常字符型指针赋给 sp。这是可行的。所以,4 个选项中选项 D 符合题意。9.若有如下定义:int x=6,y=3,z=2;则表达式“x=y|yz 该语句所表示的含义是
17、_。 (分数:2.00)A.B.C. D.解析:解析 if 语句中 else 是与其最接近的 if 相匹配,因此是 c=d 时 y=0,cd 时 y=1,它们都是在ab 的情况下的。11.已知在 ASCII 字符集中,数字 0 的序号为 48,下列程序的输出结果为_。main() char a=0,b=9;printf(“%d,%c/n“,a,b) ; A. 因输出格式不合法 B. 48,57 C. 0,9 D. 48,9(分数:1.00)A.B.C.D. 解析:解析 注意输出控制符%d,%c,分别表示以十进制形式输出字符的 ASCII 码值和字符。12.数据的存储结构是指U /U。 A. 存
18、储在外存中的数据 B. 数据所占的存储空间量 C. 数据在计算机中的顺序存储方式 D. 数据的逻辑结构在计算机中的表示(分数:1.00)A.B.C.D. 解析:解析 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。13.有以下程序:#includestdio.hmain()char c6;int i=0;for(;i6;ci=getchar(),i+);for(i=O;i6;i+)putchar(ci);printf(“/n“);如果从键盘上输入:ab回车c回车def回车则输出结果为_。 A. a B. a C. ab D. abcdef b b c c c
19、 d d d e f (分数:1.00)A.B.C. D.解析:解析 1getchar():此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 2putchar():此函数的作用是向终端输出一个字符,也可以输出控制字符。 本题在输入字符时,ab 和c 后面的回车符分别赋给了 c2和 c4,所以,正确答案为 C。14.软件设计中模块划分应遵循的准则是U /U。 A.低内聚、低耦合 B.高内聚、低耦合 C.低内聚、高耦合 D.高内聚、高耦合(分数:1.00)A.B. C.D.解析:解析 在结构化程序设计中,模块划分应遵循高内聚、低耦合的原则。其中,内聚性是对一个模块内部各个元素间彼此结
20、合的紧密程度的度量,耦合性是对模块间互相连接的紧密程度的度量。15.下列关于队列的叙述中,正确的是 A. 在队列中只能插入数据 B. 在队列中只能删除数据 C. 队列是先进先出的线性表 D. 队列是先进后出的线性表(分数:1.00)A.B.C. D.解析:解析 对队列可以进行插入和删除数据的操作,只是插入数据只能在队尾,删除数据只能在队头。所以队列是先进先出的线性表。16.设 q1 和 q2 是指向一个 int 型一维数组的指针变最,k 为 float 型变量,下列小能正确执行的语句是U /U。 A. k=*q1*(*q2); B. q1=k; C. q1=q2; D. k=*q1+*q2;(
21、分数:2.00)A.B. C.D.解析:解析 本题考查指针变量的赋值操作。选项 A)是将指针 q1 和 q2 所指向的变量值相乘,然后赋给k;选项 B)中,float 型数据和指引型数据之间不能进行赋值运算;选项 C)中,是两个指针变量之间的赋值;选项 D)中,是两个指针型变量所指向的两个 int 型数据相加。17.以下程序的输出结果是#includestdi0hmain() int i=0,a=0;while(i20) for(;) if(i%10)=0)break;elsei-;i+=11;a+=i;printf(“%d/n”,A) ; A. 21 B. 32 C. 33 D. 11(分数
22、:1.00)A.B. C.D.解析:解析 break 语句只能在循环体和 switch 语句体内使用。本题程序为在 while 循环中嵌套 for 循环。先看内层 for 循环,该循环的 3 个表达式全部省略,循环条件始终为真,但循环体内的 break 语句为终止循环的条件。首先,由初始条件判断外层循环 while 括号内表达式的值,该值为真,执行本次 while循环,即执行循环体内的 if 语句,判断该表达式后面括号里表达式的值为真,执行 break 语句,跣出内层循环,执行下面的语句,此时 i 和 a 的值均变为 11;回到外层循环,判断表达式“i20”仍为真,执行内层循环语句,此时 if
23、 条件不满足,执行 else 语句,i 的值为 10,继续内层循环,if 语句条件满足,执行 break 语句,跳出内层循环,执行下面的语句后,i 和 a 的值分别是 21 和 32。再判断外层循环的条件为假,结束循环。18.设有以下定义: int a=0;double b=1.25;char c=A; #define d 2 则下面语句中错误的是U /U。 A) a+; B) b+; C) c+;D) d+;(分数:2.00)A.B.C.D. 解析:解析 本题考核的知识点是自加运算符的运算对象。自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和常量。本题中,#deftne d 2
24、定义了 d 为常数 2,不能对 d 进行自加运算。故选项 D)是不正确的语句,所以,4 个选项中选项 D)符合题意。19.以下合法的赋值语句是_。 A. X=Y=100 B. D-; C. X+Y; D. C=int(A+B)(分数:1.00)A.B. C.D.解析:解析 本题中的答案 A 与 D 都缺少“;”,而答案 C 中,表达式是不能独立成为语句的,答案 B 使用了 C 语言的自减运算符它就相当于 D=D-1,所以答案 B 为一赋值语句。20.在函数 scanf 的格式控制中,格式说明的类型与输入项的类型应该对应匹配。如果类型不匹配,系统将U /U。 A. 不予接收 B. 并不给出出错信
25、息,但不能得到正确的数据 C. 能接收到正确输入 D. 给出出错信息,不予接收输入(分数:1.00)A.B. C.D.解析:解析 在 scanf 函数的格式控制中,格式说明的类型与输入项的类型必须一一对应匹配,如不匹配将导致数据输入出现错误,但是系统并不报错。21.以下程序中与语句 k=ab?(bc?1:0):0;功能等价的是 A. if(ab) n+=m;return n;main() int n=0;printf(“%d,“,f(+n);printf(“%d/n“,f(n+);程序运行后的输出结果是U /U。 A.1,2 B.1,1 C.2,3 D.3,3(分数:2.00)A. B.C.D
26、.解析:解析 由于在函数 f 中,变量 n 为静态局部变量,所以在主函数中第一次调用函数 f 后,变量 n的值等于 1,当第二调用函数 f 时,在函数 f 的内部静态局部变量 n 的值仍然保留等于 1,所以返回函数值等于 2。29.设有以下语句:int a=1,b=2,c;c=a(b2);执行后,c 的值为U /U。 A.6 B.7 C.8 D.9(分数:1.00)A.B.C.D. 解析:解析 本题考查两个知识点,按位异或和左移。把 b 左移 2 位化成二进制 c=a(b2)=a(0000102)=a001000=0000001001000=9,故选择 D。30.以下程序运行后,输出结果是(
27、)。#define PT 5.5#define S(x) PT*x*x#includestdio.hmain() int a=1, b=2; printf(“%4.1f/n“, S(a+b) ); A. 49.5 B. 9.5 C. 22 D. 45.0(分数:1.00)A.B. C.D.解析:解析 考查宏替换的使用。宏替换用“#define 宏名宏体”的形式来定义。在进行编译预处理时,将把程序中宏定义之后的所有宏名用宏体替换。宏虽然可以带参数,但宏替换过程中不像函数那样要进行参数值的计算、传递及结果返回等操作;宏替换只是简单的字符替换,不进行计算,因而本题中的 S(a+b)进行宏替换后为 P
28、T*1+2*1+2=5.5*1+2*1+2=9.5。31.下列叙述中正确的是U /U。 A. 软件交付使用后还需要进行维护 B. 软件一旦交付使用就不需要再进行维护 C. 软件交付使用后其生命周期就结束 D. 软件维护是指修复程序中被破坏的指令(分数:2.00)A. B.C.D.解析:解析 软件生命周期一般可以分为软件定义,软件开发及软件运行维护 3 个阶段。软件交付并投入运行后,需要不断地进行维护,并根据新提出的需求进行必要而且可能的扩展和删改。32.有以下程序段typedef struct node(int data; struct node *next;) *NODE;NODE p;以下
29、叙述中正确的是_。 A. P 是指向 struct node 结构变量的指针的指针 B. NODE p;语句出错 C. P 是指向 struct node 结构变量的指针 D. P 是 struct node 结构变量(分数:2.00)A.B.C. D.解析:33.下面的程序 ASC。main() int x=3,y=0,z=0;if(x=y+z)printf(“*“);elseprintf(“#“); A. 有语法错误不能通过编译 B. 输出* C. 可以通过编译,但是不能通过连接,因而不能运行 D. 输出#(分数:1.00)A.B.C.D. 解析:解析 对于 printf()函数,若有格式
30、控制字符,则在格式控制字符的位置输出变量 i 的值;否则,直接输出双引号内的内容。34.若有以下定义:struct link int data;struct link * next;a,b,c,*p,*q;且变量 a 和 b 之间已有如下图所示的链表结构:(分数:1.00)A.B.C.D. 解析:解析 在本题中指针 p 指向变量 a,q 指向变量 c。要把 c 插入到变量 a 和变量 b 之间,就应该首先让变量 a 的指针域指向变量 c,即(*p).next=q,然后让变量 c 的指针域指向变量 b,即(*q).next=for (i=0;i10;i+)scanf(“%d“,xi);forU
31、U 12 /U /U10;i+)ai-1=xi+U U 13 /U /U:for (i=0;19;i+)printf(“%d“,ai);printf(“/n“);(分数:13.00)填空项 1:_ (正确答案:i=1)解析:填空项 1:_ (正确答案:xi-1)解析:解析 由于数组 x 的长度为 10,所以各相邻两个元素的和共有 9 个,这一点从数组 a 的大小被定义为 9 也可以看出。因此,第 2 个 for 循环要循环 9 次。由于 i10;i+已经确定,故可肯定前一空应该填 i=1。我们不妨假设第 1 次进入这个 for 循环,此时 i 为 1,那么循环体中的表达式就是 a1-1=x1+
32、_;,即 a0=x1+_;。a0是数组 a 的第 1 个元素,我们希望它是数组 x 的第 1、2 个元素之和,而 x1是数组的第 2 个元素,故后一空在第 1 次循环时应该为 x 的第 1 个元素 x0,即总是xi的前一个元素即 xi-1。(3).以下程序运行后的输出结果是_。 struct NODE int hum; struct NODE *next; ; main ( ) struct NODE s3=1, /0 ,2, /0 ,3, /0 ,*p,*q,*r; int sum=0: s0.next=s+1; s1.next=s+2; s2.next=s: p=s; q=p-next;
33、r=q-next; sum+=q-nexs-num; sum+=r next-next-num: prlntf(“%d/n“,sum ; (分数:3.25)填空项 1:_ (正确答案:5)解析:解析 主函数首先声明了一个结点数组 s3,并分别初始化其成员 num 为 1,2、 3,而成员next 全部被初始化为/0,也就是 0。下面又用三条语句 s0.next=s+1;s1.next=s+2;s2.next=s;分别将三个结点指向其后面一个结点,而最后一个结点指向笫 1 个结点,构造出一条单向循环链表。接下来用结点指针 p=s 即让其指向 s0,然后让 q=p-next,即指向了 s1,r=-
34、q-next 即让 r指向 s2,然后让一个累计变量 sam 累加 q-next-hum 和 r-next-next-num,因为 q 指向 s1)所以它的 next 指针指向的是 s2,故第 1 次累加的是 s2num=3,而 r 指向的是 s2所以它的 next是 s0,s0的 next 指向 s1,故笫 2 次累加的是 s1.num=2。所以程序最终输出结果为 5。(4).若 a 是 int 型变量,则表达式(a=2*3,a*2),a+6 的值为_。(分数:3.25)填空项 1:_ (正确答案:12)解析:解析 本题考查逗号表达式的运算规则。逗号表达式的基本格式为,“表达式 1,表达式 2,”,其整个表达式的结果取最后一个子表达式的值。 本题中首先计算逗号表达式中的第 1 个表达式a=2*3=6,然后计算第 2 个表达式 a*2,这时整个表达式的值为 12,但要注意,因为第 2 个表达式并没有给 a 赋值,因此 a 的值不变:接下来执行最后一个表达式 a+6=12,所以整个表达式量后的值为 12。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1