1、国家二级( C语言)笔试模拟试卷 176及答案与解析 1 下列叙述中正确的是 _。 ( A)算法的效率只与问题的规模有关,而与数据的存储结构无关 ( B)算法的时间复杂度是指执行算法所需要的计算工作量 ( C)数据的逻辑结构与存储结构是一一对应的 ( D)算法的时间复杂度与空间复杂度一定相关 2 下列叙述中正确的是 _。 ( A)一个逻辑数据结构只能有一种存储结构 ( B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各 种存储结构不影响数据处理的效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 3 对下列二
2、叉树: 进行前序遍历的结果为 _。 ( A) DYBEAFCZX ( B) YDEBFZXCA ( C) ABDYECFXZ ( D) ABCDEFXYZ 4 下列关于栈的叙述正确的是 _。 ( A)栈按 “先进先出 ”组织数据 ( B)栈按 “先进后出 ”组织数据 ( C)只能在栈底插入数据 ( D)不能删除数据 5 从工程管理角度 ,软件设计一般分为两步完成,它们是 _。 ( A)概要设计与详细设计 ( B)数据设计与接口设计 ( C)软件结构设计与数据设计 ( D)过程设计与数据设计 6 下列描述中正确的是 _。 ( A)软件工程只是解决软件项目的管理问题 ( B)软件工程主要解决软件产
3、品的生产率问题 ( C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则 ( D)软件工程只是解决软件开发中的技术问题 7 下列选项中不符合良好程序设计风格的是 _。 ( A)源程序要文档化 ( B)数据说明的次序要规范化 ( C)避免滥用 goto语句 ( D)模块设计要保证高耦合、高内聚 8 下列叙述中正确的是 _。 ( A)软件测试的主要目的是发现程序中的错误 ( B)软件测试的主要目的是确定程序中错误的位置 ( C)为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作 ( D)软件测试是证明软件没有错误 9 在数据库设计中,将 E-R图转换成关系数据模型的过程属于
4、 _。 ( A)需求分析阶段 ( B)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 10 有三个关系 R、 S和 T如下:由关系 R和 S通过运算得到关系 T,则所使用的运算为 _。 ( A)并 ( B)自然连接 ( C)笛卡儿积 ( D)交 11 下列叙述中错误的是 _。 ( A)一个 C语言程序只能实现一种算法 ( B) C程序可以由多个程序文件组成 ( C) C程序可以由一个或多个函数组成 ( D)一个 C函数可以单独作为一个 C程序文件存在 12 以下不能定义为用户标 识符是 _。 ( A) Main ( B) _0 ( C) _int ( D) sizeof 13 若变量
5、均已正确定义并赋值,以下合法的 C语言赋值语句是 _。 ( A) x=y=5; ( B) x=n%2.5; ( C) x+n=i ( D) x=5=4+1; 14 有以下程序,其中 %u表示按无符号整数输出: main() unsigned int x=0xFFFF; /* x的初值为十六进制数 */ printf(“%un“, x); 程序运行后的输出结果是 _。 ( A) -1 ( B) 65535 ( C) 32767 ( D) 0XFFFF 15 以下叙述中错误的是 _。 ( A) C语言是一种结构化程序设计语言 ( B)结构化程序由顺序、分支、循环三种基本结构组成 ( C)使用三种基
6、本结构构成的程序只能解决简单问题 ( D)结构化程序设计提倡模块化的设计方法 16 设有定义 int a; float b;执行 scanf(“%2d%f“, &a, &b);语句时, 若从键盘输入 876543.0回车, a和 b的值分别是 _。 ( A) 876和 543.000000 ( B) 87和 6.000000 ( C) 87和 543.000000 ( D) 76和 543.000000 17 设变量 x和 y均已正确定义并赋值,以下 if语句中,在编译时将产生错误信息的是 _。 ( A) if(x+); ( B) if(x y&y!=0); ( C) if(x y)x- el
7、se y+: ( D) if(y 0); else x+; 18 已知字母 A的 ASC 代码值为 65,若变量 kk为 char型,以下不能正确判断出kk中的值为大写字母的表达式是 _。 ( A) kk =A&kk =Z ( B) !(kk =Akk =Z) ( C) (kk+32) =a&(kk+32) =z ( D) isalpha(kk)&(kk 91) 19 下列叙述中正确的是 _。 ( A) break语句只能用于 switch语句 ( B)在 switch语句中必须使用 default ( C) break语句必须与 switch语句中的 case配对使用 ( D)在 switc
8、h语句中不一定使用 break语句 20 设变量已正确定义,则以下能正确计算 f n!的程序段是 _。 ( A) f=0; for(i=1; i =n; i+)f*=i; ( B) f=1; for(i=1; i n; i+)f*=i; ( C) f=1; for(i=n; i 1; i+)f*=i; ( D) f=1; for(i=n; i =2; i-)f*=i; 21 有以下程序: main() intp8=11, 12, 13, 14, 15, 16, 17, 18,i=0, i=0; while(i+ 7)if(pi%2)j+=pi; printf(”%dn“, j); 程序运行后的
9、输出结果是 _。 ( A) 42 ( B) 45 ( C) 56 ( D) 60 22 以下程序段中的变量已正确定义: for(i=0; i 4; i+, i+) for(k=1; k3; k+); printf(“*“); 程序段的输出结果是 _。 ( A) * ( B) * ( C) * ( D) * 23 有以下程序: #include stdio.h main() char c1, c2, c3, c4, c5, c6; scanf(“%c%c%c%c“, &c1, &c2, &c3, &c4); c5=getchar(); c6=getchar(); putchar(c1); put
10、char(c2); printf(“%c%cn“, c5, c6); 程序运行后,若从键盘输入 (从第 1列开始 ) 123回车 45678回车 则输出结果是 _ ( A) 1267 ( B) 1256 ( C) 1278 ( D) 1245 24 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。 ( A)函数的实参和其对应的形参共占同一存储单元 ( B)形参只是形式上的存在,不会占用具体存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的 形参和实参分别占用不同的存储单元 25 有以下程序: fun(int x, int y)return(x+y); mai
11、n() int a=1, b=2, c=3,Sum; sum=fun(a+, b+, a+b), c+); printf(“%d“, sum); 执行后的输出结果是 _。 ( A) 6 ( B) 7 ( C) 8 ( D) 9 26 有以下程序: void f(int n, int * r) int r1=0; if(n%3=0)r1=n/3; else if(n%5=0)r1=n/5; else f(-n, &r1); *r=r1; main() intm=7, r; f(m,&r); printf(“%dn“, r); 程序运行后的输出结果是 _。 ( A) 2 ( B) 1 ( C) 3
12、 ( D) 0 27 有以下函数: fun(char * a, char *B) while(*a!=0)&(*b!=0)&(*a=*b) a+; b+; return(* a-*b); 该函数的功能是 _。 ( A)计算 a和 b所指字符串的长度之差 ( B)将 b所指字符串连接到 a所指字符串中 ( C)将 b所指字符串连接到 a所指字符串后面 ( D)比较 a和 b所指字符串的大小 28 有以下程序: voidf(int*x, int * y) int t; t= *x; *x= *y; *y=t; main() inta8=1, 2, 3, 4, 5, 6, 7, 8, i, *p,
13、*q; p=a; q=&a7; while(p) f(p, q); p+; q-; for(i=0; i 8; i+)printf(“%d, “, ai); 程序运行后的输出结果是 _; ( A) 8, 2, 3, 4, 5, 6, 7, 1, ( B) 5, 6, 7, 8, 1, 2, 3, 4, ( C) 1, 2, 3, 4, 5, 6, 7, 8, ( D) 8, 7, 6, 5, 4, 3, 2, 1, 29 以下数组定义中错误的是 _。 ( A) intx3 0; ( B) int x23 1, 2, 3, 4, 5, 6); ( C) intx3 1, 2, 3, 4, 5,
14、6; ( D) mtx23 1, 2, 3, 4, 5, 6; 30 若有定义: intw35,则以下不能正确表示该数组元素的表达式是 _。 ( A) *(*w+3) ( B) *(w+1)4 ( C) *(*(w+1) ( D) *(&w00+1) 31 有以下函数: int fun(char * s) char * t=s; while(*t+); return(t-s) 该函数的功能是 _。 ( A)比较两个字符串的大小 ( B)计算 s所指字符串占用内存字节个数 ( C)计算 s所指字符串的长度 ( D)将 s所指字符串复制到字符串 t中 32 设有定义: char p 1, 2, 3
15、, , *q p;,以下不能计算出一个 char型数 据所占字节数的表达式是 _。 ( A) sizeof(p) ( B) sizeof(char) ( C) sizeof(*q) ( D) sizeof(p0) 33 有以下程序,其中函数 f的功能是将多个字符串按字典顺序排序: #includestring h voidf(char*p, intn) char*t; int i, j; for(i=0; i n-1; i+) for (j=i+1; j n; j+) if(strcmp(pi, pj) 0) t=pi; pi=pj; pj=t; main() char*p5=“abc“ (
16、A) 2 ( B) 3 ( C) 6 ( D) 4 34 有以下程序: #include stdio.h iht fun(iht n, int*p) int f1, f2; if(n=1|, n=2)*p=1; else fun(n-1, &f1); fun(n-2, &f2); *p=f1+f2; main() int s; fun(3, &s); printf(“%dn“, s); 程序的运行结果是 _。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 35 若程序有宏定义: #define N 100则以下叙述中正确的是 _。 ( A)宏定义中定义了标识符 N的值为整数 100
17、( B)在编译程序对 C源程序进行预 处理时用 100替换标识符 N ( C)对 C源程序进行编译时用 100替换标识符 N ( D)在运行时用 100替换标识符 N 36 以下关于 typedef的叙述错误的是 _。 ( A)用 typedef可以增加新类型 ( B) typedef只是将已存在的类型用一个新的名字来代表 ( C)用 typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名 ( D)用 typedef为类型说明一个新名,通常可以增加程序的可读性 37 以下对结构体类型变量 td的定义中,错误的是 _。 ( A) typedef struct aa int n;
18、float m; AA; AA td; ( B) struct aa int n; float m; td; struct aa td; ( C) struct int n; float m; aa; ( D) struct int n; float m; td; struct aa td; 38 有以下程序: int a=4; int f(int n) int t=0; static int a=5; if(n%2) int a=6; t+=a+; elseint a; 7; t+=a+; return t+a+; main() int s=a, i=0; for(; i 2; i+)s+=
19、f(i); printf(“%dn“, s); 程序运行后的输出结果是 _。 ( A) 24 ( B) 28 ( C) 32 ( D) 36 39 若变量已正确定义,则以下语句的输出结果是 _。 s=32; s=32;printf(“%d“, s); ( A) -1 ( B) 0 ( C) 1 ( D) 32 40 有以下程序: #include stdio.h main() FILE *fp; int i, a6=1, 2,3, 4, 5, 6; fp=fopen(“d2.dat“, “w“); fprintf(fp, “%d%d%dn“, a0,a1, a2); fprintf(fp, “
20、%d%d%dn“, a3, a4, a5); fclose(fp); fp=fopen(“d2.dat“, “r“); fscanf(fp, “%d%dn“, &k, ( A) 1 2 ( B) 1 4 ( C) 123 4 ( D) 123 456 40 数据结构分为线性结构和非线性结构,线性表、栈和队列都属于 _。 40 按 “先进后出 ”原则组织数据的数据结构是 _。 40 软件危机 出现于 60年代末,为了解决软件危机,人们提出了 _的原理来设计软件,这就是软件工程诞生的基础。 40 _(黑箱或白箱 )测试方法完全不考虑程序的内部结构和内部特征。 40 数据库设计分为以下 6个设计阶段
21、:需求分析阶段、 _、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。 40 以下条件表达式可计算: 1+|a|的值,请填空。 a =0? 6 : 7 40 下面程序的运行结果是 _。 #include stdio.h main() int y, a; y=2, a=1; while(y-!=-1) doa*=y; a+; while(y-); printf(“%d, %d“, a, y); 40 以下程序的功能是根据输入的 “y”(“Y”)与 “n”(“N”),在屏幕上分别显示出 “This is YES.”与 “This is NO.”。空白处需要填入的内容是 #include st
22、dio.h void YesNo(char ch) switch(ch) casey: caseY: printf(“n This is YES.n“); casen: caseN: Printf(“nThis is NO.n“); main() char ch; printf(“nEnte 40 定义 int a=5, b;,则执行表达式 b=+a*-a之后,变量 b的值为 _。 40 以下程序的输出结果是 _。 #include stdio.h void swap(int *a, int *b) int *t; int i=3, j=5, *p=&i, *q=&j; swap(p, q);
23、 printf(“%d %dn“, *p, *q); 40 下面的程序实现的是从指针 p所指向的地址的 n个数中,找出最大的和最小的数据,请填空。 fun(int *p, int n) int *q; int max, min; max=min=*p; for(q=p; _; q+) if(*q max)max=*q; else if(*q min)min=*q; 40 下面程序的输出结果是 _。 main() static char a=“language“, b=“program“; char *ptrl=a, *ptr2=b; int k for(k=0; k 7; k+) if(*(p
24、trl+k)=*(ptr2+k) printf(“%c“, *(ptr1+k); 40 已知 bead指向一个带头结点的单向链表,链表中每个结点包含数据域 (data)和指针域 (next),数据域为整型。以下函数求出链表中所有连接点数据域的和值作为函数值返回。请在横线处填入正确内容。 int data; struct link *next; main() struct link *head; sam(_); stmct link *p; int s=0; p=head- next; while(p)s+=p- data; p=p- next; return(s); 40 以下程序的功能是从名
25、为 filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。 majn() FILE *fp; char ch; fp=fopen(_); ch=fgetc(fp); whle(!feof(fp) putchar(ch); ch=f8etc(fp); putchar(n); fclose(fp); 国家二级( C语言)笔试模拟试卷 176答案与解析 1 【正确答案】 B 【试题解析】 本题考查的是算法的基本概念,包括时间复杂度和空间复杂度,算法时间复杂度是指执行算法所需要的计算工作量,可以用执行算法的过程中所需基本运算的执行次数来度量。 2 【正确答案】 D 【试题解析】 数据的逻辑
26、结构反映数据元素之间的逻辑关系,数据的存储结构(也称数据的物理结构 )是数据的 逻辑结构在计算机存储空间中的存放形式。同一种逻辑结构的数据可以采用不同的存储结构,但影响数据处理效率。 3 【正确答案】 C 【试题解析】 二叉树的前序遍历 (DLR):首先访问根结点,然后遍历左子树,最后遍历右子树。 4 【正确答案】 B 【试题解析】 栈是限定在一端进行插入与删除的线性表,允许插入元素的一端为栈顶,允许删除元素的一端为栈底,故选项 C、 D是错误的。栈顶元素总是最后被插入的元素,也是最先被删除的元素;栈底元素则总是最先被插入而最后被删除的元素,即栈是按 “先进后出 ”的原则 组织数据的。 5 【
27、正确答案】 A 【试题解析】 从工程管理角度来看软件设计一般分为两步完成,分别是概要设计和详细设计。 6 【正确答案】 C 【试题解析】 软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程的目的就是要建造一个优良的软件系统,它所包含的内容概括为以下两点: 软件开发技术,主要有软件开发方法学、软件工具、软件工程环境; 软件工程管理,主要有软件管理、软件工程经济学。软件工程的主要思想是将工程化原则运用到软件开发过程,它包括 3个要素:方法、工具和过程。 7 【正确答案】 D 【试题解析】 程序设计的风格主要强调:清晰第一,效率第二。主要应注重和考虑下述一
28、些因素: 源程序文档化; 数据说明,其主要包括数据说明的次序规范化、说明语句中变量安排有序化、使用注释来说明复杂数据的结构; 语句的结构。在程序结构中各模块的内聚性越强,则耦合性越弱。优秀软件应高内聚,低耦合。 8 【正确答案】 A 【试题解析】 软件测试的目的:尽可能地多发现程序中的错误,不能也不可能证明程序没有错误,软件测试是一个发现错误而执行程序的过 程。软件调试的目的是发现错误的位置,并改正错误。 9 【正确答案】 C 【试题解析】 数据库的逻辑设计主要工作是将 E-R图转换成指定 RDBMS中的关系模式。需求解析阶段的任务是通过详细调查现实世界要处理的对象,充分了解原系统的工作概况,
29、明确用户的需求,然后在此基础上确定新系统的功能。概念设汁的目的则是解析数据间内在的语义关联,在此基础上建立一个数据的抽象模型。物理设计的主要目标是对数据库内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度以及有效利用存储空间。 10 【正确答案】 D 【试题解析】 关系 R与 S的并为由届于 R或属于 S的元组构成的集合组合;关系 R与 S的笛卡儿积是一个 6元关系,元素的个数是 23 6,由 R与 S的有序组组合而成;自然连接是连接的一个特例,要求两个关系有公共域,通过公共域的相等值进行连接。 11 【正确答案】 A 【试题解析】 一个 C语言程序可以实现多种算法。 C程序可包含一
30、个或多个函数,并可由多个程序文件组成。 12 【正确答案】 D 【试题解析】 C语言合法的用户标识符是:以字母或下划线开头,随后是字母、数字或下划线的任意长度的字 符串。因此选项 B和 C是合法的用户标识符。C语言区分大小写,选项 A的 Main不同于 main,是合法的用户标识符。选项 D的 sizeof是 C的保留关键字,不能用来做用户标识符。 13 【正确答案】 A 【试题解析】 对于取模运算符 “%”,不能用于浮点数,在表达式 B中, 2.5为浮点数,因此 B是错误的;在赋值表达式,其左值不能为表达式,因此 C是错误的;在赋值表达式,其左值不能为常数,因此 D是错误的,因为在 “5 4
31、+1”中, 5是常数,但出现在赋值表达式的左边。 14 【正确答案】 B 【试题解析】 %u的作用是按无符号的十进制形式输出整型数,整型无符号数的取值范围是在 0 65535之间,无符号数不能表示成小于 0的负数,十六进制数0xFFFF转换为二进制数是 16个 1,代表整数就是 65535。 15 【正确答案】 C 【试题解析】 结构化程序由三种基本结构组成:顺序结构、循环结构、选择结构,已经证明,由三种基本结构组成的算法结构可以解决任何复杂问题。 16 【正确答案】 B 【试题解析】 “%2d”指定输入数据所占宽度为 2, &是 C语言中的求地址运算符。 17 【正确答案】 C 【试题解析】
32、 if是 C语言的关键字,表达式两侧的圆括号不能少,最后一条语句足用花括号括起来的一组语句。选项 A和 B是在表达式后面跟了一条空语句,选项 D是在表达式后跟厂一组空语句。选项 C中的 x-是表达式而不是语句。所以在编泽时会出现错误信息。 18 【正确答案】 B 【试题解析】 本题主要考查逻辑运算。对于正确判断 kk为大写字母的表达式,当表达式为真时 kk为大写字母。大写字母的 ASCII代码值在 65 90之间,对应的小写字母的 ASCII代码值在 97 122之间,因此选项 A、 C都是正确的 表达式。选项 D中 isalpha(kk)用于判断 kk是否是字母, ASCII代码值小于 91
33、的字母为大写字母,因此选项 D是正确的表达式。选项 B中的表达式可以转换为 kkA&.kk Z,无法判断 kk中的值是否为大写字母。 19 【正确答案】 D 【试题解析】 break语句也可以在循环语句中使用;可以在 case之后的语句最后加上 break语句;在 switch语句中可以没有 default。 20 【正确答案】 D 【试题解析】 选项 A中, f初值设为 0。则执行循环体后,所得的乘积值始 终为0,不符合题意。选项 B中, for循环条件是 i n,则当 i为 n时即退出循环,所以求得的乘积值是 (n-1)!,也不符合题意。选项 C中, i的初值为 n,且 i在每次执行循环体
34、后都增加 1,则如果 n为大于 1的数,程序会陷入死循环。只有选项 D符合题意,求得 f的值为 n*(n-1)*(n-2)*2 ,即 n!。 21 【正确答案】 B 【试题解析】 由循环语句 “while(i+ 7)if(pi%2)j+ Pi; ”可知,当 “pi%2”为真,也就是非 0时,累加 pid到 j上。而 “pi%2”非 0, 也就是 Pi为奇数,因此循环是累加数组 Pi 11, 12, 13, 14, 15.16, 17, 18中,除 11外的奇数到 j上,输出结果应该是: 13+15+17 45。 22 【正确答案】 D 【试题解析】 本题考杏 for循环语句中嵌套 for循环语
35、句的情况。由于第一个for语句没有具体的执行语句,故当 i 0时, k 1时,执行一次语句 printf(“*”);,程序便会跳出整个循环,故运行结果为一个星号。 23 【正确答案】 D 【试题解析】 格式输入函数一般形式为: scanf(格式控制 ,地址表列 ),该函数段执行 scanf函数后 c1 1、 c2 2、 c3 3、 c4 n, getchar为字符输入函数,函数的值就是从输入设备得到的字符。 24 【正确答案】 D 【试题解析】 本题考查的重点是形参与实参的存储单元是否一致。 C语言中,函数的形参和实参是分别占用不同的存储单元的,因此,选项 D是正确的。 25 【正确答案】 C
36、 【试题解析】 在 fun(a+, b+, a+b), c+)函数中先计算括号内的 “(a+,b+, a+b)”逗号运算符,整个逗号表达式 最后的值为 5;接下来调用 fun()函数,此时原句变为 fun(5, c+)。运算 c+表示在使用完 c后再将 c的值加 1,函数的返回值为 8。 26 【正确答案】 A 【试题解析】 题目中定义了一个指针变量 r作为形参 f()的函数。在主函数main()中定义了两个变量 m和 r,同时给 m赋初值 7,调用函数 f(m, &r)并执行,函数 f()通过指针 r将最后的值返回。 27 【正确答案】 D 【试题解析】 本题的函数 fun的最后一个语句是
37、“return(*a-*b); ”,也就是返回指针 a所指单元的值与 指针 b所指单元的值的差。显然这不可能是计算 a和 b所指字符串的长度之差,因此选项 A的说法是错误的。由于函数中并没有出现。 a*b的赋值操作,所以选项 B的连接字符串的说法也是错误的。同理,由于没有 *a现 *a *b的赋值操作,所以选项 C的复制字符串的说法也是错误的。排除了三个选项后,就可以断定正确选项是 D。 28 【正确答案】 D 【试题解析】 本题的函数 f是将两个指针所指的两个单元中的数值对换。指针 p指向数组 a的第一个元素 a0而指针 q指向数组 a的元素 a7。调用 f将 p和 q所指元素值对换,也就是
38、 将 a0和 a7的值对换,对换后结果分别是 8、 1。 P+指向a1, q-指向 a6J,继续循环,调用 f将 a1和 a 6交换,结果变成 7、 1。以此类推,直到 p和 q相遇循环站束。数组 a的值由 1, 2, 3, 4, 5, 6, 7, 8变成了8, 7, 6, 5, 4, 3, 2, 1。输出 9结果应该是: 8, 7, 6, 5, 4, 3, 2, 1。 29 【正确答案】 B 【试题解析】 二维数组赋初值时,第一个维数即行数可以省略,但是列数不能省略。因此选项 A、 C正确。选项 D是按数据在二维数组中的顺序初始化。在选项 B中, 列维数的初始化格式跟定义的维数不一致,为错误
39、选项。 30 【正确答案】 B 【试题解析】 *(w+1)4越界了, (w+1)指向二维数组的第二行,因此 (w+1)4指向二维数组的第 5行导致越界;其他选项都能正确表示数组元素,其中选项 A:w03;选项 C: w10;选项 D: w01。 31 【正确答案】 C 【试题解析】 定义一个字符指针 t,并将字符指针 s的首地址赋给字符指针 t;通过 while语句将指针 t往下移到字符串最后一个字符后面的地址,指针 s始终指向首地址, 将末地址减去首地址可以计算出字符串的长度。 32 【正确答案】 A 【试题解析】 本题考查的重点是 sizeof()的运用。 sizeof用于返回其操作数 (
40、变量、类型 )相对应数据类型的字节数。因此,选项 A是错误的,因为 p是一个地址,它既不是一个数据类型,也不是数据变量。 33 【正确答案】 D 【试题解析】 函数 f的功能是将字符串数组中的每个字符串元素按照由小到大的顺序进行排列,调用 f(p, 5)后,字符串数组 p变为 “aabdfg”, “abbd”, “abc”,“cd”, “dcdbe”, 所以最后输出 p1即 “abbd“的长度应为 4。 34 【正确答案】 A 【试题解析】 本题考查的重点是理解递归函数。 fun()为递归函数,递归结束条件时 n为 1或 2,从而 fun(3, &s)得 fun(2, &s)+fun(1, &
41、s) 1+1 2,因此选项A是正确的。 35 【正确答案】 B 【试题解析】 本题考查的重点是宏定义。 #define指令定义一个标识符和一个串,编译程序在对 C源程序处理时,发现该标识符就都用该串替换,因此选项 B是正确的。 36 【正确答案】 A 【试题解 析】 本题考查的重点是 typedef的理解运用。 C语言允许通过 typedef为数据类型定义新名字,但是,它并非是生成新的数据类型,因此选项 A是错误的。 37 【正确答案】 C 【试题解析】 本题的考点是 C语言结构体的定义和自定义类型 typedef。对于选项 A,首先用 typedef将结构体自定义为 AA,再用 AA定义结构
42、体变量 td是正确的。对于选项 B首先定义结构体类型 aa,再用 struct aa定义结构体变量 td也是正确的。选项 D直接用无名结构体定义结构体变量 td也是正确的。而选项 C中,首先用无名 结构体定义了结构体变量 aa,再用结构体变量 aa去定义结构体变量 td是完全错误的。因此正确选项是 C。 38 【正确答案】 B 【试题解析】 在主函数 main()中定义了两个变量 s和 i,同时给 s赋初值 a 4, i赋初值 0。当 i=0时。执行 “s+ f(i); ”语句,调用 f()并将 i的初值 0传递给形参n。首先执行 if语句中内条件: n%2,若条件为假。则执行 else下的语
43、句, a 7,t7+0 7,使用 return返回 t, t 7+(a+) 7+5 12,此时 a运算完后自增 1,变为6;返回主函数中, s 4+12 16。当 i=1时,执行 “s+=f(i); ”语句,调用 f()并将 i的初值 1传递给形参 n。首先执行 if语句中的条件: n%2,条件为真,执行 if 39 【正确答案】 B 【试题解析】 为按二进制异或运算符,变量 s与其相等的数值异或的结果为 0。 40 【正确答案】 D 【试题解析】 本题首先以创建方式打开文件 d2.dat,两次调用 fprintf()函数把a0、 a1、 a2、 a3、 a4、 a5的值写到文件 d2.dat中,文件 d2.dat内容为“1, 2, 3回车 4, 5, 6”。然后把该文件关闭再以只读方式打开,文件位置指向文件头,再通过 fscanf()函数从小读取两个整数到 k和 n中。