1、二级 C语言分类模拟题 507及答案解析(总分:54.50,做题时间:90 分钟)一、选择题(总题数:35,分数:54.50)1.指针变量 p的基类型为 double,并已指向一连续存储区,若 p中当前的地址值为 65490,则执行 p+后,p中的值为 _(分数:1.00)A.65490B.65492C.65494D.654982.对于 while(!E) s;,若要执行循环体 s,则 E的取值应为_。(分数:1.00)A.E等于 1B.E不等于 0C.E不等于 1D.E等于 03.简单程序设计步骤中不包括_。(分数:1.00)A.编码B.确定算法C.安装编译程序D.调试4.在长度为 n的有序
2、线性表中进行二分法查找,最坏情况下需要比较的次数是_。 A.O(n) B.O(n2) C.O(log2n) D.O(nlog2n)(分数:1.00)A.B.C.D.5.软件生命周期是指_。(分数:1.00)A.软件的定义和开发阶段B.软件的需求分析、设计与实现阶段C.软件的开发阶段D.软件产品从提出、实现、使用维护到停止使用退役的过程6.以下叙述正确的是(分数:1.00)A.C语言比其他语言高级B.C语言可以不用编译就能被计算机识别执行C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D.C语言出现的最晚、具有其他语言的一切优点7.设有函数定义:void sub(int k,cha
3、r ch) 则以下对函数 sub的调用语句中,正确的是_。(分数:1.00)A.sub(1,97);B.sub(2,“97“);C.n=sub(3,“a“);D.sub(4,“a“);8.有以下程序 #includestdio.h main() int a5=2, 4, 6, 8, 10, *p, *k; p=a; k= printf(“%d“, *(p+); printf(“%d/n“, *k); 程序运行后的输出结果是_。(分数:2.00)A.2 4B.4 4C.2 2D.4 69.设有定义语句 int(*f)(int);,则以下叙述正确的是_。(分数:2.00)A.f是基类型为 int的
4、指针变量B.f是指向函数的指针变量,该函数具有一个 int类型的形参C.f是指向 int类型一维数组的指针变量D.f是函数名,该函数的返回值是基类型为 int类型的地址10.以下程序段中,与语句“k=ab?(bc?1:0):0;”功能相同的是_。(分数:1.00)A.if(ab)(bc)k=1;else k=0;B.if(ab)|(bc)k=1;else k=0;C.if(a=b)k=0;else if(b=c) k=1;D.if(ab) k=1;else if(bc) k=1;else k=0;11.数据库管理系统中负责数据模式定义的语言是_。(分数:1.00)A.数据定义语言B.数据管理语
5、言C.模式描述语言D.数据控制语言12.有下列程序: main() int x=5; do printf(“%d“, x-=4); while(!(-x); 程序的输出结果是_。(分数:2.50)A.1B.2 0C.1-4D.死循环13.以下程序的输出结果是_。 #includestdio.h main() int a33=0,1,2,0,1,2,0,1,2),i,j,s=1; for(i=0;i3;i+) for(j=i;j=i;j+) s+=aiajj; printf(“%d/n“,s); (分数:2.00)A.3B.4C.1D.914.有以下程序 #includestdio.h main
6、() FILE *fp; int i, a6=1, 2, 3, 4, 5, 6; fp=fopen(“d2.dat“, “w+“); for(i=0; i6; i+)fprintf(fp, “%d/n“, ai); rewind(fp); for(i=0; i6; i+)fscanf(fp, “%d“, fclose(fp); for(i=0; i6; i+)printf(“%d,“, ai); 程序运行后的输出结果是_。(分数:2.00)A.6, 5, 4, 3, 2, 1,B.1, 2, 3, 4, 5, 6,C.4, 5, 6, 1, 2, 3,D.1, 2, 3, 3, 2, 1,15
7、.以下选项中,不能正确赋值的是_。(分数:1.00)A.char s110; s1=“chest“;B.char s2=“C“,“t“,“e“,“s“,“t“;C.char s320=“Chest“;D.char*s4=“Ctest/n“16.以下程序中与语句 k=ab?(bc?1:0):0;功能等价的是(分数:1.00)A.if(ab) 中,以下不可替代 W的是_。(分数:2.00)A.a b+cB.ch=getchar()C.a= =b+cD.a+ +21.以下叙述中错误的是_。(分数:1.00)A.非零的数值型常量有正值和负值的区分B.常量是在程序运行过程中值不能被改变的量C.定义符号常
8、量必须用类型名来设定常量的类型D.用符号名表示的常量叫符号常量22.字符串”/nabcdef/”的长度是_。(分数:4.00)A.8B.6C.10D.423.若有定义和语句:int a,b;scanf(“%d,%d“,a,b);以下选项的输入数据中,不能把值 3赋给变量a,5赋给变量 b的是_。(分数:1.00)A.3,5,B.3,5,4C.3,5D.3,524.以下选项中不合法的标识符是_。(分数:1.00)A.printB.FORC. for(i=0;i9;i+=2)s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:2.00)A.25B.20C.4
9、5D.3626.若变量都已正确说明,则以下程序段_。 #includestdio.h main() int a=3; intb=2; printf(ab?“*a=%d“:“#bb=%d“,a,b);(分数:2.00)A.输出为:*a=3B.输出为:#b=3C.输出为:*a=3#b=5D.全部错误27.C语言程序的模块化通过以下哪个选项来实现_。(分数:2.00)A.变量B.函数C.程序行D.语句28.有以下程序: #include stdio.h #include string.h main() char str12=“s“,“t“,“r“,“I“,“n“,“g“; printf(“%d/n“
10、, strlen(str); 程序运行后的输出结果是_。(分数:1.00)A.6B.7C.11D.1229.在软件开发过程中,软件结构设计是描述_。A.数据存储结构B.软件体系结构C.软件结构测试D.软件控制过程30.若变量 c为 char类型,能正确判断出 c为小写字母的表达式是_。(分数:2.50)A.“a“=c=“z“B.(c=“a“)|(c=“z“)C.(“a“=c)and(“z“c)D.(c=“a“)int x; mix,*p; p=(分数:1.00)A.(*p).mix.xB.(*p).xC.p-mix.xD.mix.x32.有以下程序: #includestdio.h main(
11、) short c=124; c=c_; printf(“%d/n“,c); 若要使程序的运行结果为 248,应在下画线处填入的是_。(分数:2.00)A.2B.| 248C. s=f(a); s=s+f(a); printf(“%d/n“, s); int f(int n) static int a=1; n+=a+; return n; (分数:2.00)A.7B.8C.9D.1034.若 x、i、j 和 k都是 int型变量,则计算表达式 x=(i=4,j=16,k=32)后,x 的值为_。(分数:2.50)A.4B.16C.32D.5235.程序流程图中带有箭头的线段表示的是_。(分数
12、:2.50)A.图元关系B.数据流C.控制流D.调用关系二级 C语言分类模拟题 507答案解析(总分:54.50,做题时间:90 分钟)一、选择题(总题数:35,分数:54.50)1.指针变量 p的基类型为 double,并已指向一连续存储区,若 p中当前的地址值为 65490,则执行 p+后,p中的值为 _(分数:1.00)A.65490B.65492C.65494D.65498 解析:2.对于 while(!E) s;,若要执行循环体 s,则 E的取值应为_。(分数:1.00)A.E等于 1B.E不等于 0C.E不等于 1D.E等于 0 解析:解析 while 语句的一般形式为:while
13、(表达式)语句;,其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非 0)时,执行循环体语句。该题中如要执行语句 s,则!E 应为真,因此 E应等于 0,故 D选项正确。3.简单程序设计步骤中不包括_。(分数:1.00)A.编码B.确定算法C.安装编译程序 D.调试解析:解析 简单程序设计步骤为确定数据结构、确定算法、编码、调试、整理文档,不包括安装编译程序,故答案为 C选项。4.在长度为 n的有序线性表中进行二分法查找,最坏情况下需要比较的次数是_。 A.O(n) B.O(n2) C.O(log2n) D.O(nlog2n)(分数:1.00)A.B.C.
14、 D.解析:解析 当有序线性表为顺序存储时才能用二分法查找。可以证明的是,对于长度为 n的有序线性表,在最坏情况下,二分法查找只需要比较 log2n次,而顺序查找需要比较 n次,因此本题答案为 C。5.软件生命周期是指_。(分数:1.00)A.软件的定义和开发阶段B.软件的需求分析、设计与实现阶段C.软件的开发阶段D.软件产品从提出、实现、使用维护到停止使用退役的过程 解析:解析 通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。A、B、C 选项均为生命周期的一部分。故选 D选项。6.以下叙述正确的是(分数:1.00)A.C语言比其他语言高级B.C语言可以不用编译就
15、能被计算机识别执行C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D.C语言出现的最晚、具有其他语言的一切优点解析:解析 C 语言是一种高级语言,必须编译成目标代码才能执行,故选项 B错误;与其他语言相比C语言更接近于硬件,更“低级”:程序语言是不断发展的,不断有新的语言出现,C 语言不是出现最晚的,故选项 A和选项 D错误;高级语言类似于人类的自然语言和数学语言。所以,c 选项为所选。7.设有函数定义:void sub(int k,char ch) 则以下对函数 sub的调用语句中,正确的是_。(分数:1.00)A.sub(1,97); B.sub(2,“97“);C.n=s
16、ub(3,“a“);D.sub(4,“a“);解析:解析 函数的参数有两个,第一个是整型,第二个是字符类型,在调用函数时,实参必须一个是整型,一个是字符型相容的类型(整型)。A 选项中 97为字符a的 ASCII码,可以作为字符传入函数,A选项正确。B 选项97不是合法字符,字符单引号里面只能有一个字符,B 选项错误。函数 sub返回类型为空,即不返回任何值,故 C选项中将函数返回值赋给 n是不正确的调用方法,C 选项错误。D 选项“a”为字符串,也不是合法的字符,D 选项错误。8.有以下程序 #includestdio.h main() int a5=2, 4, 6, 8, 10, *p,
17、*k; p=a; k= printf(“%d“, *(p+); printf(“%d/n“, *k); 程序运行后的输出结果是_。(分数:2.00)A.2 4 B.4 4C.2 2D.4 6解析:解析 *(p+),表达式为 a0的值,为 2,执行后 p指向 a1,*k 为*p 实际为 a1,输出 4,所以选择 A。9.设有定义语句 int(*f)(int);,则以下叙述正确的是_。(分数:2.00)A.f是基类型为 int的指针变量B.f是指向函数的指针变量,该函数具有一个 int类型的形参 C.f是指向 int类型一维数组的指针变量D.f是函数名,该函数的返回值是基类型为 int类型的地址解
18、析:解析 本题考查的是指向函数的指针。语句“int(*f)(int);”是对一个函数的声明,其中 f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。故答案选 B。10.以下程序段中,与语句“k=ab?(bc?1:0):0;”功能相同的是_。(分数:1.00)A.if(ab)(bc)k=1;else k=0; B.if(ab)|(bc)k=1;else k=0;C.if(a=b)k=0;else if(b=c) k=1;D.if(ab) k=1;else if(bc) k=1;else k=0;解析:解析 本题考查了双重三目运算符的用法。例如:表达式 ab? c:d 可以看成,
19、当 ab 时取 c的值,否则取 d的值。在本题中 k=ab? (bc? 1:0):0 可以看做:当 bc 时为真,则 k=ab? 1:0。当bc 时则 k=ab? 0:0。也就是说,当 ab 并且 bc 时,k=1,否则 k=0。所以 A选项符合题意。11.数据库管理系统中负责数据模式定义的语言是_。(分数:1.00)A.数据定义语言B.数据管理语言C.模式描述语言 D.数据控制语言解析:解析 模式描述语言(Data Description Language,DDL)是用来描述、定义的,体现、反映了数据库系统的整体现。12.有下列程序: main() int x=5; do printf(“%
20、d“, x-=4); while(!(-x); 程序的输出结果是_。(分数:2.50)A.1B.2 0C.1-4 D.死循环解析:解析 本题考查 do-while循环。先执行 do的内容,也就是 printf语句,x=x-4=1,输出 1,判断 while循环的控制条件,-x=0,则!(-x)为非零,循环条件成立,执行下一次循环;x=x-4=-4,输出-4,判断 while循环的条件,-x=-5,则!(-x)为零,循环条件不成立,结束循环。13.以下程序的输出结果是_。 #includestdio.h main() int a33=0,1,2,0,1,2,0,1,2),i,j,s=1; for
21、(i=0;i3;i+) for(j=i;j=i;j+) s+=aiajj; printf(“%d/n“,s); (分数:2.00)A.3B.4 C.1D.9解析:14.有以下程序 #includestdio.h main() FILE *fp; int i, a6=1, 2, 3, 4, 5, 6; fp=fopen(“d2.dat“, “w+“); for(i=0; i6; i+)fprintf(fp, “%d/n“, ai); rewind(fp); for(i=0; i6; i+)fscanf(fp, “%d“, fclose(fp); for(i=0; i6; i+)printf(“%
22、d,“, ai); 程序运行后的输出结果是_。(分数:2.00)A.6, 5, 4, 3, 2, 1, B.1, 2, 3, 4, 5, 6,C.4, 5, 6, 1, 2, 3,D.1, 2, 3, 3, 2, 1,解析:解析 第一个循环将数组 a里数据写入文件,rewind 函数将文件指针回到开头,第二个循环将文件里数据倒序写入 a数组,第三个循环将 a数组数据输入,则是 a之前数据里的倒序,选择 A。15.以下选项中,不能正确赋值的是_。(分数:1.00)A.char s110; s1=“chest“; B.char s2=“C“,“t“,“e“,“s“,“t“;C.char s320=
23、“Chest“;D.char*s4=“Ctest/n“解析:解析 语言中不能将字符串常量直接赋给数组。但在赋初值时可以。16.以下程序中与语句 k=ab?(bc?1:0):0;功能等价的是(分数:1.00)A.if(ab) 中,以下不可替代 W的是_。(分数:2.00)A.a b+c B.ch=getchar()C.a= =b+cD.a+ +解析:解析 选项 A是非法的表达式,C 语言中没有运算符。21.以下叙述中错误的是_。(分数:1.00)A.非零的数值型常量有正值和负值的区分B.常量是在程序运行过程中值不能被改变的量C.定义符号常量必须用类型名来设定常量的类型 D.用符号名表示的常量叫符
24、号常量解析:解析 在 C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:# define 标识符常量。22.字符串”/nabcdef/”的长度是_。(分数:4.00)A.8 B.6C.10D.4解析:23.若有定义和语句:int a,b;scanf(“%d,%d“,a,b);以下选项的输入数据中,不能把值 3赋给变量a,5赋给变量 b的是_。(分数:1.00)A.3,5,B.3,5,4C.3,5 D.3,5解析:解析 在输入 3和 5之间除逗号外不能有其他字符。24.以下选项中不合法的标识符是_。(分数:1.00)A.printB.FORC.
25、 for(i=0;i9;i+=2)s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:2.00)A.25 B.20C.45D.36解析:解析 本题考查的是通过数组首地址引用数组之素。当数组名出现在表达式中时,它类似于一个指针常量,该指针始终指向该数组第 1个元素的位置,它的指向不能被改变。但它又与普通的指针常量有所区别:对数组名使用 sizeof运算符时,得到整个数组所占内存的大小;而对于指针常量,在 TC中返回的始终是 2(TC中,一个指针占 2个字节的内存)。所以,要获得数组 t的第 i个元素的内容,既可以使用常规的 ti表达式,也可以将数组名 t看
26、作一个指针常量,使用表达式*(t+i)来获取数组 t的第 i个元素的内容。在本题中,for 循环会循环 5次,循环变量 i从 0开始每次增加 2,所以 s=t0+ t2 + t4 + t6 + t8=25。26.若变量都已正确说明,则以下程序段_。 #includestdio.h main() int a=3; intb=2; printf(ab?“*a=%d“:“#bb=%d“,a,b);(分数:2.00)A.输出为:*a=3 B.输出为:#b=3C.输出为:*a=3#b=5D.全部错误解析:27.C语言程序的模块化通过以下哪个选项来实现_。(分数:2.00)A.变量B.函数 C.程序行D.
27、语句解析:解析 C 语言程序的模块化通过函数来体现,所以选择 B。28.有以下程序: #include stdio.h #include string.h main() char str12=“s“,“t“,“r“,“I“,“n“,“g“; printf(“%d/n“, strlen(str); 程序运行后的输出结果是_。(分数:1.00)A.6 B.7C.11D.12解析:解析 数组初始化时,如果在说明数组时给出了长度,但没有给所有的元素赋予初始值,而只依次给前面的几个数组元素赋予初值,那么 C语言将自动对余下的元素赋初值,如果为字符数组,自动赋值“/0”,即 str12=“s“,“t“,“
28、r“,“i“,“n“,“g“,“/0“,/0“,“/0“,“/0“,“/0“,“/0“。strlen函数求字符串长度,统计长度时以“/0”结束,即统计到长度为 6时结束,strlen 函数返回值为6,故 A选项正确。29.在软件开发过程中,软件结构设计是描述_。A.数据存储结构B.软件体系结构 C.软件结构测试D.软件控制过程解析:解析 从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。30.若变量 c为 char类型,能正确判断出 c为小写字母的表达式是_。(分数:2.50)A.“a“=
29、c=“z“B.(c=“a“)|(c=“z“)C.(“a“=c)and(“z“c)D.(c=“a“)int x; mix,*p; p=(分数:1.00)A.(*p).mix.xB.(*p).x C.p-mix.xD.mix.x解析:解析 结构体变量中的成员有 3种引用方式:结构体变量名成员名;指针变量名-成员名:(*指针变量名)成员名。32.有以下程序: #includestdio.h main() short c=124; c=c_; printf(“%d/n“,c); 若要使程序的运行结果为 248,应在下画线处填入的是_。(分数:2.00)A.2B.| 248C. s=f(a); s=s+
30、f(a); printf(“%d/n“, s); int f(int n) static int a=1; n+=a+; return n; (分数:2.00)A.7B.8C.9 D.10解析:解析 本题考查静态局部变量。第一次调用 f函数时,将实参 a值 3传给形参变量 n,此时,静态局部变量 a的值为 1,经过 n+=a+运算后,n 为 4,a 为 2,return 语句将 4带回到 main函数赋给 s;第二次调用 f函数时,将实参 a值 3(注意,实参 a的值并未改变)传给变量 n,此时,静态局部变量 a的值为 2,经过 n+=a+运算后,n 为 5,a 为 3,return 语句将 5带回到 main函数,s=s+f(a)=4+5=9。34.若 x、i、j 和 k都是 int型变量,则计算表达式 x=(i=4,j=16,k=32)后,x 的值为_。(分数:2.50)A.4B.16C.32 D.52解析:35.程序流程图中带有箭头的线段表示的是_。(分数:2.50)A.图元关系B.数据流C.控制流 D.调用关系解析:解析 在数据流图中,用标有名字的带箭头线段表示数据流。在程序流程图中,用标有名字的带箭头线段表示控制流,因此本题答案为 C。