1、国家二级( C语言)笔试模拟试卷 71及答案与解析 1 数据结构中,与所使用的计算机无关的是数据的 ( ) ( A)存储结构 ( B)物理结构 ( C)逻辑结构 ( D)物理和存储结构 2 在单链表中,增加头结点的目的是 ( ) ( A)方便运算的实现 ( B)使单链表至少有一个结点 ( C)标识表结点中首结点的位置 ( D)说明单链表是线性表的链式存储实现 3 算法的时间复杂度是指 ( ) ( A)执行算法程序所需要的时间 ( B)算法程序的长度 ( C)算法执行过程中所需要的基本运算 次数 ( D)算法程序中的指令条数 4 在设计程序时,应采纳的原则之一是 ( ) ( A)不限制 goto
2、语句的使用 ( B)减少或取消注解行 ( C)程序越短越好 ( D)程序结构应有助于读者理解 5 下面不属于软件工程的 3个要素的是 ( ) ( A)工具 ( B)过程 ( C)方法 ( D)环境 6 为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为 ( ) ( A) PAD图 ( B) N-S图 ( C)结构图 ( D)数据流图 7 在软件工程中,白箱测试法可用于测试程序的内部结构。此方法将程序看做是( ) ( A)路径的集合 ( B)循环的集合 ( C)目标的集合 ( D)地址的集合 8 下列有关数据库的描述,正确的是 ( ) ( A)数据处
3、理是将信息转化为数据的过程 ( B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变 ( C)关系中的每一列称为元组,一个元组就是一个字段 ( D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字 9 将 E-R图转换 到关系模式时,实体与联系都可以表示成 ( ) ( A)属性 ( B)关系 ( C)键 ( D)域 10 对表进行水平方向和垂直方向的分割,分别对应的关系运算是 ( ) ( A)选择和投影 ( B)投影和选择 ( C)选择和联接 ( D)投影和联接 11 以下正确的实型常量是 ( ) ( A) 1.2E ( B) 0
4、.579899 ( C) 1.2e0.6 ( D) 8 12 若题中各变量已正确定义并赋值,下面符合 C语法的表达式是 ( ) ( A) a%=7.6; ( B) a+, a=7+b+c ( C) int(12.3)%4 ( D) a=c+b=a+7 13 假定 w、 x, y、 z、 m均为 int型变量,有如下程序段; w=1;x 2;y 3;z=4; m (w x)?w:x; m (m y)?m:y; m (m z)?m:z; 则该程序段执行后, m的值是( ) ( A) 4 ( B) 3 ( C) 2 ( D) 1 14 若有如下程序段; int x 3, y=4, z; float
5、a=2.0; z=y%x/a; 则执行后, z中的值是 ( ) ( A) 4 ( B) 3 ( C) 0 ( D) 0.5 15 在 16位 C编译系统上,若定义 long a;,则能给 a赋值 40000的正确语句是 ( ) ( A) a 20000+20000; ( B) a=4000*10; ( C) a 30000+10000; ( D) a 4000L*10L; 16 在下列 4个选项中,均属于 C语言合法标识符的是 ( ) ( A) include F1 ( B) c.2 int ( C) na s+t ( D) PI A_2 17 下列有关格式输入函数 scanf的叙述中正确的
6、是 ( ) ( A)输入项可以是 C语言中规定的任何变量,并且在任何变量前必须加地址符号“ ( D)当输入数据时,必须指明变量地址 18 有以下程序; main() int y 3, x 3, z=1; printf(“%d %dn“, (+x,y+), z+2); 执行后的输出结果是 ( ) ( A) 3 4 ( B) 4 2 ( C) 4 3 ( D) 3 3 19 C语言提供的合法关键字是 ( ) ( A) swicth ( B) cher ( C) Case ( D) default 20 下列选项中不屑于 C语言数据类型的是 ( ) ( A)整型 ( B)逻辑型 ( C)双精度型 (
7、 D)枚举型 21 设 a、 b、 c、 d、 m、 n均为 int型变量,且 a=5、 b=6、 c=7、 d=8、 m=2、 n=2,则逻辑表达式 (m=a B) printf(“%dn“,num); ( A) 1 2 3 4 ( B) 1 2 3 ( C) 1 2 ( D) 1 23 下面的关键字中,不能够从循环体中跳到循环体外的 _。 ( A) goto ( B) break ( C) return ( D) continue 24 以下各选项企图说明一种新的类型名,其中正 确的是 _。 ( A) typedef v1 int; ( B) typedef v2=int; ( C) ty
8、pedef int v3; ( D) typedef v4: int 25 为了避免嵌套的 if-else的二义性, C语言钡定: else与 _配对。 ( A)缩排位置相同的 if ( B)其之前最近的 if ( C)其之后最近的 if ( D)同一行上的 if 26 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_。 ( A)地址传递 ( B)单向值传递 ( C)由实参传给形,再由形参传回实参 ( D)传递方式由用户指定 27 以下函数值的类型是 _。 fun(floatx) float y; y=3*x-4; return y; ( A) int ( B)不确定 (
9、C) void ( D) float 28 以下选项中,非法的字符常量是 _。 ( A) t ( B) 17 ( C) n ( D) xaa 29 以下程序的输出结果是 _。 #include stdio.h main() int a=200; #define a 100 printf(“%d“,a) ; #undefa printf(“%d“,a) ; ( A) 200 100 ( B) 100 100 ( C) 100 200 ( D) 200 200 30 若有说明 int i,j=2, *p= ( D) i=*p; 31 假定 int类型变量占用两个字节,若有定义: int x10=0
10、,2,4);,则数组 x在内存中所占字节数是 _。 ( A) 3 ( B) 6 ( C) 10 ( D) 20 32 执行以下的程序段后, m的值是 _。 int a23=1,2,3,4,5,6; int m,*p; p= for(i=9;i =0;i-)ai=10-i; printf(“%d%d%d“,a2a5,a8); ( A) 258 ( B) 741 ( C) 852 ( D) 369 34 下面程序的输出结果为 _。 #include string.h main() char p17=“abc“, p2=“ABC“,str50=“xyz“; strcpy(str,strcat(p1,
11、p2); printf(“%s“,str); ( A) xyzabcABC ( B) abcABC ( C) xyzabc ( D) xyzABC 35 以下数组定义中不正确的,是 _。 ( A) int a23; ( B) int b3=0,1,2; ( C) int c100100=0; ( D) int d3=1,2, 1,2,3, 1,2,3,4; 36 以下程序的输出结果是 _。 main() int a44=1,3,5,, 2,4,6,3,5,7; printf(“%d%d%d%dn“,a03,a12,a21,a30); ( A) 650 ( B) 1470 ( C) 5430 (
12、 D)输出值不定 37 在说明语句 int*f();中,标识符 f代表的是 _。 ( A)一个用于指向整型数据的指针变量 ( B)一个用于指向一维数组的行指针 ( C)一个用于指向函数的指针变量 ( D)一个返回值为指针型的函数名 38 以下程序的输出结 果是 _。 main() char st20=“hello0t“; printf(“%d%dn“,strlen(st),sizeof(st); ( A) 99 ( B) 520 ( C) 1320 ( D) 2020 39 以下程序运行后的输出结果是 _。 int d=1; fun(int p) static int d=d; d+=p; p
13、rintf(“%d“,d) ;return d; main() int a=3; printf(“%dn“,fun(a+fun(d); ( A) 699 ( B) 669 ( C) 61515 ( D) 6615 40 以下选项中,不能正确赋值的是 _。 ( A) char s110; s1=“chest“; ( B) char s2=C, t, e, s, t; ( C) char s320=“Chest“; ( D) char*s4=“Ctestn“ 41 以下程序输出正确的是 _。 amovep(int *p,int(*A) 3,int n) int i,j; for(i=0;i n;i
14、+) for(j=0;j n;j+) *p=aij;p+ main() int *p,a33=1,3,5, 2,4,6; p=(int*)malloc(100); amovep(p,a,3); printf(“%d%dn“,p2,p5);free(p); ( A) 56 ( B) 25 ( C) 34 ( D)程序错误 42 下面程序的输出结果是 _。 #define a 121 const b=12; enum ca1,a2; main() printf(“%d,%d,%d“,sizeof(a) ,sizeof(b) ,sizeof(enum c) ); ( A) 121,0,4 ( B)
15、2,2,2 ( C) 0,2,4 ( D) 0,2,2 43 以下程序的输出结果是 _。 struct HAR int x,y;struct HAR *p; h2; main() h0x=1;h0y=2; h1x=3;h1y=4; h0.P=h1.p=h; printf(“%d%dn“,(h0.p)- x,(h1.p)- y); ( A) 12 ( B) 23 ( C) 14 ( D) 32 44 变量 a所占的内存字节数是 _。 union U char st4; int i; long 1; ; struct A int c; union U u; a; ( A) 4 ( B) 5 ( C
16、) 6 ( D) 8 45 以下程序的结果是 _。 int a,b; void fun() a=100; b=200; main() int a=5, b=7; fun(); printf(“%d%dn“,a,b) ; ( A) 100200 ( B) 57 ( C) 200100 ( D) 75 46 以下程序的输出结果是 _。 #define M(x,y,z) x*y+z main() int a=1,b=2,c=3; printf(“%dn“,M(a+b,b+c,c+a) ); ( A) 19 ( B) 17 ( C) 15 ( D) 12 47 若有以下说明和语句: struct st
17、int n; char*ch; struct st a3=5,“abc“, 7,“def“, 9, “ghk“, *p=a; 则值为 6的表达式是 _。 ( A) p+- n ( B) p- n+ ( C) (*p).n+ ( D) +p- n 48 整型变量 X和 Y的值相等,且为非 0值,则以下选项中结果为 0的表达式是_。 ( A) X|Y ( B) X|Y ( C) X myf=fopen(fname,“w“); for(i=0;istrlen(st);i+)fputc(sti,myf); fclose(myf); main() fun(“test.t“,“new world“);fu
18、n(“test.t“, “hello,“); ( A) hello, ( B) new worldhello ( C) new world ( D) hello, rld 51 存储结构的 4种基本类型分别是顺序、链式、索引和【 】。 52 在软件生命周期中,【 】阶段是花费最多、持续时间最长的阶段。 53 设有以下定义变量的语句,并且已赋确定的值,则表达式 “W*X+Z-y”所求得的数据类型为【 】。 char w; int x; float y; double 2; 54 下列程序的运行结果为【 】。 main() int x=2, y, z; x*=3+1; printf(“%d, “,
19、 x+); x+=y=z=5; printf(“%d, “, x); K=y=Z; printf“%dn“, x); 55 设顺序输入数列为: 24, 30, 8, 5, 1, 27, 24, 26, 10, 21, 9, 28, 7, 13,15。假定每个结点的查找概率相同,若用顺序存储方式组织该数列,则查找一个数成功的平均比较次数为【 】;若按二叉排序树结构组织该数列,则查找一个数成功的平均比较次数为【 】。 56 下列程序的运行结果为【 】。 main ( ) int i, j, row=0, colum=0, max, a3 4=1,2,3,4, 9,8,7,6, -10,10,-5,
20、2; max=a0 0; for (i=0;i 3;i+) for (j=0; j 4; j+) if (max a i j) max=ai j; row=i; colum=j; printf(“max=%-5d row=%-3d colum=%-3dn“,max, row, colum); 57 下列程序的输出结果是【 】。 int t(int x, int y, int cp, int dp) cp=x*x+y*y; dp=x*x-y*y; main () int a=4, b=3, c=5, d=6; t (a,b, c,d); printf(“%d %d n“,c,d); 58 下列程
21、序的功能是计算 1 100的整数的累加和。 main() int i, sum=【 】; i=1; for(【 】 ) sum+=i; i+; printf(“sum=%dn“,【 】 ); 59 输出若干学生 3门课程的成绩。 #include stdio.h 【 】 struct student int num; float score3; main () int i=0, n; float a3; 【 】 *ptr 200; printf (“请输入学生学号和 3门课成绩,学号为 0表示数据输入结束 n“); do ptri=(struct student *)malloc(sizeof
22、(struct student); scanf(“%d%f%f%f“, ptri- scoreO=aO; ptri- score1=a1; ptri- score2=a2; if(【 】 ) break; i+; while(1); n=i-1; 【 】 ; for(i=O;i=n;i+) printf(“%-6d%.1f %.1f %.1fn“,ptri- num, ptri- score0, ptri- score1, ptri- score2); 国 家二级( C语言)笔试模拟试卷 71答案与解析 1 【正确答案】 C 2 【正确答案】 A 3 【正确答案】 C 4 【正确答案】 D 5
23、 【正确答案】 D 6 【正确答案】 B 7 【正确答案】 A 8 【正确答案】 D 9 【正确答案】 B 10 【正确答案】 A 11 【正确答案】 B 12 【正确答案】 B 13 【正确答案】 D 14 【正确答案】 C 15 【正确答案】 D 16 【正确答案】 D 17 【正确答案】 D 18 【 正确答案】 D 19 【正确答案】 D 20 【正确答案】 B 21 【正确答案】 A 【试题解析】 C语言中比较表达式的运算结果为 0或 1。 0代表不成立, 1表示成立。 22 【正确答案】 B 【试题解析】 while的执行过程是:先计算条件表达式的值,若成立则执行循环体,重复上述过
24、程,直到条件表达式的值为 “假 ” (值为零 )时,退出循环,并转下一语句去执行。本题在输出 num的值为 3之后,再判断 while的循环条件 3=2,不成立,所以不再输出 num的值,故本题的答案选 B。 23 【正确答案】 B 【试题解析】 在 C语言中,可以用 break语句和 continue语句跳出本层循环和结束本次循环。 goto语句可跳出多层循环,如果在函数的循环体内使用 return语句,就会直接结束循环返回函数值。 24 【正确答案】 C 【试题解析】 C语言中可以使用 typedef来重新定义已有的数据类型,相当于为数据类型取个别名。 25 【正确答案】 B 【试题解析】
25、 在 if语句中又包含一个或多个 if语句称为 if语句的嵌套。应当注意 if与 else的配对关系,在 C语言中,从量内层 开始, else总是与它上面最近的(未曾配对的 )if配对。 26 【正确答案】 B 【试题解析】 C语言函数中的参数传递方式有传值与传址两种方式,传值方式是指将实参的值复制一份传递给形参,而传址方式是指将实参的变量地址传递给形参,也就是实参的引用。 27 【正确答案】 A 【试题解析】 C语言中如果函数前不加任何数据类型时,默认函数的类型为整型,函数的类型就是函数返回值的类型。 28 【正确答案】 C 【试题解析】 C语言中字符常量是以单引号括起来的单个字符,或为以
26、“”与三位八 进制数值或两位十六进制数值代替单个字符。 29 【正确答案】 C 【试题解析】 #define宏名的有效范围为定义命令之后到本源文件结束,可以在程序中使用 #undef命令终止宏定义的作用域。本题由于 #undef的作用,使 a的作用范围在 #define a 100 到 #undefa之间,故答案为 C。 30 【正确答案】 B 【试题解析】 指针是一种用来存放变量地址的特殊变量。本题中指针变量 p用于存放整型变量 i的地址,改变 *p的值即为改变 i的值。又因为 “i=7时, ai=10-7=3; 依此类推,直到 i=0时, ai=10-0=10;此时, i的值已变为 -1,
27、判断 for的循环条件,不成立,然后输出 a2, a5,a8,分别为 8, 5, 2。 34 【正确答案】 B 【试题解析】 strcpy(str1, s1):作用是将字符串 s1拷贝到字符数组 str1中去。strcat(字符数组 1,字符数组 2):把字符串 2接到字符串 1的后面,结果放在字符数组 1中,函数调用后返回字符数组 1的地址。本题定义了三个字符数组p1,p2,str, strcat(p1, p2)函数的作用是将字符串数组 p2接到字符串 p1的后面,结果放在字符数组 p1,再通过 strcpy()函数将该字符串拷贝到 str数组中,原 str数组中的字符串 xyz被覆盖,因此
28、打印输出字符串 str即可得到 abcABC。 35 【正确答案】 D 【试题解析】 一维数组的定义方式为: 类型说明符 数组 名 常量表达式 ; 选项 A符合此定义形式,正确: C语言中多维数组赋初值时可以部分赋值,也可以不指定除第一维以外的其他维的大小,故选项 C正确;另外,如果对全部数组元素都赋初值,则定义数组时刘第一维的长度可以不指定,但第二维的长度不能省,所以选项 B正确,而选项 D是错误的。 36 【正确答案】 A 【试题解析】 对未给出初始值的整数数组元素,被默认初始化为零。 37 【正确答案】 D 【试题解析】 带回指针值的函数,其一般定义形式为: 类型标识符 *函数名 (参数
29、表 ); 例如; int *f(x,y); 其中, f是函数名,调用它以后能得到一个指向整型数据的指针 (地址 ), x,y是函数f的形参。在 f的两侧分别为 *运算符和 ()运算符,而 ()优先级高于 *,因此 f先与 ()结合,显然是函数形式。这个函数前面有一个 *,表示此函数是指针型函数 (函数值是指针 )。前面的 int表示返回的指针指向整型变量。 38 【正确答案】 B 【试题解析】 C语言中字符串是以 0字符结束的,且 strlen()函数计算的是 0字符前的所有字符的个数。本题中 strlen(st)应为 5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。
30、sizeof()函数是计算变量或数组的所分配到的内存空间的大小。所以本题的 sizeof(st)为 20。 39 【正确答案】 C 【试题解析】 静态局部变量在编译时赋初值,即只赋韧值一次,在程序运行时它已有初值。以后每次调用时不再重新赋初值而只是保留上次函数调用结束时的值,而对自动变量赋初值,不是在编译时进行的,而在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。本题在程序开头定义了全局变量 d并赋初值 1,在被调函数 fun()中,定义了静态 局部变量 d,初值为 5。在第一次调用函数 fun时, d初值为 5, p由主函数传递过来的值为 1,则d=d+p=5+1=6
31、,由于 d是静态局部变量,在函数调用结束后,它仍保留 d=6。再次调用 fun函数, d的初值为 6,而由主函数传递的 p的值为 9,则此时d=d+p=6+9=15,最后打印输出 d的值并返回主函数。 40 【正确答案】 A 【试题解析】 语言中不能将字符串常量直接赋给数组。但在赋初值时可以。 41 【正确答案】 A 【试题解析】 本题 main函数中定义了指针 p和二维数组 a,通过函数 amovep将数组的值存入指针 p所指向的存储单元中, a的各元素分别为: a00=1,a01=3, a02=5, a10=2, a11=4, a12=6, a20=0, a21=0。通过 malloc()
32、函数给指针分配内存空间, free()函数用于释放指针变量所用内存空间。在主函数中通过 amovep(p,a,3)调用函数 amovep,使得实参 p与形参 p,实参数组 a与形参中指向数组的指针变量共用同一存储空间。最后输出 p2, p5为56。 42 【正确答案】 B 【试题解析】 sizeof函数是取变量所占的存储空间的字节数,标识 a代表常量121: const b=12;,其中数据类型可以缺省,默认为整型; enum ca1,a2;定义了一个枚举类型 enum c, a1, a2为枚举元素,在 C编译时,对枚举元素按常量处理,它们的值按定义顺序依次为 0, 1。因此它们的字节数均为
33、2,2,2。 43 【正确答案】 D 【试题解析】 本题中是一个含有两个结点的循环链表。 C语言中结构体的定义为: struct结构体类型名 成员项表; ; 44 【正确答案】 C 【试题解析】 结构件变量所占内存长度是各成员占内存长度之和,而共用体变量所占的内存长度等于最长的成员的长度。本题结构体变量 a中成员 c为整型占 2个字节,共用体变量 u最大长度为 4个字节,故选 C。 45 【正确答案】 B 【试题解析】 全程变量是可以在于函数中对其值作改变,且它也可作为函数间的值传递。但当函数或子函数中定义了与全程变量名称相同的局部变量,则全程变量将被屏蔽。 46 【正确答案】 D 【试题解析
34、】 C语言的宏定义包括不带参数的宏定义与带参数的宏定义。本题 为带参数的宏定义,其形式为: #define 宏名 (形参表 )字符串 本题的 M(a+b, b+c, c+a) 被字符串 a+b*b+c+c+a代替。 47 【正确答案】 D 【试题解析】 根据结构变量的存储特点, p+1意味着增加地址值为结构体数组 a的一个元素所占的字节数,即 p+使 p由 a0指向 a1起始地址。本题 +p- n得到 p指向的结构体变量中成员 n的值使之加 1。因为 p指向数组 a起始地址, p-n的值为 5,再掏打自加 1运行,结果为 6。 48 【正确答案】 D 【试题解析】 “|”为或运算符,当其左右表达式中只要一个为非零则整个表达式的值 1。 |是按位或, sum =100; sum 59 【正确答案】 #include alloc.h struct student ptri- num=O free(ptri)
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1