1、国家二级( C语言)笔试模拟试卷 96 及答案与解析 1 算法中的每一个步骤都必须是有明确意义的,不允许有模棱两可的解释,也不允许有多义性,这个性质称为 ( A)可行性 ( B)有穷性 ( C)正确性 ( D)确定性 2 以下数据结构中,属于线性数据结构的是 ( A)集合 ( B)线性表 ( C)二叉树 ( D)图 3 设有下列二叉树: 对此二叉树先序遍历的结果是 ( A) ABCDEF ( B) BDAECF ( C) ABDCEF ( D) DBEFCA 4 下面对对象概念描述,不正确的是 ( A)任何 对象都必须有继承性 ( B)对象是属性和方法的封装体 ( C)对象间的通讯靠消息传递
2、( D)操作是对象的动态属性 5 对建立良好的程序设计风格,描述正确的是 ( A)程序应简单、清晰、可读性好 ( B)符号名的命名只要符合语法即可 ( C)充分考虑程序的执行效率 ( D)程序的注释可有可无 6 检查软件产品是否符合需求定义的过程称为 ( A)确认测试 ( B)集成测试 ( C)验证测试 ( D)验收测试 7 在结构化程序设计方法中,下面哪种内聚性最弱 ? ( A)逻辑内聚 ( B)时间内聚 ( C)偶然内聚 ( D)过程内聚 8 在数据库管理系统提供的数据语言中,负责数据的完整性、安全性的定义与检查以及并发控制、故障恢复等功能的是 ( A)数据定义语言 ( B)数据转换语言
3、( C)数据操纵语言 ( D)数据控制语言 9 数据库系统可分为三级模式,下列选项中不属于数据库三级模式的是 ( A)抽象模式 ( B)外模式 ( C)概念模式 ( D)内模式 10 在关系数据库中,用来表示实体之间联系的是 ( A)树形结构 ( B)网状结构 ( C)线性表 ( D)二维表 11 一个算法应该 具有 “确定性 ”等 5个特性,下面对另外 4个特性的描述中错误的是 ( A)有零个或多个输入 ( B)有零个或多个输出 ( C)有穷性 ( D)可行性 12 以下叙述中正确的是 ( A) C语言的源程序不必通过编译就可以直接运行 ( B) C语言中的每条可执行语句最终都将被转换成二进
4、制的机器指令 ( C) C源程序经编译形成的二进制代码可以直接运行 ( D) C语言中的函数不可以单独进行编译 13 以下符合 C语言语法的实型常量是 ( A) 1.2E0.5 ( B) 3.14159E ( C) 5.00E-03 ( D) E15 14 以下 4组用户定义标识符中,全部合法的一组是 ( A) _main enclude sin ( B) If _max turbo ( C) txt REAL 3COM ( D) int k_2 _001 15 若以下选项中的变量已正确定义,则正确的赋值语句是 ( A) x1=26.8%3; ( B) 1+2=x2; ( C) x3=0x12
5、; ( D) x4=1+2=3; 16 设有 以下定义 int a=0; double b=1.25; charc c=A; #define d 2 则下面语句中错误的是 ( A) a+; ( B) b+; ( C) c+; ( D) d+; 17 设有定义: float a=2, b=4, h=3;以下 C 语言表达式中与代数式 (a+b)h计算结果不相符的是 ( A) (a+b)*h/2 ( B) (1/2)*(a+b)*h ( C) (a+b)*h*1/2 ( D) h/2*(a+b) 18 有以下程序 main() int x=102, y=012; printf(“%2d,%2dn“
6、,x,y); 执行后输出结果是 ( A) 10,01 ( B) 02,12 ( C) 102,10 ( D) 02,10 19 以下 4个选项中,不能看作一条语句的是 ( A) ; ( B) a=0,b=0,c=0; ( C) if(a 0); ( D) if(b=0)m=1;n=2; 20 设有定义: int a, *pa=i+; printf(“%dn“,k); 执行后输出结果是 ( A) 58 ( B) 56 ( C) 45 ( D) 24 24 有以下程序 main() int i=0,s=0; do if(i%2)i+;continue; i+; s+=i; while(i 7);
7、printf(“%dn“, s); 执行后输出结果是 ( A) 16 ( B) 12 ( C) 28 ( D) 21 25 有以下程序 main() int i:10,j=1; printf(“%d,%dn“,i-, +j); 执行后输出结果是 ( A) 9, 2 ( B) 10, 2 ( C) 9, 1, ( D) 10, 1 26 有以下程序 main() char a,b,c,*d; a=;b=xbc; c=0xab;d=“0127“; pfintf(“%c%c%c%cn“,a,b,c,*d) ; 编译时出现错误,以下叙述中正确的是 ( A)程序中只有 a=;语句不正确 ( B) b=x
8、bc;语句不正确 ( C) d=“0127“;语句不正确 ( D) a=;和 c=, 0xab;语句都不正确 27 有以下程序 int f1(int x,int y) return x y?x:y; int f2(int x,int y) return x y?y:x; main() int a=4,b=3,c=5,d,e,f; d=f1(a,b) ; d=f1(d,c) ; e=f2(a,b) ; e=f2(e,c) ; f=a+b+c-d-e; printf(“%d,%d,%dn“,d,f,e); 执行后输出结果是 ( A) 3,4,5 ( B) 5,3,4 ( C) 5,4,3 ( D)
9、 3,5,4 28 有以下程序 void f(int x, int y) int t; if(x y) t=x;x=y;y=t; main() int a=4,b=3,c=5; f(a,b) ;f(a,c) ;f(b,c) ; printf(“%d,%d,%dn“,a,b,c) ; 执行后输出结果是 ( A) 3,4,5 ( B) 5,3,4 ( C) 5,4,3 ( D) 4,3,5 29 若有以下定义和语句 #include stdio h int a=4,b=3,*p,*q,*w; p=q=w=q;q=NULL; 则以下选项中错误的语句是 ( A) *q=0; ( B) w=p; ( C
10、) *p=a; ( D) *p=*w; 30 有以下程序 int *f(int *x,int *y) if(*x *y) return x; else return y; main() int a=7,b:8,*p,*q,*r; p=i 3;i+) printf(“%d“,mki); 执行后输出结果是 ( A) 4 5 6 ( B) 2 5 8 ( C) 3 6 9 ( D) 7 8 9 35 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(intxN) int i=0; while(i N) seanf(“%d“,_); 在下划线
11、处应填入的是 ( A) x+i ( B) char c;double x;STD; 则以下选项中,能正确定义结构体数组并赋初值的语句是 ( A) STD tt2=l,A,62,2,B,75; ( B) STD tt2=1,“A“,62,2,“B“,75; ( C) streetn2=1,A,2,B; ( D) struct tt2=1,“A“,62.5,2,“B“,75.0; 40 有以下程序 main() unionunsigned int n; unsigned char c; ul; u1.C=A; pfintf(“%cn“,u1.n); 执行后输出结果是 ( A)产生语法错 ( B)随
12、机值 ( C) A ( D) 65 41 有以下程序 main() char atr=“xyz“,*ps=str; while(*ps)ps+; for(ps-;ps-str 0;ps-) puts(ps); 执行后输出结果是 ( A) yz xyz ( B) x yz ( C) z yz xyz ( D) x xy xyz 42 有以下程序 main() int a3=1, 2, 3,4,5,0,(*pA) 3,i; pa=a; for(i=0;i 3;i+) if(i 2)Pa1i=pa1i-1; else pa1i=1; printf(“%dn“,a01+a11+a12); 执行后输出结
13、果是 ( A) 7 ( B) 6 ( C) 8 ( D)无确定值 43 有以下程序 void fun(int *a, int i, int j) in t; if(i j) t=ai;ai=aj;aj=t; fun(a,+i,-j); main() int a=1, 2, 3,4, 5, 6, i; fun(a, 0, 5); for(i=0;i 6;i+) printf(“%d“,ai); 执行后输出结果是 ( A) 6 5 4 3 2 1 ( B) 4 3 2 1 5 6 ( C) 4 5 6 1 2 3 ( D) 1 2 3 4 5 6 44 有以下程序 main(int argc, c
14、har *argv) int n,i=0; while(argv1i!=0) n=fun();i+; printf(“%dn“, n*argc) ; int fun() static int s=0; s=-1; return s; 假设程序经编译、连接后生成可执行文件 exam exe,若键入以下命令行 cxam123回车 则运行结果为 ( A) 6 ( B) 8 ( C) 3 ( D) 4 45 以下程序段中,能够通过调用函数 fun,使 main函数中的指针变量 p指 向一个合法的整型单元的是 ( A) main() int*p; fun(p); int fun(int *p) int
15、s;p= ( B) main() int*p; fun(*p= ( C) #include stdlib h main() int*p; fun(&p); int fun(int * *p) *p=(int*)malloc(2); ( D) #include stdlib h main() int*P; fun(p); int fun(int *p) p=(int*)malloc(sizeof(int); 46 若要说明一个类型名 STP, 使得定义语句 STPs;等价于 char*s;以下选项中正确的是 ( A) typedef STP char *s ( B) typedef*char S
16、TP; ( C) typedef STP *char; ( D) typedef char* STP; 47 设有如下定义 struct ss char name10; int age; char sex; std3, *p=std; 下面各输入语句中错误的是 ( A) scanf(“%d“,&(*p).age); ( B) scant(“%s“,&std.name); ( C) scanf(“%c“,&std0.sex); ( D) scanf(“%c“,&(p- sex); 48 设 char型变量 x中的值为 10100111,则表达式 (2+x)(-3)的值是 ( A) 1010100
17、1 ( B) 10101000 ( C) 11111101 ( D) 1010101 49 以下叙述中不正确的是 ( A) C语言中的文本文件以 ASCII码形式存储数据 ( B) C语言中对二进制文件的访问速度比文本文件快 ( C) C语言中,随机读写方式不适用于文本文件 ( D) C语言中,顺序读写方式不适用于二进制文件 50 以下程序企图把从终端输入的字符输出到名为 abc txt的文件中,直到从终端读入字符 #号时结束输入和输出操作,但程序有错。 #include stdio h main() FILE*fout; char ch; four=fopen(abc.txt,w); ch=
18、fgetc(stdin); while(ch!=#) fputc(ch,fout); ch=fgetc(stdin); felose(fout); 出错的原因是 ( A)函数 fopen调用形式错误 ( B)输入文件没有关闭 ( C)函数 fsetc调用形式错误 ( D)文件指针 stdin没有定义 51 算法执行过程中,所需要的基本运算次数称为算法的【 】。 52 在一棵二叉树上第 6层的结点个数最多是【 】。 53 软件是程序、数据和【 】的集合。 54 实体 联系模型是一种常用的高级概念数据 模型,而【 】是实体 模型中的核心。 55 在数据库理论中,数据库总体逻辑结构的改变,如修改数据
19、模式、增加新的数据类型、改变数据间联系等,不需要修改相应的应用程序,称为【 】。 56 若从键盘输入 58,则以下程序的输出结果是【 】。 main() int a; scanf(“%d”, &A) ; if(a 50)printf(“%d”, A) ; if(a 40)printf(“%d”, A) ; if(a 30)printf(“%d”, A) ; 57 以下程序的输出结果是【 】。 main() int a=177; printf(“%on”, A) ; 58 以下程序的输出结果是【 】。 main() int a=0; a+=(a=8); printf(“%dn”, A) ; 59
20、 以下程序的输出结果是【 】。 main() int a=5, b=4, c=3, d; d=(a b C) ; printf(“%dn”, D) ; 60 以下定义的结构体类型包含两个成员,其中成员变量 info用来存放整型数据;成员变量 link是指向自身结构体的指针。请将定义补充完整。 struct node int info; 【 】 Link; ; 61 以下程序的输出结果是【 】。 main() int s, i; for(s=0, i=1; i 3; i+, s+=i; printf(“%dn”, s); 62 以下程序的输出结果是【 】。 main() char *p=“abo
21、defgh”, *r; long *q; q=(long*)p; q+; r=(char*)q; printf(“%sn”, r); 63 以下程序的输出结果是【 】。 main() char s=“abcdef”; s3=0; printf(“%sn”, s); 64 以下程序的输出结果是【 】。 main() int x=0; sub(&x, 8, 1); printf(“%dn”, x); sub(int *a, int n, int k) if(k n)sub(a, n/2, 2*k); *a+=k; 65 设有如下宏定义 #define MYSWAP(z, x, y)z=x; x=Y
22、; Y=z; 以下程序段通过宏调用实现变量 a、 b内容的交换,请填空。 float a=5, b=16, c; MYSWAP( 【 】, a, b) ; 66 以下程序用来统计文件中字符的个数。请填空。 #include“stadio h” main() FILE *fp; long num=0L; if(fp=fopen(“fname dat”, “r”)=NULL); printf(“0pen errorn”); exit(0); while( 【 】 ) fsetc(fp); num+; printf(“num=%1dn”, num-1); fclose(fp); 67 以下程序中,
23、select函数的功能是:在 N行 M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。 #define N 3 #define M 3 select(int aNM, int *n) int i, j, row=1, colum=1; for(i=0; i N; i+) for(j=0; j M; j+) if(aij arowcolum)row=i; colum=j; *n= 【 】; return( 【 】 ); main() int aNM=9, 11, 23, 6, 1, 15, 9, 17, 20, max, n; max=select(a,
24、 &n); printf(“max=%d, line=%dn”, max, n); 68 mystrlen函数的功能是计算 str所指 字符串的长度,并作为函数值返回。请填空。 int mystrlen(char *str) int i; for(i=0; 【 】 !=0; i+); return( 【 】 ); 国家二级( C语言)笔试模拟试卷 96 答案与解析 1 【正确答案】 D 【试题解析】 算法中的每一个步骤都必须是有明确意义的,不允许有多义性。算法的这个性质即为算法的确定性。 2 【正确答案】 B 【试题解析】 所谓的线性结构:如果一个非空的数据结构满足下列两个条件,即 1)有且只
25、有一个根结点; 2)每一个结点最多有一个前件,也最多有一个后件。同时满足两个条件的只有线性表,而其他三种数据结构的结点可能存在多个前件或后件,所以不是线性结构。 3 【正确答案】 C 【试题解析】 二叉树的遍历分为先序、中序、后序三种不同方式。本题要求先序遍历,遍历顺序应该为:访问根结点 -先序遍历左子树 -先序遍历右子树。按照定义,先序遍历序列是 ABDCEF。 4 【正确答案】 A 【 试题解析】 有时为了保护某些特有的对象,可以通过定义其为私有属性达到不被继承的目的。 5 【正确答案】 A 【试题解析】 符号名应该能反映出它所代表的实际东西,应有一定的意义,不是简单的符合语法就可以。应该
26、在保证程序正确的情况下再考虑程序的执行效率。程序的注释有益于对程序的理解和维护,好的程序必不可少。 6 【正确答案】 A 【试题解析】 确认测试是要检查已实现的软件是否满足了需求规格说明书中确定了的各种需求,以及软件配置是否完全正确。软件需求规格说明书是软件确认测试的基础。 7 【 正确答案】 C 【试题解析】 内聚有很多种类,其中内聚性由弱到强的顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚。 8 【正确答案】 D 【试题解析】 在数据库管理系统提供的数据语言中,数据控制语言负责数据的完整性、安全性的定义与检查以及并发控制、故障恢复等功能。 9 【正确答案】 A 【试题解析】 数据库的三级模
27、式是指概念模式、内模式和外模式。其中外模式又叫子模式,内模式又叫物理模式。 10 【正确答案】 D 【试题解析】 数据库中的关系模型是采用二维表来表示实体与实体 之间的联系。 11 【正确答案】 B 【试题解析】 算法是为解决某个特定问题而采取的确定的且有限的步骤,一个算法应当具有以下 5个基本特性: 1)有穷性,就是指一个算法应当包含有限个操作步骤。 2)确定性,就是说算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。 3)有零个或多个输入。 4)可行性,就是说算法中指定的操作,都可以通过已经实现的基本运算执行有限次实现。 5)有一个或多个输出。 12 【
28、正确答案】 B 【试题解 析】 C语言采用编译方式将源程序转换为二进制的目标代码,编写好一个 C程序到完成运行一般经过以下几个步骤: 1)编译,就是将已经编辑好的源程序翻译成二进制的目标代码,经编译后得到的二进制代码还不能直接执行,因为每一个模块往往是单独编译的,必须把经过编译的各个模块的目标代码与系统提供的标准模块连接后才能运行; 2)连接,将各模块的二进制目标代码与系统标准模块经连接处理后,得到具有绝对地址的可执行文件,它是计算机能直接执行的文件; 3)执行,执行一个经过编译和连接的可执行的目标文件。 13 【正确答案】 C 【试题解析】 实型常量只能用十进制形式表示,不能用八进制或十六进
29、制形式表示,实型常量可以用小数形式或指数形式表示,在 c语言中,可以用指数形式将实型常量表示为数值和指数两部分,数值部分不能为空,指数部分只能为整数表示。选项 A中 1.2和 0.5都不是整数,选项 B中 3.14159也不是整数。 14 【正确答案】 A 【试题解析】 标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序列 (例如, -max含非法字符 -),并且用户标识符不能与 C语言中的 32个关键字同名 (例如, int是关键字,不是合法的用户标识符 )。选项 B 中 -max 不是字母、数字或下划线组成的字符序列;选项 C中 3COM不是由字母或下划线开头;选项 D中 int
30、为 C语言中的关键字;选项 A中全部为合法的标识符。 15 【正确答案】 C 【试题解析】 赋值操作由赋值运算符 “=”来完成,一般形式为变量 =表达式,赋值的方向为由右向左,即将 “=”右侧表达式的值赋给 “=”左侧的变量,执行步骤是先计算再赋值。选项 A中运算符 “%”的运算对象必须为整数,而选项 A中 26.8不为整数;选项 B 将一个变量赋值给一个表达式,这在 C语言中是不允 许的;选项D中也是将一个常量 3赋值给一个表达式。 16 【正确答案】 D 【试题解析】 自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和常量。本题中, #define d 2 定义了 d 为常数 2
31、,不能再对 d进行自加运算。 17 【正确答案】 B 【试题解析】 将简单的数学表达式表示成合法的 C程序的语句。选项 B 中由于 1和 2都是整型,其 1/2的运算结果为 0,故整个表达式的值为 0,所以它的结果和题目中要求的代数式的计算结果不相符。 18 【正确答案】 C 【试题解析】 本题 中, pfintf(“%2d, %2dn”, x, y)表示输出形式是十进制整数,域宽是 2,而在 C语言中规定:当域宽小于实际宽度时域宽不起作用,按实际宽度输出因此最后的输出值为 102和 10。 19 【正确答案】 D 【试题解析】 C语言是一种表达式语言,所有的操作运算都通过表达式来实现,由表达
32、式组成的语句称为表达式语句,它由一个表达式后接一个分号组成。本题中,选项 D中 if(b=0)m=1; n=2;是两个表达式语句。 20 【正确答案】 A 【试题解析】 scanf()函数的功能是进行输入数据 ,它是按格式参数的要求从终端上把数据传送到地址参数所指定的内存空间中, C语言允许程序员间接地使用内存地址,这个地址是通过对变量名 “求地址 ”运算得到的,求地址的运算符是 &,得到的地址是一种符号地址。本题中定义了整型变量 a和一个指向整型数据的指针变量 pa,并定义 pa是一个存放 a的地址的变量。选项 B中应该将 a改为 &a;选项 C应该将 &pa 改为 pa,因为 pa已经表示
33、存放 a的地址;选项 D中 *pa表示的是指针 pa所指向存储空间的变量的值,而不是一个地址。 21 【正确答案】 C 【试题解析】 首先计算 if语句后 面的表达式值,先计算运算符 &前面括号里的“|”运算。在 “|”运算中先计算 j+,值为 1(j的值为 2),为真,后面的 k+将不再计算, k 的值依旧为 2。计算 &后面的表达式 i+,值为 1(i的值变为 2)。整个表达式的值为真,所以执行后面的输出语句,最后输出的 i、 j和 k的值为 2、 2和2。 22 【正确答案】 B 【试题解析】 C语言规定 else总是和离它最近的 if 语句配对。故第一个 else和第一个 if 配对,
34、第二个 else和第二个 if配对。首先计算第一个 if后面的表达式 “a b c”,表达式 “a b”是为 1,表达式 “1 c”为 0,所以执行 else后面的语句。先执行 if后面的表达式, “c-1 d”为真,值为 1。 “1=1”为真,执行 printf 语句。 23 【正确答案】 D 【试题解析】 在主函数中首先定义了一个数组 p 并初始化,在 while后面括号里的表达式中, i初值为 0,当 pi为偶数时, Pi%2等于 0,根据 “&”运算符的规则,其表达式为假退出循环,显然当 i=2 时, pi=14为偶数,此时 while后面括号里的表达式的值为假,退出循环,此时 k=p
35、0+p1,即 k=11+13。 所以最后输出k 为 24。 24 【正确答案】 A 【试题解析】 do循环与 continue语句,在循环体中有一条 if语句,其后面表达式为 “i%2”,当 i 的值为奇数时,其值为真,执行其后面的语句, i的值加 1,重新开始循环,当 i的值为偶数时, “i%2”为假,执行 “i+; s+=i”。在循环中 i为偶数时的值分别为 0、 2、 4、 6,加 1过后的值分别为 1、 3、 5、 7, s中存放的是它们的和,值为 16。 25 【正确答案】 B 【试题解析】 +、 -运算符在变量之前是先使变量的值加 1或减 1,然后再使用变量的值;如果在变量之后则先
36、使用变量之前的值,再把变量的值加 1或减 1。显然,程序中表达式 “i-”的值为 10, “+j”的值为 2,所以最后输出的值为 10和 2。 26 【正确答案】 D 【试题解析】 给字符变量赋值只能赋一个字符,包括转义字符,语句 “a=”是错误的,因为 “”是转义字符,应该用 “”来表示,语句 “B=xbe; ”是正确的,它是将一个用十六进制表示的转义字符赋给一个字符型变量;语句 “c=0xab; ”是正确的,反斜线后的十六进制只可由小写 x开头,不能用 0x。语句 “d=”0127“; ”是正确的,可以给字符型指针变量赋一个字符串,其作用是让该指针变量指向该字符串。 27 【正确答案】 C
37、 【试题解析】 函数 f1()的作用是返回形参 x和 y的较大值,函数 f2()的作用是返回形参 x和 y的较小值,在 main()函数中通过调用两次 f1()函数,求得 a、 b、 c的最大值并存放在变量 d中,通过调用两次 f2()函数,求得 a、 b、 c的最小值并存放到变量 e中。由程序可知 d 值为 5, f 的值为 4, e的值为 3,因此最后输出的 d、f、 e的值为 5、 4、 3。 28 【正确答案】 D 【试题解析 】 C语言规定,在函数调用时变量作为参数传递是传值的,在函数体中对形参变量的修改不能影响到对应的实参变量。本题定义了一个函数 f(),用变量作为形参,在 mai
38、n()函数中调用了 3次 f()函数,由于变量作为参数进行传递,所以对应的实参的值并没有被交换。所以输出的 a、 b、 c依旧是原来的值 4、 3、5。 29 【正确答案】 A 【试题解析】 本题中定义了 3个指向整型的指针变量 p、 q、 w,并让 P指向 a,让 q 指向 b,通过将 q的值赋给 w,使 w 也指向 b,最后将 NULL赋值给 q。由整型变量指针的定义可知,可以给整型指 针指向的变量赋一个常数值 (表达式 );可以给指针变量赋一个同种类型的指针变量 (或地址值 );选项 A因为 q不指向任何变量,给一个空指针指向的单元赋值是错误的。 30 【正确答案】 B 【试题解析】 本
39、题定义了一个返回值为指针的函数 f(),此函数有两个指针型的形参 x和 y,该函数的功能,是返回 x和 y指向的变量中值较小的那个指针变量。主函数中定义了两个指针变量 p 和 q,井让它们指向了变量 a和 b,调用函数 f(),返回指向的变量值较小的指针变量, r的值为指针变量 p的值 (变量 a的地址 ),因此最后输出的 *p、 *q和 *r的值是 7、 8和 7。 31 【正确答案】 C 【试题解析】 本题首先定义了一个有 3个元素的指针数组 s,并通过赋值使 s0指向字符串 “one”, s1指向字符串 “two”, s2指向字符串 “three”,然后通过赋值语句 “p =s1”,使
40、p指向了字符串 “two”,故 “*(p+1)”就是字符 “w”。 32 【正确答案】 B 【试题解析】 指向一维数组的指针变量,通过赋值语句 “s=x+3”,使指针变量 s指向数组元素 x3,输出语句中的 s2等价于 *(s+2),即 x5值为 0。 33 【正确答案】 D 【试题解析】 选项 A中,数组的长度使用了变量 N,而在 C中是不能用变量来定义数组的的长度的。在 C语言中,给二维数组赋初值时,行数不能超过定义的行数,每行的初值个数不能超过定义时的列数。选项 C数组的第二维下标缺省,而在 C语言中,数组的第二维下标不能缺省。 34 【正确答案】 C 【试题解析】 变量 k的初值为 2
41、,循环执行了 3次,分别输出 m20、 m21和 m22,其值分别为 3, 6, 9。 35 【正确答案】 C 【试题解析】 在 scanf()函数中有两个参数,其中第一个参数为输入格式字符串,第二个参数是地址字符串。根据 scant()的定义,故应该在空白处填入一地址,又由题意要给数组的每个成员赋值, i表示数组的下标,那么 i必须每循环一次加 1,即指向下一个数组元素,当 i=7 时循环体执行了 7次,数组的每个成员都被赋值了,退出循环。 36 【正确答案】 C 【试题解析】 本题在定义字符数组时没有定义数组长度,但是给数组赋了初值,这时初值的个数即为数组的长度,故数组长度为 6(包括 0
42、)。字符串的长度为有效字符的个数 5。因此 printf 语句中 输出的结果为 5, 6。 37 【正确答案】 C 【试题解析】 在函数 fun()中有两个字符型指针变量 s1和 s2,在函数中程序执行 while循环,该循环退出条件有两个:一个是 s1i!=s21(两个字符串不相等 ):第二个是 s11和 s2i相等均为 “、 0”(两个字符串相等 )。循环退出后,执行 return语句,即两个字符串相等则返回 1,不相等则返回 0。 38 【正确答案】 B 【试题解析】 若在函数中定义与全局变量名字相同局部变量,则全局变量在该函数中将不起作用,因此全局变量的作用 域并不一定比局部变量的作用
43、域大;静态变量一旦定义,将在整个程序的运行期间都存在;函数的形参只在函数调用的时候分配存储空间,在退出函数时收回存储空间,因此是局部的;没有赋值的 auto型变量的初值是随机的,没有赋值的 static型变量的初值是 0。 39 【正确答案】 A 【试题解析】 本题定义了一个结构体类型并自定义类型名为 STD,用户自定义类型后,就可以利用它进行变量与数组的定义。定义的方法,与 C语言中其他类型的定义完全 样,定义结构型数组并赋初值时,每个元素用一对 “”和 “括起来,字符型元素用 ”括起来。 40 【正确答案】 C 【试题解析】 在定义共用体的同时,定义了一个共用体型变量 u1,共占两个字节,
44、有两个成员 n和 c,两个成员的首地址是相同的。因此给 u1, c赋一个 “A”,其实就是给无符号整型成员 u1 n的低字节赋一个 “A”,输出 u1, n的时候是以字符型的形式输出,只输出它的低地址的一个字节,因此为 “A”。 41 【正确答案】 C 【试题解析】 执行 while循环,使指针变量 ps指向字符串 “xyz”的字符串结束标志,然后执行 for循环,先执行 “ps-”,使 ps指向字符 “z”,故 puts(ps)输出结果为 “z”;再次执行 “ps-”,使 ps指向字符 “y”,故 puts(ps)输出结果为 “yz”;再次执行 “ps-”,使 ps指向字符 “x”,故 pu
45、ts(ps)输出结果为 “xyz”,退出循环。 42 【正确答案】 A 【试题解析】 本题定义了一个指向由 3个元素组成的一维数组的指针变量 pa,通过赋值让它指向具有 2行 3列的数组 a;此时用指针变量 pa,表示数组元素aij的形式是 Paij。 for循环执行了 3次:第一次 i值为 0,执行pa10=pa10-1,执行后 a10的值变为 3;第二次 i值为 1,执行Pa11=Pa11-1,执行后 a11的值为 4;第三次 i值为 2,执行 pa12=1,执行后 a12的值变为 1。故 printf语句输入的值为 2+4+1=7。 43 【正确答案】 A 【试题解析】 函数 fun()
46、中有 3个参数,参数。为一个指针变量,接收的实参可以是数组名,参数 i和 j分别表示数组元素的下标,当下标 i小于下标 j时, ai和aj交换,然后对自身进行调用,可见这是一个递归函数。其实现的功能是 把数组a,从下标为 i的元素到下标为 j的元素之间的所有元素反序存放。在主函数中调用 fun()函数,把 a数组从 a0到 a5之间的所有元素反序存放,最后输出从 a1到 a5的值,因此输出的值为 6、 5、 4、 3、 2、 1。 44 【正确答案】 A 【试题解析】 主函数的第一个参数 argc为整型参数,记下从命令行输入的参数的个数:第二个参数 argv是一个字符型的指针数组,它的每一个元素指向命令行输入的参数字符数。在本例中 argc的值为 2, argv0指向字符串 “exam”, argv1指向参数字符 串 “123”。在 main()函数中, while循环执行了 3 次,