1、二级 C 语言笔试 373 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.在 C 语言程序中,下列说法正确的是( )。(分数:2.00)A.函数的定义和函数的调用均可以嵌套B.函数的定义不可以嵌套,但函数的调用可以嵌套C.函数的定义可以嵌套,但函数的调用不可以嵌套D.函数的定义和函数的调用均不可以嵌套2.在位运算中,操作数每右移两位,其结果相当于( )。(分数:2.00)A.操作数乘以 2B.操作数除以 2C.操作数除以 4D.操作数乘以 43.下列说法不正确的是( )。(分数:2.00)A.一个 C 语言源程序可以由一个函数组成也
2、可以由多个函数组成B.main()中的“()”是函数的参数部分,括号内可为空,但括号不能省略C.C 语言程序是以函数为基本单位的D.在 C 语言程序中,注释行只能位于一条语句的后面4.若 ch 为 char 型变量,k 为 int 型变量(已知字符 a 的 ASCII 码是 97),则执行下列语句后输出的结果为( )。 ch=b; k=10; printf(“%x,%o,“,ch,ch,k); printf(“k:%d/n“,k);(分数:2.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 值或不定值C.62,142,k=%dD.62,142
3、,k=%105.设计程序时,应采纳的原则之一是( )。(分数:2.00)A.程序的结构应有助于读者的理解B.限制 GOTO 语句的使用C.减少或取消注释行D.程序越短越好6.下列程序的输出结果是( )。 main() int i=1 j=2,k=3; if(i+=1 (分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 37.若变量已正确定义,要求通过 scanf(“%c%d%c%d“, char sex; int age; a1,a2; 则下列语句中错误的是( )。(分数:2.00)A.printf(“%d%c,%d“,a1);B.a2.age=a1.age;C.a1.ag
4、e+;D.a1.num=5;9.在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用“(双撇号)括起时,寻找被包含文件的方式是( )。(分数:2.00)A.直接按系统设定的标准方式搜索目录B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索C.仅仅搜索源程序所在目录D.仅仅搜索当前目录10.下列叙述中正确的是( )。(分数:2.00)A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B.实型变量中允许存放整型数C.若 a 和 b 类型相同,在执行了赋值 a=b 后,b 中的值将放入 a 中,但 b 中的值不变D.在 C 程序中,求余运算符“%”两
5、边的类型相同时才能进行运算11.简单的交换排序方法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序12.下列能正确进行字符串赋值的是( )。(分数:2.00)A.char s5=“ABCDE“;B.char s5=A,B,C,D,E;C.char*s;s=“ABCDE“;D.char*s;printf(“%s“,;13.在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。(分数:2.00)A.调用语句B.命令C.N 令D.消息14.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大
6、,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对15.设 x、y 和 z 是 int 型变量,且 x=4,y=6,z=8,则下列表达式中值为 0 的是( )。(分数:2.00)A.x”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。(分数:2.00)A.*(*(a+B.(a+C.*(a+i+D.*(a+j19.若有说明 char s130=“abc“,s2=“defghi“;,则在使用函数 strcat(s1,s2)后,结果是( )。(分数:2.00)A.s1 的内容更新为 abcdefghiB.s1 的内容更新为 defghi/0C.s
7、1 的内容更新为 defghiabc/0D.s1 的内容更新为 abcdefghi/020.下列程序的输出结果是( )。 #includestdio.h main() int a=0,i; for(i=1;i5;i+) switch(i) case 0: case 3:a+=1; case 1: case2:a+=2; default:a+=3; printf(“%d“,a); (分数:2.00)A.19B.18C.6D.821.下列说法中不正确的是( )。(分数:2.00)A.指针是一个变量B.指针中存放的是数值C.指针可以进行加、减等算术运算D.指针变量占用存储空间22.C 语言结构体类型
8、变量在程序执行期间( )。(分数:2.00)A.所有成员一直驻留在内存中B.没有成员驻留在内存中C.部分成员驻留在内存中D.只有一个成员驻留在内存中23.有下列程序: fun(int x,int y)return(x+y); main() inta=l1b=2,c=3,sum; sum=fun(a+,b+,a+b),C+); printf(“%d/n“,sum); 执行后的输出结果是( )。(分数:2.00)A.6B.7C.8D.924.下列能正确定义且赋初值的语句是( )。(分数:2.00)A.int n1=n2=10;B.char c=32;C.float f=f+1.1;D.double
9、 x=12.3E2.5;25.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率26.若各选项中所用变量已正确定义,fun()函数中通过 return 语句返回一个函数值,下列选项中错误的程序是( )。(分数:2.00)A.main() x=fun(2,10); float fun(int a,int B.float fun(int a,int main() x=fun(
10、i,;C.float fun(int,in; main() x=fun(2,10); float fun(int a,int D.main() float fun(int I,int; x=fun(i,; float fun(int a,int 27.下列程序的输出结果是( )。 main() int a=4,b=5,c; if(ab) c=a*b;printf(“%d,%d,%d/n“,b,a,c); else c=b/a; printf(“%d,%d,%d/n“,b,a,c); (分数:2.00)A.4,5,12B.20C.5,4,20D.1228.下列合法的声明语句是( )。(分数:2.
11、00)A.int_abc=50;B.double int=3+5e2.5C.long do=1L;D.float 3_asd=3e-3;29.在 C 语言中,while 和 dowhile 循环的主要区别是( )。(分数:2.00)A.dowhile 的循环体不能是复合语句B.dowhile 允许从循环体外转到循环体内C.whil8 的循环体至少被执行一次D.dowhile 的循环体至少被执行一次30.sizeof(float)是( )。(分数:2.00)A.一种函数调用B.一种函数定义C.一个浮点表达式D.一个整型表达式31.下列叙述中正确的是( )。(分数:1.00)A.软件交付使用后还需
12、要进行维护B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令32.下列二维数组的说明中,不正确的是( )。(分数:1.00)A.float a4=0,1,8,5,9;B.int a34;C.#define N 5 float a 3;D.int a 29.5;33.若有定义和语句: int*pp,*p,a=20,b=10; pp=p=p=printf(“%d,%d/n“,*p,*pp); 则输出结果是( )。(分数:1.00)A.20,10B.20,20C.10,20D.10,1034.若函数调用时,参数为基本数据类型的变量,下列叙述
13、中正确的是( )。(分数:1.00)A.实参与其对应的形参共占存储单元B.只有当实参与其对应的形参同名时才共占存储单元C.实参与其对应的形参分别占用不同的存储单元D.实参将数据传递给形参后,立即释放原先占用的存储单元35.下列描述中正确的是( )。(分数:1.00)A.在 C 语言程序中预处理是指完成宏替换和文件包含指定的文件的调用B.预处理指令只能位于 C 源程序文件的首部C.预处理命令可以放在程序中的任何位置D.预处理命令结尾需要加分号36.有下列程序: main() int k=5; while(-k) printf(“%d“,k-=3); printf(“/n“); 执行后的输出结果是
14、( )。(分数:1.00)A.1B.2C.4D.死循环37.设有变量说明 int(*p)m,其中的标识符 p 是( )。(分数:1.00)A.m 个指向整型变量的指针B.指向 m 个整型变量的指针C.一个指向具有 m 个整型元素的一维数组的指针D.具有 m 个指针元素的一维指针数组,每个元素都指向整型变量38.判断 char 型变量 c1 是否为小写字母的正确表达式为( )。(分数:1.00)A.a=c1=zB.(c1=c1=C.(a=c1(z=c1)D.(c1=a) switch(x) case 1: switch(y) Case0:a+;break; case 1:b+;break; ca
15、se2: a+;b+;break; printf(“a=%d,b=%d/n“,a,b); (分数:2.00)填空项 1:_49.C 语言用于结构化程序设计的 3 种基本结构是 1、选择结构和循环结构。(分数:2.00)填空项 1:_50.下列循环的循环次数是_。 int k=2; while(k=0) printf(“%d“,k); k-; printf(“/n“);(分数:2.00)填空项 1:_51.若有定义 float b15,*p=b;,且数组 b 的首地址为 200H,则 p+13 所指向的数组元素的地址为 1。(分数:2.00)填空项 1:_52.“printf(“%d/n“,st
16、rlen(“/t/“/023/xABC/n“);”语句的输出结果是_。(分数:2.00)填空项 1:_53.设有下列宏定义:#define A 2 #define B A+3 则执行赋值语句:t=B*2;t 为 int 型变量后的值是_。(分数:2.00)填空项 1:_54.下列程序的功能是将字符串 s 中所有的字符 c 删除。请填空。 #includestdio.h main() char s80; int i,j; gets(s); for(i=j=0;si !=/0;i+) if(si !=c)_; sj=/0; puts(s); (分数:2.00)填空项 1:_55.下列程序的运行结果
17、是_。 #includestdio.h func(a,b) static int m=0,i=2; i+=m+1; m=i+a+b; return(m); main() int k=5,m=3,p; p=func(k,m); printf(“%d“,p); p=func(k,m); printf(“%d/n“,p); (分数:2.00)填空项 1:_二级 C 语言笔试 373 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.在 C 语言程序中,下列说法正确的是( )。(分数:2.00)A.函数的定义和函数的调用均可以嵌套B.函数的定义不
18、可以嵌套,但函数的调用可以嵌套 C.函数的定义可以嵌套,但函数的调用不可以嵌套D.函数的定义和函数的调用均不可以嵌套解析:解析 本题考查函数调用的基本概念。因为函数的结果是个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但函数的调用可以嵌套。2.在位运算中,操作数每右移两位,其结果相当于( )。(分数:2.00)A.操作数乘以 2B.操作数除以 2C.操作数除以 4 D.操作数乘以 4解析:解析 在位运算中,操作数每右移两位,相当于在操作数的左侧添 0,最右面的两位被移出,即操作数除以 4。3.下列说法不正确的是( )。(分数:2.00)A.一个 C 语言源程序可以由一个函数组成
19、也可以由多个函数组成B.main()中的“()”是函数的参数部分,括号内可为空,但括号不能省略C.C 语言程序是以函数为基本单位的D.在 C 语言程序中,注释行只能位于一条语句的后面 解析:解析 本题涉及 C 语言基本的 3 个知识点:C 语言是以函数为基本单位的,每一个函数完成相对独立的功能,一个程序可以包括多个函数,但有且仅有一个主函数;主函数 main()的圆括号内是填写参数的,可以没有参数,但括号不可以省略:程序的注释部分应该在“/*/”之间,它允许出现在程序的任何位置。4.若 ch 为 char 型变量,k 为 int 型变量(已知字符 a 的 ASCII 码是 97),则执行下列语
20、句后输出的结果为( )。 ch=b; k=10; printf(“%x,%o,“,ch,ch,k); printf(“k:%d/n“,k);(分数:2.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 值或不定值C.62,142,k=%d D.62,142,k=%10解析:解析 第 1 个 printf 函数,格式说明的个数是 2,而输出项的个数是 3,所以对于多余的输出项k 不予输出;第 2 个 printf 函数,有两个%说明,第 1 个%后面的字符要原样输出。 知识拓展 本题考查 printf 函数的格式。“%x”和“%o”分别表示以+六
21、进制和八进制无符号型输出整型数据(不带前导0x 或 0):printf 函数中格式说明符之前插入的任何字符都原样输出;格式说明与输出项的个数也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。5.设计程序时,应采纳的原则之一是( )。(分数:2.00)A.程序的结构应有助于读者的理解 B.限制 GOTO 语句的使用C.减少或取消注释行D.程序越短越好解析:解析 程序设计的风格主要强调程序的简单、清晰和可理解性,以便读者理解。程序滥用 GOTO 语句将使程序流程无规律,可读性差;添加注释行有利于对程序的理解,不应减少或取消,程序的长短要依据实际的需要而定,并不是越短越好。6
22、.下列程序的输出结果是( )。 main() int i=1 j=2,k=3; if(i+=1 (分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析:解析 本题考查自增运算符“+”、逻辑与运算符“ char sex; int age; a1,a2; 则下列语句中错误的是( )。(分数:2.00)A.printf(“%d%c,%d“,a1); B.a2.age=a1.age;C.a1.age+;D.a1.num=5;解析:解析 题中 a1 和 a2 两个结构体变量名所对应的成员相同,可以与运算“+”相结合。结构体变量的输出格式为:printf(“要输出变量名:%d/t
23、“,结构变量名.要输出的成员变量名)。9.在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用“(双撇号)括起时,寻找被包含文件的方式是( )。(分数:2.00)A.直接按系统设定的标准方式搜索目录B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索 C.仅仅搜索源程序所在目录D.仅仅搜索当前目录解析:解析 本题考查库函数调用的知识点。格式 1:#include 文件名,预处理程序在标准目录下查找指定的文件;格式 2:#include“文件名“,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。10.下列叙
24、述中正确的是( )。(分数:2.00)A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B.实型变量中允许存放整型数 C.若 a 和 b 类型相同,在执行了赋值 a=b 后,b 中的值将放入 a 中,但 b 中的值不变D.在 C 程序中,求余运算符“%”两边的类型相同时才能进行运算解析:解析 选项 A,在赋值表达式中,赋值号的左边只能是变量或者是代表某个存储单元的表达式,不能是任意表达式。在判断选项 B)时首先应该建立这样的概念,整型变量中只能存放整型数,实型变量中能存放实型数,也能存放整型数。选项 C),执行表达式 a=b 后,将把变量 b 存储单元中的值赋给变量a,从而覆盖
25、a 中原有的值,但 b 中原有的值并不改变。选项 D),在 C 程序中,求余运算符“%”两边的类型均为整型数据。11.简单的交换排序方法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序 解析:解析 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。12.下列能正确进行字符串赋值的是( )。(分数:2.00)A.char s5=“ABCDE“;B.char s5=A,B,C,D,E;C.char*s;s=“ABCDE“; D.char*s;prin
26、tf(“%s“,;解析:解析 字符串存储要有结束符“/0”且要占用一个空间,选项 A)、B 的空间不够;primf 用来输出字符,不能输入字符串。13.在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。(分数:2.00)A.调用语句B.命令C.N 令D.消息 解析:解析 在面向对象方法中;对象之间通过消息进行通信。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎么完成这些处理,接受者独立决定采用什么方式完成所需的处理。14.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则
27、其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对 解析:解析 算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况,它们之间没有内在联系。15.设 x、y 和 z 是 int 型变量,且 x=4,y=6,z=8,则下列表达式中值为 0 的是( )。(分数:2.00)A.x”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。(分数:2.00)A.*(*(a+ B.(a+C.*(a+i+D.*(a+j解析:解析 本题考查如何通过地址来引用数组元素。通过地址来引用数组元素的方法有下列 5 种: aij:*(ai+j);*(*(a+i)
28、+j):*(aij;*(,则在使用函数 strcat(s1,s2)后,结果是( )。(分数:2.00)A.s1 的内容更新为 abcdefghiB.s1 的内容更新为 defghi/0C.s1 的内容更新为 defghiabc/0D.s1 的内容更新为 abcdefghi/0 解析:解析 strcat(s1,s2)是把 s2 字符串连接到 s1 字符串的末尾,要保证 s1 能容纳下连接后的字符串。20.下列程序的输出结果是( )。 #includestdio.h main() int a=0,i; for(i=1;i5;i+) switch(i) case 0: case 3:a+=1; ca
29、se 1: case2:a+=2; default:a+=3; printf(“%d“,a); (分数:2.00)A.19 B.18C.6D.8解析:解析 本题考查 switch 语句。当 i=1 时,执行 case 1,因为没有遇到 break 语句,所以依次往下运行, a=a+2=2,a=a+3=5 当 i=2 时,执行 case2,因为没有遇到 break 语句,所以依次往下运行,a=a+2=7, a=a+3=10;当 i=3 时,执行 case3,a=a+1=11,因为没有遇到 break 语句,所以依次往下运行,a=a+2=13, a=a+3=16;当 i=4 时,执行 defaul
30、t,a=a+3=19,结束循环。21.下列说法中不正确的是( )。(分数:2.00)A.指针是一个变量B.指针中存放的是数值 C.指针可以进行加、减等算术运算D.指针变量占用存储空间解析:解析 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。22.C 语言结构体类型变量在程序执行期间( )。(分数:2.00)A.所有成员一直驻留在内存中 B.没有成员驻留在内存中C.部分成员驻留在内存中D.只有一个成员驻留在内存中解析:解析 C 语言结构体类型变量在程序执行期间所有成员一直驻留在内存中。23.有下列程序: fun(int x,int y)r
31、eturn(x+y); main() inta=l1b=2,c=3,sum; sum=fun(a+,b+,a+b),C+); printf(“%d/n“,sum); 执行后的输出结果是( )。(分数:2.00)A.6B.7C.8 D.9解析:解析 函数 fun(int x,int y)的功能是返回两个整型数据的和。在主函数中,变量 a,b,c 的初始值分别为 1,2,3。因此逗号表达式“a+,b+,a+b”的值等于 5,表达式 c+的值为 3,调用子函数的表达式为“fun(5,3);”,其返回值等 8。所以变量 sum 的值等于 8。24.下列能正确定义且赋初值的语句是( )。(分数:2.00
32、)A.int n1=n2=10;B.char c=32; C.float f=f+1.1;D.double x=12.3E2.5;解析:解析 C 语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。在选项 A)中在给 n1和 n2 进行赋初值,但变量 n2 没有定义:在选项 C)中定义变量 f 时,不能在赋值表达式的右边出现变量f 自身,所以选项 C)错误;在选项 D)用指数表达式的常量中,字母 E 后面的数应该为整数,而不应该为小数形式。因此,选项 B)正确。25.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于
33、非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。26.若各选项中所用变量已正确定义,fun()函数中通过 return 语句返回一个函数值,下列选项中错误的程序是( )。(分数:2.00)A.main() x=fun(2,10); float fun(int a,int B.float fun(i
34、nt a,int main() x=fun(i,;C.float fun(int,in; main() x=fun(2,10); float fun(int a,int D.main() float fun(int I,int; x=fun(i,; float fun(int a,int 解析:解析 C 语言规定,函数必须先定义,后调用(函数的返回值类型为 int 或 char 时除外)。在选项A)中,调用的子函数在调用后面定义,所以不正确。在选项 B)、C)中,被调用函数在主调函数之前定义,再在主函数中调用,所以是正确的;在选项 D)中,在主调函数中先对子函数 float fun(int i
35、,int j)进行了定义,然后进行调用。27.下列程序的输出结果是( )。 main() int a=4,b=5,c; if(ab) c=a*b;printf(“%d,%d,%d/n“,b,a,c); else c=b/a; printf(“%d,%d,%d/n“,b,a,c); (分数:2.00)A.4,5,12B.20C.5,4,20 D.12解析:解析 本题考查 if else 语句。第一个 if 语句,先判断条件,发现 ab 成立,执行下列的复合语句,得 c=a*b=20,b、a 的值不变。28.下列合法的声明语句是( )。(分数:2.00)A.int_abc=50; B.double
36、 int=3+5e2.5C.long do=1L;D.float 3_asd=3e-3;解析:解析 C 语言规定,标识符是由字母、数字或下画线组成,并且它的第一个字符必须是字母或者下画线。另外 C 语言规定了一些专用的标识符,它们有着固定的含义,不能更改。int 就是表达变量类型的标识符,它不能再用做变量名和函数名。d。是 C 语言的一个关键字,也不能再用做变量名和函数名。29.在 C 语言中,while 和 dowhile 循环的主要区别是( )。(分数:2.00)A.dowhile 的循环体不能是复合语句B.dowhile 允许从循环体外转到循环体内C.whil8 的循环体至少被执行一次D
37、.dowhile 的循环体至少被执行一次 解析:解析 本题考查 while 和 dowhile 循环的区别。 while 循环的控制出现在循环体之前,只有当while 后面的表达式的值为非零时,才可能执行循环体:在 do while 构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。30.sizeof(float)是( )。(分数:2.00)A.一种函数调用B.一种函数定义C.一个浮点表达式D.一个整型表达式 解析:解析 sizeof(float)是 C 语言内部规定的用于计算单精度型变量(float)在计算机的内存中所占用的字节数量
38、的函数,返回一个整数值。31.下列叙述中正确的是( )。(分数:1.00)A.软件交付使用后还需要进行维护 B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令解析:解析 软件生命周期一般可以分为软件定义、软件开发及软件运行维护 3 个阶段。软件交付并投入运行后,需要不断地进行维护,并根据新提出的需求进行必要而且可能的扩展和删改。32.下列二维数组的说明中,不正确的是( )。(分数:1.00)A.float a4=0,1,8,5,9;B.int a34;C.#define N 5 float a 3;D.int a 29.5; 解析:解
39、析 C 语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式;二维数组的一般定义格式是:类型说明符数组名常量表达式常量表达式)。33.若有定义和语句: int*pp,*p,a=20,b=10; pp=p=p=printf(“%d,%d/n“,*p,*pp); 则输出结果是( )。(分数:1.00)A.20,10B.20,20C.10,20D.10,10 解析:解析 本题考查指针变量的赋值。 *pp 是定义了一个指向指针的指针变量,语句 pp= while(-k) printf(“%d“,k-=3); printf(“/n“); 执行后的输出结果是(
40、 )。(分数:1.00)A.1 B.2C.4D.死循环解析:解析 在程序语句中,k 的初始值为 5,进行第 1 次 while 循环后,k 自减 1 为 4,非 0,执行循环体里的 printf 语句,输出 1,此时 k 的值变为 1。程序执行第 2 次循环时,k 自减 1 变为 0,为假,退出 while 循环语句。所以程序的最后结果为 1。37.设有变量说明 int(*p)m,其中的标识符 p 是( )。(分数:1.00)A.m 个指向整型变量的指针B.指向 m 个整型变量的指针C.一个指向具有 m 个整型元素的一维数组的指针 D.具有 m 个指针元素的一维指针数组,每个元素都指向整型变量
41、解析:解析 本题考查指向数组的指针变量的声明。这里的 p 表示一个指向数组的指针;*p 表示指针 p指向地址的内容。38.判断 char 型变量 c1 是否为小写字母的正确表达式为( )。(分数:1.00)A.a=c1=zB.(c1=c1=C.(a=c1(z=c1)D.(c1=a) switch(x) case 1: switch(y) Case0:a+;break; case 1:b+;break; case2: a+;b+;break; printf(“a=%d,b=%d/n“,a,b); (分数:2.00)填空项 1:_ (正确答案:a=2,b=3)解析:解析 分析程序,程序从 x=1
42、语句开始执行,之后执行第一个 switch 语句,switch(x)=switch(1),所以执行 case1,case1 语句中包含一个复合 switch 语句;这时执行第二个 switch 语句,此时 y=1,所以 switch(y)= switch(1),因此执行 case 1,将 b 加 1,得到 b=2,遇到 break 语句,退出第二个switch 语句,则整个 case 1 的复合语句执行完毕,由于在这个 case 1 的后面没有 break 语句使其退出第一个 switch 语句,所以接着执行下列的 case 2 后面的语句,即将 a、b 各加 1,得到 a=2,b=3。49.
43、C 语言用于结构化程序设计的 3 种基本结构是 1、选择结构和循环结构。(分数:2.00)填空项 1:_ (正确答案:顺序结构)解析:解析 结构化程序有 3 种基本结构,即顺序结构、选择结构(包括汀语句和 switch 语句)和循环结构(包括 for 语句、while 语句、dowhile 语句)。50.下列循环的循环次数是_。 int k=2; while(k=0) printf(“%d“,k); k-; printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:0)解析:解析 解答本题需要注意表达式“k=0”,它是赋值表达式而不是关系表达式,不论 k 为何值,表达式 k=0
44、总会使 k 为 0,所以不能进入循环。51.若有定义 float b15,*p=b;,且数组 b 的首地址为 200H,则 p+13 所指向的数组元素的地址为 1。(分数:2.00)填空项 1:_ (正确答案:252H)解析:解析 要解答本题,首先要明白在对指针进行加、减运算时,数字“1”不是+进制数的“1”,而是指“1”个存储单元长度。1 个存储单元长度占存储空间的多少,应该视具体情况而定,如果存储单元的基类型是血型,则移动 1 个存储单元的长度就是位移 2 个字节;如果存储单元基类型是 float 型,则移动 1 个存储单元的长度就是位移 4 个字节。所以 p+13 所指向的数组元素的地址
45、为:200H+(13*4)H=252H。52.“printf(“%d/n“,strlen(“/t/“/023/xABC/n“);”语句的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:6)解析:解析 strlen()函数的作用是计算字符串的长度并作为函数的返回值,这里的长度不包括串尾的结束标志/0。 /t是转义字符,代表横向跳若干格:/“是转义字符,代表双引号:/023只代表一个字符,而不管转义字符后面有几个字符;/xAB是以两位+六进制数 AB 表示的 ASCII 码字符,只代表一个字符;/n是转义字符,代表回车换行。 5 个字符常量各代表一个字符,再加上字母 C,所以返回的长度
46、是 6。53.设有下列宏定义:#define A 2 #define B A+3 则执行赋值语句:t=B*2;t 为 int 型变量后的值是_。(分数:2.00)填空项 1:_ (正确答案:8)解析:解析 本题考查带参数的宏定义及相关运算。运算过程为:t=B*2=A+3*2=2+3*2=8。54.下列程序的功能是将字符串 s 中所有的字符 c 删除。请填空。 #includestdio.h main() char s80; int i,j; gets(s); for(i=j=0;si !=/0;i+) if(si !=c)_; sj=/0; puts(s); (分数:2.00)填空项 1:_
47、(正确答案:sj+=si)解析:解析 循环开始后如果数组 s 中储存值与字符 c 相同,则 i+直接跳过当前值:如果不相同,则将当前值赋予数组指定位置,并通过 j+将下标加 1,指向下一元素要存储的位置。55.下列程序的运行结果是_。 #includestdio.h func(a,b) static int m=0,i=2; i+=m+1; m=i+a+b; return(m); main() int k=5,m=3,p; p=func(k,m); printf(“%d“,p); p=func(k,m); printf(“%d/n“,p); (分数:2.00)填空项 1:_ (正确答案:11 23