[计算机类试卷]国家二级(C++)机试模拟试卷11及答案与解析.doc

上传人:jobexamine331 文档编号:502389 上传时间:2018-11-29 格式:DOC 页数:28 大小:87.50KB
下载 相关 举报
[计算机类试卷]国家二级(C++)机试模拟试卷11及答案与解析.doc_第1页
第1页 / 共28页
[计算机类试卷]国家二级(C++)机试模拟试卷11及答案与解析.doc_第2页
第2页 / 共28页
[计算机类试卷]国家二级(C++)机试模拟试卷11及答案与解析.doc_第3页
第3页 / 共28页
[计算机类试卷]国家二级(C++)机试模拟试卷11及答案与解析.doc_第4页
第4页 / 共28页
[计算机类试卷]国家二级(C++)机试模拟试卷11及答案与解析.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、国家二级( C+)机试模拟试卷 11及答案与解析 一、选择题 1 程序流程图中带有箭头的线段表示的是 ( )。 ( A)图元关系 ( B)数据流 ( C)控制流 ( D)调用关系 2 结构化程序设计的基本原则不包括 ( )。 ( A)多态性 ( B)自顶向下 ( C)模块化 ( D)逐步求精 3 软件设计中模块划分应遵循的准则是 ( )。 ( A)低内聚低耦合 ( B)高内聚低耦合 ( C)低内聚高耦合 ( D)高内聚高耦合 4 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)可行性分析报告 ( B)软件需求规格说明书 ( C)概要设计说明书 ( D)集成设计计划 5 算法的有穷

2、性是指 ( )。 ( A)算法程序的运行时间是有限的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的长度是有限的 ( D)算法只能被有限的用户使用 6 对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n-1) 2的排序方法是 ( )。 ( A)快速排序 ( B)冒泡排序 ( C)直接插入排序 ( D)堆排序 7 下列关于栈的叙述正确的是 ( )。 ( A)栈按 “先进先出 ”组织数据 ( B)栈按 “先进后出 ”组织数据 ( C)只能在栈底插入数据 ( D)不能删除数据 8 在数据库设计中,将 E-R图转换成关系数据模型的过程属于 ( )。 ( A)需求分析阶段 ( B)

3、概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 9 有 3个关系 R、 S和 T如下: 由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( )。 ( A)并 ( B)自然连接 ( C)笛卡儿积 ( D)交 10 设有表示学生选课的 3张表,学生 S(学号、姓名、性别、年龄、身份证 号 )、课程 C(课号、课名 )、选课 SC(学号、课号、成绩 ),则表 SC的关键字 (键或码 )为( )。 ( A)课号、成绩 ( B)学号、成绩 ( C)学号、课号 ( D)学号、姓名、成绩 11 下列叙述中正确的是 ( )。 ( A) C程序中的注释只能出现在程序的开始位置和语句的后面 (

4、B) C程序书写格式严格,要求一行内只能写一个语句 ( C) C程序书写格式自由,一个语句可以写在多行上 ( D)用 C语言编写的程序只能放在一个程序文件中 12 下列选项中不合法的标识符是 ( )。 ( A) print ( B) FOR ( C) &a ( D) 0 13 下列选项中不属于字符常量的是 ( )。 ( A) C ( B) C ( C) xCC ( D) 072 14 设变量已正确定义并赋值,以下正确的表达式是 ( )。 ( A) x=y*5=x+z ( B) int(15 8 5) ( C) x=y+z+5, +y ( D) x=25 5 0 15 以下定义语句中正确的是 (

5、 )。 ( A) int a=b=0; ( B) char A=65+1, b=b; ( C) float a=1, “b=&a, “c: &b; ( D) double a=0 0 b=1 1; 16 有下列程序段: char ch; int k; ch=a; k=12; printf(“ c, d, “, ch, ch, k); printf(“k= d n“, k); 已知字符 a的 ASCII十进制代码为 97,则执行上述程序段后输出结果是 ( )。 ( A)因变量类型与格式描述符的类型不匹配输出无定值 ( B)输出项与格式描述符个数不符,输出为零值或不定值 ( C) a, 97, 1

6、2k=12 ( D) a, 97, k=12 17 已知字母 A的 ASCII代码值为 65,若变量 kk为 char型,下列不能正确判断出kk中的值为大写字母的表达式是 ( )。 ( A) kk =A&kk=Z ( B) !(kk =Akk =Z) ( C) (kk+32) =a&(kk+32) =z ( D) isalpha(kk)&(kk =91) 18 当变量 c的值不为 2、 4、 6时,值也为 “真 ”的表达式是 ( )。 ( A) (c=2)(c=4)(c=6) ( B) (c =2&C =6)(c! =3)(c! =5) ( C) (c =2&c -6)&! (c 2) ( D

7、) (c =2&c =6)&(c 2! =1) 19 若变量已正确定义,有下列程序段 int a=3, b=5, c=7; if(a b)a=b; c=a; if(c!=a)c=b; printf(“ d, d, d n“, a, b, c); 其输出结果是 ( )。 ( A)程序段有语法错 ( B) 3, 5, 3 ( C) 3, 5, 5 ( D) 3, 5, 7 20 有下列程序: #include void main() int x=1, y=0, a=0, b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+br

8、eak; case 2: a+ b+; break; case 3: a+ b+; printf(“a= d, b= d n“, a, b); 程序的运行结果是 ( )。 ( A) a=1, b=0 ( B) a=2, b=2 ( C) a=1, b=1 ( D) a=2, b=1 21 有下列程序: #include void main() int x=8: for(; x 0; X-) if(x 3)printf(“ d, “, x-); continue; ) printf(“ d, “, -x); 程序的运行结果是 ( )。 ( A) 7, 4, 2 ( B) 8, 7, 5, 2 (

9、 C) 9, 7, 6, 4 ( D) 8, 5, 4, 2 22 下列不构成无限循环的语句或语句组是 ( )。 ( A) n=0; ( B) n=0: do+n; )while(n =0); while(1)(n+; ( C) while(n-10); (n=; ( D) for(n=0, i=1; i+)n+=i 23 有下列程序: #include void main() int a=1, 2, 3, 4), y, *p=&aE3; -p; y=*p; printf(“y= d n“, y); 程序的运行结果是 ( )。 ( A) y=0 ( B) y=1 ( C) y=2 ( D) y

10、=3 24 下列错误的定义语句是 ( )。 ( A) int x3=0, 1, 1, 2, 3; ( B) int x43=1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3; ( C) int x4=1, 2, 3, 1, 2, 3), 1, 2, 3, 1, 2, 3; ( D) int x3=1, 2, 3, 4; 25 设有下列程序段: char s20=“Beijing“, *p; p=s; 则执行 “p=s; ”语句后,下列叙述正确的是 ( )。 ( A)可以用 *p表示 s0 ( B) s数组中元素的个数和 p所指字符串长度相等 ( C) s和 p都是指针变量

11、( D)数组 s中的内容和指针变量 p中的内容相同 26 若有定义 “int a23; ”,下列选项中对 a数组元素正确引用的是 ( )。 ( A) a2! 1 ( B) a23 ( C) a03 ( D) a1 2! 1 27 有定义语句 “char s10; ”,若要从终端给 S输入 5个字符,错误的输入语句是( )。 ( A) gets(&s0); ( B) scanf(“ s“, s+1); ( C) gets(s); ( D) scanf(“ s“, s1); 28 下列叙述中错误的是 ( )。 ( A)在程序中凡是以 “#”开始的语句行都是预处理命令行 ( B)预处理命令行的最后不

12、能以分号表示结束 ( C) #define MAX是合法的宏定义命令行 ( D) C程序中预处理命令行的处理是在程序执行的过程中进行的 29 下列结构体类型说明和变量定 义中正确的是 ( )。30 下列叙述中错误的是 ( )。 ( A) gets函数用于从终端读入字符串 ( B) getchar函数用于从磁盘文件读入字符 ( C) fputs函数用于把字符串输出到文件 ( D) fwrite函数用于以二进制形式输出数据到文件 31 有下列程序: #include void main() int s12=1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 2, 3, c5=0, i; f

13、or(i=0; i 12; i+)csi+; for(i=1; i 5; i+)printf(“ d “, ci); printf(“ n“) 程序的运行结果是 ( )。 ( A) 1 2 3 4 ( B) 2 3 4 4 ( C) 4 3 3 2 ( D) 1 1 2 3 32 有下列程序: #include void fun(int*s, int n1, int n2) int i, j, t; i=n1; j=n2 while(i j)t=si; si=sj; sj=t; i+; j-; void main() int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0),

14、 k; fun(a, 0, 3); fun(a, 4, 9); fun(a, 0, 9); for(k=0; k 10; k+)printf(“ d“, ak); printf(“ n“); 程序的运行结果是 ( )。 ( A) 0987654321 ( B) 4.3211e+009 ( C) 5.6789e+009 ( D) 9.87651e+008 33 有下列程序: #include #include“string h“ void fun(char*s, int n) char*t; int i, j for(i=0; i n-1; i+) for(j=i+1; j n; j+) if(

15、strlen(si strlen(sj)t=si; si=sj; sj=t; void main() char*ss=“bcc“, “bbcc“, “xy“, “aaaacc“, “aabcc“; fun(ss, 5); printf(“ s, s n“, ss0, ss4); 程序的运行结果是 ( )。 ( A) xy, aaaacc ( B) aaaacc, xy ( C) bcc, aabcc ( D) aabcc, bcc 34 有下列程序: #include int f(int x) int y; if(x=0x=1)return(3); y=x*x-f(x-2); return y

16、; void main() int z: z=f(3); printf(“ d n“, z); 程序的运行结果是 ( )。 ( A) 0 ( B) 9 ( C) 6 ( D) 8 35 有下列程序: #include void fun(char*a, char*b) while(*a=*)a+; while(*b=*a)b+; a+; ) void main() char*s=“*a*b*“, t80; fun(s, t); puts(t) 程序的运行结果是 ( )。 ( A) *a*b ( B) a*b ( C) a*b* ( D) ab 36 有下列程序: #include #includ

17、e“string h“ typedef structchar name9; char sex; float score2; STU; void 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; void main() STU c=“Qian“, f, 95 0, 92 0); f(c); printf(“ s, c, 2 of, 2 of n“, c.name, c.sex,c.score0, c.score

18、1); 程序的运行结果是 ( )。 ( A) Qian, f, 95, 92 ( B) Qian, m, 85, 90 ( C) Zhao, f, 95, 92 ( D) Zhao, m, 85, 90 37 有下列程序: #include void main() FILE*fp; int a10=1, 2, 3), i, n; fp=fopen(“d1 dat“, “w“); for(i=0; i 3; i+)fprintf(fp, “ d“, ai); fprintf(fp, “ n“); fclose(fp); fp=open(“d1 dat“, “r“) fscanf(fp, “ d“

19、, &n); fclose(fp); printf(“ d n“, n); 程序的运行结果是 ( )。 ( A) 12300 ( B) 123 ( C) 1 ( D) 321 38 变量 a中的数据用二进制表示的形式是 01011101,变量 b中的数据用二进制表示的形式是 11110000,若要求将 a的高 4位取反,低 4位不变,所要执行的运算是 ( )。 ( A) a*b ( B) a b ( C) a&b ( D) a class TC public: TC(int i) number=i; void SetNumber(int m) number=m; int GetNumber()

20、const return number; void Print()const cout void fun(int a, int n, int b, int m, int*c) void main() int A=3, 5, 7, 9, 11, 18, 21; int B=6, 15, 19, 21, 39; int C25, i; for(i=0; i(25; i+) Ci=0; cout class People public; * * * * * * * * 1 * * * * * * * * int i; for(i=0; sUserNamei!=0; i+) m_UserNamei=s

21、UserNamei; * * * * * * * * 2 * * * * * * * * m_Old=nOld; private: char m_UserName32; int m_Old; * * * * * * * * 3 * * * * * * * * ; void fun(char*s, People&person1, People&person2) * * * * * * * * 4 * * * * * * * * if() for(int i=0; person1 m_UserNamei!=0; i+) si=person1 m_UserNamei; si+1=0; else fo

22、r(int i=0; person2 m_UserNamei!=0; i+) si=person2 m_UserNamei; si+1=0; void main() char s32; People p1(“abc“, 20); People p2(“def“, 30); fun(s, p1, p2); touta和 (kk+32)b不成立,故不执行 “a=b”,接着执行 “c=a”,把 c的值赋给 a后,此时第二个 if条件不成立,故不执行其后语句,最终点 c的值为 3。 20 【正确答案】 D 【试题解析】 本题考查的是 switchcase 分支语句, x=1时,首先执行 case 1进

23、行嵌套判断, y=0时 switch(0)成立,执行 case 0, a自加 1,遇到 break,退出嵌套,接着执行 case 2, a自加为 2, b自加为 1,遇到 break,结束循环,此时a=2, b=1,故选项 D正确。 21 【正确答案】 D 【试题解析】 x-后缀表示先用 x的值再令 x减 1, -x前缀表示先将 x减 1,再执行程序,则输出 (x-)继续下一次循环,输出 “8, ”,此时 x自减值变为 7,执行 x-, x=6, x 3=0,后面语句不执行,执行语句 “printf(“ d, ”, -x); ”,输出 “5”,继续 for循环中的 x-,得到 x=5,输出 “

24、5”;判断 x 3为真,输出 “4”, 执行两次x-后, x=2,执行 “printf(“ d“, x-); cotinue; ”后,输出 “2”;然后执行两次x-后, x=0,不符合 “x 0”,循环结束。 22 【正确答案】 A 【试题解析】 选项 B中 while(1)永远为真,一直自加下次进入死循环;选项 C中while(n=10)同理死循环,没有下限范围;选项 D中 for循环中 i也没有循环限定条件也将进入死循环;只有选项 A中 while(n =0)循环判定成立,循环结束。 23 【正确答案】 D 【试题解析】 本题定义一个一维数组和 指针,接着将数组第 4个元素的地址赋予*P数

25、组下标从 0开始,进行 -p使指针 P指向了数组的第 3个元素,通过 y=*p将数组第 3个元素的值 3赋予 y,所以选项 D正确。 24 【正确答案】 C 【试题解析】 本题考查数组的定义一维数组定义和初始化是允许省略行下标,不允许省略列下标,故选项 C错误。 25 【正确答案】 A 【试题解析】 程序定义了字符数组 s和字符型指针变量 p,并且使 p指向数组 s的首地址,执行 p=s语句后, *p表示 sO; s数组中元素的个数和 p所指字符串长度不相等, s数组中包括字符串 结束标志 “ 0”,而 p所指字符串不包括 “ 0”,数组 s中的内容和指针变量 p中的内容不相同,数组中存放的是

26、字符串,而指针变量 p存放的是数组的首地址。 26 【正确答案】 D 【试题解析】 数组的下标从 0开始,数组 a23包括元素 a00, a01,a02, a10, a11, a12,只有选项 D正确, 12为假,所以是 0, !为假也是 0,即引用元素 a00,其他选项的引用均是下标越界。 27 【正确答案】 D 【试题解析】 选项 A调用函数 gets使得 s数组从 s0开始得到输入的字符;选项B使得数组从元素 s1开始得到输入的 5个字符;选项 C使得数组从 s0开始得到输入的字符;而选项 D的 scanf(“ s“, s1)调用错误,应为 scanf(“ s“, &s1)输入项部分应该

27、是一个地址值。 28 【正确答案】 C 【试题解析】 预处理命令是以 “#”开始的语句,每一条预处理命令必须单独占用一行,由于不是 C语言的语句,并且命令行的最后不能以分号表示结束,定义格式为 “#define标识符字符串 ”,预处理命令行是系统对源程序进行编译之前 进行处理的,不是在程序执行的过程中。 29 【正确答案】 A 【试题解析】 定义结构体类型的一般形式 “struct结构体名 成员列表 )”, struct结构体名不能加 “; ”号。 30 【正确答案】 B 【试题解析】 本题考查的是 C语言中输入输出函数的使用, gets和 getchar函数用于从标准输入设备键盘读入字符串和

28、字符; fputs用于把字符串输出到文件;fwrite用于以二进制形式输出数据到文件。 31 【正确答案】 C 【试题解析】 本题考查对 for循环的使用,首先给两个数组 赋值,第一个 for循环从 0开始循环 12次遍历 s数组的各个元素,数组将 s中的元素值作为 c数组中的下标,然后自加,使相应的值自加,当 i=0, cs0+为 c1+,其值变为1,当执行 i=1, 2 , 11后, c1、 c2、 c3、 c4分别为 4、 3、 3、 2,故选项C正确。 32 【正确答案】 C 【试题解析】 本题定义一个一维数组并赋初值,接着调用 fun(),功能是使数组中的元素逆序,当调用 fun(a

29、, 0, 3),将实参传递给形参实现数组 a中 a0至 a3这 4个元素逆序;同 理调用 fun(a, 4, 9)是将上步排列好的 a数组中 a4至 a9这个 6个元素逆序;调用 fun(a, 0, 9)是将数组中 a0至 a9这 10个元素再逆序,再用 printf()函数输出结果为 5678901234,故选项 C正确。 33 【正确答案】 A 【试题解析】 在 main函数中,定义了一个指向字符串的指针数组,并赋初值,然后调用 fun函数,其功能是比较数组中元素的长度,按长度从小到大排序,所以执行 fun(ss, 5)函数后 *ss=“xy“, “bcc“, “bbcc“, “aaaac

30、c“,所 以调用printf函数输出 ss0, ss4的值分别为 xy, aaaacc。 34 【正确答案】 C 【试题解析】 本题考查了函数的调用,在 f函数中将实参传给 x,判断 if语句为假,接着执行 y=3*3-f(1),再执行 f(1)而 f(1)满足 if条件语句,所以 f(1)的值为 3,那么代入 y=3*3-f(1)=9-3=6,故选项 C正确。 35 【正确答案】 C 【试题解析】 在程序的主函数中 main定义了一个指向字符串的指针和一个字符数组,然后调用 fun(s, t),在 fun()中第一个 while语句判断 *a中的值为 “*”时继续扫描,如果不是 “*”终止,

31、第二个 while循环,将 *a中从 “a”开始的后续所有字符都赋予 *b,也就是 t80中的内容为 “a*b*”,所以此时的运行结果为选项 C。 36 【正确答案】 A 【试题解析】 本题考查在结构体中函数的调用,主函数调用 f(c)后,实参传向形参,但程序中没有返回语句,故形参不能将值传回实参,实参之间值的传递具有不可逆性,所以 printf输出的还是 c中实参的值。 37 【正确答案】 B 【试题解析】 本题考查文件的读写和相关操作 , fp=fopen(“d1 dat“, “w“)以写的方式为输出建立新文本文件,调用 printf输出 “123“, fp=open(“d1 dat“,“

32、r“)以只读的方式打开文本文件,不能对文件内容进行操作,故运行结果为选项B。 38 【正确答案】 A 【试题解析】 如果按题要求,高 4位取反,低 4位不变,则 a为 10101101,在选项中操作的结果,选项 A中 a*b=10101101,选项 B中 a b=1111101,选项 C中 a&b=01010000,选项 D中 a4=11010000,故选项 A正确。 39 【正确答案】 A 【试题解析】 动态变量 (auto)存储在内在中的动态存储区,只在程序运行中,系统才临时给变量分配内存单元;全局变量 (extern)一经定义,系统为其分配固定的内存单元;静态变量 (static),编译

33、系统为其分配固定的存储空间;寄存器变量(register)不保存在内存上,而是直接存储在 CPU的寄存器中。 40 【正确答案】 B 【试题解析】 定义语句 int(*f)(int)中 f是指向函数的指针变量,该函数中也只有一个 int型的形参。 二、基本操作题 41 【正确 答案】 (1)应改为 “TC obj1(1); ”。 (2)应改为 “obj1 SetNumber(10); ”。 (3)应改为 “obi2 SetNumber(100); ”。 【试题解析】 本题第 1处的 “TC obj1; ”语句是声明 TC类的对象 obj1,根据 TC类构造函数的定义 TC(int i),存在整

34、型参数,并且题目要求第一个输出结果为 1,所以补全参数 1,即第 1处的 “TC objl(1); ”。 第 2处的 obj1 number=10; ”应该是调用成员函数 SetNumber赋值。在 C+中成员函数的使用形式应该是:对象名。成员函数,所以修改为“obj1 SetNumber(10); ”。类是对象的抽象,而对象是类的具体实例。 第 3处 “TC.SetNumber(100); ”语句中的 TC为类,并不是对象,这里应该使用定义的对象,即 obj2,所以将语句修改为 “obj2 SetNumber(100): ”。 三、简单应用题 42 【正确答案】 int i, j; for(

35、i=j=0; jn&jm; ) *c+=ai(bj?ai+: bj+; 比较两个数组中元素大小 while(in)*c+=ai+; while(j(m)*c+=bj+; 【试题解析】 本题都指向数组的第一个元素。利用 for循环对要合并的两个数组中的元素进行比较,直到两个数组结束。取比较结果小的元素,并将指向这个数组的位置向后移动一位。 四、综合应用题 43 【正确答案】 (1)应添加 “People(char*sUserName, int nOld)”。 (2)应添加 “m_UserNamei=0; ”。 (3)应添加 “friend void fun(char*s, People&pers

36、on1, People&person2); ”。 (4)将 “if()”补充完整为 “if(person1 m_Old)person2 m_Old)”。 【试题解析】 本题第 1处要求 “完成类的构造函数 ”。根据 “class People”语句知道People为类,所以类 People的构造函数名为 People,根据第 1处的大括弧中的语句知道函数中的参数为数组 sUserName存放姓名,整型 nOld存放年龄,所以补充构造 函数定义为 “People(char*sUserName, int nOld)”。 第 2处要求 “完成构造函数对姓名的赋值 ”。第 2处补全姓名赋值,即“m_U

37、serNamei=0; ”。 第 3处要求 “定义类的友元函数 fun”。在 C+中,如果在本类以外的其他地方定义了一个函数,在类体中是用 friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中的 fun函数定义为trvoidfun(char*s, People&personl, People&person2)”,所 以声明 fun()为类People的友元函数,即这里补全 “friend void fun(char*s, People&personl,People&person2); ”。 第 4处要求 “补充函数 fun的年龄比较 ”。类 People中年龄的变量为 m_Old,根据 C+中类变量的调用格式补充第 4处 if语句中的条件判断语句,即“if(personl m_Old)Derson2 m_Old)”。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1