1、国家二级( C语言)机试模拟试卷 1及答案与解析 一、选择题 1 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是( )。 ( A) 12345ABCDE ( B) EDCBA54321 ( C) ABCDE12345 ( D) 54321EDCBA 2 算法的有穷性是指( )。 ( A)算法程序的运行时间是有限的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的长度是有限的 ( D)算法只能被有限的用户使用 3 设栈的顺序存储空间 为 S(0:49),栈底指针 bottom=49,栈顶指针 top=
2、30(指向栈顶元素)。则栈中的元素个数为( )。 ( A) 30 ( B) 29 ( C) 20 ( D) 19 4 结构化程序设计的基本原则不包括( )。 ( A)多态性 ( B)自顶向下 ( C)模块化 ( D)逐步求精 5 在面向对象方法中,不属于 “对象 “基本特点的是( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 6 程序流程图中带有箭头的线段表示的是( )。 ( A)图元关系 ( B)数据流 ( C)控制 流 ( D)调用关系 7 软件设计中模块划分应遵循的准则是( )。 ( A)低内聚低耦合 ( B)高内聚低耦合 ( C)低内聚高耦合 ( D)高内聚
3、高耦合 8 在数据库设计中,将 E-R图转换成关系数据模型的过程属于( )。 ( 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)不同函数的形式参数不能使
4、用相同名称的标识符 ( D)在 C语言的函数内部,可以定义局部嵌套函数 12 下列叙述中错误的是( )。 ( A)一个 C语言程序只能实现一种算法 ( B) C程序可以由多个程序文件组成 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 13 以下叙述中正确的是( )。 ( A)关系运算符两边的运算对象可以是语言中任意合法的表达式 ( B)在 C语言中,逻辑真值和假值分别对应 1和 0 ( C)对于浮点变量 x和 y,表达式: x=y 是非法的,会出编译错误 ( D)分支结构是根据算术表达式的结果来判断流程走向的 14 设有两行定义语句: int
5、scanf; float case; 则以下叙述正确的是( )。 ( A)第 2行语句不合法 ( B)两行定义语句都合法 ( C)第 1行语句不合法 ( D)两行定义语句都不合法 15 以下选项 中,合法的一组 C语言数值常量是( )。 ( A) 12. 0Xa23 4.5e0 ( B) 028 .5e-3 -0xf ( C) .177 4e1.5 0abc ( D) 0x8A 10,000 3.e5 16 以下能正确表述算式 sin(2r+30)的 C语言表达式是( )。 ( A) sin(2*3.14*r+3.14*30/180.0) ( B) sin(2*r+ 30 ) ( C) sin
6、(2*3.14*r+ 30 ) ( D) sin(2*3.14*r+30*3.14/360.0) 17 有以下程 序 #include main() int a=1,b=0; printf(“%d,“,b=a+b); printf(“%dn“,a=2*b); 程序运行后的输出结果是( )。 ( A) 1,2 ( B) 1,0 ( C) 3,2 ( D) 0,0 18 设有定义: char s81; int i=0; 以下不能将一行(不超过 80个字符)带有空格的字符串正确读入的语句或语句组是( )。 ( A) scanf(“%s“,s); ( B) while(si+=getchar()!=n
7、);si=0; ( C) gets(s); ( D) do scanf(“%c“, while(si+!=n); si=0; 19 若有定义 int x,y; 并已正确给变量赋值,则以下选项中与表达式 (x-y)?(x+) : (y+)中的条件表达式 (x-y) 等价的是( )。 ( A) (x-y0) ( B) (x-y0) ( D) (x-y=0) 20 有以下程序 #include main() char a=H; a = ( a=A if (n/2) int a=6; t += a+; else int a=7; t += a+; return t + a+; main() int s
8、=0, i=0; for (; i void f(int b) int i; for (i=2; i int m1(int x,int y) return x int f(int x); main() int n=1,m; m=f(f(f(n); printf(“%dn“,m); int f(int x) return x*2; 程序运行后的输出结果是( )。 ( A) 8 ( B) 2 ( C) 4 ( D) 1 32 有以下程序 #include #include int fun(int n) int *p; p = (int*)malloc(sizeof(int); *p=n; retu
9、rn *p; main() int a; a = fun(10); printf(“%dn“,a+fun(10); 程序的运行结果是( )。 ( A) 20 ( B) 10 ( C) 0 ( D)出错 33 在 32位编译器上,设有定义 char *str1 = “Hello“, str2 = “Hello“; , 则以下语句 printf(“%d %d“, sizeof(str1), sizeof(str2); 的输出结果是( )。 ( A) 4 6 ( B) 5 5 ( C) 6 6 ( D) 5 6 34 有以下程序(其中的 strstr()函数头部格式为: char *strstr(c
10、har *p1, char *p2) 确定 p2字符串是否在 p1中出现,并返回 p2第一次出现的字符串首地址) #include #include char *a=“you“; char *b=“Welcome you to Beijing!“; main() char *p; p = strstr(b, a) + strlen(a) + 1; printf(“%sn“, p); 程序的运行结果是( )。 ( A) to Beijing! ( B) you to Beijing! ( C) Welcome you to Beijing! ( D) Beijing! 35 设有定义: int
11、x=0, *p; 紧接着的赋值语句正确的是( )。 ( A) p=NULL; ( B) *p=NULL; ( C) p=x; ( D) *p=x; 36 有以下程序 #include #define N 2 #define M N+1 #define MUN (M+1)*M/2 main() printf( “%dn“, MUN ); 程序运行后的输出 结果是( )。 ( A) 8 ( B) 9 ( C) 5 ( D) 6 37 以下叙述中错误的是( )。 ( A) C程序对预处理命令行的处理是在程序执行的过程中进行的 ( B)预处理命令行的最后不能以分号表示结束 ( C) #define M
12、AX 是合法的宏定义命令行 ( D)在程序中凡是以 “#“开始的语句行都是预处理命令行 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 有以下程序 #include typedef struct int b, p; A; void f(A c) /* 注
13、意: 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 ( C) 32 ( D) 0 二、程序填空题 41 给定程序中,函数 fun的功能是:将形参 s
14、所指字符串 中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如, s所指字符串为 asd123fgh543df,理后新字符串为 123543asdfghdf。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #include #include char*fun(char*s) int i, j, k, n; char*p,*t; n=strlen(s)+1; t=(char*)malloc(d*sizeof(char
15、); p=(ehar*)malloe(n*sizeof(char): j=0; k=0; for(i=0; i intfun(inta, int b) int r,t; if(a b) t=a; b=a; a=t; /*found*/ r=a b: while(r!=0) a=b; b=r; r=a b; /*found*/ return(a); void main() int num1, num2, a; printf(“Input num1 num2: “); scanf(“ d d“, 四、程序设计题 43 编写函数 fun,其功能是:将 s所指字符串中除了下标为奇数,同时 ASCII码
16、值也为奇数的字符之外,其余 所有字符全部删除,串中剩余字符所形成的一个新串放在 t所指的数组中。 例如,若 s所指字符串的内容为 “ABCDEFG12345”,其中字符 A的 ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符 1的 ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后 t所指数组中的内容应为 “135”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序: #inchde #include void fun(ehar*s, char tD main
17、() char s100, t100; printf(“hiPlease enter string s: ”); seanf(“ s“,s); fun(s,t); prinff(“nThe result is: sn”,t); 国家二级( C语言)机试模拟试卷 1答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 栈 是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择 B)。 2 【正确答案】 A 【试题解析】 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。 3 【正确答案】 C 【试题解析】 栈底指针 bottom=4
18、9,栈顶指针 top=30,则栈中的元素个数为 49-30+1=20个,答案选 C 4 【正确答案】 A 【试题解析】 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A 5 【正 确答案】 A 【试题解析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A)。 6 【正确答案】 C 【试题解析】 在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择 C 7 【正确答案】 B 【试题解析】 软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。
19、模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。 8 【正确答案】 C 【试题解析】 E R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。 9 【正确答案】 D 【试题解析】 数据库系统的三级模式是概念模式、外模式和内模式,所以选择 D 10 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以 B)错误。笛卡尔积是用 R集合中元素为第
20、 一元素, S集合中元素为第二元素构成的有序对,所以 C)错误。根据关系 T可以很明显的看出是从关系 R与关系 S中取得相同的关系组所以取得是交运算,选择 D)。 11 【正确答案】 A 【试题解析】 一个 C程序可以有一个或多个程序文件,所以也可以有一个或多个函数,选项 A)正确;除了 main函数不能被其他函数调用之外,用户自定义函数可以调用其他任意函数,选项 B)错误;函数是一个独立的模块,不同函数之间的定义相互没有影响,所以标识符可以相同,选项 C)错误;函数体内部只可以调用但是不可以定义其他函数,选项 D)错误; 答案选 A)。 12 【正确答案】 A 【试题解析】 一个 C程序可以
21、有一个或多个程序文件,也可以有一个或多个函数,所以一个 C语言程序可以实现多种算法。答案选 A)。 13 【正确答案】 A 【试题解析】 C语言中,运算符两侧的运算对象可以任意合法的表达式,选项A)正确;非 0和 0分别对应逻辑真值和假值,选项 B)错;关系运算符 “=“两侧的运算对象只要为合法的表达式就可以编译通过,选项 C)错;分支结构是根据 if或者 else if后面的圆括号内的表达式(不仅仅是算术表达式,还有赋值表达式、逗号表达 式、关系表达式、逻辑表达式等)的值来判定流程走向的,选项 D)错误;所以答案选 A)。 14 【正确答案】 A 【试题解析】 本题考查用户标识符,用户自己定
22、义的标识符不能与关键字相同,并且尽量避免和预定义标识符相同。本题中 scanf为预定义标识符,可以作为用户标识符 ;case为关键字,不能作为用户标识符,故而答案选 A)。 15 【正确答案】 A 【试题解析】 考查整型常量、实型常量。选项 B)的 “028“错,以 0开头表示为八进制整常数,不能出现数字 8;选项 C)的 “4e1.5“错, e后面应为整数 , “0abc“错,八进制整常数只能由 07构成;选项 D)的 “10,000“错, C语言没有千分号,所以答案选 A)。 16 【正确答案】 A 【试题解析】 考查算术表达式的写法, C中没有 ,需要用数值 3.14代替, C中sin函
23、数的参数为弧度,角度 30转成弧度应为 3.14*30/180。故而选 A)。 17 【正确答案】 A 【试题解析】 考查数据的输入, printf(“%d, “,b=a+b);先计算 b=a+b,得出b=1,再输出 b值。 语句 printf(“%dn“,a=2*b);先计算 a=2*b,得出 a=2,再输出a值。所以输出结果为 A)。 18 【正确答案】 A 【试题解析】 函数 scanf()输入字符串时默认空格为间隔符,所以不能输入空格,答案选 A)。 19 【正确答案】 A 【试题解析】 考查条件表达式。条件表达式的形式为: 表达式 1 ? 表达式 2 : 表达式 3 ,计算 “表达式
24、 1“的值,若为 “真 “,取 “表达式 2“的值作为整个条件表达式的值;若为 “假 “,取 “表达式 3“的值作为整个条件表达式的值。本程序中要选能判定 (x-y)为 “真 “的语句,即 x! =y,或者 (x-y 0),选 A 20 【正确答案】 A 【试题解析】 考查条件运算符。条件表达式的形式为: 表达式 1:表达式 2 : 表达式 3 ,计算 “表达式 1“的值,若为 “真 “,取 “表达式 2“的值作为整个条件表达式的值;若为 “假 “,取 “表达式 3“的值作为整个条件表达式的值。字符参与运算时一般计算其 ASCII码,并且一个字母的小写 -大写 =32( ASCII码),该程序
25、将大写字母转成对应的小写字母,答案选 A)。 21 【正确答案】 A 【试题解析】 考查循环嵌套。循环嵌套执行次数为 外层循环次数 *内 层循环次数。但是本题中循环次数与输出结果没有关系,两层循环之后只是执行了一个空语句 ;,然后输出一个 * 。故而答案选 A)。 22 【正确答案】 A 【试题解析】 已经证明,由顺序、分支、循环这三种基本结构组成的算法可以解决任何复杂的问题。选项 A)叙述有误。 23 【正确答案】 A 【试题解析】 goto语句会导致程序结构混乱,所以结构化程序中限制使用 goto语句,选项 B)错;一个结构化的程序可以依据该程序要实现的功能选用顺序、分支、循环这三种基本结
26、构中的某几种或者全部使用,不是必须都 用上,选项C)错;已经证明,由这三种基本结构组成的算法可以解决任何复杂的问题,选项D)错;程序的模块化是指把程序要解决的总目标分解为若干目标,再进一步分解为具体的小目标,每个小目标即为一个模块,而函数是 C语言的基本模块,实现某一模块的具体功能。答案选 A)。 24 【正确答案】 A 【试题解析】 同类元素的集合称为数组,数组元素在内存中占据连续的存储空间,答案 A)正确。在使用逗号运算符的情况下,一条语句可以定义多个数组,选项 B)错。方括号中可以为整型变量或者常量表达式,选项 C)错。数组元素在数组中的 下标为整型常量或者变量构成的整型表达式,不能为浮
27、点数,选项D)错。答案选 A)。 25 【正确答案】 A 【试题解析】 A)正确, char c1, c2, *c3, c440表示定义了两个字符变量c1、 c2,一个字符指针 c3,一个字符数组 c4。数组的下限永远为 0,选项 B)、C)、 D)错,答案选 A)。 26 【正确答案】 A 【试题解析】 考查一维数组以及字符数组的初始化。初始化的时候可以只给数组的前面一部分元素设定初值,故 A)正确。若对数组全部元素赋初值时,可以不指定数组元素的个数,选 项 B)错。字符数组中的每个元素为一个字符,需要用单引号,选项 C)错。定义字符数组时可以将字符串直接赋给该字符数组,其他情况则不可以,选
28、项 D)错。答案选 A)。 27 【正确答案】 A 【试题解析】 考查二维数组的初始化。初始化二维数组的时候可以对其部分元素赋初值,选项 B)错。还可以对数组的全部元素赋初值,此时第一维的元素个数可以不指定,也可以分行赋值,只对部分元素赋初值,选项 C)、 D)错。 A)的描述正确,答案选 A)。 28 【正确答案】 A 【试题解析】 一个源文件中如果外部变量和局部变量 同名,则在该局部变量的作用域内,该外部变量会被 “屏蔽 “, main()函数中调用两次 f()函数,两次调用均进入 else选择支句, t=7,返回 7+5=12,所以 s=0+f(0)+f(1)=24,答案选 A)。 29
29、 【正确答案】 A 【试题解析】 函数 f()的功能是把数组 b中第 3个到第 6个元素的值均乘以 2,所以答案选 A)。 30 【正确答案】 A 【试题解析】 函数 m1()返回两个参数中较小的数值,函数 m2()返回两个参数中较大的数值,函数 fun()返回两个参数之和,所以fun(m1(x,y),m2(y,z)=fun(m1(2,3),m2(3,1)=fun(2,3)=5,答案选 A)。 31 【正确答案】 A 【试题解析】 考查函数的递归调用。 m=f(f(f(n)=f(f(2)=f(4)=8,答案选 A)。 32 【正确答案】 A 【试题解析】 函数 fun()的功能是新分配一个存储
30、空间并把 n的值存入该存储空间内,同时返回该存储空间记录的值 *p,也即是 n,所以 a=fun(10)=10,输出“a+fun(10)“的结果为 20,答案选 A)。 33 【正确答案】 A 【试题解析】 sizeof(str1)求的是一个指针占用字节数,在 32位的计算机上规定一个指针变量占用的内存为 32位,即 4个字节,所以第一个输出结果为 4;sizeof(str2)求的是字符数组 str2占用内存,包含字符串结束标识符 0,所以第二个输出结果为 6。答案选 A)。 34 【正确答案】 A 【试题解析】 表达式 “strstr(b, a);“返回的是字符串 “you“在 b指向的字符
31、串中第一次出现的字符串首地址,即是 “计算得的 p与 “表示把空指针赋给指针变量 p,而若要 p指向变量 x的地址需使用“p= “的形式,所以答案选 A)。 36 【正确答案】 A 【试题解析】 宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,直接在替换处展开而不做语法检测,所以语句MUN=(M+1)*M/2=(N+1+1)*N+1/2=8,答案选 A)。 37 【正确答案】 A 【试题解析】 预处理命令行的处理是在程序编译阶段完成的,而不是在运行阶段,所以答案选 A)。 38 【正确答案】 A 【试题解析】 分号代表该结构体定义语句的结束,选项 A)的结构体没有定义完全就用该结构体另
32、外定义变量,用法有误,所以答案选 A)。 39 【正确答案】 A 【试题解析】 考查结构体变量作为函数实参整体传递,也是一种值传参,形参的变化不能影响到实参,所以调用函数 f(a)对 a中的数据没有影响,输出结果为1,2,答案选 A)。 40 【正确答案】 A 【试题解析】 字符常量与其 ASCII码值一一对应,在计算的时候,可以使用该字符的 ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者 ASCII码。右移运算符 “的运算规则是把左边运算数的各二进制位全部右移 n位, n取决于 “右边的数值。字符 a的 ASCII码值为 8,对应二进制为 1000,所以a3=1,输出的字符
33、c的 ASCII码值为 1,答案选 A)。 二、程序填空题 41 【正确答案】 (1)j (2)k (3)p或 (p) 【试题解析】 填空 1: p存放数字字符串, t存放非数字字符串, p的下标由 j来控制,所以应填 j。 填空 2:把 t中的内容利用 for循环追加到 p中, k为 t的长度,所以应填 k。 填空 3: p存放处理之后的字符串,所以应填 p。 三、程序修改题 42 【正确答案】 (1)t=a; a=b; b=t; (2)return(b);或 return b; 【试题解析】 一般采用辗转相除法求最大公约数。辗转相除法的算法为:首先将 m除以 n(mn)得余数 r,再用余数
34、 r去除原来的除数,得到新的余数 ,重复此过程直到余数为 0时停止,此时的除数就是 m和 n的最大公约数。 (1)将两数中较大的存入 a,较小的存入 b,先将 b的值保存到变量 t中,再将 a的值赋给 b,最后将 t的值赋给 a。 (2)最大公约数为余数 r为 0时的除数 b,所以应返回 b。 四、程序设计题 43 【正确答案】 void fun(char*s, char t) int i, j=0, n; n=strlen(s); for(i=0; i n; i+) if(i 21=0&si 2!=0) tj=si /*将下标为奇数同时 ASCII码值为奇数的字符放入数组 t中 */ j+; tj= 0; /*最后加上结束标识符 */ 【试题解析】 用循环遍历字符串,通过 if语句将下标和 AsCII码都为奇数的字符保存到数组中,在字符串末尾加上结束标识符。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1