1、2006 年 9月国家二级( C语言)笔试真题试卷及答案与解析 1 下列选项中不符合良好程序设计风格的是 _。 ( A)源程序要文档化 ( B)数据说明的次序要规范化 ( C)避免滥用 goto语句 ( D)模块设计要保证高耦合、高内聚 2 从工程管理角度,软件设计 般分为两步完成,它们是 _。 ( A)概要设计与详细设计 ( B)过程控制 ( C)软件结构设计与数据设计 ( D)程序设计与数据设计 3 下列选项中不属于软件生命周期开发阶段任务的是 _。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 4 在数据库系统中,用户所见数据模式为 _。 ( A)概念模式 (
2、B)外模式 ( C)内横式 ( D)物理模式 5 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和 _。 ( A)编码设计 ( B)测试阶段 ( C)运行阶段 ( D)物理设计 6 设有如下三个关系表 下列操作中正确的是 _。 ( A) T=RS ( B) R S ( C) T=RS ( D) T=R/S 7 下列叙述中正确的 _。 ( A)一个 算法的空间复杂度大,则其时间复杂度也必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一今算法的时间复杂度大,则其空间复杂度必定小 ( D)上述三种说法都不对 8 在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较
3、的次数为_。 ( A) 63 ( B) 64 ( C) 6 ( D) 7 9 数据库技术的根本目标是解决数据的 _。 ( A)存储问题 ( B)共享问题 ( C)安全问题 ( D)保护问题 10 对下列二叉树进行中序遍历的结果是 _。 ( A) ACBDFEG ( B) ACBDFGE ( C) ABDCGEF ( D) FCADBEG 11 下列叙述错误的是 _。 ( A)一个 C语言程序只能实现 种算法 ( B) C程序可以由多个程序文件组成 ( C) C程序可以由 个或多个函数组成 ( D)一个 C函数可以单独作为 个 C程序文件存在 12 下列叙述中正确的是 _。 ( A)每 个 C程
4、序文件中都必须要有 个 main()函数 ( B)在 C程序中 main()函数的位置是固定的 ( C) C程序中所有函数之间都可以相互调用,与函数所在位置 无关 ( D)在 C程序的函数中不能定义另 个函数 13 下列定义变量的语句中错误的是 _。 ( A) int _int; ( B) double int_; ( C) char For; ( D) float US$; 14 若变量 x、 y己正确定义并赋值,以下符合 C语言语法的表达式是 _。 ( A) x,y=x- ( B) x 1=y ( C) x=x 10=x y ( D) double(x)/10 15 以下关于逻辑运算符两侧
5、运算对象的叙述中正确的是 _。 ( A)只能是整数 0或 1 ( B)只能是整数 0或非 0整数 ( C)可以是结构体类型的数据 ( D)可以是任意合法的表达式 16 若有定义 int x,y;并已正确给变量赋值,则以下选项中与表达式 (x-y)?(x ):(y )中的条件表达式 (x-y)等价的是 _。 ( A) (x-y O) ( B) (x-y O) ( C) (x-y 0|x-y 0) ( D) (x-y=0) 17 有以下程序 main() int x,y,z; x=y=1; z=x ,y , y; printf(“%d,%d,%dn“,x,y,z); 程序运行后的输出结果是 _。
6、( A) 2,3,3 ( B) 2,3,2 ( C) 2,3,1 ( D) 2,2,1 18 设有定义: int a; float b;执行 scanf(“%2d%f“, a=10; /* 给 a赋值 b=20; 给 b赋值 */ printf(“a b=%dn“,a b); /* 输出计算结果 */ 程序运行后的输出结果是 _。 ( A) a b=10 ( B) a b=30 ( C) 30 ( D)出错 20 在嵌套使用 if语句时, C语言规定 else总是 _。 ( A)和之前与其具有相同缩进位置的 if配对 ( B)和之前与其最近的 if配对 ( C)和之前与其最近的且不带 else
7、的 if配对 ( D)和之前的第 个 if配对 21 下列叙述中正确的是 _。 ( A) break语句只能使用 switch语句 ( B)在 switch语句中必须使用 default ( C) break语句必须与 switch语句中的 case配对使用 ( D)在 switch语句中,不一定使用 break语句 22 有以下程序 main() int k=5; while(-k) printf(“%d“,k-=3); printf(“n“); 执行后的输出结果是_。 ( A) 1 ( B) 2 ( C) 4 ( D)死循环 23 有以下程序 main() int i; for(i=1;i
8、 =40;i ) if(i %5=0) if( i%8=0) printf (“%d“,i); printf(“n“); ( A) 5 ( B) 24 ( C) 32 ( D) 40 24 以下选项中,值为 1的表达式是 _。 ( A) 1-0 ( B) 1-、 0 ( C) 1-0 ( D) 0-0 25 有以下程序 fun(int x,int y)return(x y); main() int a=1,b=2,c=3,sum; sum=fun(a ,b ,a+b),c ); printf(“%dn“,sum); ( A) 6 ( B) 7 ( C) 8 ( D) 9 26 有以下程序 ma
9、in() char s=“abcde“; s =2; printf(“%dn“,s0); 执行后的结果是 _。 ( A)输出字符 a的 ASC 码 ( B)输出字符 c的 ASC 码 ( C)输出字符 c ( D)程序出错 27 有以下程序 fun(int x,int y) static int m=0,i=2; i+=m 1; m=i x y; return m; main() int j=1,m=1,k; k=fun(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%dn“,k); 执行后的输出结果是 _。 ( A) 5,5 ( B) 5,11 ( C
10、) 11,11 ( D) 11,5 28 有以下程序 fun(int x) int p; if(x=0|x=1) return(3); p=x-fun(x-2); return p; main0 printf(“%dn“,fun(7); 执行后的输出结果是 _。 ( A) 7 ( B) 3 ( C) 2 ( D) 0 29 在 16位编译系统上,若有定义 int a=10,20,30,*p=,少逗号当执行 p ;后,下列说法错误的是 _。 ( A) p向高地址移了一个字节 ( B) p向高地址移了一个存储单元 ( C) p向高地址移了两个字节 ( D) p与 a 1等价 30 有以下程序 ma
11、in0 int a=l,b=3,c=5; int *p 1 = *p-pl*(*p2); print“%dXn“,c); 执行后的输出结果是 _。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 31 若有定义: int w35;,则以下不能正确表示该组元素的表达方式是 _, ( A) *(*w 3) ( B) *(w 1)4 ( C) *(*(w 1) ( D) *( ( B) int fun(double, int); ( C) int fun(double *x, int n); ( D) iht fun(double*,int*); 33 若有定义语句: int k23,*pk
12、3;,则以下语句中正确的是 _。 ( A) pk=k; ( B) pk0= ( C) pk=k0; ( D) pk1=k; 34 有以下程序 void change(int k)k0=k5; main() int x10=1,2,3,4,5,6,7,8,9,10,n=0; while(n =4) change( n ; for(n=0;n 5;n ) printf(“%d“,xn); printf(“n“); 程序运行后输出的结果是_。 ( A) 678910 ( B) 13579 ( C) 12345 ( D) 62345 35 若要求定义具有 1O个 int型元素的一维数组 a,则以下定义
13、语句中的错误的是_。 ( A) #define N 10 int aN; ( B) #define n 5 int a2*n ( C) int a5 5; ( D) int n=10,an; 36 有以下程序 main() int x32=0,i; for(i=0;i 3;i ) scanf(“%d“,xi); printf(“%3d%3d%3dn“,x00,x01,x10); 若运行时输入: 246回车,则输出结果为 _。 ( A) 200 ( B) 204 ( C) 240 ( D) 246 37 有以下程序 main() char s=“aeiou“,*ps; ps=s; printf(
14、“%cn“,*ps4); 程序运行后输出的结果是 _。 ( A) a ( B) e ( C) u ( D)元素 s4的地址 38 在以下语句中存在语法错误的是 _。 ( A) char ss620; ss1=“right?“; ( B) char ss20=“fight?“; ( C) char *ss6; ss1=“right?“; ( D) char *ss=“right?“; 39 若有定义: char *x=“abcdefghi“;,以下选项中正确运用了 strcpy函数的是_。 ( A) char y10; strcpy(y,x4); ( B) char y10; strcpy( y
15、, ( C) char y10,*s; strcpy(s=y 5,x); ( D) char y10,*s; strcpy(s=y 1,x 1); 40 有以下程序 iht add (int a, int b) return(a b); mian() int k,(*f)(),a=5,b=10; f=add; 则以下函数调用语句错误的是 _。 ( A) k=(*f)(a,b); ( B) k=add(a,b); ( C) k=*f(a,b); ( D) k=f(a,b); 41 有以下程序 #include string.h main(int argc, char *argv) int i=1
16、,n=0; while(i argc) n=n strlen(argvi);i ; printf(“%dn“,n); 该程序生成的可执行文件名为: proc.exe。若运行时输入命令行: proc 123 45 67 则程序的输出结果是 _。 ( A) 3 ( B) 5 ( C) 7 ( D) 11 42 有以下程序 void fun2 (char a,char b) printf(“%c%c“,a,b); char a=A,b=B; void fun1() a=C; b=D; main() fun1(); printf(“%c%c“,a,b); fun2 (E,F); 程序的运行结果是_。
17、( A) CDEF ( B) ABEF ( C) ABCD ( D) CDAB 43 有以下程序 #include stdio.h #define N 5 #define M N 1 #define f(x) (x*M) main() int i1,i2; i1=f(2) i2=f(1 1); printf(“%d %dn“,i1,i2); 程序的运行结果是_。 ( A) 12 12 ( B) 11 7 ( C) 11 11 ( D) 12 7 44 设有以下语句 typedef struct TT char c; int a4;CIN; 则下面叙述中正确的是 _。 ( A)可以用 TT定 义
18、结构体变量 ( B) TT是 struct类型的变量 ( C)可以用 CIN定义结构体变量 ( D) CIN是 struct TT类型的变量 45 有以下结构体说明、变量定义和赋值语句 struct STD char name10; int age; char sex; s5,*ps; ps= 则以下 scanf函数调用语句中错误引用结构体变量成员的是 _。 ( A) scanf(“%s“,s0.name); ( B) scanf(“%d“, ( C) scanf(“%c“, ( D) scanf(“%d“,ps- age); 46 若有以下定义和语句 union date int i; ch
19、ar c; fioat f; x; int y; 则以下语句正确的是 _。 ( A) x=10.5; ( B) x.c=101; ( C) y=x; ( D) printf(“%dn“,x); 47 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量 s、 p、 q均已正确定义,并用于指向链表结点,指针变量 s总是作为头指针向链表的第 个结点。 若有以下程序段 q=s; s=s- next; p=s; while(p- next) p=p- next; P- next=q; q- next=NULL; 该程序段实现的功能是_。 ( A)首结点成为尾结点 ( B)尾结点成为首结点 ( C
20、)删 除首结点 ( D)删除尾结点 48 若变量已删除正确定义,则以下语句的输出结果是 _。 s=32; s=32; printf(“%d“,s); ( A) -1 ( B) 0 ( C) 1 ( D) 32 49 以下叙述中正确的是 _。 ( A) C语言中的文件是流式文件,因此只能顺序存取数据 ( B)打开 个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( C)在 千程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( D)当 对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 50 有以下程序 #include stdio
21、.h main() FILE *fp; int i; char ch=“abcd“,t; fp=fopen(“abc.dat“,“wb “); for(i=O;i 4;i )fwrite( fseek (fp,-2L,SEEK_END); fread ( fclose (fp); printf (“%cn“,t); 程序执行后的输出结果是 _。 ( A) d ( B) c ( C) b ( D) a 51 下列软件系统结构图的宽度为 。 52 的任务是诊断和改正程序中的错误。 53 个关系表的行称为 。 54 按 “先进后出 ”原则组织数据的数据结构是 。 55 数据结构分为线性结构和非线性结
22、构,带链的队列属于 。 56 设有定义: float x=123.4567;,则执行以下语句后的输出结果是 。 printf(“%fn“(int)(x*100 0.5)/100.1; 57 以下程序运行后的输出结果是 。 main() int m=011, n=11; printf(“%d %dn“, m,n ); 58 以下程序运行后的输出结果是 。 main() int x, a=1,b=2,c=3,d=4; x=(a b)?a:b; x=(x c)?x:c; x=(d x)?x:d; printf(“%dn“,x); 59 有以下程序,若运行时从键盘输入: 18, 11回车,则程序的输出
23、结果是 。 main() int a,b; printf(“Enter a,b:“); scanf(“%d,%d“, while (a!=b) while(a b) a-=b); white(b a) b-=a; printf(“%3d%3dn“,a,b); 60 以下程序的功能是:将输入的正整数按逆序输出。例如:若输入 135则输出531。请填空。 #include stdio.h main() int n, s; printf(“Enter a number:“); scanf(“%d“, printf(“Output: “); do s=n%10; printf(“%d“,s); ; w
24、hile (n!=0); printf(“n); 61 下面程序的运行结果是 。 #include stdio.h int f(int a,int n) if(n 1) return a0 f(a 1,n-1); else return a0; main() int aa10=12,3,4,5,6,7,8,9,10,s; s=f (aa 2,4); printf(“%dn“,s); 62 下面程序由两个源程序文件: t4.h和 t4.c组成,程序编译运行的结果是: 。 t4.h的源程序为: #define N 10 #define t2 (x) (x*N) t4.c 的源程序为: #inclu
25、de stdio.h #define M 8 #define f(x) (x)*M) #include “t4.h“ main() int i,j; i=f(1 1); j=f2(1 1); printf(“%d%dn“,i,j); 63 下面程序的功能是建立一个有 3个结点的单循环链表,然后求各个结点数值域data中数据的和,请填空。 #include stdio.h #include stdlib.h struct NODE int data; struct NODE*next; ; main() structNODE *p,*q,*r; int sum=0; p=(struct NODE
26、 *)malloc(sizeof(struct NODE); q=(struct NODE *)malloc(sizeof(struct NODE); r=(struct NODE *)malloc(sizeof(struct NODE); p- data=100; q- data=200; r- data=300; p- next=q; q- next=r; r-next=p; sum=p- data p- next- data r- next- next ; printf(“%dn“, sum); 64 有以下程序,其功能是:以二进制 “写 ”方式打开文件 d1.dat,写入 1 100这
27、100个整数后关闭文件。再以二进制 “读 ”方式打开文件 d1.dat,将这 100个整数读入到另一个数组 b中,并打印输出。请填空。 #include stdio.h main() FILE *fp; int i,a100,b100; fp=fopen (“d1.dat“,“wb“); for (i=0;i 100;i ) ai=i 1; fwrite (a,sizeof(int),100,fp); fclose fp; fp=fopen(“d1.dat“, ); fread (b,sizeof(int),100,fp); fclose(fp); for(i=0;i 100;i ) prin
28、tf(“%dn“,bi); 65 以下程序中,函数 fun的功能是计算 x2(上标 )-2x 6,主函数中将调用 fun函数计算: y1=(x 8)2(上标 )-2(x 8) 6 y2=sin2(上标 )(x)-2sin(x) 6 请填空。 #include “math.h“ double fun(double x) return (x*x-2*x 6); main() double x,y1,y2; printf(“Enter x:“); scanf(“%1f“, y1=fim( ); y2=run( ); printf(“y1=%1f,y2=%1fn“,y1,y2); 66 下面程序的功能
29、是:将 N行 N列二维数组中每一行的元素进行排序,第 0行从小到大排序,第 1行从大到小排序,第 2行从小到大排序,第 3行从大到小排序,例如: #define N 4 void sort(int aN) int i,j,k,t; for(i=0;i N;i ) for(j=0;j N-1;j ) for(k= ;kN;k ) /*判断行下标是否为偶数来确定按升序或降序来排序 */ if( ?aijaik:aij aik) t=aij; aij=aik; aik=t; void outarr(iht aNN) main() int aaNN=2,3,4,1,8,6,5,7,ll,12,10,9
30、,15,14,16,13; outarr (aa);/*以矩阵的形式输出二维数组 */ sort (aa); outarr (aa); 67 下列程序中的函数 strcpy2 ()实现字符串两次复制,即将 t所指字符串复制两次到 s 所指内存空间中,合并形成一个新字符串。例如,若 t所指字符串为: efgh,调用 strcpy2后, s所指字符串为: efghefgh。请填空。 #include stdio.h #include string.h viod strcpy2(char *s,char *t) char while (*s =t ); s= : while( =*p ); main
31、() char str1100=“abcd“, str2=“efgh“; strcpy2 (str1,str2); printf(“%sn“,str1); 2006 年 9月国家二级( C语言)笔试真题试卷答案与解析 1 【正确答案】 D 【试题解析】 良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护,因此,程序设计风格对保证程序的质量很重要。主要应注意和考虑下述 些因素: 1、源程序要文挡化; 2、数据说明的次序要规范化; 3、语句的结构应该简单直接,不应该为提高效率而把语句复杂化,避免滥用 goto语句。模块设计要保证低耦合、高内聚。 2 【正确答案】 A 【试题解析】 从工程
32、管理角度看,软件设计分为两步完成:概要设计与详细设计。概要设计 (义称结构设计 )将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。 3 【正确答案】 C 【试题解析】 软件生命周期分为软件定义、软件开发及软件维护。其中软件开发阶段的任务中软件设计阶段可分解成概要设计阶段和详细设计骱段;软件维护不属于软件开发阶段。 4 【正 确答案】 B 【试题解析】 数据库管理系统的三级模式结构由外模式、模式和内模式组成。夕模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。
33、模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的 部分。内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取力式的描述。 5 【正确答案】 D 【试题解析】 数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的 相关策略。数据库设计以下 6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。 6 【正确答案】 C 【试题解析】 从图中可以看出,关系 T是关系 R和关系 S 的简单扩充,而扩充的符号为 ,所以答案为 T=RS。 7
34、【正确答案】 D 【试题解析】 算法的复杂度主要包括时间复杂度和空间复杂度:算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度;算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算次数,为了能够比较 客观地反映出 个算法的效率,在度量 个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。 8 【正确答案】 B 【试题解析】 在进行顺序查找过程中,如果线性表中的第 1个元素就是被查找元素,则只需做 次比较就查找成功,查找效率最高
35、;但如果被查找的元素是线性表中的最后 个元素,或者被查找的元素根本就不在线性表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是 顺序查找的最坏情况。所以对长度为 n的线性表进行顺序查找,在最坏情况下需要比较 n次。 9 【正确答案】 B 【试题解析】 由于数据的集成性使得数据可为多个应用所共享,特 SU是在网络发达的今天,数据库与网络的结合扩大了数据关系的应用范围。数据的共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不 致性。因此,数据库设计的根本目标是要解决数据共享问题。 10 【正确答案】 A 【试题解析】 二叉树的中序遍历指在访问根结
36、点、遍历左子树与遍历右子树这三者中,首 先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。 11 【正确答案】 A 【试题解析】 一个 C语言程序可以实现多种算法。 个 C程序可以由 个或多个源程序文件组成, 个源程序文件由 个或多个函数组成,构成 C语言程序的基本单位是函数,函数也是 C程序中模块化程序设计的基础, C函数可分为标准库函数和用户定义函数两类。 12 【正确答案】 D 【试题解析】 每 个 C程序由多个 C程序文件组成,而每个 C程序都必须有一个 main()函 数,故每 个 C程序文件中都必须有 个 main
37、()函数的说法是错误的。在 C程序中所有函数都是平行的,即在定义函数时是相互独立的, 个函数并不能从属于另 个函数,即函数不能嵌套定义,函数间可以相互调用,但不能调用 main()函数, main()函数的位置也不是固定的。 13 【正确答案】 D 【试题解析】 C语言中用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符, C语言规定标识符能由字母、数字和下划线三种字符组成,且第 个字符必须为字母或下划线。选项 D中含有 “$”,故不符合标识符的定义。 14 【正确答案】 A 【试题解析】 赋值表达式的左边不能为算式,故选项 B、 c错误;选项 D为强制类型的转
38、换,其书写形式为: (类型名 )(表达式 ),即正确书写应为: (double)x/10 或(double)(x/10);选项 A为逗号表达式符合 C语言语法。 15 【正确答案】 D 【试题解析】 逻辑运算符两侧的运算对象不但可以是 0和 1,也可以是任意基本类型或指针类型的数据,还可以是任意合法表达式。 16 【正确答案】 C 【试题解析】 “(x-y)?(x ):(y )”的求解顺序是:先判断 x-y的值,如果为非0(真 ),则执行 X,从而表达式返回 X的值;如果 0(假 ),则执行 y,从而表达式返回 y的值。相当于 “或 ”的关系,所以选项 C正确。 17 【正确答案】 C 【试题
39、解析】 x:表示在使用 x之后,使 x的值加 1; y:表示在使用 y之后,使 y的值加 1; y:表示在使用 y之前,使 y的值加 1。此题中执行z=x,是将 x的值先赋给 z,所以 z=1,接下来 x自行加 1,其结果为 2:执行y后, y=2,执行后, y=3;故答案选 C。 18 【正确答案】 B 【试题解析】 对于 unsigned 型数据可以指定数据的输入域宽 w,系统秒将自动按 w值截取所需长度的数据,此题中指定输入域宽为 2,所以把前两个数送给 a,即 a=87后面的数值应送给变量 b,由于 6后面是空格分隔符,所以系统认为该数据到此结束,即将 6赋给了 b,所以答案选 B。
40、19 【正确答案】 A 【试题解析】 在 C语言中,注释是用于协助读者更好地理解程序,它不会被系统编译执行,此题中第 处的注释内容包括: “/*给 a赋值 b=20; 给 b赋值 */”,故本题中 “b=20;”在程序中不起作用,所以输出语句执行的 a b的值为 10 0的值,即输出为 “a b=10”。 20 【正确答案】 C 【试题解析】 在嵌套使用 if 语句时, C语言规定 else总是和之前与其最近的且不带 else的 if 配对。 21 【正确答案】 D 【试题解析】 在 switch 语句中, break 语句主要起到在执行一个 case分支后,使流程跳出 switch 结构,即
41、终止 switch 语句的执行,但最后 个分支 (default)可以不加 break 语句。 22 【正确答案】 A 【试题解析】 此 题中首先给 k 赋初值 5,执行 while语句:中的表达式 “-k”, k先自行减 1结果为 4,满足 while执行条件输出: k=k-3=4-3=1;此时输出结果为1。返回执行 while语句,重复上面的操作, while后的表达式为 0,退出循环,所以最后的输出结果为 1。 23 【正确答案】 C 【试题解析】 在满足 for语句条件下,第 个 if语句的条件是指 i先对 5取余后,再自行加 1;第二个 if语句的条件是指: i=i 1后,再对 8取
42、余。设可以满足第 个 if语句的值为: x,那么可以满足第二个 if语句的值为: x 2,转换 为方程组:x=32,所以答案选 C。 24 【正确答案】 B 【试题解析】 0代表 ASC 码为 48的字符, 0代表 ASC 码为 0的字符, 1代表 ASC 码为 49的字符,所以只有选项 B的表达式的值为 1。 25 【正确答案】 C 【试题解析】 在 fun(a ,b ,a b),c )中,先算括号内的 (a ,b ,a b)逗号运算,即先算出 a的值, a=2;再算出 b的值, b=3;最后算出 a b 的值, a b=2 3=5,整个逗号表达式的值为最后 a b的值即为 5;接下来调用
43、fun 函数,此时原语句变为: smn=fun(5,C );进行运算, c表示在使用c以后再将 c的值加 1,所以结果为: 5 3=8。 26 【正确答案】 D 【试题解析】 此题中 s是 个字符数组,而字符数纽是在编绎时为它分配内存单元的,即此字符数组的地址在编译时是确定的,所以对此地址变量并不能赋值,故语句 “s =2;”错误,故程序出错。 27 【正确答案】 B 【试题解析】 将 j和 m的值带入函数 fun中,第 次调用完 fun()后, m和 i的值分别为 5和 3且要保留,并在第二次调用时使用,这是 因为两者都是局部静态变量。所以最后的结果是 5和 11。 28 【正确答案】 C
44、【试题解析】 函数 fun 是 个递归调用函数,首先主函数将实参 7传递给函数fun中的形参 x,由于 70, 71,不满足 if 条件,所以执行下面的 p=x-fun(x-2);语句,此语句继续调用它本身,直到当 x=1时,返回函数值 3代入到调用它的表达式中,依此类推 ,最终 p 的值为 2。 29 【正确答案】 A 【试题解析】 题目中 p=*(w0 1)w01,符合数组定义的范围可以正确表示数据元素。 32 【正确答案】 D 【试题解析】 函数声明可以照写已定义的函数的首部,再加一个号就成为了对函数的声明,在函数声明中也可以不写 形参名,而只写形参的类型,但要保证与函数首部写法上的 致,即函数类型、函数名、参数个数、参数类型和参数顺序相同。字符数组可用指针来表示,所以选顶 D正确。 33 【正确答案】 B 【试题解析】 *pk3:由于 比 * 优先级高,因此 p先与 3结合,形成