1、国家二级( C语言)机试模拟试卷 3及答案与解析 一、选择题 1 算法的有穷性是指( )。 ( A)算法程序的运行时间是有限的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的长度是有限的 ( D)算法只能被有限的用户使用 2 对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n 1)/2的排序方法是( )。 ( A)快速排序 ( B)冒泡排序 ( C)直接插入排序 ( D)堆排序 3 下列叙述中正确的是( )。 ( A)算法就是程序 ( B)设计算法时只需要考虑数据结构的设计 ( C)设计算法时只需要考虑结果的可靠性 ( D)以上三种说法都不对 4 结构化程序设计的基本原则
2、不包括( )。 ( A)多态性 ( B)自顶向下 ( C)模块化 ( D)逐步求精 5 在面向对象方法中,不属于 “对象 “基本特点的是( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 6 程序流程图中带有箭头的线段表示的是( )。 ( A)图元关系 ( B)数据流 ( C)控制流 ( D)调用关系 7 软件设计中模块划分应遵循的准则是( )。 ( A)低内聚低耦合 ( B) 高内聚低耦合 ( C)低内聚高耦合 ( D)高内聚高耦合 8 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 9 在
3、数据库设计中,将 E-R图转换成关系数据模型的过程属于( )。 ( A)需求分析阶段 ( B)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 10 在数据库设计中,描述数据间内在语义联系得到 E-R图的过程属于( )。 ( A)逻辑设计阶段 ( B)需求分析阶段 ( C)概念设计阶段 ( D)物理设计 阶段 11 以下叙述中错误的是( )。 ( A) C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 ( B) C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件 ( C)用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中
4、 ( D)语言源程序经编译后生成后缀为 .obj的目标程序 12 下列叙述中错误的是( )。 ( A)一个 C语言程序只能实现一种算法 ( B) C程序可以由多个程序文件组成 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 13 若变量已正确定义,以下选项中非法的表达式是( )。 ( A) a=1/2*(x=y=20,x*3) ( B) a!=4|b ( C) a % 4 ( D) A + 32 14 设有两行定义语句: int scanf; float case; 则以下叙述正确的是( )。 ( A)第 2行语句不合法 ( B)两行定义语句都合
5、法 ( C)第 1行语句不合法 ( D)两行定义语句都不合法 15 以下能正确表述算式 sin(2r+30)的 C语言表达式是( )。 ( A) sin(2*3.14*r+3.14*30/180.0) ( B) sin(2*r+ 30 ) ( C) sin(2*3.14*r+ 30 ) ( D) sin(2*3.14*r+30*3.14/360.0) 16 有以下程序 #include main() printf(“%dn“, NULL ); 程序运行后的输出结果是( )。 ( A) 0 ( B)变量无定义,输出不确定 ( C) -1 ( D) 1 17 以下正确的字符串常量是( )。 ( A
6、) “ ( B) abc ( C) Olympic Games ( D) 18 设有定义: double x=2.12;,以下不能完整输出变量 x值的语句是( )。 ( A) printf(“x=%5.0fn“,x); ( B) printf(“x=%fn“,x); ( C) printf(“x=%lfn“,x); ( D) printf(“x=%0.5fn“,x); 19 若以下选项中的变量 a, b, y均已正确定义并赋值,则语法正确的 switch语句是( )。 ( A) switch( a*a+b*b ) default : break; case 3 : y=a+b; break;
7、case 2 : y=a-b; break; ( B) switch( a+b ) case1 : case3 : y=a+b; break; case0 : case4 : y=a-b; ( C) switch (a+9) case a : y=a-b; case b : y=a+b; ( D) switch a*b case 10 : y=a+b; default : y=a-b; 20 以下叙述中正确的是( )。 ( A) else不是一条独立的语句,它只是 if语句的一部分 ( B)对于逻辑表达式: a+ for( ; y0; y-) if(y%3=0) printf(“%d“, -y
8、); 程序的运行结果是( )。 ( A) 852 ( B) 963 ( C) 741 ( D) 875421 22 以下能够实现计算 5!的程序段是( )。 ( A) int fac=1,k=0; do k+; fac*=k; while(k #include main() char str12 = s,t , r , i , n , g ; printf(“%dn“, strlen( str ) ); 程序运行后的输出结果是( )。 ( A) 6 ( B) 7 ( C) 11 ( D) 12 26 有以下程序 #include main() int a3=0, i, j, k=2; for(
9、 i=0; i int m1(int x,int y) return x void fun( int x, int y, int *c, int *d ) *c = x+y; *d = x-y; main() int a=4, b=3, c=0, d=0; fun ( a, b, printf( “%d %dn“ , c, d ); 程序的输出结果是( )。 ( A) 7 1 ( B) 4 3 ( C) 3 4 ( D) 0 0 32 设 p是指针变量,语句 p = NULL;等价于( )。 ( A) p = 0; ( B) p = ; ( C) p = “; ( D) p = 0; 33 以
10、下叙述中错误的是( )。 ( A)可以给指针变量赋一个整数作为地址值 ( B)函数可以返回地址值 ( C)改变函数形参的值,不会改变对应实参的值 ( D)当在程序的开头包含头文件 stdio.h时,可以给指针变量赋 NULL 34 以下叙述中正确的是( )。 ( A) int* p1; int * p2; int *p3;都是合法的定义指针变量的语句 ( B)指针变量只能通过求地址运算符( 与 p=0;是等价的语句 ( D)语句 p=NULL;执行后,指针 p指向地址为 0的存储单元 35 有如下程序 #include main() char* p1 = 0; int* p2 = 0; dou
11、ble* p3 = 0; printf(“%d,%d,%dn“, sizeof(p1), sizeof(p2), sizeof(p3); 程 序运行后的输出结果是( )。 ( A) 4,4,4 ( B) 1,4,8 ( C) 0,0,0 ( D) 1,2,4 36 以下叙述中正确的是( )。 ( A)在 C语言中,预处理命令行都以 “#“开头 ( B)预处理命令行必须位于 C源程序的起始位置 ( C) #include 必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 37 有以下程序 #include #define S(x) x/x main() int k=
12、5, j=2; printf(“%d,%dn“, S(k+j), S(j+k); 程序的运行结果是( )。 ( A) 7,9 ( B) 1,1 ( C) 7,7 ( D) 9,9 38 下面结构体的定义语句中,错误的是( )。 ( A) struct ord int x;int y;int z; struct ord a; ( B) struct ord int x;int y;int z; struct ord a; ( C) struct ord int x;int y;int z; a; ( D) struct int x;int y;int z; a; 39 有以下程序 #includ
13、e typedef struct int b, p; A; void f(A c) /* 注意: c是结构变量名 */ int j; c.b += 1; c.p+=2; main() int i; A a=1,2; f(a); printf(“%d,%dn“, a.b, a.p); 程序运行后的输出结果是( )。 ( A) 1,2 ( B) 2,4 ( C) 1,4 ( D) 2,3 40 有以下程序 #include main() unsigned char a=8, c; c = a3; printf(“%dn“, c); 程序运行后的输出结果是( )。 ( A) 1 ( B) 16 (
14、C) 32 ( D) 0 二、程序填空题 41 下列给定程序中,函数 fun的功能是计算下式: 直到 并将计算结果作为函数值返回。例如,若形参 e的值为 1e-3,函数的返回值为 2 985678。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分 源程序给出如下。不得增行或删行,也不得更改程序的结构 !试题程序: #indudedoublefun(double e) int i; double s.x; /*found*/ s=0;i=【 1】; x=1 0; while(xe)(/*found*/ 【 2】; /*found*/ x=(2 0*i一 1)【 3】
15、(2 0*i); s=s+x; return S; main() double e=le一 3: printf(“nThe result is: fn”fun(e); 。 三、程序修改题 42 下列给定程序中,函数 fun的功能是:计算整数 n的阶乘。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数 ,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include double fun(int n) double result=1 0= while(nIcase为关键字,不能作为用户标识符,故而答案选 A)。 14 【正确答案】 A 【试题解析
16、】 考查算术表达式的写法, C中没有 ,需要用数值 3.14代替, C中sin函数的参数为弧度 ,角度 30转成弧度应为 3.14*30/180。故而选 A)。 15 【正确答案】 A 【试题解析】 考查运算符与表达式, A)中先计算 (x=y),为 0,将 0赋值给 z,表达式值为 0, A)错;选项 B)、 C)、 D)均涉及到逗号表达式,整个逗号表达式的值为最后一个表达式的值,所以均为 12。选 A)。 16 【正确答案】 A 【试题解析】 考查运算符与表达式,方法是想办法得到个位数字和十位数字,然后个位数字 *10+十位数字即可将个位数和十位数对换。 A)中, n/10*10将整数中的
17、十位部分提取出来,然 后用 n-n/10*10即得该整数的个位数字, n/10得到十位数字, (n-n/10*10)*10+n/10即完成对换, A)正确。同时易得选项 B)、 C)、 D)三个选项都不正确,答案选 A)。 17 【正确答案】 A 【试题解析】 百分号 “%“主要用于指定输出格式,如果格式字符串中两个百分号连续即为 “%“的形式,则表示输出一个普通字符 “%“。所以答案选 A)。 18 【正确答案】 A 【试题解析】 输出函数 printf()的一般形式为 “printf(“格式控制字符串 “,输出项 1,输出项 2,)“ ,输出项的形式要和格式控制字符串中的格式控制符保持一致
18、,“%s“为输出字符串, “%c“为输出单个字符, “%d“为以十进制形式输出带符号整数,答案选 A)。 19 【正确答案】 A 【试题解析】 考查条件表达式。条件表达式的形式为: 表达式 1 ? 表达式 2 : 表达式 3 ,计算 “表达式 1“的值,若为 “真 “,取 “表达式 2“的值作为整个条件表达式的值;若为 “假 “,取 “表达式 3“的值作为整个条件表达式的值。本程序中要选能判定 (x-y)为 “真 “的语句,即 x! =y,或者 (x-y 0),选 A)。 20 【正确答案】 A 【试题解析】 题目程序的意思是当 a值为 1的时候,将 b值赋给 a,若 a值不为1则 a自加 1
19、。选项 A)中,若 a的值为 1,则表达式 a=1的值为 1,进入 case 1分支, a自加 1,而 a值不为 0时,执行 “a=b; break;“,和题目程序执行的语句不一致,所以答案选 A)。 21 【正确答案】 A 【试题解析】 该函数的逻辑是:若数组 a中元素下标为偶数并且该元素也为偶数则该元素自加 1,若元素下标为偶数并且该元素为奇数则该元素自减 1,若该元素下标为奇数则设定该元素为 0,所以结 果输出为选项 A)。 22 【正确答案】 A 【试题解析】 考查循环嵌套。循环嵌套执行次数为 外层循环次数 *内层循环次数。但是本题中循环次数与输出结果没有关系,两层循环之后只是执行了一
20、个空语句 ;,然后输出一个 * 。故而答案选 A)。 23 【正确答案】 A 【试题解析】 已经证明,由顺序、分支、循环这三种基本结构组成的算法可以解决任何复杂的问题。选项 A)叙述有误。 24 【正确答案】 A 【试题解析】 该段程序的作用是将最后一个空格后面的字符串覆盖数组 a中的数据,所以 for循 环执行完毕后, a=“you! “,所以答案选 A)。 25 【正确答案】 A 【试题解析】 同类元素的集合称为数组,数组元素在内存中占据连续的存储空间,答案 A)正确。在使用逗号运算符的情况下,一条语句可以定义多个数组,选项 B)错。方括号中可以为整型变量或者常量表达式,选项 C)错。数组
21、元素在数组中的下标为整型常量或者变量构成的整型表达式,不能为浮点数,选项D)错。答案选 A)。 26 【正确答案】 A 【试题解析】 A)正确, char c1, c2, *c3, c440表示定义了两个字 符变量c1、 c2,一个字符指针 c3,一个字符数组 c4。数组的下限永远为 0,选项 B)、C)、 D)错,答案选 A)。 27 【正确答案】 A 【试题解析】 该程序段的功能是将数组 a的每列从小到大排序,排序完毕之后,数组 a44= 1,4,2,1,3,6,3,2,4,7,5,5,8,8,6,7,所以输出主对角元素为1,6,5,7,答案选 A)。 28 【正确答案】 A 【试题解析】
22、 全局变量可以用 static修饰,限制该变量只能在当前文件有效而不能被其他文件访问,选项 A) 正确;变量的说明只是向编译程序描述变量类型,但不为该变量分配存储空间,变量的定义才为该变量分配存储空间,选项 B)错误;在语句块内可以定义变量,定义的变量为局部变量,选项 C)错误;函数的形参相当于在函数内部定义的一个变量,属于局部变量,选项 D)错误;答案选A)。 29 【正确答案】 A 【试题解析】 调用函数的时候只有保证调用语句的函数名和被调函数的函数名、参数列表一致才能保证调用的正确性, A)正确。 C语言对大小写敏感,选项 B)错。用户自定义的函数名需要遵循用户标识符的命名规则,由字母、
23、数字、下划线 组成并且第一个字符不能为数字,选项 C)错。一个函数每次只能使用一个return语句,但是该函数体中可以有多个返回点,也就是有多条 return语句,每次只从其中一点返回,选项 D)错。答案选 A)。 30 【正确答案】 A 【试题解析】 考查数组名作为函数参数。数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项 D)错; a10、 a、 *a做形参都是接受实参数组首地址,效果一样, A)正确。传递给形参的实参可以是 数组名,还可以是指向该数组的指针变量,选项 B)错。数组名可以看做一个指针
24、常量,对其进行自加自减运算相当于指针变量的自加自减,选项 C)错。答案选 A)。 31 【正确答案】 A 【试题解析】 函数 m1()返回两个参数中较小的数值,函数 m2()返回两个参数中较大的数值,函数 fun()返回两个参数之和,所以fun(m1(x,y),m2(y,z)=fun(m1(2,3),m2(3,1)=fun(2,3)=5,答案选 A)。 32 【正确答案】 A 【试题解析】 本题考查指向指针的指针。 i是 int类型的变量, p为基本类型为int的指针变量, r为二级指针,指向的是指针 p的地址,因此, *p就代表 i; *r就代表 *p,也等价于 i。二级指针作为函数参数,形
25、参和实参指向同一个地址空间,两者的改变保持同步。函数 fun()的功能是将 r指向的存有变量 i的地址的指针变量改为指向存有变量 k的地址的指针变量, *p的值发生了改变。函数 f()中语句 “int *t=*s=t;“同样使得 *s、 *t、 k等价,所以刚开始输出 3个 7,函数调用结束之后 *p与 *r的值均为 7, i不变,答案选 A)。 33 【正确答案】 A 【试题解析】 考查指针变量。 p = NULL表示给指针 p赋以空指针, NULL为一个符号常量,代表整数 0,所以答案选 A)。 34 【正确答案】 A 【试题解析】 在指针运算中, “*“为取值运算符, “表示把空指针赋给
26、指针变量 p,而若要 p指向变量 x的地址需使用“p= “的形式,所以答案选 A)。 35 【正确答案】 A 【试题解析】 不可以把一个 int型数据直接赋值给一个指针变量,只能用取地址运算符 “,所以该程序会出现编译错误,答案选 A)。 38 【正确答案】 A 【试题解析】 分号代表该结构体定义语句的结束,选项 A)的结构体没有定义完全就用该结构体另外定义变量,用法有误,所以答案选 A)。 39 【正确答案】 A 【试题解析】 考查结构体变量作为函数实参整体传递,也是一种值传参,形参的变 化不能影响到实参,所以调用函数 f(a)对 a中的数据没有影响,输出结果为1,2,答案选 A)。 40
27、【正确答案】 A 【试题解析】 字符常量与其 ASCII码值一一对应,在计算的时候,可以使用该字符的 ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者 ASCII码。右移运算符 “的运算规则是把左边运算数的各二进制位全部右移 n位, n取决于 “右边的数值。字符 a的 ASCII码值为 8,对应二进制为 1000,所以a3=1,输出的字符 c的 ASCII码值为 1,答案选 A)。 二、程序填空题 41 【正确答案】 (1)0 (2)i+或 +i或 i+=1或 i=i+1 (3)2 0*1 【试题解析】 填空 1: i从 1开始参加运算,由于 i在循环开始时自增,所以赋初值为 0
28、。 填空 2:由通项知 i每次增 1。 填空 3:根据公式中的通项得到表达式的值。 三、程序修改题 42 【正确答案】 (1)result*=n-; (2)return result; 【试题解析】 (1)n的阶乘计算公式包含 n,所以改为 result*=n一;。 (2)阶乘作为函数值返 回,所以为 return result;。 四、程序设计题 43 【正确答案】 void fun(char*a) while(*a!= 0) a+; a-; /*指针 a指向字符串的尾部 * while(*a=*) a一: /*指针 a指向最后一个字母 * *(a+1)= 0; /*在字符串最后加上结束标识符 * 【试题解析】 在字符串最后一个不是 *号的字符后面加上结束符号 0来删除其尾部的 *号。先找到字符串的结尾 ,往前逐个判断是否为 *号,直到找到最后一个字母为止,最后在该字符后面加上结束符号 0
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1