1、国家二级 C语言机试(选择题)模拟试卷 23及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)程序执行的效率与数据的存储结构密切相关 ( B)程序执行的效率只取决于程序的控制结构 ( C)程序执行的效率只取决于所处理的数据量 ( D)以上说法均错误 2 下列与队列结构有关联的是 ( A)函数的递归调用 ( B)数组元素的引用 ( C)多重循环的执行 ( D)先到先服务的作业调度 3 对下列二叉树 进行前序遍历的结果为 ( A) DYBEAFCZX ( B) YDEBFZXCA ( C) ABDYECFXZ ( D) ABCDEFXYZ 4 一个栈的初始状态为空。现将元素 1,2,3,A
2、,B,C依次入栈,然后再依次出栈,则元素出栈的顺序是 ( A) 1,2,3,A,B,C ( B) C,B,A,1,2,3 ( C) C,B,A,3,2,1 ( D) 1,2,3,C,B,A 5 下面属于白盒测试方法的是 ( A) 等价类划分法 ( B)逻辑覆盖 ( C)边界值分析法 ( D)错误推测法 6 下面对对象概念描述正确的是 ( A)对象间的通信靠消息传递 ( B)对象是名字和方法的封装体 ( C)任何对象必须 有继承性 ( D)对象的多态性是指一个对象有多个操作 7 软件设计中模块划分应遵循的准则是 ( A)低内聚低耦合 ( B)高耦合高内聚 ( C)高内聚低耦合 ( D)以上说法均
3、错误 8 下面描述中不属于数据库系统特点的是 ( A)数据共享 ( B)数据完整性 ( C)数据冗余度高 ( D)数据独立性高 9 数据库设计过程不包括 ( A)概念设计 ( B)逻辑设计 ( C)物理设计 ( D)算法设计 10 有三个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( A)自然连接 ( B)交 ( C)投影 ( D)并 11 下列叙述中正确的是 ( A) C程序中所有函数之间都可以相互调用 ( B)在 C程序中 main函数的位置是固定的 ( C)在 C程序的函数中不能定义另一个函数 ( D)每个 C程序文件中都必须要有一个 main函数 12 以下叙述
4、正确的是 ( A) C语言函数可以嵌套调用,例如: fun(fun(x) ( B) C语言程序是由过程和函数组成的 ( C) C语言函数不可以单独编译 ( D) C语言中除了 main函数,其他函数不可作为单独文件形式存在 13 以下选项中合法的标识符是 ( A) 1_ _ ( B) 1 1 ( C) 1_1 ( D) _11 14 表达式 3.6-5/2+1.2+5%2的值是 ( A) 4.3 ( B) 4.8 ( C) 3.3 ( D) 3.8 15 有以下定义: int a; long b; double x, y; 则以下选项中正确的表达式是 ( A) a=xy ( B) a%(int
5、)(x-y) ( C) (a*y)%b ( D) y=x+y=x 16 有以下程序 #include main() int a=0, b=0; /* 给 a赋值 a=10; b=20;给 b赋值 */ printf(“a+b=%dn“,a+b); /* 输出计算结果 */ 程序运行后的输出结果是 ( A)出错 ( B) a+b=30 ( C) a+b=10 ( D) a+b=0 17 以下选项中,值为 1的表达式是 ( A) 1 -0 ( B) 1 - 0 ( C) 1 -0 ( D) 0 - 0 18 当变量 c的值不为 2、 4、 6时,值为 “真 “的表达式是 ( A) (c =2 el
6、se printf(“%dn“, y); ( B) if ( a=0 ) printf(“%dn“, y); else printf(“%dn“, x); ( C) if ( a=0 ) printf(“%dn“, x); else printf(“%dn“, y); ( D) if ( a ) printf(“%dn“, x); else printf(“%dn“, y); 20 有以下程序 #include main() int x=1,y=2,z=3; if(x y) if(y z) printf(“%d“,+z); elseprintf(“%d“,+y); printf(“%dn“,
7、x+ ); 程序的 运行结果是 ( A) 1 ( B) 41 ( C) 2 ( D) 331 21 要求通过 while循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,以下正确的程序段是 ( A) while(ch=getchar() =N) printf(“%c “,ch); ( B) while(ch=getchar()!=N) printf(“%c “,ch); ( C) while(ch=getchar()=N) printf(“%c “,ch); ( D) while(ch=getchar()=N) printf(“%c “,ch); 22 以下叙述中正确的是 ( A)
8、 continue语句的作用是:使程序的执行流程跳出包含它的所有循环 ( B) break语句只能用在循环体内和 switch语句体内 ( C)在循环体内使用 break语句和 continue语句的作用相 ( D) break语句只能用于 switch语句体中 23 若各选项中所用变量已正确定义,函数 fun中通过 return语句返回一个函数值,以下选项中错误的程序是 ( A) main() x=fun(2,10) ; float fun(int a,intB) ( B) float fun(int a,intB) main() x=fun(i,j); ( C) float fun(int
9、 ,int); main() x=fun(2,10); float fun(int a,intB) ( D) main() float fun(int i,int j); x=fun(i,j); float fun(int a,intB) 24 若有定义语句: int year=2009, *p= 以下不能使变量 year中的值增至 2010的语句是 ( A) (*p)+; ( B) *p+; ( C) +(*p); ( D) *p+=1; 25 若在定义语句: int a,b,c,*p= 接着执行以下选项中的语句,则能正确执行的语句是 ( A) scanf(“%d“,a,b,c); ( B)
10、 scanf(“%d%d%d“,a,b,c); ( C) scanf(“%d“,p); ( D) scanf(“%d“, 26 以下错误的定义语句是 ( A) int x43=1,2,3,1,2,3,1,2,3,1,2,3; ( B) int x4= 1,2,3,1,2,3,1,2,3,1,2,3; ( C) int x3=0,1,1,2,3; ( D) int x3=1,2,3,4; 27 有以下程序 #include main() int i, t3=9,8,7,6,5,4,3,2,1; for(i=0;i 3;i+) printf(“%d “,t2-ii); 程序执行后的输出结果是 (
11、A) 3 5 7 ( B) 7 5 3 ( C) 3 6 9 ( D) 7 5 1 28 有以下程序 #include void fun(int *a, int n) /* fun函数的功能是将 a所指数组元素从大到小排序 */ int t, i, j; for (i=0; i n-1;i+) for (j=i+1; j n; j+) if (ai aj) t=ai; ai=aj; aj=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; fun(c+4, 6); for (i=0;i 10; i+) printf(“%d,“, ci); printf(“n“);
12、 程序的运行结果是 ( A) 1,2,3,4,9,8,7,6,5,0, ( B) 0,9,8,7,6,5,1,2,3,4, ( C) 0,9,8,7,6,5,4,3,2,1, ( D) 1,2,3,4,5,6,7,8,9,0, 29 以下正确的字符串常量是 ( A) ( B) abc ( C) Olympic Games 30 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 ST“要求的是 ( A) if(s1-s2=0) ST; ( B) if(s1=s2) ST; ( C) if(strcpy(s1,s2)=1) ST; ( D) if(strcmp(s2,s1)=0)
13、ST; 31 有以下程序 #include int fun(char p10) int n=0,i; for(i=0; i 7; i+) if(pi0= T) n+; return n; main() char str10=“Mon“,“Tue“,“Wed“,“Thu“,“Fri“,“Sat“,“Sun“; printf(“%dn“,fun(str); 程序执行后的输出结果是 ( A) 1 ( B) 2 ( C) 3 ( D) 0 32 有以下程序 #include void fun(char *t , char *s) while(*t!=0) t+; while( (*t+ = *s+ )
14、!=0 ) ; main() char ss10=“acc“,aa10=“bbxxyy“; fun(ss, aa);printf(“%s,%sn“, ss,aa); 程序的运行结果是 ( A) acc,bbxxyy ( B) accbbxxyy,bbxxyy ( C) accxxyy,bbxxyy ( D) accxyy,bbxxyy 33 有以下程序 #include #include void fun (char *w, int m ) char s, *p1, *p2; p1=w;p2=w+m-1; while ( p1 p2 ) s=*p1; *p1=*p2; *p2=s; p1+;
15、p2-; main() char a =“123456“; fun ( a, strlen (a) );puts (a); 程序运行后的输 出结果是 ( A) 123456 ( B) 116611 ( C) 161616 ( D) 654321 34 有以下程序 #include int b=2; int fun(int *k ) b=*k+b; return(B); main() int a10=1,2,3,4,5,6,7,8, i; for(i=2;i #include struct A int a; char b10; double c; void f(struct A t); main
16、() struct A a=1001,“ZhangDa“,1098.0; f (A); printf(“%d,%s,%6.1fn“, a.a,a.b,a.c); void f(struct A t) t.a=1002; strcpy(t.b,“ChangRong“); t.c=1202.0; 程序运行后的输出结果是 ( A) 1002,ZhangDa,1202.0 ( B) 1002,ChangRong,1202.0 ( C) 1001,ChangRong,1098.0 ( D) 1001,ZhangDa,1098.0 37 有以下程序 #include #include typedef st
17、ruct char name9; char sex; float score2; STU; STU f(STU A) STU b=“Zhao“, m, 85.0, 90.0;int i; strcpy(a.name, b.name); a.sex = b.sex; for (i=0; i 2; i+) a.scorei = b.scorei; return a; main() STU c=“Qian“, f, 95.0, 92.0, d; d=f(C); printf(“%s,%c,%2.0f,%2.0fn“,d.name,d.sex,d.score0,d.score1); 程序的运行结果是
18、( A) Zhao,m,85,90 ( B) Qian,m,85,90 ( C) Qian,f,95,92 ( D) Zhao,f,95,92 38 若程序中有宏定义行: #define N 100 则以下叙述中正确的是 ( A)宏定义行中定义了标识符 N的值为整数 100 ( B)在编译程序对 C源程序进行预处理时用 100替换标识符 N ( C)上述宏定义行实现将 100赋给标示符 N ( D)在运行时用 100替换标识符 N 39 若变量已正确定义,则以下语句的输出结果是 s=32; s=32; printf(“%d“,s); ( A) -1 ( B) 0 ( C) 1 ( D) 32
19、40 有以下程序 #include main() FILE *fp;char str10; fp=fopen(“myfile.dat“,“w“); fputs(“abc“,fp); fclose(fp); fp=fopen(“myfile.dat“,“a+“); fprintf(fp,“%d“,28); rewind(fp); fscanf(fp,“%s“,str); puts(str); fclose(fp); 程序运行后的输出结果是 ( A) abc ( B) 28c ( C) abc28 ( D)因类型不一致而出错 国家二级 C语言机试(选择题)模拟试卷 23答案与解析 一、选择题 1
20、【正确答案】 A 【试题解析】 程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。 2 【正确答案】 D 【试题解析】 队列的修改是依先进先出的原则进行的, D正确。 3 【正确答案】 C 【试题解析】 前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历 右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。 前序遍历描述为:若二叉树为空,则执行空操作。 否则: 访问根结点; 前序遍历左子树; 前序遍历右子树, C正确。 4 【正确答案】 C 【试题解析】 栈的修改是按后进先出的原则
21、进行的,所以顺序应与入栈顺序相反,故选 C。 5 【正确答案】 B 【试题解析】 白盒测试法主要有逻辑覆盖、基本路径测试等。逻辑覆盖测试包括语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断 -条件 覆盖,选择 B。其余为黑盒测试法。 6 【正确答案】 A 【试题解析】 对象之间进行通信的构造叫做消息, A正确。多态性是指同一个操作可以是不同对象的行为, D错误。对象不一定必须有继承性, C错误。封装性是指从外面看只能看到对象的外部特征,而不知道也无须知道数据的具体结构以及实现操作, B错误。 7 【正确答案】 C 【试题解析】 根据软件设计原理提出如下优化准则: 划分模块时,尽量做到高内聚、低耦合
22、,保持模块相对独立性,并以此原则优化初始的软件结构。 一个模块的作用范围 应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。 软件结构的深度、宽度、扇入、扇出应适当。 模块的大小要适中。 C正确。 8 【正确答案】 C 【试题解析】 数据库系统的特点为高共享、低冗余、独立性高、具有完整性等,C错误。 9 【正确答案】 D 【试题解析】 数据库设计过程主要包括需求分析、概念结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运行和维护阶段。答案为 D选项。 10 【正确答案】 A 【试题解析】 关系 R和关系 S有公共域,关系 T是通过公共域的等值进行连接的结果,符合
23、自然连接,选 A。 11 【正确答案】 C 【试题解析】 C程序中主函数不能被其他函数调用 ,所以 A选项错误, main函数可以放在程序开始 ,也可以放在中间 ,也可以放在最后 ,位置不固定 ,但程序执行时必须从 main函数开始 ,所以 B选项错误,在 C程序的函数中不能定义另一个函数 ,可以声明或调用另一个函数 ,所以 C选项正确 ?每个 C程序中必须包含一个 main函数 ,但不一定是每个 C程序文件中必须有 ,用户单独编写的某个函数也可以存储为一个C程序文件 ,所以 D选项错误。 12 【正确答案】 A 【试题解析】 C语言程序是由函数组成的 ,所以 B错误, C语言函数可以单独进行
24、编译 ,所以 C错误 ?每个 C程序中必须包含一个 main函数 ,但不一定是每个 C程序文件中必须有 ,用户单独编写的某个函数也可以存储为一个 C程序文件 ,所以 D错误。 13 【正确答案】 D 【试题解析】 C语言中的标识符由下划线、字母和数字组成 ,且必须以下划线或字母开始 ,所以只有 D选项正确。 14 【正确答案】 D 【试题解析】 计算 5/2,结果取整数值 2。计算 3.6-2,结 果与高精度数据保持一致,即为 1.6。计算 1.6+1.2,结果为 2.8。计算 5%2,结果为 1。计算 2.8+1结果为 3.8。所以选择 D选项。 15 【正确答案】 B 【试题解析】 C语言
25、中没有 “ “运算符 ,所以 A选项错误, “%“运算符的两个操作值必须为整型数据 ,所以 B选项正确, a*y的结果为 double型 ,所以 C选项错误 ?不能将值赋给像 x+y这样的表达式 ,所以 D选项错误。 16 【正确答案】 D 【试题解析】 注释语句可以在一行也可以在多行 ,用 /*/ 或 /表示 ,。它不参与程序的运行 ,所以 a与 b的值仍然为 0,所以打印的结果为 a+b=0。 17 【正确答案】 B 【试题解析】 0,空值 ,其 ASCII码值为 0,所以 B选项的值为 1,字符 0的 ASCII码值为 048,所以 A,C,D的值均不为 1。 18 【正确答案】 D 【
26、试题解析】 逻辑或表达式中有一个值不为 0,结果即为真 ,逻辑与表达式中只有两个运算对象均非零 ,结果才为真,所以只有选项 D满足要求。 19 【正确答案】 C 【试题解析】 A,B,D选项的含义均为 :a的值如果为 0时打印 y的值 ,否则打印 x的值,但是 C选 项的含义是 :a的值为 0时打印 x的值 ,不为 0时打印 y的值 ,与其他选项正好相反。 20 【正确答案】 A 【试题解析】 else总是与离他最近的上面的 if配对 ?所以第一个 if语句的判断条件不成立 ,不再执行第二个 if语句和与第二个 if语句配对的 else语句,而是直接执行打印 x+的操作 ,打印 x的值 1以后
27、在加一。 21 【正确答案】 B 【试题解析】 在 C语言中等于号用 “= =“表示 ,一个 “=“表示赋值 ,所以 A错误,C、 D 选项的含义都是如果输入的字符为 “N“,则打印输出 ,所以正好和题意相反。 22 【正确答案】 B 【试题解析】 continue语句的作用是 :跳过循环体中剩余的语句而进行下一次循环 ,所以 A选项错误, Break语句的作用是终止正在执行的 switch流程 ,跳出 switch结构或者强制终止当前循环 ,从当前执行的循环中跳出 ,所以 C?D选项错误。 23 【正确答案】 A 【试题解析】 在调用子函数时,应对其进行说明。 A选项中,调用时,没有对子函数
28、进行说明。 B选项、 C选项中被调用函数在主调函数之前定义,不用说明; D选项中在主函数中对被调用函数的返回值类型进行了说明。因此 A选项正确。 24 【正确答案】 B 【试题解析】 由于自加运算符 +的运算级别高于间接运算 *的运算级别,所以 B选项的表达式 *p+不能使变量 year中的值增至 2010。因此 B选项正确。 25 【正确答案】 C 【试题解析】 本题重点考察的知识点是标准输入函数 scanf()。 scanf()函数要求,除了第 1个参数为格式化字符串以外,其余参数均为相应变量的地址值。本题中,只有 p是地址值,因此 C选项正确。 26 【正确答案】 B 【试题解析】 二维
29、数组定义的一般形式是:类型说明符数 组名 常量表达式 1常量表达式 2。其中常量表达式 1表示第一维下标的长度,常量表达式 2 表示第二维下标的长度。如对二维数组全部元素赋初值,则第一维的长度可以不给出。但如果对 x4赋值,只确定行数,而不确定列数,就无法正确赋值。因此 B选项正确。 27 【正确答案】 A 【试题解析】 该题中 t3=9,8,7,6,5,4,3,2,1;实际上就是 t33= 9,8,7,6,5,4,3,2,1;,通过 for循环语句,确定需要输出 t20,t11和t02,即输出 3、 5、 7。 因此 A选项正确。 28 【正确答案】 A 【试题解析】 该题目中 fun函数的
30、功能是将 a所指数组元素从大到小排序,fun(c+4, 6);即指排序从第 5个元素开始进行从大到小排序。因此 A选项正确。 29 【正确答案】 D 【试题解析】 本题考察的知识点是:字符串常量。在 C语言中,字符串常量是以双引号括起来的字符序列。因此 B选项和 C选项不正确。字符序列中可包含一些转义字符,转义字符都是以 “开头的。 A选项中包含了三个 “,前两个 ()代表了一个 “字符, 后面一个和 “一起 (“)被看作一个 “,所以该字符串缺少一个结束的 “,因此不正确。 D选项的两个 “之间没有任何字符,代表的是一个空串,是合法的字符串常量,因此 D选项正确。 30 【正确答案】 D 【
31、试题解析】 在 C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp,如果这个函数的返回值等于 0,说明两个字符串相等。因此 D选项正确。 31 【正确答案】 B 【试题解析】 此程序是统计一周七天中英文名称首字母为 “T“的个数。 P i 0是字符串的首字符,一共 有两个 “T“,所以 n=2。因此 B选项正确。 32 【正确答案】 B 【试题解析】 本题重点考察 while循环语句的简单应用。函数 fun()中,前一个while循环的作用是:如果形参指针 t所指内容不为 0,则让 t增 1,直到它指向0。后一个 while循环的作用是:将 s所指内容赋给 t所指地址
32、,然后两者同时增1,直到赋给 t的内容为 0。由此可见,函数 fun()的作用就是将形参 s所指字符串连接到形参 t所指字符串末尾,相当于库函数中的 strcat()。主函数中使用 fun()将数组 aa中的字符串连接到了数组 ss中 原有字符串之后,所以执行完后, ss中的字符串为 “accbbxxyy“。程序最后输出的结果是: accbbxxyy,bbxxyy。因此 B选项正确。 33 【正确答案】 D 【试题解析】 主函数中调用 fun(a,6)后,指针 p1指向字符串中的 “1“、 p2指向字符串中的 “6“。 While循环中,只要 p1p2,则把 p1、 p2所指向的字符互换,同时
33、p1前移, p2后移。最终字符串逆序存放。因此 D选项正确。 34 【正确答案】 B 【试题解析】 主函数中循环执行 2次 ,fun函数被调用 2次 ?b是全局变量 ,整个程序均可使用 ?第 1次调用 :fun(主程序中 :b=fun(第 2次调用 :fun(主程序中 :b=fun(&a3)+b=14+14=28?因此 B选项正确。 35 【正确答案】 C 【试题解析】 本题考查结构体变量的引用, C选项中 mark为结构体中的数组,不能直接赋值,所以 C选项错误。 36 【正确答案】 D 【 试题解析】 本题考查结构体的相关操作以及传值、传址的区别,该题中调用 f函数后,会生成参数 a的一个
34、副本,而不会改变 a的值,所以 a值维持原值,选项 D正确。 37 【正确答案】 A 【试题解析】 本题考查结构体的相关操作以及传值、传址的区别,该题中调用 f函数后,会返回记过计算的 a值,选项 A正确。 38 【正确答案】 B 【试题解析】 本题考查预编译相关知识,宏定义在编译程序时做了一个简单的替换,所以选项 B正确。 39 【正确答案】 B 【试题解析】 本题考查逻辑异或运算,异或运算只有 在两个比较的位不同时其结果是 1,否则结果为 0,题目中两个值相同,所以结果为 0。 40 【正确答案】 C 【试题解析】 本题考查文件操作函数 fprintf()函数, fprintf()函数向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上执行两次 fprintf后文件中有 abc28,所以 C选项正确。