[计算机类试卷]2014年9月国家二级(C语言)机试真题试卷及答案与解析.doc

上传人:hopesteam270 文档编号:493136 上传时间:2018-11-30 格式:DOC 页数:31 大小:76KB
下载 相关 举报
[计算机类试卷]2014年9月国家二级(C语言)机试真题试卷及答案与解析.doc_第1页
第1页 / 共31页
[计算机类试卷]2014年9月国家二级(C语言)机试真题试卷及答案与解析.doc_第2页
第2页 / 共31页
[计算机类试卷]2014年9月国家二级(C语言)机试真题试卷及答案与解析.doc_第3页
第3页 / 共31页
[计算机类试卷]2014年9月国家二级(C语言)机试真题试卷及答案与解析.doc_第4页
第4页 / 共31页
[计算机类试卷]2014年9月国家二级(C语言)机试真题试卷及答案与解析.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、2014年 9月国家二级( C语言)机试真题试卷及答案与解析 一、选择题 1 下列关于算法复杂度叙述正确的是 ( )。 ( A)最坏情况下的时间复杂度一定高于平均情况的时间复杂度 ( B)时间复杂度与所用的计算工具无关 ( C)对同一个问题,采用不同的算法,则它们的时间复杂度是相同的 ( D)时间复杂度与采用的算法描述语言有关 2 设有栈 S和队列 Q,初始状态均为空。首先依次将 A, B, C, D, E, F入栈,然后从栈中退出三个元素依次入队,再将 X, Y, Z入栈后,将栈中所有元素退出并依次入队,最后将队列中 所有元素退出,则退队元素的顺序为 ( )。 ( A) DEFXYZABC

2、( B) FEDZYXCBA ( C) FEDXYZCBA ( D) DEFZYXABC 3 下列叙述中正确的是 ( )。 ( A)有两个指针域的链表称为二叉链表 ( B)循环链表是循环队列的链式存储结构 ( C)带链的栈有栈顶指针和栈底指针,因此又称为双重链表 ( D)结点中具有多个指针域的链表称为多重链表 4 某二叉树共有 845个结点,其中叶子结点有 45个,则度为 1的结点数为 ( )。 ( A) 400 ( B) 754 ( C) 756 ( D)不确定 5 软件需求分析阶段的主要任务是 ( )。 ( A)确定软件开发方法 ( B)确定软件开发工具 ( C)确定软件开发计划 ( D)

3、确定软件系统的功能 6 下面对软件测试描述错误的是 ( )。 ( A)严格执行测试计划,排除测试的随意性 ( B)随机地选取测试数据 ( C)软件测试的目的是发现错误 ( D)软件测试是保证软件质量的重要手段 7 结构化程序的三种基本控制结构是 ( )。 ( A)顺序、选择和重复 (循环 ) ( B)过程、子程序和分程序 ( C)顺序、选择和调用 ( D)调用、返回和转移 8 数据库中对概念模式内容进行说明的语言是 ( )。 ( A)数据定义语言 ( B)数据操纵语言 ( C)数据控制语言 ( D)数据宿主型语言 9 某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同的仓库中

4、,则实体仓库和零件间的联系是 ( )。 ( A)多对多 ( B)一对多 ( C)多对一 ( D)一对一 10 有三个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( )。 ( A)交 ( B)差 ( C)并 ( D) 选择 11 )以下叙述正确的是 ( )。 ( A)计算机只接收由 0和 1代码组成的二进制指令或数据 ( B)计算机只接收由 0和 1代码组成的十进制指令或数据 ( C)计算机可直接接收并运行 C源程序 ( D)计算机可直接接收并运行任意高级语言编写的源程序 12 若有 C语言表达式 2+3*4+7 3,以下选项中叙述正确的执行顺序是 ( )。 ( A)先执

5、行 3*4得 12,再执行 7 3得 2 5,最后执行 2+12+2 5得 16 5 ( B)先执行 3*4得 12,再执行 2+12得 14,再执行 7 3得 2,最后执行 14+2得16 ( C)先执行 7 3得 2,再执行 3*4得 12,再执行 12+2得 14,最后执行 2+14得16 ( D)先执行 2+3得 5,再执行 5*4得 20再执行 20+7得 27,最后执行 27 3得9 13 若有定义: char c; int d;,程序运行时输入: c=1, d=2,能把字符 1输入给变量 c、整数 2输入给变量 d的输入语句是 ( )。 ( A) scanf(“c= d d= d

6、“, &c, &d); ( B) scanf(“c= c d= d“, &c, &d); ( C) scanf(“c= d, d= d“, &c, &d); ( D) scanf(“c= c, d= d“, &c, &d); 14 以下选项中,与 n=i+完全等价的表达式是 ( )。 ( A) n=i, i=i+1 ( B) n+=i+1 ( C) i=i+1, n=i ( D) n=+i 15 设有定义: int n=1234; double x=3 1415: 则语句 printf(“ 3d, 1 3f n“, n, x); 的输出结果是 ( )。 ( A) 1234, 3 142 ( B

7、) 123, 3 142 ( C) 1234, 3 141 ( D) 123, 3 141 16 有以下程序: #include main() int a, b; for(a=0; a 3; a+) scanf(“ d“, &b); switch(B)default: printf(“ d, “, +b); case 1: printf(“ d, “, +b); case 2: printf(“ d, “, +b); 执行时输入: 1 2 3,则输出结果是 ( )。 ( A) 2, 2, 3, 4, 4, 4, ( B) 2, 3, 4, ( C) 2, 3, 3, 4, 5, 6, ( D)

8、 2, 3, 4, 3, 4, 4, 17 设变量 m为 float类型,变量 n为 int类型,则以下能实现将 m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是 ( )。 ( A) m=(m*100+0 5) 100 0 ( B) n=m*100+0 5, m=n 100 0 ( C) n=m 100+0 5, m=n*100 0 ( D) m=m*100+0 5 100 0 18 有以下程序: #include main() int a=1, b=1; for(; a-; ) b-; printf(“ d, d n“, a, b); 程序运行后的输出结果是 ( )。 ( A)

9、-1 0 ( B) 0, 0 ( C) -1, -1 ( D) 1, 1 19 若有定义: char s30=0; 运行时输入: This is a string 则以下不能正确读入整个字符串: This is a string 到字符数组 s中的语句组是 ( )。 ( A) i=0; while(c=getchar()!= n)si+=c; ( B) gets(s); ( C) for(i=0; (c=getchar()!= n; i+)si=c; ( D) scanf(“ s“, s); 20 有如下程序: #include main() int a=0, b=1; if(a+&b+) p

10、rintf(“TRUE“); else printf(“FALSE“); printf(“-OUT: a= d, b= d n“, a, b); 程序运行后的输出结果是 ( )。 ( A) FALSE _OUT: a=1, b=1 ( B) FALSE_OUT: a=0, b=2 ( C) TRUE_OUT: a=1, b=2 ( D) TRUE_OUT: a=0, b=1 21 有如下程序: #include main() int i, data; scanf(“ d“, &data); for(i=0; i 5; i+) if(i data)continue; printf(“ d-“,

11、i); 程序运行时,从键盘输入: 3后,程序的输出结果为 ( )。 ( A) 3-4- ( B) 1-2-3- ( C) 0-1-2- ( D) 0-1-2-3- 22 有以下程序: #include main() int a=0, b=1; if(+a=b+) printf(“1“); else printf(“0“); printf(“a= d, b= d n“, a, b); 程序运行后的输出结果是 ( )。 ( A) 1a=0, b=1 ( B) 0a=1, b=2 ( C) 1a=1, b=2 ( D) 0a=0, b=2 23 有如下程序段: for(i=0; i 10; i+)

12、if(i =5)break; 则 循环结束后 i的值为 ( )。 ( A) 1 ( B) 0 ( C) 5 ( D) 10 24 设有定义: int a=0, b=1;,以下表达式中,会产生 “短路 ”现象,致使变量 b的值不变的是 ( )。 ( A) a+&b+ ( B) a+ +b ( C) +a&b+ ( D) +a +b 25 有如下程序段: for(i=0; i 10; i+) if(i 5)break; 则循环结束后 i的值为 ( )。 ( A) 10 ( B) 5 ( C) 9 ( D) 6 26 有以下程序段: int x, i; for(i=l; i =100; i+) sc

13、anf(“ d“, &x); if(x 0)continue; printf(“ 4d n“, x); 下面针对上述程序段的描述正确的是 ( )。 ( A)最多可以输出 100个非负整数 ( B)当 x 0时结束整个循环 ( C)当 x =0时没有任何输出 ( D) pfintf函数调用语句总是被跳过 27 关于地址和指针,以下说法正确的是 ( )。 ( A)通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量 ( B) 可以取一个常数的地址赋值给同类型的指针变量 ( C)可以取一个表达式的地址赋值给同类型的指针变量 ( D)可以取一个指针变量的地址赋值给基类型相同的指针变量 2

14、8 有以下程序: #include #define N 4 void fun(int aN) int i; for(i=0; i N; i+) a0i+=aN-1N-1-i; main() int xNN=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, i; fun(x); for(i=0; i N; i+)printf(“ d, “, xii); pfintf(“ n“); 程序运行后的输出结果是 ( )。 ( A) 4, 7, 10, 13, ( B) 1, 6, 11, 16, ( C) 17, 6, 11, 16, ( D)

15、 5, 13, 21, 29, 29 关于 C语言函数说明的位置,以下叙述正确的是 ( )。 ( A)在函数说明之后对该函数进行调用,编译时不会出现错误信息 ( B)函数说明可以出现在源程序的任意位置,在程序的所有位置 对该函数的调用,编译时都不会出现错误信息 ( C)函数说明只能出现在源程序的开头位置,否则编译时会出现错误信息 ( D)函数说明只是为了美观和编译时检查参数类型是否一致,可以写也可以不写 30 以下叙述正确的是 ( )。 ( A)不能在数组说明符的一对方括号中使用表达式 ( B) char cl, *c2, *c3, c42;是 C语言的合法语句 ( C)数组下标的最小值可以是

16、负值 ( D)若有数组定义 int array5;,则语句 printf(“ d“, array1 23);是合法的 31 有以下程序: #include main() int a=2, *ptr; ptr=&a; *ptr=8; a=(*ptr)+; printf(“ d, d n“, a, *ptr); 程序运行后的输出结果是 ( )。 ( A) 9, 9 ( B) 8, 9 ( C) 2, 4 ( D) 0, 4 32 有以下程序: #include main() int i, *ptr; int array4= 0, 1; for(ptr=array, i=0; i 3; i+, pt

17、r+) if(*ptr=0) putchar(#); else putchar(M+*ptr); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A) MO# ( B) #F# ( C) MMM ( D) #N# 33 有以下程序段: int m23, (*p)3; p=m; 则以下对 m数组元素的引用正确的是 ( )。 ( A) (P+1)0 ( B) *(*(p+2)+1) ( C) *(P1+1) ( D) P1+2 34 有以下程 序: #inelude char*a=“you“; char*b=“Welcome you to Beijing!“; main() ch

18、ar*p; p=b; while(*P!=*a)P+; printf(“ s n“, P); 程序运行后的输出结果是 ( )。 ( A) you to Beijing! ( B) to Beijing! ( C) Welcome you to Beijing! ( D) Beijing! 35 有以下程序: #include void f(int x, int n) if(n 1) printf(“ d, “, xn-1); f(x, n-1); printf(“ d, “, xn-1); else printf(“ d, “, x0); main() int z3=1, 2, 3; f(z,

19、 3); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A) 3, 1, 3, ( B) 3, 2, 1, 2, 3, ( C) 1, 2, 3, 1, 2, 3, ( D) 1, 2, 3, 2, 1, 36 有以下程序: #include int a=2; int f(int k) static int n; int m; m=n=0; n+; a+; m+; k+; return n+m+a+k; main() int k; for(k=0; k 2; k+)printf(“ d, “, f(k); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A

20、) 6, 8, ( B) 6, 9, ( C) 6, 6, ( D) 6, 7, 37 有以下程序: #include int sum(int*array, int len) if(len=1) return array1; else return array1+sum(array+1, len-1); main() int arrayE 5=0,9, 1, 2, res; res=sum array, 3); printf(“ d n“, res); 程序运行后的输出结果是 ( )。 ( A) 27 ( B) 11 ( C) 8 ( D) 12 38 有以下程序: #include main

21、() char s10=“verygood“, *ps=s; ps=“too“; s4= 0; puts(ps); 程序的运行结果是 ( )。 ( A) too ( B) verygood ( C) very ( D) good 39 以下叙述中错误的是 ( )。 ( A)函数中的形参属于局部变量 ( B)在函数内部定义的变量只能在本函数范围内使用 ( C)在函数外部定义的变量在所有函数中都有效 ( D)在不同的函数中可以使用相同名字的变量 40 有以 下程序: #include main() FILE*fp; int i, a6=1, 2, 3, 4, 5, 6, k; fp=fopen(“

22、dat (A)dat“, “w+“); fprintf(fp, “ d n“, a0); for(i=1; i 6; i+) rewind(fp); fprintf(fp, “ d n“, ai); rewind(fp); fscanf(fp, “ d“, &k); fclose(fp); printf(“ d n“, k); 程序运行后的输出结果是 ( )。 ( A) 6 ( B) 21 ( C) 123456 ( D) 654321 二、程序填空题 41 给定程序中,函数 fun的功能是:调用随机函数产生 20个互不相同的整数放在形参 a所指数组中 (此数组在主函数中已置 0)。 请在程序

23、的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #define N 20 void fun(int*a) int i, x, n=0; x=rand() 20; *found* while(n【 1】 ) for(i=0; i n; i+) *found* if(X=ai) 【 2】; *found* if(i=【 3】 ) an=x; n+; x=rand() 20; main() int xN=0, i; fun(x); printf(“Th

24、e result: n“); for(i=0; i N; i+) printf(“ 4d“, xi); if(i+1) 5=0)printf(“ n“); printf(“ n n“); 三、程序修改题 42 下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数 fun的功能是将单向链表结点 (不包括头结点 )数据域为偶数的值累加起来,并且作为函数值返回。 请改正函数 fun中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函 数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #incl

25、ude typedef struct且 aa int data; struct aa*next; NODE; int fun(NODE*h) int sum=0; NODE*p; p=h- next; *found* while(P- next) if(P- data 2=0) sum+=P- data; *found* P=h- next; return sum; NODE*creatlink(int n) NODE*h, *p, *s; int i; h=P=(NODE*)malloc(sizeof(NODE); for(i=1; i n; i+) s=(NODE*)malloc(size

26、of(NODE); 8- data=rand() 16; S- next=P-next: P- next=s: p=p- next: p- next=NULL; retum h; outlink(NODE*h) NODE*p; P=h- next; printf(“ n n The LIST: n n HEAD“); while(P) printf(“- d“, P-data); P=P- next; printf(“ n“); void main() NODE*head; int sum; system(“CLS“); head=creatlink(10); outlink(head); s

27、um=fun(head); printf(“ nSUM= d“, sunl); 四、程序设计题 43 请编写一个函数 fun,它的功能是:将 SS所指字符串中所有下标为奇数位置的字母转换为大写 (若该位置上不是字母,则不转换 )。 例如,若输入 “abc4Efg“,则应输出 “aBc4EFg“。 注意:部分源程序在文件 PROG1 C中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include #include #include #include void fun(char*ss) void main() FILE*wf;

28、char tt81, s81=“abe4Efg“; system(“CLS“); printf(“ nPlease enter an string within 80 characters: n“); gets(tt); printf(“ n nAfter changing, the string n 8“, tt); fun(tt); printf(“ nbecomes n s n“, tt); * wf=fopen(“out dat“, “w“); fun(s); printf(wf, “ s“, s); fclose(wf); * 2014年 9月国家二级( C语言)机试真题试卷答案与解

29、析 一、选择题 1 【正确答案】 B 【试题解析】 算法的时间复杂度是指执行算法所需要的计算工作量,它与使用的计算机、程序设 计语言以及算法实现过程中的许多细节无关,故 B选项正确, D选项错误。最坏情况下的时间复杂度可以与平均情况的时间复杂度相同,故 A选项错误。不同的算法时间复杂度一般不相同,故 C选项错误。 2 【正确答案】 B 【试题解析】 栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。队列是指允许在一端进行插入,而在另一端进行删除的线性表。将 A, B,C, D, E, F入栈后,栈中元素为 ABCDEF,退出三个元素入队,队列元素为FED;将 X, Y, Z人栈后

30、,栈中元素为 ABCXYZ,全部入队后,队列元素为FEDZYXCBA,故 B选项正确。 3 【正确答案】 D 【试题解析】 双向链表与二叉链表均是有两个指针域的链表,故 A选项错误。在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由 NULL改为指向表头结点,这样的链表称为循环链表。循环队列是队列的一种顺序存储结构。循环链表与循环队列是两种存储结构,故 B选项错误。双向链表结点有两个指针域,指向前一个结点的指针和指向后一个结点的指针,而带链的栈是单链表形式, C选项中应为双向链表,而不是双重链表,故 C选项错误。由排除法可知, 正确答案为 D选项。 4 【

31、正确答案】 C 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为 0的结点 (即叶子结点 )总是比度为 2的结点多 1个。二叉树共有 845个结点,度为 0的结点有 45个,度为 1的结点数为 n1,度为 2的结点数为 n2,则 845=45+n1+n2,且 45=n2+1则 n1=756,故 C选项正确。 5 【正确答案】 D 【试题解析】 需求分析阶段的工作可以分为 4个方面:需求获取、需求分析、编写需求规格说明书和需求评 审,包括确定软件系统的功能需求,性能需求,环境需求,可靠性需求,用户界面需求,资源使用需求等,故

32、D选项正确。 A、 B、 C选项均为开发阶段的工作。 6 【正确答案】 B 【试题解析】 在测试之前制定测试计划,并严格执行,测试用例的选择不可随意,应选择有代表性的,尽可能发现迄今为止尚未发现的错误,故 A选项叙述正确, B选项叙述错误。测试根本目的是尽可能多地发现并排除软件中隐藏的错误,故 C选项叙述正确。软件测试是保证软件质量、可靠性的关键步骤,故 D选项叙述正确。因此,本题正确答案为 B选项。 7 【正确答 案】 A 【试题解析】 结构化程序的 3种基本控制结构为:顺序、选择和重复,故 A选项正确。 8 【正确答案】 A 【试题解析】 数据库管理系统为完成主要功能提供了相应的数据语言,

33、它们是:数据定义语言,该语言负责数据的模式定义与数据的物理存取构建;数据操纵语言,该语言负责数据的操纵,包括查询与增、删、改等操作;数据控制语言,该语言负责数据完整性、安全性的定义与检查,以及并发控制、故障恢复等功能;数据宿主语言,它要嵌入其他程序设计语言,如汇编语言 (被嵌入的语言称为宿主语言,嵌入的语言称为子语言 ), 故 A选项正确。 9 【正确答案】 A 【试题解析】 一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系 (1: 1)、一对多联系 (1: m)、多对多联系 (m: n)。每个仓库存放有不同的零件,相同零件可能放在不同的仓库中,故实体仓库和零件间的联系是多

34、对多,故 A选项正确。 10 【正确答案】 A 【试题解析】 从传统集合运算和关系数据库专门集合运算考虑,关系代数运算可分为:传统的集合运算包括并、差、交和笛卡尔积;专门的关系运算包括投影、选择、连接和除法等。选择:从关系中找出满足给 定条件的元组的操作称为选择,题目中无给定条件,故 D选项错误。差: R-S结果是属于 R但不属于 S的记录组成的集合, T中元组 “c 3 2”同时属于 R和 S,故 B选项错误。 并: R S是将 S中的记录追加到 R后面, T中元组少于 R,故 C选项错误。 交: Rs结果是既属于 R又属于 s的记录组成的集合,与题目中结果相符,故A选项正确。 11 【正确

35、答案】 A 【试题解析】 计算机只认识自己的母语 机器语言,即 0和 1代码组成的二进制指令和数据,故 A选项正确, B选项错误。 C语言是一种高级语言,计算机不能 直接运行 C源程序和高级语言编写的源程序,故 C和 D选项错误。 12 【正确答案】 B 【试题解析】 首先,在 C语言中,乘除法优先级要高于加减法;其次,除法运算符 “ ”两边参加运算的对象都是整数,运算结果要取整,故排除 A、 D选项; C语言中,因为运算符 “*”和 “ ”都满足从左到右的运算规则,故应先计算 3*4=12,因此 C选项排除,由排除法可知答案为 B选项。 13 【正确答案】 D 【试题解析】 scanf()函

36、数中, d对应的参数为整数型地址, c对应的参数为chat型地址,故 A、 C选项错误; 如果输入地址有多个,应该用逗号隔开,故 B选项错误,因此答案为 D选项。 14 【正确答案】 A 【试题解析】 运算符 “+”放在变量后面时,表示变量先参与其他操作,再完成加 1操作,故表达式 n=i+的运算顺序是先将 i赋值给 n,再将 i+1赋值给 i,因此答案为 A选项。 15 【正确答案】 A 【试题解析】 函数 printf()中, md指输出带符号的十进制整数,给定最小宽度为 m位,不足 m位左端补空格,超过 m位按实际位数输出; nf表示以小数形式输出实数,小数占 n位,对应题目,答案为 A

37、选项。 16 【正确答案】 C 【试题解析】 程序在执行 switch语句时,根据 switch后面表达式的值找到匹配的人口标号,执行对应的 case语句,之后不再进行判断,继续执行此 case后面的语句,并且各个 case和 default的出现次序不影响执行结果,即题目中的 default放在开始位置与放在最后是一样的结果;运算符 “+”放在变量前面时,表示将变量加 1,再参与其他操作。 本题第一次循环:输入 b=1,执行 case 1,输出 2;再执行 case 2,输出 3。 第二次循环:输入 b=2,执行 case2,输出 3。 第三次循环:输入 b=3,没有 case与其对应,故执

38、行 default,输出 b=4;接着执行 case 1,输出 5;再执行 case 2,输出 b=6,至此退出 for语句。 因此,最后输出为 2, 3, 3, 4, 5, 6,故答案为 C选项。 17 【正确答案】 B 【试题解析】 n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保留 m的小数点后两位,需要将 m乘以 100。若要将 m小数点后第三位四舍五人,则需要加上 0 5,然后赋给整型变量,所以 n=m*100+0 5,接下来需要 将m还原成有两位小数的浮点数。若除号两边操作数有一个是浮点数时,则结果为浮点数,因此将 n 100 0赋值给 m时,得到的 m值含两位小数,故

39、答案为 B选项。 18 【正确答案】 A 【试题解析】 题干中语句 for(; a-; )的执行过程是:先判断表达式 a-是否为0,因为运算符 “-”在变量的后面,表示先进行其他操作,再让变量 a减 1,即判断 a!=0成立,则进入循环,然后 a减 1。起始 a=1不等于 0。满足条件进人 for循环,然后 a自减 1为 0, b自减 1为 0,继续循环;再跳回 for语句时, a!=0不成立,不会进 入循环,但是 a也要自减 1为 -1,循环结束。因此,最后输出 a=-1,b=0。故答案为 A选项。 19 【正确答案】 D 【试题解析】 在使用格式符 “ s”进行字符串的输入时,空格和回车

40、(Enter)会被读入,并且函数 scanf()以它们作为分隔符停止一个字符串的输入,因此答案为 D选项。 20 【正确答案】 A 【试题解析】 逻辑与运算符遵循 “短路求值 ”策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数。表达式 (a+&b+)中,左操作数 a+的值为 0,已经可以确 定整个逻辑表达式的结果为 0,因此右操作数 b+不再求解,进入 else分支执行, a的值加 1, b值不变,因此答案为 A选项。 21 【正确答案】 A 【试题解析】 从键盘输入 3,即给变量 data赋值为 3,进入 for循环语句,满足if语句的条件 i3,运行 conti

41、nue语句结束本次循环,而不是终止整个循环的执行。当 i加 1等于 3时, if条件不满足,执行 printf函数,输出 3-;当 i加 1等于4时,输出 4-;当 i再加 1等于 5时,退出 for循环,故程序运行后的结果是: 3-4-。因此答案为 A选项。 22 【正 确答案】 C 【试题解析】 运算符 “+”放在变量后面时,表示先执行其他操作,再将变量加1;运算符 “+”放在变量前面时,表示将变量加 1后再参与其他操作。因此if(+a=b+)为真,输出 1,再输出 a, b,故程序运行后的结果是: 1a=1, b=2。因此答案为 C选项。 23 【正确答案】 B 【试题解析】 if(i

42、=5)break;语句表示如果 i =5,则执行 break语句,跳出循环程序。起始 i=0满足 if语句,则循环结束后 i值为 0,因此答案为 B选项。 24 【正确答案】 A 【 试题解析】 运算符 “+”放在变量前面时,表示将变量加 1后再参与其他操作。a+&b+时,由于 a值是 0,直接判定与运算结果为 0,忽视 b+的值,因此 b值不发生改变,故答案为 A选项。 25 【正确答案】 D 【试题解析】 if(i 5)break;语句执行时先判断 i的值,如果 i的值大于 5,执行break语句,结束循环程序,这里 i=6,循环结束。因此答案为 D选项。 26 【正确答案】 A 【试题解

43、析】 continue语句只结束本次循环,而不是终止整个循环的执行,因此B选项错误;当 x=0时,程序执行 printf(“ 4d n“, x)语句,因此排除 C、 D选项,故答案为 A选项。 27 【正确答案】 A 【试题解析】 常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋值给指针变量没有任何意义, C语言也不允许这样做,编译会出错,故 B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的, C语言也不允许这样做,编译会出错,故 C选项错误;可以取一个指针变量的地址,但是指针变量的地址属

44、于指针,只能 赋值给指针类型的指针变量,故 D选项错误。因此答案为 A选项。 28 【正确答案】 C 【试题解析】 N=4, for(i=0, i N, i+)printf(xij);此语句输出 x00,x11, x22, x33,其中只有 x00的值在 fun()函数中发生改变。在 fun()函数中,当 i=0时, x00=x00+x33=17,程序运行后的输出结果是: 17,6, 11, 16。因此答案为 C选项。 29 【正确答案】 A 【试题解析】 对被 调用函数的说明有两种方式:外部说明和内部说明。在调用函数内对被调函数所作的声明称为内部说明,也称为局部说明;在函数外进行的函数说明称

45、为外部说明,如果说明在程序最前端,外部声明又称为全局说明,因此B、 C选项错误;函数 “说明 ”是指利用它在程序的编译阶段对调用函数的合法性进行全面检查,因此 D选项错误,故答案为 A选项。 30 【正确答案】 B 【试题解析】 在 B选项中, c1是字符型变量, c2是字符型指针变量, c3是指向字符型指针的指针变量, c42是一个一维字符数组,这些都是 C语言的合法语句,因此答案为 B选项。数据说明符的一对方括号中,可以使用常表达式,故 A选项错误;数组下标的最小值为 0,故 C选项错误;数组下标可以是任何非负整数, D选项中使用了分数,故 D选项错误。 31 【正确答案】 A 【试题解析

46、】 题干中定义一个指针变量 ptr,再把 a的地址值赋给变量 ptr,此时 a和 *ptr代表同一内存单元中的值; *ptr=8表示把 a和 *ptr的值修改为 8;a=(*ptr)+表示把指针 ptr对应地址单元里的值赋给 a,再将 ptr对应地址单元里的值加 1,因此 *(ptr)值为 9,同时 a也为 9,故答案为 A选项。 32 【正确答案】 D 【试题解析】 for语句中把 array数组首地址值赋给变量 ptr, ptr+表示每次执行完循环体后, ptr指向下一数组元素,当指针指向值为 0时,输出 #,否则 M再加上指针对应数组值进行输出。当 *ptr=1时, M+1=N,结果输出

47、为 #N#,故答案为 D选项。 33 【正确答案】 C 【试题解析】 数组元素 aij可表示为 *(ai+j),因此,在定义数组 m和指针变量 p后, *(p1+1) 表示指向数组 m11,因此答案为 C选项。 34 【正 确答案】 A 【试题解析】 程序首先定义两个字符串, a, b指针分别指向这两个字符串首地址,然后定义了一个指针 p,把 b指针指向的地址赋给了 p指针后,判断 p指针指向地址的内容是否和 a指针指向地址的内容相等,如果不相等,则移动指针 p+1。当 p指向 *b字符串中的 y时,和 *a首地址元素相等,退出 while语句,输出剩下字符串的内容,故程序运行后的输出结果是 “You To BeiJing!”。因此答案为 A选项。 35 【正确答案】 B 【试题解析】 本题考查了函数的递归调用。在 main()函数中调用 f(z, 3)后,系统进入 f(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1