1、国家二级( C语言)机试模拟试卷 16及答案与解析 一、选择题 1 下列关于栈和队列的描述中,正确的是 ( )。 ( A)栈是先进先出 ( B)队列是先进后出 ( C)队列允许在队头删除元素 ( D)栈在栈顶删除元素 2 已知二叉树后序遍历序列是 CDABE,中序遍历序列是 CADEB,它的前序遍历序列是 ( )。 ( A) ABCDE ( B) ECABD ( C) EACDB ( D) CDEAB 3 在数据流图中,带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)数据流 ( C)模块调用 ( D)事件驱动 4 结构化程序设计的 3种结构是 ( )。 ( A)顺序结构,分支结构,跳
2、转结构 ( 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 在一棵二叉树上,第 5层的结点数最多是 ( )。 ( A) 8 ( B) 9 ( C) 15 ( D) 16 10 下列有关数据 库的描述,正确的是 ( )。 ( A)数据库设计是指设计数据库管理系统 ( B)数据库技术的根本目标是要解决数据共享的问题 ( C)数据库是一个独立的系统,不需要操作系统的支持 ( D)数据库系统中,数据的物理结构必须与逻辑结构一致 11 以下关于 C语言的叙述中正确的是 ( )。 ( A)预处理命令通常位于函数体外面,但也可以位于函数体中间 ( B) C语言中的变量定义须在其他语句之前 ( C)在 C语言程序
4、的书写中,一个语句必须单占一行 ( D)一个 C语言源程序可以由一个或多个源文件组成,每个源文 件可由自己的main函数 12 下列叙述中错误的是 ( )。 ( A)用户所定义的标识符允许使用关键字 ( B)用户所定义的标识符应尽量做到 “见名知意 ” ( C)用户所定义的标识符必须以字母或下划线开头 ( D)用户定义的标识符中,大、小写字母代表不同标识 13 下列选项中可作为 C语言合法常量的是 ( )。 ( A) 80 ( B) 080 ( C) 8e1 0 ( D) 80 0e 14 下列定义变量的语句中错误的是 ( )。 ( A) im_int; ( B) double int_; (
5、 C) char For; ( D) float US$: 15 下列关于函数的叙述中正确的是 ( )。 ( A)每个函数都可以被其他函数调用 (包括 main函数 ) ( B)每个函数都可以被单独编译 ( C)每个函数都可以单独运行 ( D)在一个函数内部可以定义另一个函数 16 当 a=1、 b=2、 c=3、 d=4时,执行下面程序段后, x的值是 ( )。 if(a main() int a=4, b=3, c=2, d=1; printf(“ d“, a main() int b33=0, 1, 2,0, 1, 2, 0, 1, 2, i, j, t=0; for(*i=0; i=i
6、; j-)t+=bij; printf(“ dn“, t); 程序运行后的输出结果是 ( )。 ( A) 4 ( B) 3 ( C) 8 ( D) 9 19 以下程序: #include main() char str10; scanff“ s“, &str); printf(“ sn“ str); 运行上面的程序,输入字符串 how are you,则程序的执行结果是 ( )。 ( A) how ( B) how are you ( C) h ( D) howareyou 20 设 x和 Y都是 int类型,且 x=1, y=2,则 printf(“ d d“, x, y, (x, y)的输
7、出结果是 ( )。 ( A) 1 2 ( B) 1 2 2 ( C) 1, 2 ( D)输出值不确定 21 以下程序的输出结果是 ( )。 #include main() int a=8, b=6, m=1; switch(a 4) case 0: m+; break; case 1: m+; switch(b 3) default: m+; case 0: m+: break; printf(” dn”, m); ( A) 1 ( B) 2 ( C) 3 ( D) 4 22 定义如下变量和数组: int i, x33=1, 2, 3, 4, 5, 6, 7, 8, 9; 则下面语句的输出结果
8、是 ( )。 for(i=0; i void main() int a20, *p4; int i, k=0; for(i=0; i #define N 8 void fun(int*x, int i) *x=*(x+i)+1; main() int aN=1, 2, 3, 4, 5, 6, 7, 8, i; fun(a, 2); for(i=0; i main() char a=a, b, c, d, f, g, *p; p=a; printf(” c11”, *p+4); ( A) a ( B) b ( C) e ( D) f 34 下面函数的功能是 ( )。 sss(s, t) char
9、*s, *t; while(*s); while(*t) *(s+)=*(t+); return s; ( A)将字符串 s复制到字符串 t中 ( B)比较两个字符串的大小 ( C)求字符串的长度 ( D)将字符串 t续接到字符串 S中 35 下列程序的运行结果是 ( )。 #include void sub(int*s, int*y) static int m=4; *y=sm; m-; void mainO int a=1, 2, 3, 4, 5), k, x; printf(“n“); for(k=0; k intb=3; int fun(int*k1 b=*k+b; retum(b);
10、 main() int a10=1, 2, 3, 4, 5, 6, 7, 8, i; for(i=2; i #include #defitie N 8 typedef Struct liSt int data ; Struct 1iSt*Fiext; SLIST; void fun(SLIST*p) SLIST*t, *s ; t=P-next; s=p; while(t-next!=NULL) S=t ; /*found*/ t=t- _ 1 _ ; ) /*found*/ printf(“ d“, _ 2 _ ); S-next=NULL; /*found*/ fEee( _ 3 _ )
11、; SLIST*creatlist(int*a) SLIST*h, *p, *q; int i; h=p=(SLIST*)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=q; P-next=0; return h; void outliSt(SLIST*h) SLIST*p ; P=h-next; if(p=NULL)printf(“nThe liSt is NULL!n“); else printf(“nHead“); doprintf(“- d“, P-data); p=p-next; )while(P!=NULL); printf
12、(“-Endn“); main() SLIST*head; int aN=11, 12, 15, 18, 19, 22, 25, 29; head=creatliSt(a); printf(“noutput from head: n“); outliSt(head); printf(“nOutput from tail: n“); while(head-next!=NULL) fun(heacl); print: f(“nn“); printf(“nOutput from head again: n“); outlist(head); 三、程序修改题 42 给定程序 MODI1 C中 fun函
13、数的功能是:求出以下分数序列的前 n项之和。和值通过函数值返回 main函数。 例如,若 n=5,则应输出: 8 391667。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序 的结构 !include/*found*/fun(int n) int a=2, b=1, c, k ; double s=0 0; for(k=1; k 四、程序设计题 43 请编一个函数 fun,函数的功能是使实型数保留 2位小数,并对第三位进行四舍五入 (规定实型数为正数 )。 例如:实型数为 1234 567,则函数返回 1234 572000: 实型数为
14、 1234 564,则函数返回 1234 562000。 注意:部分源程序存在文件 PROG1 C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include float fun(float h) main() float a; Void NONO(); printf (“Enter a: “); scanf (“ f“, &a); printf(“The original data is: “); printf(“ fnn“, a); printf(“The result: fn“, fun(a); NONO(); void N
15、ONO() /*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ int i; float a; FILE*rf, *wf; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “W“); for(i=0; idata (3)t 【试题解析】 第一空: fun函数中的循环 “while(t next!=NULL)”目的是找到尾结点,利用结点变量 s和 t, s指向当前节点, t不断指向下一个结点,因此第一空处应该是 “t-=t next; ”。 第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点 t, t的数据是t-
16、data,因此第二空处应该为 “printf(“ d“, t-data); ”。 第三空:输出尾结点数据之后删除尾结点,使用 free,又因为尾结点是 t,因此第三空处应该为 “free(t); ”。 三、程序修改题 42 【正确答案】 (1)double fun(int n) (2)c=a; a+=b; b=c; 【试题解析】 (1)fun函数中的语句 “double s=0 0; ”以及 “return(s); ”说明 fun函数具有 double返回值,所以应将 “fun(int n)”改为 “double fun(intn)”。 (2)根据题干中给出的公 式可以推出每一项的特点,知道每一项的 b值是前一项的c值,所以第二个标识下 “b+=c; ”改为 “b=c; ”。 四、程序设计题 43 【正确答案】 long w; w=h*1000+5; return(float)w/1000; 【试题解析】 进入 fun函数,根据前面的分析:本题可以分解为,把一个浮点数截成只带两位小数的算法和将小数点后第三位四舍五入的算法。其中,四舍五入,如果值大于 5那么加上 5就会进位;反之,如果小于 5,加上 5就不会进位,所以在扩大后的值加上 5,实现四舍五入的截取。