1、国家二级( C语言)机试模拟试卷 10及答案与解析 一、选择题 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 在数据库设计中,将 E-R图转换成关系数据模型的过程属于( )。 ( A)需求分析阶段 ( B)概念设计阶段 (
3、C)逻辑设计阶段 ( D)物理设计阶段 9 有三个关系 R、 S和 R如下:由关系 R和 S通过运算得到关系 T,则所使用的运算为( )。 ( A)并 ( B)自然连接 ( C)笛卡尔积 ( D)交 10 支持子程序调用的数据结构是( )。 ( A)栈 ( B)树 ( C)队列 ( D)二叉树 11 以下叙述中错误的是( )。 ( A) C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 ( B) C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件 ( C)用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中 ( D)语言源程序经编
4、译后生成后缀为 .obj的目标程序 12 下列叙述中错误的是( )。 ( A)一个 C语言程序只能实现一种算法 ( B) C程序可以由多个程序文件组成 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 13 设有两行定义语句: int scanf; float case; 则以下叙述正确的是( )。 ( A)第 2行语句不合法 ( B)两行定义语句都合法 ( C)第 1行语句不合法 ( D)两行定义语句都不合法 14 以下能正确表述算式 sin(2r+30)的 C语言表达式是( )。 ( A) sin(2*3.14*r+3.14*30/180.0)
5、 ( B) sin(2*r+ 30 ) ( C) sin(2*3.14*r+ 30 ) ( D) sin(2*3.14*r+30*3.14/360.0) 15 表达式: (int)(double)9/2)- 9%2 的值是( )。 ( A) 3 ( B) 0 ( C) 4 ( D) 5 16 以下选项中关于 C语言常量的叙述错误的是( )。 ( A)经常被使用的变量可以定义成常量 ( B)常量分为整型常量、实型常量、字符常量和字符串常量 ( C)常量可分为数值型常量和非数值型常量 ( D)所谓常量,是指在程序运行过程中,其值不能被改变的量 17 设有定义: double x=2.12;,以下不
6、能完整输出变量 x值的语句是( )。 ( A) printf(“x=%5.0fn“,x); ( B) printf(“x=%fn“,x); ( C) printf(“x=%lfn“,x); ( D) printf(“x=%0.5fn“,x); 18 设有定义: char s81; int i=0; 以下不能将一行(不超过 80个字符)带有空格的字符串正确读入的语句或语句组是( )。 ( A) scanf(“%s“,s); ( B) while(si+=getchar()!=n);si=0; ( C) gets(s); ( D) do scanf(“%c“, while(si+!=n); si=
7、0; 19 若有定义 int x,y; 并已正确给变量赋值,则以下选项中与表达式 (x-y)?(x+) : (y+)中的条件表达式 (x-y) 等价的是( )。 ( A) (x-y0) ( B) (x-y0) ( D) (x-y=0) 20 有以下程序 #include main() int x=1, y=0; if (!x) y+; else if (x=0) if (x) y+=2; else y+=3; printf(“%dn“, y); 程序运行后的输出结果是( )。 ( A) 0 ( B) 2 ( C) 1 ( D) 3 21 以下程序段中的变量已正确定义 for( i=0; i i
8、nt m1(int x,int y) return x main() int y=1,x,a=2,4,6,8,10,*p; p= for( x=0; x必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 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;
9、int z; a; 39 有以下程序 #include 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); 程序运行后的输
10、出结果是( )。 ( A) 1 ( B) 16 ( C) 32 ( D) 0 二、程序填空题 41 下列给定程序中,函数 fun的功能是:将形参 s所指字符串中下标为奇数的字符取出,并按 ASCII码大小递增排序,将排序后的字符存入形参 P所指的字符数组中,形成一个新串。 例如,形参 s所指的字符串为 “baawrakjghzlicda”,执行后 P所指字符数组中的字符串应为 “aachjlsw”。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include void fun(char*s
11、, char*p) int ij, n,x, t; n=0; for(i=0; si!=0; i+)n+; for(i=1; i n一 2; i=i+2) /*found*/ 【 1】; /*found*/ for(j=【 2】 +2 j n; j=j+2) ifl(st sj)t=j; if(t!=i) x=si; si=st; st=x; for(i=1,j=0; i n; i=i+2,j+) pj=si; /*found*/ pj=【 3】; main() char a80=”baawrskjghzlieda“,p50; printf(”nThe original string is:
12、s n”, s): fun(a, p); prinff(”nThe result is: s n”, p); 三、程序修改题 42 给定程序中,函数 fun的功能是:首先把 b所指字符申中的字符按逆序存放,然后将 a所指字符串中的字符和 b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在 e所指的数组的尾部。例如,当 a所指 字符串中的内容为 “abcdefg”, b所指字符串中的内容为 “1234”时, C所指数组中的内容应“Mb3c2dlefs”;而当 a所指字符串中的内容为 “1234”, b所指字符串的内容为“akdefg”时, C所指数组中的内容应该为 “1
13、g2f3e4dcba”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #includbe void fun(char*a, char*b, char*c) inti, j; char ch; i=0; j=strlen(b)-1; /*found*/ while(ij) ch=bi; bi=bi; bj=ch; i+; j一 ; while(*a|*b) /*found*/ If(*a) *c=*a; c+; a+; if(*b) *c=*b; c+; b+; *c=0: main() cha
14、r s1100, s2100, t200; prinff(“、 nEnter sl string: ”); scanf(“ s”, s1); prinff(“nEnter s2 string: ”); scanf(“ s”, s2); fun(s1, s2, t); printf(“nThe result is: sn”, t); 四、程序设计题 43 规定输入的字符串中只包含字母和 *号。编写函数 fun,其功能是:册除字符串中所有的 *号。编写函数时,不得使用 C语言提供的字符串函数。 例如,字符串中的内容为 “*A*BC*DEF*G*,删除后,字符串中的内容应当是 “ABCDEFG”。
15、注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include void fun(char*a) void main() char s81; printf(“Enter astring: n”); gets(s); fun(s); printf(“The string after deleted: n”); puts(s); 国家二级( C语言)机试模拟试卷 10答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程
16、序的运行时间是有限的。 2 【正确答案】 D 【试题 解析】 在最坏的情况下,堆排序需要比较的次数为 O(nlog2n),所以选择D)。 3 【正确答案】 B 【试题解析】 栈是按照 “先进后出 “的原则组织数据的,只能在栈顶插入或删除数据,所以选择 B)。 4 【正确答案】 A 【试题解析】 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A)。 5 【正确答案】 A 【试题解析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A)。 6 【正确答案】 C 【试题解析】 在数据流图中,用标有名字的箭头表示数据流。在
17、程序流程图中,用标有名字的箭头表示控制流。所以选择 C)。 7 【正确答案】 D 8 【正确答案】 C 【试题解析】 E R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于辑设计阶段。 9 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以 B)错误。笛卡尔积是用 R集合中元素为第一元素, S集合中元素为 第二元素构成的有序对,所以 C)错误。根据关系 T可以很明显的看出是从关系 R与关系 S中取得相同的关系组所以取得是交运算,选择 D)。 10 【正确答案】 A
18、【试题解析】 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为 A)。 11 【正确答案】 A 【试题解析】 C语言程序编译时将每条可执行语句转换为二进制的 机器指令,但非执行语句 (如注释语句 )不被编译。所以选项 A)错误。 12 【正确答案】 A 【试题解析】 一个 C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C语言程序可以实现多种算法,答案选 A)。 13 【正确答案】 A 【试题
19、解析】 本题考查用户标识符,用户自己定义的标识符不能与关键字相同,并且尽量避免和预定义标识符相同。本题中 scanf为预定义标识符,可以作为用户标识符 ;case为关键字,不能作为用户标识符,故而答案选 A)。 14 【正确答案】 A 【试题解 析】 考查算术表达式的写法, C中没有 ,需要用数值 3.14代替, C中sin函数的参数为弧度,角度 30转成弧度应为 3.14*30/180。故而选 A)。 15 【正确答案】 A 16 【正确答案】 A 17 【正确答案】 A 18 【正确答案】 A 【试题解析】 函数 scanf()输入字符串时默认空格为间隔符,所以不能输入空格,答案选 A)。
20、 19 【正确答案】 A 20 【正确答案】 A 21 【正确答案】 A 22 【正确答案】 A 23 【正确答案】 A 24 【正确答案】 A 25 【正确答案】 A 26 【正确答案】 A 27 【正确答案】 A 28 【正确答案】 A 29 【正确答案】 A 30 【正确答案】 A 31 【正确答案】 A 32 【正确答案】 A 33 【正确答案】 A 34 【正确答案】 A 35 【正确答案】 A 36 【正确答案】 A 37 【正确答案】 A 38 【正确答案】 A 39 【正确答案】 A 40 【正确答案】 A 二、程序填空题 41 【正确答案】 (1)t=i (2)i (3) 0
21、或 0 【试题解析】 填空 l:为实现下标为奇数的字符的排序,将下标 i赋值给中间变量 t。 填空 2: for循环语句实现对下标为奇数的字符的排序操作,所以应填入 j=i+2; 填空 3:将下标为奇数的字符存人 p所指的数组后,在数组末尾加入字符串结束标识 0。 三、程序修改题 42 【正确答案】 (1)while(ij) (2)if(*a) 【试题解析】 (1)将字符串中字符逆序存放,循环条件是 ij,所以应改为while(ij)。 (2)书写错误,将 If改为 if. 四、程序设计题 43 【正确答案】 voidfun(char*a) int i, j=0; for(i=0; ai= 0; i+) if(ai!=*) aj+=ai; /*若不是要删除的字符 *则保留 */ aj=0; /*最后加上字符串结束符 0* 【试题解析】 用循环操作从第一个字符开始 ,往后逐个与要删除的字符比较,保留要删 除字符以外的字符。变量 i表示原字符串的下标,变量 j表示删除 *号后新字符串的下标,且 j从 0开始,循环结束后给字符串加上结束标识 0.