1、国家二级( C语言)笔试模拟试卷 16及答案与解析 1 在下列关于二叉树的叙述中,正确的一条是 _。 ( A)度为 2的树称为二叉树 ( B)二叉树的度肯定是 2 ( C)二叉树中所有结点的度都是 2 ( D)具有 3个结点的二叉树有 5种形态 2 从未排序序列中依次取出元素与已排序序列中的元素作比较,将取出的元素放入已排序序列中的正确位置上,此方法称为 _。 ( A)归并排序 ( B)选择排序 ( C)交换排序 ( D)插入排序 3 分层数据流图是一种比较严格又易于理解的描述方式,它的顶层描 绘了系统的_。 ( A)总貌 ( B)细节 ( C)抽象 ( D)软件的作用 4 在软件工程中,高质
2、量的文档是 _、一致性和无二义性的。 ( A)安全性 ( B)完整性 ( C)组合性 ( D)统一性 5 软件开发的原型化方法是一种动态定义软件需求的方法,下述条件中, _是实施原型化方法所必需的。 成熟的原型化人员 快速的成型工具 需求了解的准确性 ( A) 和 ( B) 和 ( C) 和 ( D)全部 6 数据库、数据库系统、数据库 管理系统 3者之间的关系是二 _。 ( A)数据库包含数据库系统和数据库管理系统 ( B)数据库系统包含数据库和数据库管理系统 ( C)数据库管理系统包含数据库和数据库系统 ( D)以上都不正确 7 在 C语言中,不正确的 int类型的常数是 _。 ( A)
3、32768 ( B) 0 ( C) 37 ( D) 0xAF 8 下列字符序列中,不可用作 C语言标识符的是 _。 ( A) b70 ( B) #ab ( C) _symbol ( D) al 9 程序段: int i=65536; prinff(“%dn“,i);,则输出结果是 _。 ( A) 65536 ( B) 0 ( C)有语法错误,无输出结果 ( D) -1 10 已知 year为整型变量,不能使表达式(year%4=0 float b, c; scanf (“% 2d% 3%/4f“, printf(“na=%d, b=%f, c=%fn“, a, b, c); 若运行时从键盘上输
4、入9876543210 ,则上面程序的输出结果是 _。 ( A) a=9b=765, c=4321 ( B) a=10,b=432,c=8765 ( C) a=98,b=765.000000,c=4321.000000 ( D) a=98,b=765.0,c=4321.0 12 请选出以下程序的输出结果 _。 #include stdio. h sub(x, y, z)int x, y,*z;*z=y-x:main() int a, b, c; sub 10,5,sub(7,a,sub(a, b, printf(“%d,% d,/%dn“, a, b, c); ( A) 5,2,3 ( B)
5、-5, -12, -7 ( C) -5,-12, -17 ( D) 5, -2, -7 13 设整型数 i=5,则 printf (“%d“, i+i); 的输出为 _ 。 ( A) 10 ( B) 11 ( C) 12 ( D)语法错误 14 若要用下面的程序片段指针变量 p指向一个存储整型变量的动态存储单元 int *p;p=_ malloc (sizeof (int);则应填入 _。 ( A) int ( B) int* ( C) (*int) ( D) (int*) 15 下面程序输出的结果是 _。 main ()int i=5, j=9,x;x= (i=j?: (j=7);print
6、f(“n%d, %d“, i, j); ( A) 5, 7 ( B) 5, 5 ( C)语法错误 ( D) 7, 5 16 若有 以下定义和语句; int a=1,2,3,4,5,6,7,8,9,10,*p=a; ( A) p+=2,*(p+) ( B) p+=2,*+p ( C) p+=3,*p+ ( D) p+=2,+*p 17 设 a、 b和 c都是 int 型变量,且 a=3、 b=4、 c=5,则下面的表达式中,值为 0的表达式是 _。 ( A) aj=printf(“%dn“,*k);上述程序的输出结果是 _。 ( A)运行错误 ( B) 100 ( C) i的地址 ( D) i的
7、地址 19 没有以下语句,其中不是对 a数组元素的正确引用的是: _ (其中 0i 10) int a10=1,1,2,3,4,5,6,7,8,9,*p=a; ( A) ap-a ( B) *(s0=a0,s1=a1;pp=s;p=(int*)malloc(sizeof (int);*pp=s11;p=*pp;printf(“%dn“,*p); ( A) 1 ( B) 7 ( C) 9 ( D) 11 21 已知 p、 p1为指针变量, a为数组名, i为整型变量,下列语句中,不正确的是_。 ( A) p= a/=SQR (k+m)/SQR (k+m); printf (“dn“, a); (
8、 A) 16 ( B) 2 ( C) 9 ( D) 1 25 下列程序的输出结果是 _。 main ( ) char a 10 = 9, 8,7,6, 5, 4,3, 2, 1,0,*p=a+5; printf (“%d“, *-p); ( A)非法 ( B) a4的地址 ( C) 5 ( D) 3 26 下列程序的运行结果是 _。 main ( ) int x,*p,*q; x=10; p= q= printf (“%dn“, *q); ( A) 10 ( B) 9 ( C) 8 ( D) 11 27 设有以下程序 : struct stint n;struct st *next; stat
9、ic struct st a3=5, p= 下面选项中,表达式值为 6的是_。 ( A) p+- n ( B) p- n+ ( C) (*p).n+ ( D) +p- n 28 下列叙述中,错误的一条是 _。 ( A)已知 i=3,执行语句 k=(+i)+(+i)+(+i)后, k的值为 15 ( B)逻辑表达式 !(5 3) if( c = a) printf( “% d n“ ,c); else printf( “% d n“ ,b); 37 已知字符 A的 ASCII码为 65,以下程序运行后的输出结果是【 】。 #include stdio.h main( ) char a,b; a=
10、A+5-3; b=a+6-2; printf( “% d% cn“, a, b); 38 已有定义 : double * p; 请写出完整的语句,利用 malloc 函数使 p指向一个双精度型的动态存储单元 :【 】。 39 以下程序运行后的输出结果是【 】。 #include stdio.h struct NODE int num;struct NODE * next; main ( ) struet NODE s3= .0,2,0,3,O,*p,*q,*r; int sum = 0; s0.next=s+1; s1.next=s+2;s2.next=s; p=s; q=p- next; r
11、=q- next: sum+=q- next- num; sum+=r- next- next- num; prinff( “% d n“, sum); 40 以下程序运行后的输出结果是【 】。 #include stdio.h int f( iht a ,int n) if(n =1) returnf(a,n-1) +an-1; else return 0; main( ) int aa5 = 1,2,3,4,5 ,s; s = f(aa,5); prinff(“ % d n“ ,s); 41 有以下程 序 : #include stdio.h int sub(int n) return(n
12、/10 + n% 10); main( ) int x,y; seanf(“ %d“ , y = sub (sub(sub (x); printf(“ %d n“;,y); 若运行时输入: 1234回车,程序的输出结果是【 】。 42 以下函数 sstrcat的功能是实现字符串的连接,即将 t所指字符串复制到 s所指字符串的尾部。例如:,所指字符串为 abed, t所指字符串为 efgh,调用函数sstrcat后 s所指字符串为 abcdefgh。请填空。 #inehde stdio.h #include string.h void sstuat(char * 9, char *t) int
13、n; n = strlen (s); while(*(s+n) =【 】 )s+; t+; 43 以下程序运行后的输出结果是【 】。 #include stdio.h #include string.h char * ss(char * s) char * p,t; p=s+1:t= *s: whilet * p) *(,p-1) = *p; p+; * (p-1) =t; return s : main ( ) char * p,str10 =“ abedefgh“; p = ss(str); printf( “% s n“. p): 44 以下程序的功能是计算 :s=1+12+123+12
14、34+12345。请填空。 #include stdio.h main( ) int t=0.s =0,i: for(i=1;i =5;i+) t=i+【 】 ;s=s+t; prinff(“s = % dn“. s ); 45 以下程序运行后的输出结果是【 】。 #include stdio.h main ( ) char c;int n = 100; float f= 10:double x: x=f*=n/= (c=50); printf(“% d% fn“,n,x); 46 以下程序运行后的输出结果是【 】。 #include stdio.h main ( ) iht x=0210;
15、printf(“%x n“ ,x); 47 以下程序的功能是输出如下形式的方阵: 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 请填空。 #include stdio.h main( ) int i,j,x; for(j =4;j 【 】 ;j-) for(i = 1 ;i =4;i+) x=(j-1) *4+【 】 ; printf( “%4d“ ,x); printf(“ n“ ); 48 以下函数 rotate的功能是:将 a所指 N行 N列的二维数组中的最后一行放到 b所指二维数组的第。列中,把 a所指二维数组中的第 0行放到 b所指二维数组的最后一列中
16、, b所指二维数组中的其他数据不变。 # define N 4 void rotate(int a N ,int b N ) int, i,j; for(i=0;i N;i+ ) bi N-1 =【 】 ; 【 】 =aN-1i; 国家二级( C语言)笔试模拟试卷 16答案与解析 1 【正确答案】 D 2 【正确答案】 D 3 【正确答案】 A 4 【正确答案】 B 5 【正确答案】 B 6 【正确答案】 B 7 【正确答案】 A 8 【正确答案】 B 9 【正确答案】 D 10 【正确答案】 A 11 【正确答案】 C 【试题解析】 scanf()用户从键盘录入助数字的第 1、 2位存入整型
17、变量 a;把第3、 4、 5位存入单精度实型变量 b,把第 6、 7、 8、 9位存入单精度实型变量 c,用户录入的第 10位被 scanf()遗弃。这时变量 a、 b、 c的值分别为: 98、765.000000、 4321.000000 12 【正确答案】 B 【试题解析】 sub()函数的作用是将形参 y和 x的差赋给了 z指向的那个内存地址,所以在 sub(0.,5,后, p中将是 s0的值,最后的输出语句将输出地址 s0所指向的数据,即 a00。 21 【正确答案】 D 22 【正确答案】 C 23 【正确答案】 D 24 【正确答案】 B 25 【正确答案】 C 26 【正确答案】
18、 A 27 【正确答案】 D 28 【正确答案】 A 29 【正确答案】 C 30 【正确答案】 D 31 【正确答案】 自顶向下 【试题解析】 在程 序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括为:自顶向下,逐步细化。 32 【正确答案】 功能性 【试题解析】 注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么, 33 【正确答案】 对象 【试题解析】 在面向对象的程序设计方法中,类是具有相同的属性或方法的对象的抽象,对象是
19、类的实例。 34 【正确答案】 19 【试题解析】 在任意一棵二叉树中,度数为 0的结点 (即叶子结点 )总比度为 2的结点多一个,因此该二叉树中叶子结点为 18+1=19。 35 【正确答案】 变换型 【试题解析】 典型的数据流类型有两种:变换型和事务型 36 【正确答案】 1 【试题解析】 该程序要注意的是 if语句的判断条件 “c=a”是赋值,而不是“c=a”。由于 a= 1,故条件 c=a使 c的值为 1(真 ),所以输出 c的值 1。 37 【正确答案】 67G 【试题解析】 由于 5-3=2,所以 a=A+5-3=C,按 “%d“格式输出 C的ASCII码为 67;同理, 6-2=
20、4, b=a+6-2=C+4=G,按 “%c“格式输出为G。 38 【正确答案】 p=(double *)malloc(sizeof(double) 【试题解析】 malloc函数的作用是在内存中开辟指定大小的存储空间,并将此存储空间的地址作为函数值带回,其原型为 void*malloc(unsigned int slze),要将此返回地址赋给一个指向双精度型的指针变量,则应进行强制类型转换 (double *)。 39 【正确答案】 5 【试题解析】 程序通过语句 s0.next=s+1;s1.next=s+2; s2.next=s;将结构体变量 s中各结点连接成了一个循环链表,即最后一个结
21、点的指针域指向了头结点(s2.next=s),整个链表形成一个环,并通过语句 p=s; q=p- next; r=q- next;将结构体指针变量 p, q, r指向了各结点,具体结构如下图:故本题输出的 sum为 3+2=5。 40 【正确答案】 15 【试题解析】 程序通过递归调用实现求数组 aa各元素 之和,即a4+a3+a2+a1+a0=15。 41 【正确答案】 10 【试题解析】 函数 sub递归调用的返回值被作为再次调用 sub函数的实参传给函数 sub的形参,共进行 3次递归调用。第 1次调用 sub(1234)的返回值为1234/10+1234%10=127;第 2次调用 s
22、ub(127)的返回值为 127/10+127%10=19;第3次调用 sub(19)的返回值为 19/10+19% 10=10。所以程序的输出为 10。 42 【正确答案】 *t 【试题解析】 程序中, (a+n)代表字符串 s最后一个字符后的, 0,根据题意,0所在位置应该赋值为字符串 t的第一个字符,字符中 t的其他字符根据循环,依次赋值到,所指字符串的尾部,所以 14应填: *t。 43 【正确答案】 bedefgha 【试题解析】 函数 9,的作用是将指针变量。指向的字符串的首字符移到最后一个位置,其他字符依次前移。其方法是:首先将指针变量 p指向字符串 s的第 2个字符 b,然后将
23、首字符保存在字符变量 t中;从字符串的第 2个字符开始,通过语句 *(P-1)=*p;依次前移,直到字符串结束符;最后通过 语句 *(P-1)=t;将保存在 t中的字符放到移动后的字符串末尾,返回 main函数并输出,输出结果为bedefsh。 44 【正确答案】 t*10 【试题解析】 程序中变量,用于存放表达式 1+12+123+1234+12345之和,变量 t用于存放其表达式的各项。当 i=1时,要使 t=1; i=2时, t=12; i=3时, t=123;依此类推。每一次的 t值是用上一次的 t乘以 10再加上此次的 i的值,所以本题答案为 t*10。 45 【正确答案】 220
24、【试题解析】 根据赋值运算符 “自右至左 ”的结合顺 序,程序中赋值表达式x=f*=n/=(c= 50)的求解步骤为:首先计算 n/=(c=50),即 n=n/c=100/50=2;然后计算 f*=n,即 f=f*n =10*2=20.000000,由此得到 x的值为 20.000000。 46 【正确答案】 88 【试题解析】 程序中的 0210表示八进制数, %x是以十六进制形式输出。本题可先将 0210转换为十进制数,再将其转换为十六进制数。 47 【正确答案】 =1或 0 i 【试题解析】 程序的外层 for循环控制输出数据的行数,故第一处填 “ =1”或“ 0”;内层循环控制每行输出的个数。在内层 for循环中,语句 x=(j-1)*4+_;用于控制输出方阵中的具体数据,由于这些数据与其所在的行、列(j, i)具有 x=(j-1)*4+i的关系,故第二处填 i。 48 【正确答案】 a0i bi0 【试题解析】 根据题意,第一处所在语句行的作用是把 a数组中的第 0行放到 b数组的最后一列中, a数组的第 0行用 a0来表示,所以第一处填 a0i;第二所在语句行的作用是将 a数组的最后一行放到 b数组的第 0列中, b数组的 第 0列用 b0来表示,所以,第二处应填 bi0。