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

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

1、国家二级( C语言)机试模拟试卷 33 及答案与解析 一、选择题 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)需求分析阶段

3、( B)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 9 有三个关系 R、 S和 T如下:由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( )。 ( A)并 ( B)自然连接 ( C)笛卡尔积 ( D)交 10 设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为( )。 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 11 C语言程序的模块化通过以下哪个选项来实现 ( A)变量 ( B)函数 ( C)程序行 ( D)语

4、句 12 以下选项中不属于 C语言标识符的是 ( A)常量 ( B)用户标识符 ( C)关键字 ( D)预定义标识符 13 以下选项中不属于 C语言程序运算符的是 ( A) sizeof ( B) ( C) ( ) ( D) ( B) A=a+b; ( C) a=a+b ( D) A: a:b; 15 若有以下程序段 double x=5.16894; printf(“%fn“, (int)(x*1000+0.5)/(double)1000 ); 则程序段的输出结果是 ( A) 5.170000 ( B) 5.175 ( C) 5.169 ( D) 5.168 16 设有定义: double

5、a,b,c; 若要求通过输入分别给 a、 b、 c输入 1、 2、 3,输入形式如下(注:此处 代表一个空格 ) 1.02.03.0回车 则能进行正确输入的语句是 ( A) scanf(“%lf%lf%lf“,a,b,c); ( B) scanf(“%lf%lf%lf“, ( C) scanf(“%f%f%f“, ( D) scanf(“%5.1lf%5.1lf%5.1lf“, 17 若有定义语句 char c=101; 则变量 c在内存中占 ( A) 1个字节 ( B) 2个字节 ( C) 3个字节 ( D) 4个字节 18 若有以下程序 #include stdio.h main() ch

6、ar c1, c2; c1=C+8-3; c2=9-0; printf(“%c %dn“, c1, c2); 则程序的输出结果是 ( A) H 9 ( B) H 9 ( C) F 9 ( D)表达式不合法输出无定值 19 表示关系式 xyz的 C语言表达式的是 ( A) (x =y) switch( x ) case 1: switch ( y ) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; printf(“a=%d,b=%dn“,a,b ); 程序运行后的输出结果是 ( A) a=1,b=0 ( B) a=1,b=

7、1 ( C) a=2,b=1 ( D) a=2,b=2 21 有以下程序 #include stdio.h main() int k, j, s; for( k=2; k 6; k+,k+ ) s=1; for (j=k; j 6; j+ ) s+=j; printf(“%dn“ , s ); 程序运行后的输出结果是 ( A) 6 ( B) 10 ( C) 24 ( D) 40 22 由以下 while构成的循环,循环体执行的次数是 int k=0; while ( k=1 ) k+; ( A)有语法错,不能执行 ( B)一次也不执行 ( C)执行一次 ( D)无限次 23 有以下程序 #in

8、clude stdio.h int fun( int a, intB) return a+b; main() int x=6, y=7, z=8, r ; r = fun ( fun(x,y), z- ); printf (“ %dn“ , r ); 程序运行后的输出结果是 ( A) 21 ( B) 15 ( C) 20 ( D) 31 24 以 下选项中函数形参不是指针的是 ( A) fun( int *a ) ( B) fun( int a10 ) ( C) fun( int p= for( x=0; x 3; x+ ) y=y+*( p+x ); printf( “%dn“, y );

9、程序运行后的输出结果是 ( A) 17 ( B) 19 ( C) 18 ( D) 20 26 以下程序调用 fun函数求数组中最大值所在元素的下标。 #include stdio.h void fun( int *s,int n, int *k ) int i; for( i=0 ,*k=i; i n; i+ ) if( si s*k ) _ ; main() int a5=1,6,2,8,0, k; fun( a, 5, printf(“%d %dn“, k, ak ); 在横线处应填入的内容是 ( A) *k=i ( B) k=i ( C) *k=i-s ( D) k=i-s 27 有以下

10、程序 #include stdio.h main() int a34= 1,3,5,7,9,11,13,15,17,19,21,23, (*p)4=a,i,j,k=0; for( i=0; i 3; i+ ) for( j=0; j 2; j+ ) k=k+*(*(p+i)+j); printf(“%dn“, k ); 程序运行后的输出结果是 ( A) 108 ( B) 68 ( C) 99 ( D) 60 28 有以下程序 #include stdio.h int funa( int a, intB) return a+b; int funb( int a, intB) return a-b

11、; int sss( int (*t)(), int x, int y ) return( (*t)(x,y) ); main() int x; x=sss( funa, 9,3 ); x+=sss(funb,8,3 ); printf(“%dn“, x ); 程 序运行后的输出结果是 ( A) 24 ( B) 23 ( C) 17 ( D) 22 29 有以下程序 #include stdio.h int fun( int x ) int p; if (x=0 | x=1) return(3); p= x - fun( x-2 ); return (p); main() printf (“%

12、dn“, fun( 9 ) ); 程序运行后的输出结果是 ( A) 4 ( B) 5 ( C) 9 ( D) 7 30 以下选项中,能正确进行字符串赋值的是 ( A) char *s = “ABCDE“ ; ( B) char s5 = A, B, C, D, E ; ( C) char s45 = “ABCDE“ ; ( D) char *s ; gets( s ); 31 有以下程序 #include stdio.h void fun( char *p ) int i; for(i=0; i 4; i+ ) printf(“%s“,pi); main() char *s6= “ABCD“,

13、“EFGH“,“IJKL“,“MNOP“,“QRST“,“UVWX“ ; fun(s); printf(“n“ ); 程序运行后的输出结果是 ( A) ABCDEFGHIJKL ( B) ABCD ( C) AEIM ( D) ABCDEFGHIJKLMNOP 32 以下 fun函数的功能是将形参 s所指字符串内容颠倒过来 void fun( char *s ) int i, j, k; for( i=0, j=strlen(s) _ ; i j; i+,j- ) k=si; si=sj; sj=k; 在横线处应填入的内容是 ( A) +1 ( B) -1 ( C) 0 ( D) ,k=0 3

14、3 有以下程序 #include stdio.h void fun( char *p, int n ) char b6=“abcde“; int i; for( i=0,p=b; i n; i+ ) pi=bi; main() char a6=“ABCDE“; fun(a, 5); printf(“%sn“,a); 程序运行后的输出结果是 ( A) abcde ( B) ABCDE ( C) edcba ( D) EDCBA 34 有以下程序 #include stdio.h fun( int a, int b ) int static m=0, i=2; i=i+m+1; m=i+a+b;

15、return m; main() int k=4, m=1, p; p=fun( k, m); printf(“%d,“,p); p=fun( k, m); printf(“%dn“,p); 程序运行后的输出结果是 ( A) 8,17 ( B) 7,16 ( C) 8,8 ( D) 7,17 35 为了建立如图所示的存储结构(即每个结点含两个域, data是数据域 ,next是指向结点的指针域),则在【 】 处应填入的选项是 Struct link char data; 【 】 node; ( A) link next; ( B) struct link *next; ( C) link *n

16、ext; ( D) struct link next; 36 以下结构体说明 和变量定义中 ,正确的是 ( A) typedef struct abc int n;double m; ABC; ABC x,y; ( B) struct abc int n;double m ; struct abc x, y; ( C) struct ABC int n;double m; struct ABC x, y; ( D) struct abc int n;double m; ; abc x, y; 37 有以下程序 #include stdio.h #include stdlib.h void fu

17、n(int *p1,int *p2,int *s ) s=( int * )malloc( sizeof(int) ); *s = *p1 + *(p2+); main() int a2=1,2 , b2=10,20, *s=a; fun( a,b,s ); printf(“%dn“, *s ); 程序运行后的输出结果是 ( A) 11 ( B) 10 ( C) 1 ( D) 2 38 以下程序依次把从终端输入的字符存放到 f文件中,用 #作为结束输入的标志 , 则在横线处应填入的选项是 #include stdio.h main() FILE *fp; char ch; fp=fopen(

18、“fname“, “w“ ); while( ( ch=getchar() !=# ) fputc( _ ); fclose(fp); ( A) ch, “fname“ ( B) fp, ch ( C) ch ( D) ch, fp 39 有以下程序 #include stdio.h #define N 2 #define M N+1 #define NUM (M+1) * M/2 main() printf(“%dn“,NUM ); 程序运行后的输出结果是 ( A) 4 ( B) 8 ( C) 9 ( D) 6 40 有以下程序 #include stdio.h main() int i=0

19、; i = i; printf(“%dn“,i); 程序运行后的输出结果是 ( A) 8 ( B) 0 ( C) 1 ( D) -1 二、程序填空题 41 下列给定程序中,函数 fun的功能是:把形参 a所指数组中的最小值放在元素a0中,接着把 a所指数组中的最大值放在 a1元素中;再把 a所指数 组元素中的次小值放在 a2中,把 a所指数组元素中的次大值放在 a3,依此类推。 例如,若 a所指数组中的数据最初排列为: 9, 1, 4, 2, 3, 6, 5, 8, 7;则按规则移动后,数据排列为: 1, 9, 2, 8, 3, 7, 4, 6, 5。形参 n中存放 a所指数组中数据的个数。

20、规定 fun函数中的 max存放当前所找的最人值, px存放当前所找最大值的下标。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N 9 void fun(int a, int n) int i, j, max , min , pxt pn , t; for(i=0 ; i n一 1; i+=2) /*found*/ max=min=【 1】 , px=pn=i; for(J=i+1 ; j n; j+) /*found*/ if(max

21、 【 2】 ) max=aj; px=j, /*found*/ if(min 【 3】 ) min=aj; pn=j; if(pn!=i) t=ai; ai=min; apn=t, if(px=i)px=pn; if(px!=i+1) t=ai+1; ai+1=max; apx=t; void main() int bN=9, 1, 4, 2, 3, 6, 5, 8, 7, i; printf(“ nThe original data: n”); for(i=0; i N; i+) printf(“ 4d”, bi); printf(“ n”), fun(b, N); printf(“ nTh

22、e data after moving: n”); for(i=0; i N; i+) printf(“ 4d”, bi); printf(“ n”), 三、程序修改题 42 下列给定程序中,函数 fun的功能是:将 S所指字符串中最后一次出现的与 t1所指字符申相同的了串替换成 t2所指字符串,所形成的新串放在 w所指的数组中。要求 t1和 t2所指字符串的长度相同。 例如,当 s所指字符串中的内容为 “abcdabfabc”, t1所指串中的内容为 “ab”, t2所指子串中的内容为 “99”时,结果在 W所指的数组中的内容应为 “abcdabf99c”。 清改正程序中的错误,使它能得出正

23、确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include Stdio h #include string h void fun(char*S, char t1, char t2, char W) char*p, *r, *a; strcpy(W, S); /*found*/ while(W) p=W; r=t1; while(*r) /*found*/ IF(*r=*P) r+; p+; else break; if(*r= 0) a=w; w+: r=t2; while(*r) *a=*r: a+; r

24、+; main() char S100, t1100, t2100, W100; printf (“ nPlease enter string s: ”); Scanf(“ S”, S); printf(“ nPlease enter substring t1: ”), Scanf(“ S”, t1); printf(“ nPlease enter substring t2: ”); scanf(“ S”, t2); if(strlen(t1)=strlen(t2) fun(S, t1, t2, W); printf(“ nThe result is: S n”, W); else print

25、f(“ nError: strlen(t1)! =strlen(t2) n”), 四、程序设计题 43 编写函数 fun,其功能是:根据以下公式求 的值 (要求精度 0 0005,即某项小于 0 0005时停止迭代 )。 程序运行后,若输入精度 0 0005,则程序应输出为 3 140578。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填 入你编写的若干语句。 试题程序: #include stdio h #include conio h #include math h double fun(double eps)void main(

26、) double x; printf(”Input eps: ”), scanf(” lf”, x); printf(” neps= lf, PI= lf n”, x, fun(x); 国家二级( C语言)机试模拟试卷 33 答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 在数据流图中,用标有 名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择 C。 2 【正确答案】 A 【试题解析】 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A。 3 【正确答案】 B 【试题解析】 软件设计中模块划分应遵循的准则是高内聚低偶合

27、、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高 。 4 【正确答案】 B 【试题解析】 A)错误,可行性分析阶段产生可行性分析报告。 C)错误,概要设计说明书是总体设计阶段产生的文档。 D)错误,集成测试计划是在概要设计阶段编写的文档。 B)正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。 5 【正确答案】 A 【试题解析】 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是

28、有限的。 6 【正确答案】 D 【试题解析】 除了堆排序算法的比较次数是 O( nlog2n),其他的 都是 n(n1)/2。 7 【正确答案】 B 【试题解析】 栈是按 “先进后出 “的原则组织数据的,数据的插入和删除都在栈顶进行操作。 8 【正确答案】 C 【试题解析】 E R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。 9 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以 B)错误。笛卡尔积是用 R集合中元素为第一元素, S 集合中元素为

29、第二元素构成的有序对,所以 C)错误。根据关系 T 可以很明显的看出是从关系 R与关系 S 中取得相同的关系组所以取得是交运算,选择 D。 10 【正确答案】 C 【试题解析】 学号是学生表 S 的主键,课号是课程表 C的主键,所以选课表 SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择 C。 11 【正确答案】 B 【试题解析】 C语言程序的模块化通过函数来体现 ,所以选择 B。 12 【正确答案】 A 【试题解析】 常量是指在程序运行过程中其值不能被改变的量 ,如 5、 1.0、 字符a等。 C语言的标识符分为 3类 :关键字、预定义标识符和用户标识符,常量不属

30、于标识符,所以选择 A。 13 【正确答案】 B 【试题解析】 C语言中的不等于符号用 “!=“表示 ,没有符号 “ “,所以选择B。 14 【正确答案】 C 【试题解析】 C语言规定 ,C语句必须以分号 “;“结束, C选项中没有结束符号 ,所以错误。 15 【正确答案】 C 【试题解析】 %f的输出格式是以带小数点的数学形式输出浮点数。首先计算x*1000,结果为 5168.94然后 +0.5,结果为 5169.44,然后进行强制类型转换 ,转换成整型为 5169,然后除以双精度数据 1000,结果也为双精度数据 5.169,输出时按照 %f 的格式输出,所以输出结果为 5.169000。

31、 16 【正确答案】 B 【试题解析】 scanf函数的一般形式为 scanf(格式控制 ,变量 1地址 ,变量 2地址 ,), 其中,格式字符串要与数据类型保持一致 ,所以格式字符串中应为 %lf,后面应该为变量地址 ,所以需要加上符号 “ break;后, a的值为 1,继续执行语句 case 2: a+; b+; break;a 的值为 2, b的值为 1。因此 C选项正确。 21 【正确答案】 B 【试题解析】 本题重点考察 for语句循环嵌套,首先 k=2,进行 一次循环后, k自增两次,变成 4,这时 s为 1。即当 k=4 的时候, s=1, j=4,执行内层循环,s=1+4,

32、j自增 1后等于 5, s=5+5, j再自增 1后即为 6,跳出内层循环。 k自增两次后等于 6,不成立,跳出外层循环。最后输出 s的值,即为 10。因此 B 选项正确。 22 【正确答案】 D 【试题解析】 本题考察 while语句, while语句的语义是:计算表达式的值,当值为真 (非 0)时, 执行循环体语句。 k=1 为赋值语句,即 k 的值等于 1。 while(k=1) = while(1) ,是死循环,执行无限次。因 此 A选项正确。 23 【正确答案】 A 【试题解析】 函数 fun 的功能是返回两个形参的和。调用函数 fun(x,y)时,将变量 x=6和 y=7 的值分别

33、传送变量 a和 b,并且通过语句 return a+b;将 13返回给主函数。继续调用函数 fun(13,z-),这里 z-指将 z的值参与运算后,再将 z的值减 1操作;将 13和 8分别传送变量 a和 b,且通过语句 return a+b;将 21返回给主函数。因此 A选项正确。 24 【正确答案】 C 【试题解析】 B 选项和 D选项是将数组作为函数参数; A选项是将指 针作为函数参数;因此 C选项正确。 25 【正确答案】 B 【试题解析】 本题通过语句 “p= 可得到 x=9+3=12,而后直接传入函数 funb,x=x+8-3=12+5=17。因此 C选项正确。 29 【正确答案】

34、 D 【试题解析】 本题考查函数的递归调用,执行 f(9)后, f(9)=9-(7-(5-(3-f(1) =7,所以答 案为 D选项。 30 【正确答案】 A 【试题解析】 本题考查字符数组的初始化, B 选项中字符数组没有字符串的结束标志所以错误。 C选项中字符串包含 6个字符,所以不能赋值在左边只能放 5个字符的字符串数组中。 D选项的指针 s没有赋初值,不能使用。所以选项 A正确。 31 【正确答案】 D 【试题解析】 本题考查字符串数组, s表示指向字符数组的指针, s指向了第一个字符串, s+指向了第二个字符串,所以最后输出结果为 D选项。 32 【正确答案】 B 【试题解析】 本题

35、考查字符串处理函数 strlen, strlen计算一个字符串的长度,包含结尾符,所以本题中 j的初始化应该是从最后一个字符开始,所以应该将得到的字符串长度减 1,选项 B 正确。 33 【正确答案】 B 【试题解析】 本题考查数组名作为函数参数,执行 f函数时,传进去的 a指针被重新指向了 b,所以原本 a数组的地址内容不变,所以输出结果为 ABCDE,答案为 B 选项。 34 【正确答案】 A 【试题解析】 本题考查静态局部变量,本题中先执行 fun(4,1)得到返回值为 8,此时静态局部变量 m为 8, i为 3,那么再次执行 fun(4,1)得 到的值为 17,所以选项 A正确。 35

36、 【正确答案】 B 【试题解析】 本题主要考查链表中节点的概念,属于基础知识。每个结点应该由两个成员组成:一个是整型的成员;一个是指向自身结构的指针类型成员。其中指针域应该是指向下个节点,所以答案为 B。 36 【正确答案】 A 【试题解析】 本题考查 typedef 的使用方法, typedef 对已存在的类型使用一个新的名字,选项 A中 ABC为新的类型别名,定义正确。 37 【正确答案】 C 【试题解析】 本题考查把数组名作为函数参数,执行 fun函数 后, s的值并没有发生变化,仍然是指向 a,所以输出结果为 1,选项 C正确。 38 【正确答案】 D 【试题解析】 本题考查 fput

37、c函数,该函数将字符 ch 写到文件指针 fp所指向的文件的当前写指针的位置。函数格式: int fputc (int n, File *fp)答案为 D选项。 39 【正确答案】 B 【试题解析】 本题考查宏定义,宏定义只是做个简单的替换,执行NUM=(N+1+1)*N+1/2=8,选项 B正确。 40 【正确答案】 D 【试题解析】 本题考查位运算中按位取反, 0按位取反就是 -1,所以选项 D正确。 二、程序填空题 41 【正确答案】 (1)ai (2)aj (3)aj 【试题解析】 填空 1: for循环语句循环体中将数组元素 ai赋值给变量 max和变量 min。 填空 2:通过一次

38、 for循环,找到数组中的最大值, if语句的条件表达式是 max aj。 填空 3:同理,此处 if 语句的条件表达式是 min aj。 三、程序修改题 42 【正确答案】 (1)while(*w) (2)if(*r=*p) 【 试题解析】 (1)此处要判断的是值的真假,而不是地址,所以改为 while(*w)。 (2)c语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。 四、程序设计题 43 【正确答案】 double fun(double eps) double s=0 0, s1=1 0; int n=1; while(sl =eps) *当某项大于精度要求时,继续求下一项 * s=s+s1; *求和 * s1=s1*n (2*n+1); *求 多项式的每一项 * n+; return 2*s; 【试题解析】 首先应该定义 double类型变量,并同赋初值,用来存放多项式的某一项和最后的总和。从第二项开始以后的每一项都是其前面一项乘以 n(2*n+1),程序中用 s1来表示每一项, s表示求和后的结果。需注意 s1和 s的初值都为 1 0,因为循环变量从第二项开始累加。

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

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

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