[计算机类试卷]国家二级(C语言)机试历年真题试卷汇编10及答案与解析.doc

上传人:diecharacter305 文档编号:502810 上传时间:2018-11-29 格式:DOC 页数:29 大小:94KB
下载 相关 举报
[计算机类试卷]国家二级(C语言)机试历年真题试卷汇编10及答案与解析.doc_第1页
第1页 / 共29页
[计算机类试卷]国家二级(C语言)机试历年真题试卷汇编10及答案与解析.doc_第2页
第2页 / 共29页
[计算机类试卷]国家二级(C语言)机试历年真题试卷汇编10及答案与解析.doc_第3页
第3页 / 共29页
[计算机类试卷]国家二级(C语言)机试历年真题试卷汇编10及答案与解析.doc_第4页
第4页 / 共29页
[计算机类试卷]国家二级(C语言)机试历年真题试卷汇编10及答案与解析.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、国家二级( C语言)机试历年真题试卷汇编 10及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)节点中具有两个指针域的链表一定是二叉链表 ( B)节点中具有两个指针域的链表可以是线性结构,也可以是非线性结构 ( C)二叉树只能采用链式存储结构 ( D)循环链表是非线性结构 2 某二叉树的前序序列为 ABCD,中序序列为 DCBA,则后序序列为 ( )。 ( A) BADC ( B) DCBA ( C) CDAB ( D) ABCD 3 下面不能作为软件设计工具的是 ( )。 ( A) PAD图 ( B)程序流程图 ( C)数据流程图 (DFD图 ) ( D)总体结构图 4 逻

2、辑模型是面向数据库系统的模型,下面属于逻辑模型的是 ( )。 ( A)关系模型 ( B)谓词模型 ( C)物理模型 ( D)实体一联系模型 5 运动会中一个运动项目可以有多名运动员参加,一个运动员可以参加多个项目。则实体项目和运动员之间的联系是 ( )。 ( A)多对多 ( B)一对多 ( C)多对一 ( D)一对一 6 下面描述不属于软件特点的是 ( )。 ( A)软件是一种逻辑实体,具有抽 象性 ( B)软件在使用中不存在磨损、老化问题 ( C)软件复杂性高 ( D)软件使用不涉及知识产权 7 某二叉树中有 15个度为 1的节点, 16个度为 2的节点,则该二叉树中总的节点数为 ( )。

3、( A) 32 ( B) 46 ( C) 48 ( D) 49 8 下面对软件特点描述错误的是 ( )。 ( A)软件没有明显的制作过程 ( B)软件是一种逻辑实体,不是物理实体,具有抽象性 ( C)软件的开发、运行对计算机系统具有依赖性 ( D)软件在使用中存在磨损、老化问题 9 某系统结构图如下图所示: 该系统结构图中最大扇入是 ( )。 ( A) 0 ( B) 1 ( C) 2 ( D) 3 10 设有表示公司和员工及雇佣的 3张表,员工可在多家公司兼职,其中公司表C(公司号,公司名,地址,注册资本,法人代表,员工数 ),员工表 s(员工号,姓名,性别,年龄,学历 ),雇佣表 E(公司号

4、,员工号,工资,工作起始时间 )。其中表 C的键为公司号,表 S的键为员工号,则表 E的键 (码 )为 ( )。 ( A)公司号,员工号 ( B)员工号,工资 ( C)员工号 ( D)公司号,员工号,工资 11 算法应当具有的特性不包括 ( )。 ( A)可行性 ( B)有穷性 ( C)确定性 ( D)美观性 12 若想给已定义为 int型的变量 a、 b、 c、 d赋整数 1,以下选项中错误的语句是( )。 ( A) d=c, c=b, b=a, a=1; ( B) d=c=b=a=1; ( C) d=(b=c=(a=1); ( D) d: 1, c=d, b=c, a=b; 13 以下选项

5、中,合法的 C语言常量是 ( )。 ( A) 21 84 ( B) CPP ( C) 1 0 ( D) 2MB 14 下面叙述正确的是 ( )。 ( A) C语言程序的语句经过编译和链接转换成二进制机器指令后才能执行 ( B)任何算法需要包含 3种基本结构中的两种以上 ( C)复杂算法是不能用 3种基本结构来表达的 ( D)只要是简单算法,它的操作步骤都不会超过 20步 15 若已有定义语句: int a, b, c;,且变量已正确赋初值,则以下选项中正确的赋值表达式是 ( )。 ( A) a=(b: c)+8; ( B) (a=b)=c=9; ( C) a=(b=c)=A; ( D) a+b

6、=c+1; 16 以下表达式的值与 x无关、其值恒为真的是 ( )。 ( A) 010 x10 x5 17 以下非法的字符常量是 ( )。 ( A) n ( B) 101 ( C) x21 ( D) 0 18 若有定义: int a=0, b=0, c=0, d=0;,以下关于 C语言表达式:(+a +b)?+c: +d执行顺序的您述正确的是 ( )。 ( A)先执行 +a,表达式 +a的值为 1;再执行 +b,表达式 +b的值为 1,由此可确定 (+a +b)值为 1因此执行 +c ( B)先执行 +a,表达式 +a的值为 1,由此可确定 (+a +b)值为 1,因此执行+c ( C)先执行

7、 +b,表达式 +b的值为 1;再执行 +a,表达式 +a的值为 1,由此可确定 (+a +b)值为 1因此执行 +c ( D)先执行 +a, +b, +c, +d,使得 a, b, c, d的值都为 1,由此可确定(+a +b)值为 1,因此执行 +c 19 有如下程序: #include main() int i, data; scanf(“ d“, &data); for(i=0; idata)break; printf(“ d, “, i); 程序运行时,从键盘输入: 3后,程序输出结果为 ( )。 ( A) 3, 4, 5, ( B) 1, 2, 3, ( C) 2, 3, 4, (

8、 D) 0, 1, 2, 3, 20 有以下程序: #include main() int i=4: for(printf(“ d“, i); i main() if( 0=0)putchar(1); if(0=0)putchar(2); if(ab)putchar(3); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 123 ( C) 23 ( D) 3 22 有如下程序段: int k; for(k=2; k=0; )printf(“ d“, k一一 ); 则 for循环体执行的次数是 ( )。 ( A) 0次 ( B) 1次 ( C) 2次 ( D)无限次 23 有以下程序:

9、 #include int k=5; void f(int*s) s=&k; *s=7; main() int m=3; f(&m); printf(“ d, d n“, m, k); 程序运行后的输出结果是 ( )。 ( A) 7, 7 ( B) 5, 7 ( C) 3, 7 24 有以下程序: #include void fun(int a, int n) int i; for(i=0; i int sub(double a, double b) return(int)(a b一 1 3); main() printf(“ d n“, sub(3 2, 4 1); 程序运行后的输出结果是

10、( )。 ( A)一 2 ( B) 1 7 ( C)一 3 ( D) 2 0 26 有以下程序: #include main() int i, *ptr; int array4=1, 1 3, 4; for(ptr=array, i=0; i main() int x=8, 2, 6, 12, 5, 15, f1, f2; int *p=x: f1=f2=x0; for(; p*p)t2=*p; printf(“ d, d n“, f1, t2); 程序的运行结果是 ( )。 ( A) 15, 2 ( B) 15, 15 ( C) 2, 15 ( D) 8, 8 28 有以下程序: #incl

11、ude main() int x34=1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12; int(*p)4=x, k=1, m, n=0; for(m=0; m main() char b410, c; im i, j; for(i=0; i 则输出结果是 ( )。 ( A) Peachflowerispink ( B) Peachflowefis pink ( C) Peachflower is pink ( D) Peach flower is pink 30 有如下程序: #include void convert(char ch) if(ch #include

12、 main() char aE20=“ab“, b20=“cder“; int k=0; strcat(a, b); while(ak!= 0)bk=ak; k+; puts(b); 程序的运行结果是 ( )。 ( A) abcdef ( B) cbcdef ( C) cdef ( D) ab 32 以下使指针指向一个字符串的选项错误的是 ( )。 ( A) char str=“string“, *ps; *ps=str; ( B) char str=“string“; char*ps=str; ( C) char str=“string“, *ps; ps=str; ( D) char*ps

13、; ps=“string“; 33 有以下程序: #include typedef struct stu char name10; char gender; int score; STU; void f(STU a, STU*b) *b=a; printf(“ s, c, d, “, b一 name, b一 gender, b一 score); main() STU a=“Zhao“, m, 290, b=“Qian“, f, 350; f(a, &b); printf(“ s, c, d n“, b name, b gender, b score); 程序运行后的输出结果是 ( )。 ( A

14、) Zhao, m, 290, Qian, f, 350 ( B) Qian, m, 290, Zhao, m, 290 ( C) Qian, f, 350, Qian, f, 350 ( D) Zhao, m, 290, Zhao, m, 290 34 若有定义: typedef int * T; T a20; 则以下与上述定义中 a类型完全相同的是 ( )。 ( A) int * a20; ( B) int(*a)20; ( C) int a20; ( D) int* a20; 35 有如下程序: #include struct person char name10; int age; ;

15、 main() struct person room2=“Wang“, 19 t, “Li“, 20; printf(“ s= d n“, (room+1)一 name, room一 age); 程序运行后的输出结果是 ( )。 ( A) Li: 19 ( B) Wang: 19 ( C) Li: 20 ( D) Wang: 17 36 以下关于编译预处理的叙述中错误的是 ( )。 ( A)预处理命令行必须位于源程序的开始 ( B)源程序中凡是以 开始的控制行都是预处理命令行 ( C)一行上只能有一条有效的预处理命令 ( D)预处理命令是在程序正式编译之前被处理的 37 以下关于宏的叙述错误的

16、是 ( )。 ( A)宏 替换不具有计算功能 ( B)宏是一种预处理指令 ( C)宏名必须用大写字母构成 ( D)宏替换不占用运行时间 38 有以下程序: #include struct S int x, y; ; main() street S data3=4, 3, 2, 0, 8, 1; int i; for(i=0; i1); printf(” n”); 程序运行后的输出结果是 ( )。 ( A) 41; 20; 80; ( B) 41; 22; 64; ( C) 40; 21; 80; ( D) 43; 20; 81; 39 以下叙述正确的是 ( )。 ( A)文件指针是指针类型的变

17、量 ( B)在使用文件指针时,不需要在内存中为其分配空间 ( C)文件指针变量的值是文件的当前读取位置 ( D)调用 fscanf函数能向所有类型的文件中写入任意字符 40 有以下程序: #include typedef struct stu char name10; char gender; int score; STU; void f(STU a, STU *b) a=*b; printf(“ s, c, d, “, a name, a gender, a score); main() STU a=“Zhao“, m, 290, b=“Qian“, f, 350; f(a, &b); pr

18、intf(“ s, c, d n“, a name, a gender, a score); 程序运行后的输出结果是 ( )。 ( A) Qian, f, 350, Qian, f, 350 ( B) Zhao, m, 290, Qian, f, 350 ( C) Qian, f, 350, Zhao, m, 290 ( D) Zhao, m, 290, Zhao, m, 290 二、程序填空题 41 给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值 (规定所有数均为正数 ), 将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至 x所指数组的后部,平均

19、值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数: 46、 30、 32、 40、 6、 17、 45、 15、 48、 26,平均值为30 500000。 移动后的输出为: 46、 32、 40、 45、 48、 30、 6、 17、 15、 26。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #define N 10 double fun(double, * x) int i, j; double s

20、, ay, yN; s=0: for(i=0; iav) *found* y【 2】 =xi; xi=一 1; for(i=0; i #include double fun(int n) main() *主函数 * void NONO(); printf(“s= f n“, fun(1000); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE *fp, *wf; int i, n; double s; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; id

21、ata是否成立,如果条件成立,运行 break语句结束整个循环过程。当 i等于 0、 1、 2、 3时, if条件不满足,执行循环体中的 printf(“ d“, i)语句,因此答案为 D选项。 20 【正确答案】 B 【试题解析】 for(printf(“ d“, i); ia,不执行 if后面的语句,所以最后输出只有 1,故答案为 A选项。 22 【正确答案】 A 【试题解析】 for(k=2; k=0; )表示给 k赋值 2,如果 k等于 0,则进入循环,但是 k不满足条件,因此循环体不执行。正确答案为 A选项。 23 【 正确答案】 D 【试题解析】 函数 f()的功能是定义一个整型的

22、指针变量 s,指向全局变量 k,然后修改 s指向地址中的值为 7,因此 f()函数只是修改全局变量 k的值为 7,与main()函数中临时变量 m无关,因此最后输出为 3, 7,答案为 D选项。 24 【正确答案】 A 【试题解析】 fun()函数功能是:对数组中,下标对 3求余为 O的元素减去 5,下标对 3求余不为 0的元素累加 5,所以执行完 fun()函数后,数组 c中元素值为 1,12, 13, 4, 15,答案为 A选项。 25 【正确答案】 A 【试题解 析】 sub()函数输出 (int)(ab一 1 3)将结果强制转化为整型,因此可以排除 B、 D选项, (ab一 1 3)=

23、一 2 2, (int)(一 2 2)=一 2, sub(3 2,4 1)=一 2,故答案为 A选项。 26 【正确答案】 C 【试题解析】 for语句中把 array数组首地址值赋给 ptr,然后在循环体中进行输出,再把 ptr对应的地址值加 1,重复 3次,输出数组前 3个数 1, 1, 3,因此答案为 C选项。 27 【正确答案】 A 【试题解析】 本题的用意是求数组的最大值和最小值,首先把数组 x首 地址的值赋给指针 p,故 *p初始值为 8,而 p是地址值, p+1相当于数组中下一元素的地址,在 for循环,是求数组 x对应的最大值和最小值, fl为最大值, f2为最小值。因此输出为

24、 15, 2,答案为 A选项。 28 【正确答案】 C 【试题解析】 *(*(p+m)+k)系统默认为指针指向数组中第 mk个元素,因此,在for循环中, n+=/(/(p+m)+k);执行的是将数组 x01和 x11累加后赋值给 n,最后进行输出,答案为 C选项。 29 【正确答案】 A 【试题解析】 for循环 语句中,通过执行 while语句, while的判断条件输入的字符不为空格和回车,把输入的字符串以 为分隔符,分别保存在二维数组 b的 4行中,再通过 s格式控制符,将二维数组 b的 4行字符串无空格连接输出,答案为A选项。 30 【正确答案】 D 【试题解析】 在 main函数中

25、,执行 convert(W)函数,因为 w比 X小,满足 if语句,再执行 convert(ch+1);此时 ch=X,不满足条件,输出 X,完成后,返回上一次 convert中,输出上次 ch=W,因此答案为 D选项。 31 【正确答案】 A 【试题解析】 strcat(字符串 1,字符串 2)函数是把字符串 2连接到字符串 1的后面,最终结果存放到字符串 1中,因此本题把字符串 a, b连接起来放在数组 a中, while语句完成功能是再将字符串 a赋给字符串 b,因此答案为 A选项。 32 【正确答案】 A 【试题解析】 A选项中定义了指针 ps后, *ps表示指针 ps指向地址的内容,

26、而不是地址, *ps=str无法将 str的首地址赋给一个常量,语法错误,答案为 A选项。语句 char str, *ps=str等效于 char str, *ps; ps=str。 33 【正确答案】 D 【试题解析】 本题定义了一个结构变量 struct stu,并且命名为 STU, STU结构中包含 3个数据。 main函数中,首先为结构变量 a, b初始化,再调用函数 f(),在 f()函数中,使用结构体变量 a对指针 b指向的结构体进行赋值,使得指针 b指向的结构体成员依次赋值为结构体 a的成员,然后依次输出指针 b指向的结构体成员的值;由于 f函数形参 b为指针,所以指针 b指向的

27、值被修改为 a的同时,main函数中的实参 b的值也被修改成 a,答案为 D选项 (注:形参指针 b与实参结构 体变量 b不要混淆 )。 34 【正确答案】 A 【试题解析】 “typedef类型名新类型名 ”表示为一个已定义的类型标识符重新定义一个新类型名,题中选项 A代表的意思是数组指针,即指向数组的指针, B选项是指针数组,即数组存放的元素是整型指针,首先为整型指针类型命名为 T,再通过 T定义了一个整型指针数组 *a20,等价于 int*a20,答案为 A选项。 35 【正确答案】 A 【试题解析】 声明结构类型 person后,在 main函数中定义了一个结构数组room,其中有 2

28、个元素,每个元素都是 person类型数据。在输出中,因为 room表示数组首地址,首地址 +1,指向 room数组中第二个元素,并将该元素的 name信息进行输出,同理,对第一个元素中的 age信息输出,因此,答案为 A选项。 36 【正确答案】 A 【试题解析】 通常,预处理命令位于源文件的开头,也可以写在函数与函数之间,答案为 A选项。 37 【正确答案】 C 【试题解析】 宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母,因此,答案为 C选项。 38 【正确答案】 A 【试题解析】 声 明结构类型 s中有两个整型变量 x, y,在 main函数中,为 S结构类型

29、定义一个数组变量 data初始化 3个结构体元素,分别两两赋值给结构体中的 x, y。在 for循环中,对 3个结构体元素 y值转换成 2进制数后向右移一位,再对此时 x, y值依次进行输出,答案为 A选项。 39 【正确答案】 A 【试题解析】 文件指针指向的是文件缓冲区,而不是文件本身位置,因此 B, C选项错误; fscanf()函数作用是从指定的文件中格式化读数据,读取数据类型由格式控制符决定, D选项错误,答案为 A选项。 40 【正确答案】 C 【试题解析】 main函数中,首先定义两个结构体 STU类型的变量 a, b,并对a, b初始化, f函数的功能是:用形参结构体指针 b指

30、向的结构体对形参 a赋值,此时形参结构体 a的值为指针 b指向的值,输出 a即输出指针 b指向的结构体,返回到 main函数后,在输出实参 a的值,答案为 C选项,注:形参 a, b不要和实参 a, b混淆。 二、程序填空题 41 【正确答案】 (1)s N (2)j+ (3)一 1 【试题解析】 填空 1:由原程序可知, av代表的是平均值,而平均值的求法是所有数的总和除以数的 个数,因而本空应该填写 s N。 填空 2: y数组代表暂时存放 x数组, if(xiav)表达的是当 x数组中的数大于平均值时,应该把这些大于平均值的数放在 y数组的前半部分,因而此空应该填yj+。 填空 3:此空

31、表明当 xi不等于什么时, xi中的数要赋值给 y数组,由题意可知此空只能填写一 1。 三、程序修改题 42 【正确答案】 (1)for(i=2; i=m; i+) (2)y一 =1 0 (i * i); 【试题解析】 (1)使用 for循环计算公式,必须计算到 m,所 以应改为 for(i=2;i=m; i+)。 (2)在除法运算中,如果除数和被除数都是整数,那么所除结果也是整数,因此应改为 y=1 0 (i * i)。 四、程序设计题 43 【正确答案】 double fun(int n) double sum=0 0; int i: for(i=21; i=n; i+) if(i 3=0) (i 7=0)sum+=i; 同时能被 3与 7整除 retum sqrt(sum); 【试题解析】 本题考查算术运算的算法,首先利用一个 for循环判断小于 n且能同时被 3和 7整除的整数,并将满足条件的整数累加到 sum,之后调用 sqrt函数计算 sum的平方根,并作为函数的返回值。

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

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

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