1、国家二级( C语言)笔试模拟试卷 21及答案与解析 1 下列叙述中正确的是 ( A)程序设计就是编制程序 ( B)程序的测试必须由程序员自己去完成 ( C)程序经调试改错后还应进行再测试 ( D)程序经调试改错后不必进行再测试 2 设有下列二叉树: 对此二叉树后序遍历的结果为 ( A) ABCDEF ( B) DBEAFC ( C) ABDECF ( D) DEBFCA 3 结构化程序设计的一种基本方法是 ( A)筛选法 ( B)递归法 ( C)归纳法 ( D)逐步求精法 4 在面向对象方法中,一个对象请 求另一对象为其服务的方式是通过发送 ( A)调用语句 ( B)命令 ( C)口令 ( D
2、)消息 5 需求分析最终结果是产生 ( A)项目开发计划 ( B)需求规格说明书 ( C)设计说明书 ( D)可行性分析报告 6 下列叙述中正确的是 ( A)一个逻辑数据结构只能有一种存储结构 ( B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 7 下列描述中正确的是 ( A)软件工程只是解决软件项目的管理问题 ( B)软件工程主要解决软件产品的生产率问题 ( C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则 ( D
3、)软件工程只是解决软件开发中的技术问题 8 一个算法应该具有 “确定性 ”等 5个特性,下面对另外 4个特性的描述中错误的是 ( A)有零个或多个输入 ( B)有零个或多个输出 ( C)有穷性 ( D)可行性 9 结构化程序由三种基本结构组成,三种基本的结构组成的算法 ( A)可以完成任何复杂的任务 ( B)只能完成部分复 杂的任务 ( C)只能完成符合结构化的任务 ( D)只能完成些简单的仟务 10 在一个 C语言程序中 ( A) main函数必须出现在所有函数之前 ( B) main函数可以在任何地方出现 ( C) main函数必须出现在所有函数之后 ( D) main函数必须出现在固定位
4、置 11 以下程序输出的结果是 #include stdio h main() int i=010, j=10; printf(“%d, %dn“, +i, j-); ( A) 11, 10 ( B) 9, 10 ( C) 010, 9 ( D) 10, 9 12 已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码是 97,则用八进制表示的字符常量 101是 ( A)字符 A ( B)字符 a ( C)字符 e ( D)非法的常量 13 下列关于 C语言用户标识符的叙述中正确的是 ( A)用户标识符中可以出现下划线和中划线 (减号 ) ( B)用户标识符中不可以出现中划线
5、,但可以出现下划线 ( C)用户标识符中可以出现下划线,但不可以放在用户标识符的开头 ( D)用户标识符中可以出现下划线和数字 ,它们都可以放在用户标识符的开头 14 若有以下程序段 (n所赋的是八进制数 ) int m=32767, n=032767; printf(“%d, %On“, m, n); 执行后输出结果是 ( A) 32767, 32767 ( B) 32767, 032767 ( C) 32767, 77777 ( D) 32767, 077777 15 有以下程序 main() char a=a, b; printf(“%c, “, +A) ; printf(“%cn“。
6、b=a+); 程序运行后的输出结果是 ( A) b, b ( B) b, c ( C) a, b ( D) a,c 16 以下程序段的输出结果是 int a=1234; printf(“%2dn“, A) ; ( A) 12 ( B) 34 ( C) 1234 ( D)提示出错、无结果 17 有以下程序 main() int a=666, b=888; printf(“%dn“, a, B) ; 程序运行后的输出结果是 ( A)错误信息 ( B) 666 ( C) 888 ( D) 666,888 18 若有以下程序: main() int k=2, i=2, m; m=(k+=i*=k);
7、printf(“%d, %dn“, m, i); 执行后的输出结果是 ( A) 8, 6 ( B) 8, 3 ( C) 6, 4 ( D) 7, 4 19 在 16位 C编译系统上,若定义 long a;,则能给 a赋 40000的正确语句是 ( A) a=20000+20000; ( B) a=4000*10; ( C) a=30000+10000; ( D) a=4000L*1OL; 20 有以下程序 main() int a=5, b=4, c=3, d=2; if(a b C) printf(“%dn“, D) ; else if(c-1 =D) =1) printf(“%dn“, d
8、+1); else printf(“%dn, d+2); 执行后输出的结果是 ( A) 2 ( B) 3 ( C) 4 ( D)编译时有错,无结果 21 以下叙述中正确的是 ( A)用 C 程序实现的算法必须要有输入和输出操作 ( B)用 C 程序实现的算法可以没有输出但必须要有输入 ( C)用 C 程序实现的算法可以没有输入但必须要有输出 ( D)用 C 程序实现的算法可以既没有输入出没有输出 22 有以下程序 main () int i=0,s=0; do if(i%2) i+;continue; i+; s+=i; while (i 7); printf ( “%dn“ , s ); 执
9、行后输出的结果是 ( A) 16 ( B) 12 ( C) 28 ( D) 21 23 已定义 ch为字符型变量,以下赋值语句中错误的是 ( A) ch=; ( B) ch=62+3; ( C) ch=NULL; ( D) ch=xaa; 24 有以下程序 main ( ) char a,b,c,d; scanf (“%c, %c, %d, %d“ , printf(“%c,%c,%c,%cn“,a,b,c,d); 若运行时从键盘上输入: 6,5,65,66回车。则输出结果是 ( A) 6,5,A,B ( B) 6,5,65,66 ( C) 6,5,6,5 ( D) 6,5,6,6 25 以下
10、能正确定义二维数给的是 ( A) int a3; ( B) int a3=2*3; ( C) int a3=; ( D) int a23=1,2,3,4; 26 以下 程序输出结果是 #include stdio.h main ( ) int i=0,a=0; while ( i 2 0 ) for(;) if (i%10) =0) break; else i-; i+=11; a+=i; print f ( “%dn“ , a); ( A) 21 ( B) 32 ( C) 33 ( D) 11 27 若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是 ( A) in
11、t *i = NULL; scanf(“%d“, i); ( B) float *f = NULL; *f = 10.5; ( C) char t = m, *c = *c = ( D) long *L; L = 0; 28 有以下程序 #include stdio .h main () printf(“%dn“, NULL); ( A) 0 ( B) 1 ( C) -1 ( D) NULL没定义,出错 29 有以下程序 main () char *s=“one“,“two“,“three“,*P; p=s 1; printf ( “%c, %sn“, *(p+1) ,s0 ); 执行后输出结
12、果是 ( A) n,two ( B) t,one ( C) w,one ( D) o,two 30 以下不能正确定义二维数组的选项是 ( A) int a22 = 1, 2); ( B) int a2 = 1, 2, 3, 4; ( C) int a22 = 1, 2, 3; ( D) int a2 = 1, 2, 3, 4); 31 设有定义 : int a=2,b=3,c=4;, 则以下选项中值为 0的表达式是 ( A) (!a=1) p0=a1; 则*(p0+1)所代表的数组元素是 ( A) a01 ( B) a10 ( C) a11 ( D) al2 33 有以下程序 main ()
13、int aa44=1,2,3,4 5,6,7,8,3,9.10,2,4,2,9,6; int i. s=0 for(i=0;i 4;i+) s+=aai 1; printf ( “%dn“, s); 程序运行后的输出结果是 ( A) 11 ( B) 19 ( C) 13 ( D) 20 34 有以下程序 int f1int x.int y) return x y?x:y; int f2(int x, int y) returrnx y?y:x; main ( ) int a=4,b=3, c=5, d=2, e, f, g; e = f2(f1(a,b, f1(c,d); f=f1(f2(a,
14、b), f2(c,d); g = a+b+c+d-e-f; printf(“%d,%d,%dn“,c,f,g); 程序运行后的输出结果是 ( A) 4,3,7 ( B) 3,4,7 ( C) 5,2,7 ( D) 2,5,7 35 设变量已正确定义,则以下能正确计算 f=n!的程序段 是 ( A) f=0; for(i=1; i n; i+)f*=i; ( B) f=1; for(i=1; i n; i+)f*=i; ( C) f=1; for (i=n; i 1; i+) f*=i; ( D) f=1; for (i=n; i =2; i-)f*=i; 36 以下叙述十正确的是 ( A)全局
15、变量的作用域一定比局部变量的作用域范围大 ( B)静态 (static)类别变量的生存期贯穿于整个程序的运行期间 ( C)函数的形参都属于全局变量 ( D)未在定义语句中赋初值的 auto变量和 static变量的初值都是随机值 37 设有以下语句: typedef struct S int g; char h; T; 则下面叙述中正确的是 ( A)可用 S定义结构体变量 ( B)可以用 T定义结构体变量 ( C) S是 struct类型的变量 ( D) T是 structs类型的变量 38 以下叙述中错误的是 ( A)对于 double类型数组,不可以直接用数组名对数组进行整体输入或输出 (
16、 B)数组名代表的是数组所占存储区的首地址,其值不可改变 ( C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出 “下标越界 ”的出错信息 ( D)可以通过赋初值的方式确定数组元素的个数 39 有以下程序 int fa(int x) return x*x; int fb(int x) return x*x*x; int f(int (*f1)(),int (*f2)(),int x) return f2(x)-f1(x); main() int i; i-f(fa, fb,2); printf(“%d n“,i); 程序运行后的输出结果是 ( A) 4 ( B) 1 ( C)
17、4 ( D) 8 40 有以下程序 struct s int x,y; data2=10,100,20,200; main() struct s *p=data; printf(“%dn“,+(p- x); 程序运行后的输出结果是 ( A) 10 ( B) 11 ( C) 20 ( D) 21 41 有以下程序 void ss(char *s,char t) while *s) if (*s=t) *s-t-a +A; S+; main () char strl 100 =“ abcddfefdbd“ , c= d; ss(str1,c); printf (“%sn“ ,str1); 程序运行
18、后的输出结果是 ( A) ABCDDEFEDBD ( B) abcDDfefDbD ( C) abcAAfefAbA ( D) Abcddfefdbd 42 有以下程序 main(int arge,char *argv ) int n,i=0; while(argv1 i !=0) n-fun(); i+; printf ( “%dn“ , n*argc); int fun ( ) static int s=0; s+=1; return s; 假设程序经编译、连接后生成可执行文件 exam.exe,若键入以下命令 exam 123 回车 ( A) 6 ( B) 8 ( C) 3 ( D) 4
19、 43 已定义以下函数 : fun (char* p2, char* p1) while (*p2=*p1) != 0) p1+;p2+; ( A)将 p1所指字符串复制 到 p2所指内存空间 ( B)将 p1所指字符串的地址赋给指针 p2 ( C)对 p1和 p2两个指针所指字符串进行比较 ( D)检查 p1和 p2两个指针所指字符串中是否有 0 44 有以下程序 main ( ) int x = 1, 3, 5, 7, 2, 4, 6, 0, i, j, k; for (i = 0; i 3; i+) for(j = 2; j = i; j-) if (xj+1 xj) k= xj; xj
20、 = xj+1; xj+1 = k; for (i = 0; i 3; i+) for j = 4; j 7-i; j+) if xj xj+1) k = xj; xj = xj+l; xj+l = k; for (i = 0; i 8; i+) printf(“%d“, xi); printf(“n); 程序运行后的输出结果是 ( A) 75310246 ( B) 1234567 ( C) 76310462 ( D) 13570246 45 设有如下定义 struct ss char name10; int age;, char sex; std3,* p=std; 下面各输入语句中错误的是
21、 ( A) scanf(“%d“, ( B) scanf(“%s“, ( C) sean(“%c“, ( D) scanf(“%c“, 46 有以下结构体说明和变量定义,如图所示,指针 p、 q、 r分别指向一个链表中的三个连续结点。 struct node int data; struct node *next; *p, *q, *r; 现要将 q和 r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序是 ( A) r- next=q; q- next=r- next; p- next=r; ( B) q- next=r- next; p- next=r; r- next=q; (
22、 C) p- next=r; q- next=r- next; r- next=q; ( D) q- next=r- next; r- next=q; p- next=r; 47 以下程序中函数 f的功能是将 n个字符 串按由大到小的顺序进行排序。 #include string.h void f(char p10, int n) char t20; int i,j; for(i=0;in-1;i+) for(j=i+l;j n;j+) if(strcmp (pi,pj) 0) strcpy(t,pi);strcpy(pi,pj);strcpy(pj,t); main() char plO-“
23、abc“,“aabdfg“,“abbd“,“dcdbe“,“cd“;int i; f(p,5); printf(“%dkn“,strlen(p0); 程序运 亍后的输出结果是 ( A) 6 ( B) 4 ( C) 5 ( D) 3 48 以下程序的功能是:建立一个带有头结点的甲 向链表,并将存储在数组中的字符依次转存到链表的各个结点中,请从与下划线处号码对应的一组选项中选择出正确的选项。 #include stdlib.h struct node char data; struct node *next: ; (1) CreatList(char *s) struct node *h,*p,*
24、q; h = (struct node *)malloc sizeof(struct node); p=q=h; while(*s! =0) p = (struct node *)malloc(sizeof (struct node); p- data = (2) ; q- next = p; q - (3) ; S+; p- next=0; return h; main() char str=“link list“; struct node *head; head = CreatList(str); 48 (1) ( A) char* ( B) struct node ( C) struct
25、 node* ( D) char 49 (2) ( A) *s ( B) s ( C) *s+ ( D) (*s)+ 50 (3) ( A) p- next ( B) p ( C) s ( D) s next 51 在深度为 7的满二叉树中,度为 2的结点个数为【 】。 52 算法的复杂度主要包括【 】复杂度和空间复杂度。 53 在结构化分析方法中,用于描述系统中所用到的全部数据和文件的文档称为【 】。 54 线性表的存储结构主要分为顺序存储结构和链式存储结构。队列是一种特殊的线性表,循环队列是队列的【 】存储结构。 55 数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结
26、构可以不变,因此,基于逻辑结构的应用程序不必修改,称为【 】。 56 设 Y是 int型变量,请写出判断 Y为奇数的关系表达式【 】。 57 以下程序的输出是【 】。 main() char str1=“How do you do“,*pl=str1; strcpy(str1+strlen(str1)/2,“es she“); intf(“%sn“,p1); 58 以下程序输出的最后一个值是【 】。 int ff(int n) static int f=1; f=f*n; retum f; main() int i; for(i=1;i =5;i+) printf(“%dn“,ff(i)i 5
27、9 下列程序的输出结果是【 】。 main() int a=2,4,6,*ptr= for(y=0;y 3;y+) z=(*(ptr+y) x)?*(ptr+y):x; print f(“%dn“,z); 60 若有定义语句 char s100, d100; int j=0,i=0;且 s中已赋字符串,请填空以实现拷贝。 (注:不使用逗号表达式 ) while(si)(dj=【 】 ;j+; dj=0; 61 若 有如下结构体说明: struct STRU int a,b;char c:double d; stmct STRU*p1,*p2; ; 请填空,以完成对 t数组的定义, t数组的每个
28、元素为该结构体类型。【 】 t20 62 以下程序段打开文件后,先利用 fseek函数将文件位置指针定位在文件末尾,然后调用删函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。 FILE*myf;long fl; myf=【 】 (“test.t“,“rb“); fseek(myf,(),SEEK_END);fl+ftell(myf); fclose(myf); printf(“%dn“,fl); 63 下面的程序可对指定字符串进行从大到小排序,请将程序填完整。 (注:程序采用了冒泡排序算法 ) #include stdio.h #include string.h main() c
29、har*str=“ABCDabcd“,temp; int n,i; n=strlen(str); while(n- 1) for(i=0;i n;i+) if(stri stri+1) temp=【 】 ; stri=stri+1; 【 】 =temp; printf(【 】 ); 国家二级( C语言)笔试模拟试卷 21答案与解析 1 【正确答案】 C 【试题解析】 软件测试仍然是保证软件可靠性的主要手段,测试的目的是要尽量发现程序中的错误,调试主要是推断错误的原因,从而进一步改正错误。测 试和调试是软件测试阶段的两个密切相关的过程,通常是交替进行的。选项 C正确。 2 【正确答案】 D 【试
30、题解析】 二叉树的遍历分为先序、中序、后序三种不同方式。本题要求后序遍历,其遍历顺序应该为:后序遍历左子树 -,后序遍历右子树 -,访问根结点。按照定义,后序遍历序列是 DEBFCA,故答案为 D。 3 【正确答案】 D 【试题解析】 在结构化程序设计中通常采取自上而下。逐步求精的方法,其总的思想是先全局后局部、先整体后细节,先抽象后具体。而筛选法、递归法和归纳法指的椰是程序的某种具体算法。 4 【正确答案】 D 【试题解析】 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,一个对象与另一个对象通过发送消息彼此交换信息,请求对方执行某一处理或回答某一要求的信息。 5 【正确答案】 B
31、【试题解析】 需求分析应交付的主要文档就是需求规格说明书。 6 【正确答案】 D 【试题解析】 一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。由此可见,选项 D的说法正确。 7 【正确答案】 C 【试题解析】 软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科。所谓软件工程是指,采用工程的概念、原理、技术和方法指导软件的开发与维护。软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。由此可见,选项 A、 B和 D的说法均不正确,选项 C正确。 8 【正确答案
32、】 B 【试题解析】 本题考核的知识点是算法的性质。算法是为解决某个特定问题而采取的确定的且有限的步骤,一个算法应当具有以下 5个基本特性: 1有穷性,就是指一个算法应当包含有限个操作步骤。 2确定性,就是说算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。3有零个或多个输入。 4可行性,就是说算法中指定的操作,都可以通过已经实现的基本运算执行有限次实现, 5有一个或多个输出。由此可知选项 B不正确,所以, 4个选项中选项 B符合题意。 9 【正确答案】 A 【试题解析】 本 题考核的知识点是 C程序的三种基本结构。 C程序由三种基本的结构组成,分别为顺序结
33、构、选择结构和循环结构,这三种结构可以组成任何复杂的 C程序,即可以完成任何复杂的任务,故选项 B、选项 C和选项 D都不正确。所以, 4个选项中选项 A符合题意。 10 【正确答案】 B 【试题解析】 本题考核的知识点是 main()函数的位置。一个完整的 C语言程序有且仅有一个主函数 main()函数 )程序总从 main()函数的第一条语句开始执行,到 main()函数的最后一条语句结束,其他函数都是在执行 main()函数时,通过函数调用或嵌套调用而得以执行的。 C语言规定, main()函数在程序中的位置是任意的,故选项 A、选项 C和选项 D均不正确。所以, B选项为所选。 11
34、【正确答案】 B 【试题解析】 本题考核的知识点是自增运算符和自减运算符的使用程序中 i的值用八进制表示 (十进制为 8), +i是在变量使用前自身先加 1,而 j-是在变量使用后自身减 1。所以, 4个选项中 B符合题意。 12 【正确答案】 A 【试题解析】 本题考查的知识点是转义字符。题目中的关键是八进制 101的十进制是多少八进制的 101转换为十进 制为 65,也就是字符 A的 ASCII。 13 【正确答案】 B 【试题解析】 在 C语言中,合法的标识符由字母,数字和下划线组成 (故选项 A不正确 ),并且第一个字符必须为字母或者下划线 (故选项 B和选项 D不正确 )所以, B选
35、项为所选 14 【正确答案】 A 【试题解析】 本题考核的知识点是 scanf()函数及 printf()函数的输出格式。程序在定义时,以十进制形式为 m赋初值, 以八进制的形式为 n赋初值输出的时候m以十进制形式输出, n以八进制形式输出,因此输出的结果为 32767和 32767。所以, A选项为所选。 15 【正确答案】 A 【试题解析】 程序中的第一个输出语句输出表达式 +a的值,该 +a是在使用 a之前,先使 a的值加 1,即为 a加 1为字符 b,此时 a的值为 b,所以第一个输出语句输出的值为 b,第二个输出语句中输出的 b的值,这时 b的值为表达式 a+的值, a+是在使用 a
36、之后 (此时 a的值为 b,所以赋给 b的值为 B) ,使 a的值加一因此第二个输出的值也为 b所以, 4个选项中选项 A符合题意。 16 【正确答案】 C 【试题解析】 当整数的值超过格式要求输出范围时,原样输出 本题中要求输出两个有效数字,而实际上 a有 4个有效数字,故原样输出,输出 1234。所以, 4个选项中 C为所选。 17 【正确答案】 B 【试题解析】 程序中的 printf()函数的输出格式部分只说明了一个 %d,而输出成员列表却有两个成员 a和 b,在这里将只输出第一个成员 a值为 666,所以, 4个选项中选项 B符合题意。 18 【正确答案】 C 【试题解析】 本题考查
37、的知识点是运算符的优先级在复合赋值语句中,应该由右向左依次赋值,在表达式中,右端由 i*=k得 i=2*2为 4, k=k+i,即 k值为 6,m=k故 m=6所以 4个选项中 C正确。 19 【正确答案】 D 【试题解析】 由于 20000+20000、 4000*10及 30000+10000都是整型表达式,故运算的结果仍然是整型,表达式运算的结果超出了整型数据的范围,不正确而D是长整型运算,不会超出长整型的范围。所以, 4个选项中 D为所选 20 【正确答案】 B 【试题解析】 C语言规定 else总是和离它最近的 if语句配对。故第一个 else和第一个 if配对,第二个 else和第
38、二个 if配对。首先计算第一个订后面的表达式 “a b c”,表达式 “a b”是为 1,表达式 “1 c, 为 0,所以执行 else后面的语句先执行 if后面的表达式, “c-1 d”为真,值为 1。 “1=1”为真,执行 printf语句所以, B选项为所选。 21 【正确答案】 C 【试题解析】 算法是指为解决某个特定问题而采取的确定且有限的步骤。一个算法应当具有以下五个特性:有穷性;确定性;可行性;有零个或多个输入;有一个或多个输出。所以, 4个选项中选项 C符合题意。 22 【正确答案】 A 【试题解析】 在循环体中有一条 if语句,其后面表达式 为 “i%2”,当 i的值为奇数时
39、,其值为真,执行其后面的语句, i的值加 1,重新开始循环,当 i的值为偶数时, “i%2”为假,执行 “i+; s+1”。在循环中 i为偶数时的值分别为 0、 2、 4、6,加 1过后的值分别为 1、 3、 5、 7, s中存放的是它们的和,值为 16所以, A选项为所选。 23 【正确答案】 A 【试题解析】 给字符型变量赋值只能赋一个字符,包括转义字符。选项 A中 “”为转义字符应该用 “,来表示,故选项 A错误;选项 B中将一个整数赋值给字符变量,正确;选项 C将一个空值赋值给字符变量,正确;选 项 D将一个用十六进制数表示的转义字符赋值给字符变量,正确,所以, 4个选项中选项 A符合
40、题意。 24 【正确答案】 A 【试题解析】 主函数中首先定义了 4个字符变量 a、 b、 c、 d,然后通过 scanf()函数输入 a、 b、 c、乙输入中 a和 b是按字符格式 c输入的, c和 d是按整型符号d输入的在看下面的 pnntf()函数中,要求 a、 b、 c、 d都按字符输出,故 a和 b原样输出为 6、 5, c和 d将把与其 ASCII码对应的字符输出, 65和 66的 ASCII码对应字符 A和 B,故最后的输出为 6, 5, A, B。所以, 4个选项中 选项 A符合题意。 25 【正确答案】 B 【试题解析】 选项 A中省略了第一维的长度,在 c语言中是不允许的,
41、故选项 A错误;选项 C也是省略第一维的长度;选项 D中定义了一个 2行 3列的数组,而在赋值的时候却赋了一个 3行的值给它,显然不正确,故选项 D错误,所以, 4个选项中选项 B符合题意。 26 【正确答案】 B 【试题解析】 break语句只能在循环体和 switch语句体内使用。本题程序为在while循环中嵌套 for循环。先看内层 for循环,该循环的 3个表达式全部省略,循环条件始终为真,但循环体 内的 break语句为终止循环的条件。首先,由初始条件判断外层循坏 while括号内表达式的值,该值为真,执行本次 while循环,即执行循环体内的订语句,判断该表达式后面括号里表达式的值
42、为真,执行 break语句,跳出内层循环,执行下面的语句,此时 i和 a的值均变为 11;回到外层循环,判断表达式 “i 20”仍为真,执行内层循环语句,此时 if条件不满足,执行else语句, i的值为 10,继续内层循环, if语句条件满足,执行 break语句,跳出内层循环,执行下面的语句后, i和 a的值分别是 21和 32。再判断外层循环的 条件为假,结束循环所以, 4个选项中 B为所选。 27 【正确答案】 D 【试题解析】 选项 A定义了一个整型变量 i,并且初始化让它指向 NULL,接着通过 seanf()函数,改变 i指向的存储空间的值,选项 A中首先定义了整型指针变量 i并
43、初始化为 NULL,即表示指针 i不指向任何内存,即此时程序还没有为 i在内存中开辟存储单元,而在 scanf()函数中笫;个参数是地址参数,显然在这里 i不在表示地址,所以下面的 scanf(“%d“,i)语句是不正确的,故选项 A不正确;选项 B定义了一个浮点型变量 f并初始化让它指 向 NULL,而当一个指针变量指向NULL以后不能在给它赋值,而按下来的程序中为其赋了一值,故选项 B错误;选项 C中首先定义了一个字符变量 t并给它赋初值 m,然后定义一个字符型指针c并让它指向了变量 t,这一部分正确,然后接着用了一个语句 “c=”应该特该语句中 c前的 “*”去掉,故选项 c运用指针变量
44、不正确。所以, 4个选项中选项 D符合题意。 28 【正确答案】 A 【试题解析】 在 C语言中 NULL的 ASCII码值为 0,而输出函数要求以整形格式输出,故最后的输出数为 0。所以, 4个选项中选项 A符合题意 。 29 【正确答案】 C 【试题解析】 本题考核的知识点是指针数组。本崽首先定义了一个有 3个元素的指针数组 s,并遭过赋值使 s0指向字符串 “one”s1指向字符串 “two”, s2指向字符串 “three”,然后通过赋值语句 “p=s1”,使 p指向了字符串 “two”,故 ”(p+1)”就是字符 “w” 。所以, C选项为所选。 30 【正确答案】 D 【试题解析】
45、 本题考核的知识点是二维数组的定义和初始化。在定义中如果对所有元素赋初值,其第 1维的长度可以省略,故选项 B正确;二维数 组初始化也可以只对每行或前若干个行的前若干个元素赋初值,故选项 A和选项 C正确;在二维数组定义时不能省略第二维的长度,故选项 D错误。所以, 4个选项中选项 D符合题意。 31 【正确答案】 A 【试题解析】 计算逻辑表达式要注意的问题有三个:一、 3个逻辑表达式的优先级从高到低依次是 !(逻辑非 )、 &(逻辑与 )、 (逻辑或 );二、运算符 &或 的左边运算分量分别为 “假 ”或 “真 ”的时候已经能够得出整个表达式的值,故右边运算分量将被 “短路 ”,即忽略右边的表达式三、逻辑值能够自动转换为整数值: “真 ”=1、 “假 =0;整数值也能自动转换为逻辑值: 0=“假 ”,非 0= “真 ” 。选项 A 中 (!a=1)&(!b=0) (12=1)&(!b =0) (0=1)&(!b=0) 0&(!b=0)0(& 右边表达式 (!b=0)被 “短路 ”);选项 B中 (a b)&!c1 (2 3)&!41 1&0 01 ;选项 C中 a&b 2&31 选项 Da(b+b)&(c-a) 2(b+b)&(c , a) 1( 右边表达式 (b+b)&(c-a)被 “短路 ”)。所以本题选 A。 32 【正确答案】