1、国家二级( C语言)笔试模拟试卷 85及答案与解析 1 算法执行过程中,所需要的存储空间称为算法的 ( A)时间复杂度 ( B)计算工作量 ( C)空间复杂度 ( D)工作空间 2 下列关于队列的叙述中,正确的是 ( A)在队列中只能插入数据 ( B)在队列中只能删除数据 ( C)队列是先进先出的线性表 ( D)队列是先进后出的线性表 3 设有下列二叉树: 对此二叉树后序遍历的结果是 ( A) ABCDEF ( B) BDAECF ( C) ABDCEF ( D) DBEFCA 4 下面描述中,不符合结构 化程序设计风格的是 ( A)使用顺序、选择和重复 (循环 )三种基本控制结构表示程序的控
2、制逻辑 ( B)注重提高程序的可读性 ( C)模块只有一个人口和一个出口 ( D)使用 goto语句 5 在面向对象设计中,对象有很多基本特点,其中 “从外面看只能看到对象的外部特性,而对象的内部对外是不可见的。 ”这一性质指的是对象的 ( A)分类性 ( B)标识惟一性 ( C)多态性 ( D)封装性 6 用黑盒技术测试用例的方法之一为 ( A)因果图 ( B)逻辑覆盖 ( C)循环覆盖 ( D)基本路径测试 7 软 件需求分析阶段的工作可以分为 4个方面:需求获取、需求分析、编写需求分析说明书和 ( A)阶段性报告 ( B)需求评审 ( C)总结 ( D)都不正确 8 在数据库管理系统提供
3、的数据语言中,负责数据的查询及增、删、改等操作的是 ( A)数据定义语言 ( B)数据转换语言 ( C)数据操纵语言 ( D)数据控制语言 9 关系数据库的数据及更新操作必须遵循 ()等完整性规则。 ( A)实体完整性和参照完整性 ( B)参照完整性和用户定义的完整性 ( C)实体完整性和用户定义的完整性 ( D)实体完整性、参照 完整性和用户定义的完整性 10 实体一联系模型中,实体与实体之间的联系不可能是 ( A)一对一 ( B)多对多 ( C)一对多 ( D)一对零 11 用 C语言编写的代码程序 ( A)可立即执行 ( B)是一个源程序 ( C)经过编译即可执行 ( D)经过编译解释才
4、能执行 12 结构化程序由三种基本结构组成,三种基本结构组成的算法 ( A)可以完成任何复杂的任务 ( B)只能完成部分复杂的任务 ( C)只能完成符合结构化的任务 ( D)只能完成一些简单的任务 13 以下定义语句中正确的是 ( A) char a=Ab=B; ( B) float a=b=10.0; ( C) int a=10, *b= Printf(“%dn“,a,b) ; 程序运行后的输出结果是 ( A)错误信息 ( B) 666 ( C) 888 ( D) 666,888 20 有以下程序 main() int i; for(i=0;i 3;i+) switch(i) case0:p
5、rintf(“%d“,i); case2:printf(“%d“,i); default:printf(“%d“,i); 程 序运行后的输出结果是 ( A) 22111 ( B) 21021 ( C) 122 ( D) 12 21 有以下程序 main() int s=0,a=1,n; seanf(“%d“,a=a-2; while(a!=n); printf(“%dn“,s); 若要使程序的输出值为 2,则应该从键盘给n输入的值是 ( A) -1 ( B) -3 ( C) -5 ( D) 0 22 若有如下程序段,其中 s、 a、 b、 c均已定义为整型变量,且 a、 c均已赋值 (c大于
6、0) s=a; for(b=1;b c;b+)s=s+1; 则与上述程序段功能等价的赋值语句是 ( A) s=a+b; ( B) s=a+c; ( C) s=s+c; ( D) s=b+c; 23 有以下程序 main() int k=4, n=0; for(;n k;) n+; if(n%3!=0)continue; K-; printf(“%d,%dn“,k,n); 程序运行后的输出结果是 ( A) 1, 1 ( B) 2, 2 ( C) 3, 3 ( D) 4, 4 24 要求以下程序的功能是计算 main() int n;float s; s=1.0; for(n=10;n 1;n-)
7、 s=s+1/n; pfintf(“%6.4fn“,s); 程序运行后输出结果错误,导致错误结果的程序行是 ( A) s=1.0; ( B) for(n=10;n 1;n-) ( C) s=s+1/n; ( D) printf(“%6.4fn“,8); 25 已定义 ch为字符型变量,以下赋值语句中错误的是 ( A) ch=; ( B) ch=62+3; ( C) ch=NULL; ( D) ch=xaa; 26 若已定义的函数有返回值,则以下关于该函数调用叙述中错误的是 ( A)函数调用可以作为独立的语句存在 ( B)函数调用可以作为一个函数的实参 ( C)函数调用可以出现在表达式中 ( D
8、)函数调用可以作为一个函数的形参 27 有以下函数定义: void fun(int n, double x) 若以下选项中的变量都已正确定义并赋值,则 对函数 fun的正确调用语句是 ( A) fun(int y, double m); ( B) k=fun(10, 12.5); ( C) fun(x, n); ( D) void fun(n, x); 28 有以下程序 void fun(char *a, char *b) a=b; ( *a)+; main() char cl=A,c2=a,*p1,*p2; p1=p2: fun(p1,p2); printf(“%c%cn“,c1,c2);
9、程序运行后的输出结果是 ( A) Ab ( B) aa ( C) Aa ( D) Bb 29 若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是 ( A) int *i=NULL; scanf(“%d“,i; ( B) float *f=NULL; *f=10.5; ( C) char t=m, *c= L=0; 30 有以下程序 #include stdio.h main() printf(“%dn“, NULL); 程序运行后的输出结果是 ( A) 0 ( B) 1 ( C) -1 ( D) NULL没定义,出错 31 已定义 c为字符型变量,则下列语句中正确的是
10、 ( A) C=97; ( B) C=“97“; ( C) c=97; ( D) c=“a“; 32 以下不能正确定义二维数组的选项是 ( A) int a22=1,2; ( B) int a2=1,2,3,4; ( C) int a22=1,2,3; ( D) inta2=1,2,3,4; 33 以下选项中不能正确把 c1定义成结构体变量的是 ( A) typedef struct int red; int green; int blue; COLOR; COLOR cl; ( B) struct color cl int red; int green; int blue; ; ( C) s
11、truet color int red; int green; int blue; c1; ( D) struct int red; int green; int blue; cl; 34 以下能正确定义一维数组的选项是 ( A) int num; ( B) #define N 100 int numN; ( C) int num0 100; ( D) int N=100; int numN; 35 下列选项中正确的语句组是 ( A) char s8;s=“Beijing“; ( B) char*s;s=“Beijing“; ( C) char s8;s=“Beijing“; ( D) cha
12、r*s;s=“Beijing“; 36 已定义以下函数 fun(int *p) return *p; 该函数的返回值是 ( A)不确定的值 ( B)形参 p中存放的值 ( C)形参 p所指存储单元中的值 ( D)形参 p的地址值 37 下列函数定义中,会出现编译错误的是 ( A) max(int x,int y,int*z) *z=x y?xy; ( B) int max(int x,y) int z; z=x y?xy; return z; ( C) max(int x,int y) int z; z=x y?xy;return(z); ( D) int max(int x,int y) r
13、eturn(x y?xy); 38 有以下程序 #include stdio.h #define F(X,Y)(X)*(Y) main() int a=3,b=4; printf(“%dn“,F(a+, b+); 程序运行后的输出结果是 ( A) 12 ( B) 15 ( C) 16 ( D) 20 39 有以下程序 fun(int a,int b) if(a b) return(a) ; else return(b) ; main() int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); Printf(“%dn“,r); 程序运行后的输出结果是 ( A) 3 ( B
14、) 6 ( C) 8 ( D) 12 40 若有定义: iht*p3;,则以下叙述中正确的是 ( A)定义了一个基类型为 int的指针变量 p,该变量具有三个指针 ( B)定义了一个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int的指针 ( C)定义了一个名 为 *p的整型数组,该数组含有三个 int类型元素 ( D)定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int类型元素 41 以下程序中函数 scmp的功能是返回形参指针 s1和 s2所指字符串中较小字符串的首地址 #include stdio.h #include string.h char *scmp
15、(char *s1,char *s2) if(strcmp(s1,s2) 0) return(s1); else return(s2); main() int i;char string20,str320; for(i=0;i 3;i+)gets(stri); strcpy(string, scmp(str0,str1); /*库函数 strcpy对字符串进行复制 */ strcpy(string, scmp(string, str2); printf(“%sn“,string); 若运行时依次输入: abcd、 abba和 abc三个字符串,则输出结果为 ( A) abcd ( B) adb
16、a ( C) abc ( D) abca 42 有以下程序 struct s int x,y;data2=10,100,20,200; main() struct s*p=data; printf(“%dn“, +(p- x); 程序运行后的输出结果是 ( A) 10 ( B) 11 ( C) 20 ( D) 21 43 有以下程序段 main() int a=5,*b,*c; c=b=p2+; 函数的功能是 ( A)将 p1所指字符串复制到 p2所指内存空间 ( B)将 P1所指字符串的地址赋给指针 p2 ( C)对 p1和 p2两个指针所指字符串进行比较 ( D)检查 P1和 p2两个指针
17、所指字符串中是否有 0 46 有以下程序 main() int x=3, y=2, z=1; printf(“%dn“,x/yi9;i+)pi=i+1; printf(“%dn“,“a12); 程序运行后的输出结果是 ( A) 3 ( B) 6 ( C) 9 ( D) 2 50 有以下结构体说明和变量定义,如图所示,指针 p、 q、 r分别指向一个链表中的三个连续结点 。 struct node int data; tract node * next; *p, *q, *r;现要将 q和 r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 ( A) r- next=q; q-
18、next=r- next; p- next=r; ( B) q- next=r- next; p-next=r; r- next=q; ( C) p- next=r; q- next=r- next; r- next=q; ( D) q- next=r- next; r- next=q; P- next=r; 51 算法的复杂度主要包括【 】复杂度和空间复杂度。 52 数据的【 】结构在计算机存储空间中的存放形式称为数据的存储结构或物理结构。 53 对于软件测试,从是否需要执行被测软件的角度,可以分为静态测试和动态测试。代码检查属于【 】测试。 54 数据库的设计通常可以分为 4个步骤:需求分
19、析、概念设计、【 】和物理设计。 55 一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体 “项目主管 ”与实体 “项目 ”的联系属于【 】。 56 以下程序运行后的输出结果是【 】。 main() int x=10, y=20, t=0; if(x=y)t=x; x=Y; Y=t; printf(“%d, %dn”, x, y); 57 以下程序运行后的输出结果是【 】。 main() int x=15; while(x 10&x 50) x+; if(x/3)x+; break; else continue; printf(“%dn”, x); 58 有以下程序: #includ
20、e stclio h main() char c; while(c=getchar()!=?)putchar(-c); 程序运行时,如果从键盘输入: Y?N?回车,则输出结果为【 】。 59 以下程序运行后的输出结果是【 】。 void fun(int x, int y) x=x+y; Y=x-y; x=x-y; printf(“%d, %d”, x, y); main() int x=2, y=3; fun(x, y); printf(“%d, %dn”, x, y); 60 以下函数的功能是计算 请填空。 double fun(int n) double s=0.0, fac=1.0; i
21、nt i; for(i=1; i =n; i+) fac=fac 【 】; s=s+fac; return s; 61 下面程序的运行结果是:【 】。 #define N 10 #define s(x)x*x #define f(x)(x*x) main() int i1, i2; i1=1000/s(N); i2=1000/f(N); printf(“%d%dn”, i1, i2); 62 下面程序的运行结果是:【 】。 void swap(int *a, int*b) int *t; t=a; a=b; b=t; main() intx=3, y=5, *p=&x, *q=&y; swap
22、(p, q); printf(“%d%dn”, *p, *q); 63 下面程序的运行结果是:【 】。 typedef union student char name10; long sno; char sex; float score4; STU; main() STU a5; Printf(“%dn”, sizeof(a); 64 若 fp已正确定义为一个文件指针, d1 dat为二进制文件,请填空,以便为“读 ”而 打开此文件: fp=fopen ( 【 】 ); 65 设有定义: int n, *k=&n;以下语句将利用指针变量 k读写变量 n中的内容,请将语句补充完整。 scanf(
23、“%d”, 【 】 ); printf(“%dn”, 【 】 ); 66 fun函数的功能是:首先对 a所指的 N行 N列的矩阵,找出各行中的最大的数,再求这 N个最大值中的最小的那个数作为函数值返回。请填空。 #include stdio h #define N 100 int fun(int(*a)N) int row, col, max, min; for(row=0; row N; row+) for(max=arow0, col=1; col N; col+) if( 【 】 )max=arowcol; if(row=0)min=max; else if( 【 】 )min=max;
24、 return min; 67 函数 sstrcmp()的功能是对两个字符串进行比 较。当 s所指字符串和 t所指字符串相等时,返回值为 0;当 s所指字符串大于 t所指字符串时,返回值大于 0;当 s所指字符串小于 t所指字符串时,返回值小于 0 (功能等同于库函数 strcmp()。请填空。 #include stdio h int sstrcmp(char *s, char *t) while(*s&*t&*s= 【 】 ) s+; t+; return 【 】; 国家二级( C语言)笔试模拟试卷 85答案与解析 1 【正确答案】 C 【试题解析】 算法执行时所需要的存储空间,包括算法程
25、序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间,其中额外空间还包括算法程序执行过程的工作单元以及某种数据结构所需要的附加存储空间。这些存储空间共称为算法的空间复杂度。 2 【正确答案】 C 【试题解析】 对队列可以进行插入和删除数据的操作,只是插入数据只能在队尾,删除数据只能在队头。所以队列是先进先出的线性表。 3 【正确答案】 D 【试题解析】 二叉树的遍历分为先序、中序、后序三种不同方式。本题要求后 序遍历,遍历顺序应该为:后序遍历左子树 -后序遍历右子树 -访问根结点。按照定义,后序遍历序列是 DBEFCA。 4 【正确答案】 D 【试题解析】 在结构化程序
26、设计中,应严格控制使用 GOTO语句,必要时才可以使用。 5 【正确答案】 D 【试题解析】 从外面看只能看到对象的外部特性,而对象的内部,即处理能力的实行和内部状态,指的是对象的封装性。 6 【正确答案】 A 【试题解析】 黑盒测试主要方法有等价值划分法、边界值分析法、错误推测法、因果图法等。白盒测试的主要方法有逻辑覆盖 、基本路径测试循环覆盖等。只有A属于黑盒测试。 7 【正确答案】 B 【试题解析】 需求分析的 4个方面是:需求获取、需求分析、编写需求分析说明书和需求评审。 8 【正确答案】 C 【试题解析】 在数据库管理系统提供的数据语言中,数据操纵语言负责数据的查询及增、删、改等操作
27、。 9 【正确答案】 D 【试题解析】 关系模型中包括关系的数据结构、关系的操纵和关系中的数据约束。关系完整性约束即数据完整性,包括实体完整性、参照完整性和用户自定义完整性。 10 【正确答案】 D 【试题解析】 实体联系模型中实体与实体之间的联系有一对一 (1: 1),一对多或多对一 (1: m或 m: 1),多对多 (m: n)其中一对一是最常用的关系。 11 【正确答案】 B 【试题解析】 C语言是一种高级语言, C语言源程序经过 C语言编译程序编译之后,生成一个后缀为 OBJ的二进制文件 (称为目标文件 ),最后还要由称为 “连接程序 ”(Link)的软件,把此 OBJ文件与 c语言提
28、供的各种库函数连接在一起,生成一个后缀 EXE的可执行文件。显然 C语言不能立即执行。 12 【正确答案】 A 【试题解析】 C程序由顺序结构、选择结构和循环结构三种基本的结构组成,这三种结构可以组成任何复杂的 C程序,即可以完成任何复杂的任务。 13 【正确答案】 C 【试题解析】 选项 A中定义两个变量 a和 b,并赋初值, C语言中可以同时定义多个变量,但变量之间必须用 “, ”隔开,显然,选项 A中少了一个逗号 “, ”;选项 B中定义变量时用了连续的赋值语句,这在定义变量是不正确的;选项 D定义一个指针,然后定义了一个变量并让这个变量的初值为该指针变量,显然这这时的指针变量还没初始化
29、就被赋值给变量。 14 【正确 答案】 D 【试题解析】 在 C语言中,合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或者下划线,如: acd、 d_ad、 _adf124、 _124等都是合法的标识符号。而 2asdf,_sd/=都不是合法的标识符。在 C语言中大写字母和小写字母被认为是两个不同的字符,如: ACD和 acd是两个不同的标识符号。 15 【正确答案】 C 【试题解析】 选项 A中不是合法的赋值语句,将最右边的第一个赋值表达式加括号即为 a=b+(b=b+)才正确;选项 B中运算符 “%”的对象必须是整型,而在选项 B中 (int)a+b为 double型;选项
30、 a, b都为 double“=”应该改为 “=”。 16 【正确答案】 D 【试题解析】 主函数中首先定义了整型变量 m、 n和 x,并给 m和 n赋初值为 3和 4,接着执行两条赋值语句,第一条 x=-m+等价于 x=-(m+),其值即为 -3,第二条 x=x+ 8/+n等价于 x=x+8/(+n),即为 x=-3+8/5=-2,因此最后输出 x的值为 -2。 17 【正确答案】 A 【试题解析】 程序中的第一个输出语句输出表达式 +a的值,该 +a是在使用 a之前, 先使 a的值加 1,即为 a加 1为字符 b,此时 a的值为 b,所以第一个输出语句输出的值为 b,第二个输出语句中输出的
31、 b的值,这时 b的值为表达式 a+的值, a+是在使用 a之后 (此时 a的值为 b,所以赋给 b的值为 B) ,使 a的值加因此第二个输出的值也为 b。 18 【正确答案】 C 【试题解析】 程序中定义了两个整型变量,一个用八进制表示,一个用十进制表示,输出语句中要求 m, n都为八进制输出,显然 m原样输出为 256, n的值转换为八进制输出 (256的八进制为 400)。 19 【正确答案】 B 【试题解析】 程序中的 printf()函数的输出格式部分只说明了一个 %d,而输出成员列表却有两个成员 a和 b,在这里将只输出第一个成员 a值为 666。 20 【正确答案】 C 【试题解
32、析】 程序中 for循环了三次,第一次 i=0,执行 switch语句中 case0:分支,直到遇到 default语句,退出 switch,这里共执行了三个输出语句分别输出0, 0, 0,第二次循环 i=1, switch语句中没有匹配的分支,故只执行 default语句输出 1,退出 switch语句;第三次循环 i=2,从 switch语句中的 case2: 开始执行,共执行了两个输出语句输出 2、 2。最后输出的结果为 000122。 21 【正确答案】 B 【试题解析】 根据题目要求,最后要使输出的 s值为 2,在程序中改变。的值语句只有循环体中的 s+=1;语句,而初始 9的值为
33、o,显然要使 s的值变为 2,该语句必须执行,两次,即 do-while循环中的循环体要执行两次,而在 do-while中,首先不进行条件而执行 do后面的循环体语句,然后再判断 while循环条件。所以说不管循环判断条件是否为真 s+=1;语句至少执行一次,根据分析,只需要 while后面括号的循环 判断表达式的值为真一次且只能为真一次,将四个选项中的内容依次代入该程序中不难得到只有 n=-3刚好使循环判断条件 a!=n为真一次。 22 【正确答案】 B 【试题解析】 本程序中 for循环的次数为 c-1+1共循环了 c次,而每循环一次 s的值加 1,所以 s的值为 s+c。而最开始 s的值
34、为 a。 23 【正确答案】 C 【试题解析】 在本程序的 for循环中,用到了一个 continue语句, continue语句的作用是停止本次循环,即不执行循环体内 continue语句后面的其他语句,继续下次循环的条件判 断。首先在 for循环中 n自加 1(值变为 1),然后执行后面的 if语句,由于 if语句后面括号的表达式 (1%3!=0)的值为真,程序执行 continue语句,回到 for循环的开始部分,并且判断 for循环中的条件表达式 (n k)为真,重复执行 “n+; ”语句,如此循环直到 n=3时, if语句判定条件中表达式 (3%3!=0)的值为假,程序执行 if语句
35、后面的 “k-; ”语句,此时 k的值为 3,不满足 “n k”,退出 for循环。故最后的 k和 n的值为 3和 3。 24 【正确答案】 C 【试题解析】 程序中由于 n为整型, 所以 1/n的结果始终为 0,故程序最后输出的结果为 0,其结果错误,原因为在表达式 1/n中 1和 n均为整型,所以应该将 1改为 1.0,这样表达式 1.0/n的值不为 0,为该数学表达式的值,因此我们可以知道导致程序运行后输出结果错误的行为 s=s+1/n。 25 【正确答案】 A 【试题解析】 给字符型变量赋值只能赋一个字符,包括转义字符。选项 A中 “”为转义字符应该用 “|”来表示;选项 B中将一个整
36、数赋值给字符变量;选项 C将一个空值赋值给字符变量;选项 D将一个用十六进制数表示的转义字符赋值给字符变量。 26 【正确答案】 D 【试题解析】 在 c语言中规定,无返回值的函数调用,可以作为表达式或表达式的一部分,也可以作为一条语句;而有返回值的函数调用只能作为一个函数的实参 (即将其返回值传给相应的形参 ),而不能作为形参 (因为形参是在函数定义时说明的 )。 27 【正确答案】 C 【试题解析】 选项 A中应将 y和 m前面的函数的类型说明符去掉;选项 B中函数传了 2个参数,其中一个为整型一个为浮点型,而 fun()函数在定义时声明的 2个参数,一个为整型一个为双精度型,其参数类型不
37、一致;选项 D在调用函数时,不应该 再声明其返回类型。 28 【正确答案】 A 【试题解析】 指针作为函数参数的运用,经过分析得知 fun()函数的功能:将形参 a指向形参 b所指的存储空间,然后使形参 a指向变量的值加 1。在主函数中定义了字符型指针变量 p1和 p2,并让它们分别指向 “c1和 c2。然后将 p1、 p2作为实参传递给形参 a、 b。在 fun()函数中,首先让指针变量 p1指向 P2,然后 P1指向的存储空间的值加 1,即让变量 c2加 1为 “b”,而 c1的值没有被改变,仍然是“A”。 29 【正确答案】 D 【试题解析】 选项 A定义了 一个整型变量 i,并且初始化
38、让它指向 NULL,接着通过 scanf()函数,改变 i指向的存储空间的值,选项 A中首先定义了整型指针变量 i并初始化为 NULL,即表示指针 i不指向任何内存,即此时程序还没有为 i在内存中开辟存储单元,而在 scanf()函数中第二个参数是地址参数,显然在这里 i不是表示地址,所以下面的 scanf(“%d”, i)语句是不正确的;选项 B定义了一个浮点型变量 f并初始化让它指向 NULL,而当一个指针变量指向 NULL以后不能再给它赋值,而接下来的程序中为其赋了一值;选项 C中首先定义了一个字符变量 t并给它赋初值 m,然后定义一个字符型指针 c并让它指向了变量 t,这一部分正确,然
39、后接着用了一个语句 “*c=&t; ”应该将该语句中 c前的 “*”去掉。 30 【正确答案】 A 【试题解析】 在 C语言中 NULL的 ASCII码值为 0,而输出函数要求以整型格式输出,故最后的输出数为 0。 31 【正确答案】 C 【试题解析】 用单引号括起来的一个字符称为字符常量,而选项 B和选项 D中用的是双引号,而用双引号括起来的字符为字符串常量。因为在 c语言中,字符常量在存储时,并不是把该字符本身放到内存单元中去, 而是将该字符的相应的ASCII代码放到存储单元中,所以 C语言使字符型数据和整型数据之间可以通用。而选项 A中,给字符型变量赋值时只能赋一个字符,而 9, 7作为
40、字符时为两个字符且必须分别用单引号括起来。 32 【正确答案】 D 【试题解析】 二维数组的定义和初始化在定义中如果对所有元素赋初值,其第一维的长度可以省略;二维数组初始化也可以只对每行或前若干行的前若干个元素赋初值;在二维数组定义时不能省略第二维的长度。 33 【正确答案】 B 【试题解析】 结构体类型的定义格式为: stract结构体名 成员说明列表 ; 结构体变量的定义有 3种形式:第一种,定义结构体类型的同时定义结构体变量,如: street结构体名 成员说明列表 变量;第二种,先定义一个结构体类型,然后使用该类型来定义结构体变量,如: strect student成员说明列表 ; s
41、tudent变量;第三种,定义一个无名称的结构体类型的同时定义结构体变量,如: strect student成员说明列表 变量;。 34 【正确答案】 B 【试题解析】 选项 A定义数组时省略了长度,而 C语言中规定,只有在定义 并同时进行初始化时,数组的长度才可以省略,数组的长度为初始化时候的成员个数;在 C语言中规定,数组的长度必须是一个整数或整型常量表达式;定义时数组的长度不能使用变量表示。 35 【正确答案】 D 【试题解析】 字符数组初始化可以有两种方式:方式一,按单个字符的方式赋初值。方式二,把一个字符串作为初值赋给字符数组。选项 A定义的字符数组长度为 8,由于最后还要加一个 “
42、、 0”做结束标志,所以赋给他的字符串长度应小于等于 7;在给字符数组赋初值的时候,应该用花括号 “”和 “将字符串括起来。将字符型指针变量指 向字符串也有两种方法,一是在定义指针变量时就给其赋初值,比如: char*p=“student”;二是给指针变量赋值,比如: p=“student”; (p已经被定义为字符型指针变量; )。 36 【正确答案】 C 【试题解析】 函数的返回值应该为 return后面的表达式的值,在本题中的表达式为 *p, *p指的是形参 p所指存储单元中的值。 37 【正确答案】 B 【试题解析】 本题考核的知识点是函数的定义方法。选项 B中在说明形参时,省略了第二个
43、参数的类型,故选项 B编译不能通过。 38 【正确 答案】 A 【试题解析】 在程序中先用表达式将宏替换掉,则输出语句中的表达式为 (a+) *(b+),而 a+的值为 3, b+的值为 4。因此最后的值为 3*4=12。 39 【正确答案】 D 【试题解析】 主函数中首先定义了 4个整型变量 x、 y、 z和 r,并分别给 x、 y、z赋初值为 3、 8、 6,接着调用一个 fun()函数,并将返回值赋给变量 r。其中将fun(x, y)函数的返回值和 2*z作为 fun()函数的两个参数。在内层 fun(x, y)函数中,将 x的值和 y的值传给形参 a和 b,此时 a和 b的值分别为 3
44、和 8,执行 if语句,由于 if后面判断条件表达式 “a b”为假,所以执行 else后面的语句,返回值为 8。此时,外层 fun(x, y)函数两个参数为 8和 2*z=12,所以,的赋值语句相当于 r=fun(8, 12),同上分析可知 fun(8, 12)返回值为 12,因此最后 r的值为 12。 40 【正确答案】 B 【试题解析】 指针数组也是一种数组,所有有关的概念都适用于它。但它与普通的数组又有区别,它的数组元素是指针类型,只能用来存放地址。其格式为:存储类型数据类型 *指针数组名 长度 1,其含义为:定义了一个长 度 1的数组,其中数组元素为相应存储类型的指针。 41 【正确
45、答案】 A 【试题解析】 字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符 ASCII码值较大时,该字符所在的字符串就是较大的字符串。主函数中调用了函数 scmp(),分析不难知道该函数的作用是返回参加比较的两个字符串中的较小的字符串,它的主函数中定义了一个二维字符数组来存放三个字符串。接着通过 for循环给每个字符串赋值,赋值后三个字符串分别为 “abcd”、 “abba”、“abc”,接着比较 str0和 str1的大小, 根据字符串大小比较标准可知 str0较小,然后通过函数 strcpy()把 str0中的字符串,拷贝到 string中,然后比较 string和 st
46、r2)的大小,比较结果是 string较小,最后输出 string的值为 “abcd”。 42 【正确答案】 B 【试题解析】 本题中定义了一个结构体数组 data2并初始化,主函数中定义了一个结构体类型指针变量并让它指向 data的首地址,由于 p指向第一个元素的地址,所以 p - x相当于 data0 x即为 10,所以 +(p- x)后的值为 11。 43 【正确答案】 C 【试题解析】 指向指针的指针,主函数中定义了一个整型变量 a,一个整型指针变量 b和一个二级指针变量 c,并让 c指向指针变量 b,让指针 b指向整型变量a,所以 *c为变量 a的值。 44 【正确答案】 C 【试题
47、解析】 二维数组的初始化及库函数 strlen()的应用,主函数中定义了一个二维字符数组并初始化,初始化后的结果为 str0=“Hello”、 str1=“Beijing”,然后定义一个字符指针变量 p并让它指向数组的首地址,即指向 str0,而在 C语言中无论是一维还是 多维数组,其元素在内存中都是顺序存放的,故 p+20后指针指向 str1,所以 strlen(p +20);返回的是 str1中的字符串的长度,即 Beijing的长度为 7,所以最后输出的值为 7。 45 【正确答案】 A 【试题解析】 fun()函数中声明了两个字符串指针作为形参,在其函数体中用了一个 while循环,首先 while括号内表达式 *p2=*p1是将 p1所指的内容赋值到 P2所指的存储空间中,然后再判断是否为 0,表达式的值为真时,执行循环体,指针p1和指针 P2分别下移一位,当 p1指向字 符 0时,表达式的值为假,