1、二级 C 语言分类模拟题 539 及答案解析(总分:61.00,做题时间:90 分钟)一、选择题(总题数:40,分数:61.00)1.以下叙述中正确的是_。(分数:2.00)A.结构体类型中各个成分的类型必须是一致的B.结构体类型中的成分只能是 C 语言中预先定义的基本数据类型C.在定义结构体类型时,编译程序就为它分配了内存空间D.一个结构体类型可以由多个称为成员(或域)的成分组成2.以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处。 #includestdio.h main() int a10,i=0; while(i10)scanf(“%d“,_); (分数:1.00
2、)A.a+(i+)B. int i; a=“3“; b=“A“; for(i=0;i6;i+) if(i%2)putchar(a+i); else putchar(b+i); 程序运行后的输出结果是_。(分数:1.00)A.AB56EFB.A4C6E8C.B4D6F8D.A5C7E94.有以下程序: main() int a=2, 4, 6, 8, 10, y=0, x, *p; p= for(x=1; x3; x+) y+=px; printf(“%d/n, y“); 程序运行后的输出结果是_。(分数:2.50)A.10B.11C.14D.155.有以下程序: #includestdio.h
3、 struct S int n;int a20; void f(struct S*p) int i,j,t; for(i=0;ip-n-1;i+) for(j=i+1;jp-n;j+) if(p-aip-aj) t=p-ai; p-ai=p-aj; p-aj=t; main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f( for(i=0;is.n;i+) printf(“%d,“,s.ai); 程序的运行结果是_。(分数:2.00)A.2,3,1,6,8,7,5,4,10,9,B.10,9,8,7,6,5,4,3,2,1,C.1,2,3,4,5,
4、6,7,8,9,10,D.10,9,8,7,6,1,2,3,4,5,6.假定当前盘符下有两个文本文件,如下 文件名 a1.txt a2.txt 内容 123# 321# 则下面程序段执行后的结果为 #include“stdio.h“ void fc(FILE*p) char c; while(c=fgetc(p)!=“#“)putchar(c); main() FILE *fp; fp=fopen(“a1.txt“,“r“); fc(fp); fclose(fp); fp=fopen(“a2.txt“,“r“); fc(fp); fclose(fp); putchar(“/n/);(分数:1.
5、00)A.123321B.123C.321D.以上答案都不正确7.以下叙述中错误的是_。(分数:1.00)A.数值型常量有正值和负值的区分B.常量可以用一个符号名来代表C.定义符号常量必须用类型名来设定常量的类型D.常量是在程序运行过程中值不能被改变的量8.有以下程序: #include stdio.h #include stdlib.h int fun(int n) int *p; p=(int*)malloc(aizeof(int); *p=n; return *p; main( ) int a; a=fun(10); printf(“%d/n“,a+fun(10); 程序的运行结果是_。
6、(分数:2.00)A.0B.10C.20D.出错9.下面关于编译预处理的叙述正确的是_。(分数:1.00)A.预处理命令行必须使用分号结尾B.凡是以#号开头的行,都被称为编译预处理命令行C.预处理命令行不能出现在程序的最后一行D.预处理命令行的作用域是到最近的函数结束处10.以下对枚举类型名的定义中正确的是_。(分数:1.00)A.enum a=one, two,three;B.enum aone=9,two=1,three;C.enum a=“one“,“two“,“three“;D.enum a“one“, “two“,“three“;11.以下选项中非法的 C 语言字符常量是_。(分数:
7、2.50)A.“/x9d“B.“9“C.“/x09“D.“/09“12.有以下程序: #include stdio.h int fun(int n) int a; if(n= =1)return 1; a=n+fun(n-1); return(a); main( ) printf(“%d/n“,fun(5); 程序的输出结果是_。(分数:1.00)A.9B.14C.10D.1513.下列不属于软件工程 3 个要素的是_。(分数:2.50)A.工具B.过程C.方法D.环境14.若有定义:int x, *pb; 则正确的赋值表达式是_。(分数:1.00)A.pb=xB.pb=xC.*pb=xD.*
8、pb=*x15.设有两行定义语句: int scanf; float case; 则以下叙述正确的是_。(分数:1.00)A.两行定义语句都不合法B.两行定义语句都合法C.第 1 行语句不合法D.第 2 行语句不合法16.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于_。(分数:1.00)A.需求分析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段17.设整型数 i=5,则 printf(“%d“i+i);的输出为_。(分数:2.00)A.10B.11C.12D.语法错误18.有以下程序 #includestdio.h main() struct STUchar name9;c
9、har sex;double score2; struct STU a=“Zhao“,“m“,85.0,90.0,b=“Qian“,“f“,95.0,92.0; b=a; printf(“%s,%c,%2.0f,%2.0f/n“,b.name,b.sex,b.score0,b.score1); 程序的运行结果是_。(分数:2.00)A.Zhao,m,85,90B.Qian,m,85,90C.Zhao,f,95,92D.Qian,f,95,9219.有两个关系 R 和 S 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C c 3 1 则由关系 R 得到关系 S 的操作是
10、_。(分数:1.00)A.自然连接B并C.选择D.投影20.以下叙述中错误的是_。(分数:1.00)A.函数中的形参属于局部变量B.在函数内部定义的变量只能在本函数范围内使用C.在函数外部定义的变量在所有函数中都有效D.在不同的函数中可以使用相同名字的变量21.以下程序的输出结果是_。 #includestdio.h main() int a=8,b=6,m=1; switch(a%4) case 0:m+; break; case 1:m+; switch(b%3) default:m+; case 0:m+; break; printf(“%d/n“,m);(分数:2.50)A.1B.2C
11、.3D.422.若变量已正确说明为 float 类型,要通过语句 scanf(“%f %f %f“, for(i=1;il0;i+=2) s+=i+1 printf(“%d/n“,s); 程序执行后的输出结果是 _。(分数:2.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中奇数之和D.自然数 110 中偶数之和24.对于循环队列,下列叙述中正确的是_。(分数:1.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针25.下列定义数组的语句中,正确的是_。(分数:1.00)A.in
12、t N 10int xN;B.#define N=10;int xN;C.int x010;D.int x;26.下面选项中不是关系数据库基本特征的是_。(分数:1.00)A.不同的列应有不同的数据类型B.不同的列应有不同的列名C.与行的次序无关D.与列的次序无关27.若有以下程序: #include stdio.h main( ) int a=-2,b=0; do + +b; while(a+ +); printf(“%d,%d/n“,a,b); 则程序的输出结果是_。(分数:2.50)A.1,3B.0,2C.1,2D.2,328.以下选项中关于 C 语言常量的叙述错误的是_。(分数:1.0
13、0)A.常量可分为数值型常量和非数值型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量D.所谓常量,是指在程序运行过程中,其值不能被改变的量29.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4; if(a=2) if(c= =3)|(d=-1) a=5; printf(“%d,%d,%d,%d/n“,a,b,c,d); 则程序的输出结果是_。(分数:2.50)A.2,2,2,4B.2,1,2,-1C.5,1,2,-1D.1,2,3,430.若有定义“float x=1.5;int a=1,b=3
14、,c=2;”,则正确的 switch 语句是_。(分数:1.00)A.switch(a+b) case 1: printf(“*/n“);case 2+1: printf(“*/n“);B.switch(int)x); case 1: printf(“*/n“);case 2: printf(“*/n“);C.switch(x) case 1.0: printf(“*/n“);case 2.0: printf(“*/n“);D.switch(a+b) case 1: printf(“*/n“);case c: printf(“*/n“);31.若要求定义具有 10 个 int 型元素的一维数组
15、 a,则以下定义语句中错误的是_。(分数:1.00)A.int n=10,an;int a2*n;B.#define n 5C.int a5+5;D.#define N 10int aN;32.有以下程序: #include stdio.h #include string.h char * a = “you“; char * b = “Welcome you to Beijing!“; main( ) char * p; p = b; while (*p!= *a)p+; p += strlen(a) + 1; printf(“%s/11“,p); 程序运行后的输出结果是_。(分数:1.00)
16、A.Beijing!B.you to Beijing!C.Welcome you to Beijing!D.to Beijing!33.若定义函数 int *func(),则函数 func 的返回值为_。(分数:2.50)A.一个实数B.一个指向整型变量的指针C.一个指向整型函数的指针D.一个整型函数的入口地址34.若变量已正确定义,则语句 s=32;s=32;printf(“%d“,s);的输出结果是_。(分数:2.00)A.-1B.0C.1D.3235.有如下程序: #include stdio.h void convert(char ch) if(eh“X“) convert(ch+1)
17、; printf(“%c“, ch); main( ) convert(“W“); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.YZB.VWC.XYD.XW36.有以下程序 #includestdio.h main() int x32=0,i; for(i=0;i3;i+)scanf(“%d“,xi); printf(“%3d%3d%3d/n“,x00,x01,x10); 若运行时输入:246回车,则输出结果为_。(分数:2.00)A.204B.200C.240D.24637.下面描述中正确的是_。(分数:1.00)A.好的软件设计应是高内聚低耦合B.内聚性和耦
18、合性无关C.内聚性是指多个模块间相互连接的紧密程度D.耦合性是指一个模块内部各部分彼此结合的紧密程度38.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。(分数:2.50)A.属性B键C.关系D域39.以下标识符不是关键宇的是_。(分数:2.00)A.breakB.charC.switchD.return40.若变量已正确定义,在语句“if(W) printf(“%d/n“,k);”中,以下不可替代 W 的是_。(分数:1.00)A.ab+cB.ch=getchar()C.a=b+cD.a+二级 C 语言分类模拟题 539 答案解析(总分:61.00,做题时间:90 分钟)一、选择题
19、(总题数:40,分数:61.00)1.以下叙述中正确的是_。(分数:2.00)A.结构体类型中各个成分的类型必须是一致的B.结构体类型中的成分只能是 C 语言中预先定义的基本数据类型C.在定义结构体类型时,编译程序就为它分配了内存空间D.一个结构体类型可以由多个称为成员(或域)的成分组成 解析:解析 本题考查结构体类型。结构体类型中的成分可以是结构体,所以 B 选项错误;定义结构体时编译程序并不会给它分配内存空间,所以 C 选项错误;结构体中各个成分的类型可以是不一样的,所以A 选项错误。2.以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处。 #includestdio.
20、h main() int a10,i=0; while(i10)scanf(“%d“,_); (分数:1.00)A.a+(i+) B. int i; a=“3“; b=“A“; for(i=0;i6;i+) if(i%2)putchar(a+i); else putchar(b+i); 程序运行后的输出结果是_。(分数:1.00)A.AB56EFB.A4C6E8 C.B4D6F8D.A5C7E9解析:解析 程序首先赋值 a 为字符3,赋值 b 为字符A,循环变量 i 的初值为 0,每次循环后自增 1,最大值为 5,if 条件判断 i 的值,当 i 的值为偶数时,将 b 与 i 的和当做字符输出
21、;当 i 的值为奇数时,将 a 与 i 的和当做字符输出;所以 i 为 0 时,输出 b+0 即 A;i 为 1 时,输出 a+1 即4;i 为2 时,输出 b+2 即 C;i 为 3 时输出 a+3 即6,综上,程序运行结果为:A4C6E8,本题答案为 B。4.有以下程序: main() int a=2, 4, 6, 8, 10, y=0, x, *p; p= for(x=1; x3; x+) y+=px; printf(“%d/n, y“); 程序运行后的输出结果是_。(分数:2.50)A.10B.11C.14 D.15解析:解析 由题目的语句 p=int a20; void f(stru
22、ct S*p) int i,j,t; for(i=0;ip-n-1;i+) for(j=i+1;jp-n;j+) if(p-aip-aj) t=p-ai; p-ai=p-aj; p-aj=t; main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f( for(i=0;is.n;i+) printf(“%d,“,s.ai); 程序的运行结果是_。(分数:2.00)A.2,3,1,6,8,7,5,4,10,9,B.10,9,8,7,6,5,4,3,2,1,C.1,2,3,4,5,6,7,8,9,10, D.10,9,8,7,6,1,2,3,4,5,解
23、析:解析 本题中子函数 f 的功能是对结构体变量 s 中第二个成员数组中的所有数据进行从小到大的冒泡排序,所以结果是 C 选项。6.假定当前盘符下有两个文本文件,如下 文件名 a1.txt a2.txt 内容 123# 321# 则下面程序段执行后的结果为 #include“stdio.h“ void fc(FILE*p) char c; while(c=fgetc(p)!=“#“)putchar(c); main() FILE *fp; fp=fopen(“a1.txt“,“r“); fc(fp); fclose(fp); fp=fopen(“a2.txt“,“r“); fc(fp); fc
24、lose(fp); putchar(“/n/);(分数:1.00)A.123321 B.123C.321D.以上答案都不正确解析:解析 本题的功能是顺序的读两个文本文件,依次输出。当打开文件时出现错误,fopen 函数将返回 NULL。7.以下叙述中错误的是_。(分数:1.00)A.数值型常量有正值和负值的区分B.常量可以用一个符号名来代表C.定义符号常量必须用类型名来设定常量的类型 D.常量是在程序运行过程中值不能被改变的量解析:解析 数值型常量有整型常量和实型常量,不论是整型常量还是实型常量,都有正值和负值之分,所以 A 正确。在 C 语言的预编译处理中,可以用符号名代表一个常量,定义时不
25、必指定常量类型,所以 C错误,B 正确。常量的定义就是常量是在程序运行过程中值不能被改变的量,所以 D 正确。8.有以下程序: #include stdio.h #include stdlib.h int fun(int n) int *p; p=(int*)malloc(aizeof(int); *p=n; return *p; main( ) int a; a=fun(10); printf(“%d/n“,a+fun(10); 程序的运行结果是_。(分数:2.00)A.0B.10C.20 D.出错解析:解析 malloc(sizeof(int)的作用是开辟一个长度为 sizeof(int)
26、的存储空间,并通过强制类型转换(int*)将此存储空间的地址赋给一个整型的指针变量 p,然后执行语句*p=n,使得*p 的值为 10,并通过 return 返回此值,即 a 的值为 10。最后在主函数中通过 printf()函数输出 a+fun(10)=10+10=20。9.下面关于编译预处理的叙述正确的是_。(分数:1.00)A.预处理命令行必须使用分号结尾B.凡是以#号开头的行,都被称为编译预处理命令行 C.预处理命令行不能出现在程序的最后一行D.预处理命令行的作用域是到最近的函数结束处解析:解析 本题考查预编译的预编译处理命令行,预处理命令行不能以分号结尾,所以 A 选项错误。预处理命令
27、行可以出现在程序的最后一行,C 选项错误。预处理命令行作用域是整个文件,D 选项错误。10.以下对枚举类型名的定义中正确的是_。(分数:1.00)A.enum a=one, two,three;B.enum aone=9,two=1,three; C.enum a=“one“,“two“,“three“;D.enum a“one“, “two“,“three“;解析:解析 声明枚举类型用 enum 开头。例如:enum weekday (sun,mon,tue,wed,thu,fri,sat); 说明:1、在 C 编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较
28、。3、一个整数不能直接赋给一个枚举变量。 11.以下选项中非法的 C 语言字符常量是_。(分数:2.50)A.“/x9d“B.“9“C.“/x09“D.“/09“ 解析:解析 /后跟八进制数据,不能出现数字 9。所以选择 D。12.有以下程序: #include stdio.h int fun(int n) int a; if(n= =1)return 1; a=n+fun(n-1); return(a); main( ) printf(“%d/n“,fun(5); 程序的输出结果是_。(分数:1.00)A.9B.14C.10D.15 解析:解析 本题考查函数的递归调用。只需要一步一步地递归调
29、用:fun 函数即可,执行 fun(5)=5+(4+(3+(2+fun(1)=15,所以答案为 D 选项。13.下列不属于软件工程 3 个要素的是_。(分数:2.50)A.工具B.过程C.方法D.环境 解析:解析 软件工程包括 3 个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。14.若有定义:int x, *pb; 则正确的赋值表达式是_。(分数:1.00)A.pb=x B.pb=xC.*pb=xD.*pb=*x解析:解析 pb 是指解除对*pb 的引用(也可以认为是取 pb 所指向的地址的值),被解除
30、引用的指针可以作为左值,为取地址运算符,x 就是取指向变量 x 的指针。15.设有两行定义语句: int scanf; float case; 则以下叙述正确的是_。(分数:1.00)A.两行定义语句都不合法B.两行定义语句都合法C.第 1 行语句不合法D.第 2 行语句不合法 解析:解析 合法的标识符由字母(大、小写均可)、数字和下划线组成,并且必须以字母或下划线开头。关键字是指被 C 语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着固定的含义,用户不可重新定义。预定义标识符是系统已经有过定义的标识符,用户可以重新定义,可以作为变量名。scanf 为库函数名,属于预定义标识符,
31、可以被用户重定义,所以第一行语句合法。case 为关键字,是选择结构 switch 语句中的关键字,不可被用户重定义,所以第二行语句不合法。故 D 选项正确。16.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于_。(分数:1.00)A.需求分析阶段B.概念设计阶段C.逻辑设计阶段 D.物理设计阶段解析:解析 将 E-R 图转换成关系数据模型是把图形分析出来的联系反映到数据库中,即设计出表,因此属于逻辑设计阶段,答案为 C。17.设整型数 i=5,则 printf(“%d“i+i);的输出为_。(分数:2.00)A.10B.11C.12D.语法错误 解析:解析 C 语言中有基本的算术
32、运算符(+、-、*、/)还包括自增自减运算符(+、-),在 C 语言解析表达式时,它总是进行贪婪咀嚼,这佯,该表达式就被解析为 i+ + +i,显然该表达式不合 C 语言语法。18.有以下程序 #includestdio.h main() struct STUchar name9;char sex;double score2; struct STU a=“Zhao“,“m“,85.0,90.0,b=“Qian“,“f“,95.0,92.0; b=a; printf(“%s,%c,%2.0f,%2.0f/n“,b.name,b.sex,b.score0,b.score1); 程序的运行结果是_。
33、(分数:2.00)A.Zhao,m,85,90 B.Qian,m,85,90C.Zhao,f,95,92D.Qian,f,95,92解析:解析 结构体可以整体传递,b=a,则结构体 b 里的数据为 a 的数据,所以选择 A。19.有两个关系 R 和 S 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C c 3 1 则由关系 R 得到关系 S 的操作是_。(分数:1.00)A.自然连接B并C.选择 D.投影解析:解析 选择:在数据表中给予一定的条件进行筛选数据。投影:把表中的某几个属性的数据选择出来。连接:有自然连接、外连接、内连接等,连接主要用于多表之间的数据查询。并
34、:与数学中的并是一样的。两张表进行并操作,要求它们的属性个数相同并且需要相容。20.以下叙述中错误的是_。(分数:1.00)A.函数中的形参属于局部变量B.在函数内部定义的变量只能在本函数范围内使用C.在函数外部定义的变量在所有函数中都有效 D.在不同的函数中可以使用相同名字的变量解析:解析 全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区域内的函数才可以调用,如果在函数外部定义变量,该变量不能被之前的函数访问。所以 C 选项说法错误,答案为 C 选项。21.以下程序的输出结果是_。 #includestdio.h main() int a=8,b=6,m=1; switch(a%
35、4) case 0:m+; break; case 1:m+; switch(b%3) default:m+; case 0:m+; break; printf(“%d/n“,m);(分数:2.50)A.1B.2 C.3D.4解析:解析 本题考查 switch 语句。因为 a=8,a%4=0,所以执行 case 0 后面的语句,将 m 加 1,遇到break 语句跳出 switch。22.若变量已正确说明为 float 类型,要通过语句 scanf(“%f %f %f“, for(i=1;il0;i+=2) s+=i+1 printf(“%d/n“,s); 程序执行后的输出结果是 _。(分数:
36、2.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中奇数之和D.自然数 110 中偶数之和 解析:解析 本题中 s=(1+1)+(3+1)+(5+1)+(7+1)+(9+1)=2+4+6=8+10。24.对于循环队列,下列叙述中正确的是_。(分数:1.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针 解析:解析 循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以队头指针有时可能大于队尾指针,有时也可能小于队尾指针。25.下列定
37、义数组的语句中,正确的是_。(分数:1.00)A.int N 10int xN;B.#define N=10;int xN; C.int x010;D.int x;解析:解析 数组说明的一般形式为:类型说明符数组名常量表达式。A 中 N 是变量,不能用变量定义数组长度。C 选项中数组长度是非法的一串数字,定义数组时必须为其指明长度。D 选项中数组长度为空,因此非法。故本题答案为 B。26.下面选项中不是关系数据库基本特征的是_。(分数:1.00)A.不同的列应有不同的数据类型 B.不同的列应有不同的列名C.与行的次序无关D.与列的次序无关解析:解析 在关系数据库中,二维表由行数据组成,每行数据
38、包含若干属性值,每个属性都有指定的类型和取值范围。数据行数是有限的,每行数据互不相同(元组唯一性),每行的次序可以任意交换(元组的次序无关性);表中属性名(列各)各不相同即字段名不重复,属性名(列名)次序可任意交换。故本题答案为 A 选项。27.若有以下程序: #include stdio.h main( ) int a=-2,b=0; do + +b; while(a+ +); printf(“%d,%d/n“,a,b); 则程序的输出结果是_。(分数:2.50)A.1,3 B.0,2C.1,2D.2,3解析:解析 本题重点考查 dowhile 语句及 dowhile 的循环语句保证会执行一
39、次(表达式的真值在每次循环结束后检查),+b 即变量 b 自增 1 后再参与运算,而 a+则表示 a 参与运算后再自增 1。所以第一次循环结束后,b=1,a=-1;第二次循环后,b=2,a=0,这里是先对 while 的判断为真,然后 a 才自增为零的,所以还会进行第三次循环;第三次循环后,b=3,a=1。因此 A 选项正确。28.以下选项中关于 C 语言常量的叙述错误的是_。(分数:1.00)A.常量可分为数值型常量和非数值型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量 D.所谓常量,是指在程序运行过程中,其值不能被改变的量解析:解析 常量是在程
40、序运行时,其值不能被改变的量,跟是否经常使用没关系,所以 C 错误。29.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4; if(a=2) if(c= =3)|(d=-1) a=5; printf(“%d,%d,%d,%d/n“,a,b,c,d); 则程序的输出结果是_。(分数:2.50)A.2,2,2,4B.2,1,2,-1C.5,1,2,-1 D.1,2,3,4解析:解析 第一个 if 语句的判断条件是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if 判断条件,均为赋值表达式,第一个运算对象 a=2 非零,判断第二个表达式
41、 b=1 也非零,所以条件成立执行 c=2 的赋值操作。执行第二个 if 判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中 c=3 运算对象为假,所以需要判断第二个运算对象 d=-1,结果为非零,所以条件成立,执行a=5,的操作,所以 a 值为 5,b 值为 1,c 值为 2,d 值为-1。30.若有定义“float x=1.5;int a=1,b=3,c=2;”,则正确的 switch 语句是_。(分数:1.00)A.switch(a+b) case 1: printf(“*/n“);case 2+1: printf(“*/n“); B.switch(int)x); case
42、 1: printf(“*/n“);case 2: printf(“*/n“);C.switch(x) case 1.0: printf(“*/n“);case 2.0: printf(“*/n“);D.switch(a+b) case 1: printf(“*/n“);case c: printf(“*/n“);解析:解析 B 选项的“switch(int)x);”语句中不应该有最后的分号。“switch(expr1)”中的 expr1不能用浮点类型或 long 类型,也不能为一个字符串,因此 C 错误。case 后面只能是常量表达式,因此 D错误。31.若要求定义具有 10 个 int 型
43、元素的一维数组 a,则以下定义语句中错误的是_。(分数:1.00)A.int n=10,an;int a2*n; B.#define n 5C.int a5+5;D.#define N 10int aN;解析:解析 变量不能充当数组定义的长度。所以 A 错误。32.有以下程序: #include stdio.h #include string.h char * a = “you“; char * b = “Welcome you to Beijing!“; main( ) char * p; p = b; while (*p!= *a)p+; p += strlen(a) + 1; print
44、f(“%s/11“,p); 程序运行后的输出结果是_。(分数:1.00)A.Beijing!B.you to Beijing!C.Welcome you to Beijing!D.to Beijing! 解析:解析 while 函数判断 p 指针指向地址的内容是否和 a 指针指向地址的内容相等,如果不是,则移动指针 p+1,当 p 指向* b 字符串中的y时,和*a 首地址元素相等,退出 while 语句后,p 再向右移动 a 字符串长度+1 个单位地址,此时 p 指向t,输出t及剩余的字符串,答案为 D 选项。33.若定义函数 int *func(),则函数 func 的返回值为_。(分数:
45、2.50)A.一个实数B.一个指向整型变量的指针 C.一个指向整型函数的指针D.一个整型函数的入口地址解析:解析 本题考查函数返回值。fun 函数的返回值类型为 int*类型,即函数返回一个指向整型变量的指针。34.若变量已正确定义,则语句 s=32;s=32;printf(“%d“,s);的输出结果是_。(分数:2.00)A.-1B.0 C.1D.32解析:解析 本题考查逻辑异或运算。异或运算只有在两个比较的位不同时其结果为 1,否则结果为 0,题目中两个值相同,所以结果为 0。35.有如下程序: #include stdio.h void convert(char ch) if(eh“X“
46、) convert(ch+1); printf(“%c“, ch); main( ) convert(“W“); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.YZB.VWC.XYD.XW 解析:解析 在 main 函数中,执行 convert(“W“)函数,因为W比X小,满足 if 语句,再执行convert(ch+1);此时 ch=“X“,不满足条件,输出 X,完成后,返回上一次 convert 中,输出上次ch=“W“,因此答案为 D 选项。36.有以下程序 #includestdio.h main() int x32=0,i; for(i=0;i3;i+)scanf(“%d“,xi); printf(“%3d%3d%3d/n“,x00,x01,x10); 若运行时输入:246回车,则输出结果为_。(分数:2.00)A.204 B.200C.240D.246解析:解析 本题中输入的 3 个数据 2,4,6 分别赋给了 x00,x10,x20。x