1、国家二级( C+)机试模拟试卷 21及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)栈是 “先进先出 ”的线性表 ( B)队列是 “先进后出 ”的线性表 ( C)循环队列是非线性结构 ( D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 2 支持子程序调用的数据结构是 ( )。 ( A)栈 ( B)树 ( C)队列 ( D)二叉树 3 某二又树有 5个度为 2的结点,则该二叉树中的叶子结点数是 ( )。 ( A) 10 ( B) 8 ( C) 6 ( D) 4 4 下 列排序方法中,最坏情况下比较次数最少的是 ( )。 ( A)冒泡排序 ( B)简单选择排序 (
2、 C)直接插入排序 ( D)堆排序 5 软件按功能可以分为应用软件、系统软件和支撑软件 (或工具软件 )。下列属于应用软件的是 ( )。 ( A)编译程序 ( B)操作系统 ( C)教务管理系统 ( D)汇编程序 6 下列叙述中错误的是 ( )。 ( A)软件测试的目的是发现错误并改正错误 ( B)对被调试的程序进行 “错误定位 ”是程序调试的必要步骤 ( C)程序调试通常也称为 Debug ( D)软件 测试应严格执行测试计划,排除测试的随意性 7 耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是 ( )。 ( A)提高耦合性降低内聚性有利于提高模块的独立性 ( B)降低耦合性
3、提高内聚性有利于提高模块的独立性 ( C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度 ( D)内聚性是指模块间互相连接的紧密程度 8 数据库应用系统中的核心问题是 ( )。 ( A)数据库设计 ( B)数据库系统设计 ( C)数据库维护 ( D)数据库管理员培训 9 有两个关系 R、 S如下所示: 由关系 R通过运算得到关系 S,则所使用的运算为 ( )。 ( A)选择 ( B)投影 ( C)插入 ( D)连接 10 将 E-R图转换为关系模式时,实体和联系都可以表示为 ( )。 ( A)属性 ( B)键 ( C)关系 ( D)域 11 下列选项合法的标识符是 ( )。 ( A) 1_
4、1 ( B) 1_1 ( C) _11 ( D) 1_ _ 12 若函数中有定义语句 “int k; ”,则 ( )。 ( A)系统将自动给 k赋初值 0 ( B)这时 k中的值无定义 ( C)系统将自动给 k赋初值 -1 ( D)这时 k中无任何值 13 下列选项中,能用作数据常量的是 ( )。 ( A) 0115 ( B) 118 ( C) 1 5e1 5 ( D) 115L 14 设有定义 “int x=2; ”,下列表达式中,值不为 6的是 ( )。 ( A) x*=x+1 ( B) x+, 2*x ( C) x*=(1+x) ( D) 2*x, x+=2 15 程序段 “int x=
5、12; double y=3 141593; printf(“d 8 6f“, x, y); ”的输出结果是 ( )。 ( A) 123 141593 ( B) 12 3 141593 ( C) 12, 3 141593 ( D) 123.142 16 若有定义语句 “double x, y, *px, *Py;执行了 px=&x; py=&y; ”后,正确的输入语句是 ( )。 ( A) seanf(“ f f“, x, y); ( B) scanf(“ f f“&f“&x, &y); ( C) scanf(“ lf le“, px, py); ( D) scanf(“ lf If“x, y
6、); 17 下列是 if语句的基本形式: if(表达式 )语句其中 “表达式 ”( )。 ( A)必须是逻辑表达式 ( B)必须是关系表达式 ( C)必须是逻辑表达式或关系表达式 ( D)可以是任意合法的表达式 18 有下列程序: #include void main() int x; Scanf(“ d“, &x); if(x =3); else if(x! =10)printf(“ d n“, x); 程序运行时,输入的值在哪个范围才会有输出结果 ( )。 ( A)不等于 10的整数 ( B)大于 3且不等 10的整数 ( C)大于 3或等于 10的整数 ( D) 小于 3的整数 19 有
7、下列程序: #include void main() int a=1, b=2, c=3, d=0; if(a=1&b+=2) if(b!=2c-!=3) printf(“ d, d, d n“, a, b, c); else printf(“ d, d, d n“, a, b, c); else printf(“ d, d, d n“, a, b, c); 程序运行后的输出结果是 ( )。 ( A) 1, 2, 3 ( B) 1, 3, 2 ( C) 1, 3, 3 ( D) 3, 2, 1 20 下列程序段中的变量已正确定义: for(i=0; i 4; i+, i+) for(k=1;
8、k void main() char*s=“ABC“); do printf(“ d“, *s 10); s+; while(*s); 注意:字母 A的 ASCII码值为 65。程序运行后的输出结果是 ( )。 ( A) 5670 ( B) 656667 ( C) 567 ( D) ABC 22 设变量已正确定义,下列不能统计出一行中输入字符个数 (不包含回加符 )的程序段是 ( )。 ( A) n=0; while(ch=getchar()!= n)n+; ( B) n=0; while(getchar()!= n)n+; ( C) for(n=0; getchar()!= n; n+);
9、( D) n=0; for(ch=getchar(); ch!=n; n+); 23 有下列程序: #include void main() int a1, a2 char c1, c2; scanf(“ d c dc“, &a1, &c1, &a2, &c2); printf(“ d c d c“, a1, c1, a2, c2); 若想通过键盘输入,使得 a1的值为 12, a2的值为 34, c1的值为字符 a, c2的值为字符b,程序输出结果是 12, a, 34, b,则正确输入 格式是 (以下代表空格,代表回车 )( )。 ( A) 12a36b ( B) ( C) 12, a,
10、34, b ( D) 24 有下列程序: #include int f(int x, int y) return(y-x)*x); void main() int a=3, b=4, C=5, d; d=f(f(a, b), f(a, c); printf(“ d n“, d); 程序运行后的输出结果是 ( )。 ( A) 10 ( B) 9 ( C) 8 ( D) 7 25 有下列程序: #include void fun(char*s) while(*s) if(*s 2=0)printf(“ c“, *s); s+; void main() char a=“good“; fun(a);
11、printf(“ n“); 注意:字母 a的 ASCII码值为 97,程序运行后的输出结果是 ( )。 ( A) d ( B) go ( C) god ( D) good 26 有下列程序: #include void fun(int*a int*b) int*c; c=a; a=b; b=c; void main() int x=3, y=5, *p=&x, *q=&y; fun(p, q); printf(“ d, d, “, *p, *q); fun(&x, &y); printf(“ d, d n“, *p, *q) 程序运行后的输出结果是 ( )。 ( A) 3, 5, 5, 3 (
12、 B) 3, 5, 3, 5 ( C) 5, 3, 3, 5 ( D) 5, 3, 5, 3 27 有下列程序: #include void f(int*P, int*q); void main() int m=1, n=2, *r=&m; f(r, &n); printf(“ d, d“, m, n); void f(int*p, int*q) p=p+1; *q=*q+1; 程序运行后的输出结果是 ( )。 ( A) 1, 3 ( B) 2, 3 ( C) 1, 4 ( D) 1, 2 28 下列函数按每行 8个输出数组中的数据。 void fun(int*w, int n) int i;
13、 for(i=0; i n; i+) _ printf(“ d“, wi); printf(“ n“) 下画线处应填入的语句是 ( )。 ( A) if(i 8=0)printf(“n“); ( B) if(i 8=0)continue; ( C) if(i 8=0)printf(“n“); ( D) if(i 8=0)continue 29 若有下列定义 int x10, *pt=x; 则对 x数组元素的正确引用是 ( )。 ( A) *&x10 ( B) *(x+3) ( C) *(pt+10) ( D) pt+3 30 设有定义 “char s8; int i=0; ”,下列不能将一行
14、(不超过 80个字符 )带有空格的字符串正确读入的语句或语句组是 ( )。 ( A) gets(s); ( B) while(si+=getchar()!= n); sfi= 0; ( C) scanf(“ s“, s); ( D) doscanf(“ c“, &si); )while(sfi+! n); si= 0 31 有下列程序: #include void main() char*a=“abcd“, “ef“, “gh“, “ijk“); int i; for(i=0; i 4; i+)printf(“c“, *ai); 程序运行后的输出结果是 ( )。 ( A) aegi ( B)
15、dfhk ( C) abed ( D) abcdefghijk 32 下列选项中正确的语句是 ( )。 ( A) char s; s=“BOOK!“; ( B) char*s; s=“BOOK!“; ( C) char si10; s=“BOOK“; ( D) char*s; s=“BOOK!“; 33 有下列程序: #include int fun(int x, iny y) if(x=y)return(x); else return(x+y) 2); void main() int a=4, b=5, c=6; printf(“ d n“, fun(2*a, fun(b, c); 程序运行
16、后的输出结果是 ( )。 ( A) 3 ( B) 6 ( C) 8 ( D) 12 34 设函数中有整型变量 n,为保证其在未赋初值的情况下初值为 0,应选择存储类别是 ( )。 ( A) auto ( B) register ( C) static ( D) auto或 register 35 有下列程序: #include int b=2: int fun(int*k) b=*k+b; return(b); void main() int a10=1, 2, 3, 4, 5, 6, 7, 8, i; for(i=2; i 4; i+)(b=fun(&ai)+b; printf(“ d “,
17、 b); printf(“ n“); 程序运行后的输出结果是 ( )。 ( A) 10 12 ( B) 8 10 ( C) 10 28 ( D) 10 16 36 有下列程序: #include #define PT 3 5; #define S(x)PT*X*X; void main() int a=1 b=2; printf(“ 4 1f n“, S(a+b); ) 程序运行后的输出结果是 ( )。 ( A) 14 0 ( B) 31.5 ( C) 7.5 ( D)程序有错无输出结果 37 有下列程序: #include struct ord int x, y; dt2=1, 2, 3,
18、4); void main() struct ord*p=dt; printf(“ d, “, +p- x); printf(“ d, “, +p- y); 程序的运行结果是 ( )。 ( A) 1, 2 ( B) 2, 3 ( C) 3, 4 ( D) 4, 1 38 设有宏定义 “#define IsDIV(k, n) (k n=1? 1: 0)”且变量 m已正确定义并赋值,则宏调用 “IsDIV(m, 5)&IsDIV(m, 7)”为真时所要表达的是 ( )。 ( A)判断 m是否能被 5或者 7整除 ( B)判断 m是否能被 5和 7整除 ( C)判断 m被 5或者 7整除是否余 1
19、( D)判断 m被 5和 7整除是否都余 1 39 有下列程序: #include void main() int a=5, b=1, t; t=(a void main() FILE*f; f=fopen(“filea txt“, “w“); fprintf(f, “abc“); fclose(f); 若文本文件 filea txt中原有内容 hello,则运行以上程序后,文件 filea txt中的内容为 ( )。 ( A) helloabc ( B) abclo ( C) abc ( D) abchello 二、基本操作题 41 使用 VC+6 0打开考生文件夹下的源程序文件 1 epp
20、,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在屏幕上输出以下类似内容 : 0012FF68 1 0012FF3C 5 0012FF6C 2 0012FF44 4 0012FF70 3 0012FF4C 3 0023FF74 4 0012FF54 2 0012FF78 5 0012FF5C 1 006AFDCC, 006 AFDEF 可能因为机器的不同,程序输出的内容会有差异,只要是相差为 4的连续地址即可。 注意:不要改动 main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在 *error*的下面。 试题程序: #include(iostream) using
21、namespace std; int main() int*P, aE5=1, 2, 3, 4, 5; double*q, b5=5 0, 4 0, 3 0, 2 0, 1 0); int x; p=a; q=b; *error* for(x=0; x class TC * * * * * * * * 1 * * * * * * * * public: TC()cout的优先级高于 +算术运算符,所以表达式 +px的计算过程是首先取出结构体 dt0的成员变量 x的值 1,然后再对其值加 1,得到 2输出。表达式 +p-y的计算过程是首先取出结构体 dt0的成员变量 y的值 2,然后再对其值加
22、1,得到 3输出。 38 【正确答案】 D 【试题解析】 本题考查宏定义,宏 定义 IsDIV(k, n)的意思是如果 k对 n求模的余数为 1,其值等于 1,否则其值等于 0。本题中宏调用表达式是两个宏调用之间的逻辑与运算,所以选项 D正确。 39 【正确答案】 A 【试题解析】 本题考查移位运算符在程序中对 5逻辑左移 2位,其值扩大 4倍等于 20,然后再进行按位运算,其值等于 21。 40 【正确答案】 C 【试题解析】 把字符串 abc以只写的方式写入到文件 filea txt中,覆盖掉原有的字符串 hello。 二、基本操作题 41 【正确答案】 (1)应改为 “for(x=0;
23、x(5; x+)”。 (2)应改为 “coutp+x“*(p+x)“(1+x“*(q+x)end1; ”。 【试题解析】 本题中,根据数组 a、 b的定义,它们都有 5个元素,而第 l处的“for(x=0; x=5; x+)”循环了 6次,应该是 5次,所以在第 l处将其修改为“for(x=0; x(5; x+)”;第 2处的 P变量为指针型变量, p+x为指向数组中第 X个元素的地址,这里要输出的是存储单元的内容,所以使用 “*”指针元素符,即修改为 “coutp+x“*(p+x)“q+x“*(q+x)end1; ”。 三、简单应用题 42 【正确答案】 int fun(char*str1,
24、 char*str2) int size=0; int str1len; int str21en; for(str1len=0; str1str1len!=0; str1len+); for(str2len=0; str2str2len!=0; str2len+); for(int i=0; i str1len; i+) int j=0; for(; j(str21en; j+) if(strli+j!=str2j) break; if(j=str21en) +size: i+=j; return size; 【试题解析】 本题考查的是字符串查找算法。首先求出两个字符串的长度,然后循环遍历第
25、1个字符串,再使用一个内循环遍历第 2个字符串,判断两个字符串相应位置是否一致。如果遍历完第 2个字符串,所有位置都一致,则 size增 1,即找到一个子串。 四、综合应用题 43 【正确答案】 (1)应添加 “char*name; int age; ”。 (2)应添加 “class TC0: public TC”。 (3)应添加 “ TC0()”。 (4)应添加 “class TC1: public TC”。 【试题解析】 本题第 1处要求 “TC中定义 name为字符串类型, age为整型 ”。根据题目要求,在程序 TC类中定义变量 name和 age,即 “char*name; int
26、age; ”。第 2处要求 “设置类 TC0的基类为 TC类的定义 ”。在 C+中,从已有的类产生一个新的子类,称为类的派生。声明派生类的一般形式为 “class派生类名:继承方式 基类名 ”。根据声明派生类的一般形式,这里补全 “class TC0: public TC”。第 3处要求 “在类 TC的派生类 TC0的公有成员中定义析构函数 TC0”。析构函数也是一个特殊的成员函数,它的作用与构造函数相反,它的名称是在类名前面加一个 “ ”符号。题目中要求的类名称为 “TC0”即这里补全 “ TC0()”。第 4处要求 “设 置类 TC1的基类为 TC1类的定义 ”,在第 4处补充 “class TC1: public TC”。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1