1、二级 C语言分类模拟题 522及答案解析(总分:45.50,做题时间:90 分钟)一、选择题(总题数:35,分数:45.50)1.有以下程序(注:字母 A的 ASCII码值是 65) #include stdio.h void fun(char *s) while(*s) if(*s%2) printf(“%c“,*s); s+; main() char a=“BYTE“; fun(a); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.YTB.BTC.YED.BY2.若已定义 x和 y为 double类型,则表达式 x=1,y=x+3/2的值是_。(分数:1.00
2、)A.1B.2C.2.0D.2.53.有以下程序: #include stdio.h main( ) int a=2,4,6,8,10,x, *p,y=1; P= for(x=0; x3; x+) y+=*(p+x); printf(“%d/n“,y); 程序的输出结果是_。(分数:1.00)A.13B.19C.11D.154.有以下程序: #includestdio.h main() int i=3, j=5, *p= r= printf(“%d, %d, %d, %d, %d/n“, i, j, *p, *q, *r); 执行后的输出结果是_。(分数:1.00)A.3,5,3,5,5B.5
3、,3,5,3,5C.3,5,3,5,3D.3,5,3,3,55.下列叙述中正确的是(分数:2.00)A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间6.C语言规定,在一个源程序中,main()函数的位置_。(分数:1.00)A.必须在最开始B.必须在系统调用的库函数的后面C.可以任意D.必须在最后7.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是_。(分数:2.00)A.char s10=“abcdef
4、g“;B.char t=“abcdefg“,*s=t;C.char s10;s=“abcdefg“;D.char s10;strcpy(s,“abcdefg“);8.下面各语句行中,能正确进行赋值字符串操作的是_。(分数:2.00)A.char s5=“a“,“b“,“c“,“d,“,“e“;B.char*s;gets(s);C.char*s;*s*=“ABCDEF“;D.char s5;scanf(“%s“,9.以下叙述中错误的是_。(分数:1.00)A.同一个数组中所有元素的类型相同B.不可以跳过前面的数组元素,给后面的元素赋初值 0C.定义语句:int a10=0,给 a数组中所有元素赋
5、初值 0D.若有定义语句:int a4=1,2,3,4,5;,编译时将忽略多余的初值10.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书11.以下正确的字符串常量是 _ 。(分数:1.00)A.“/“B.“abc“C.Olympic GamesD.“12.以下有 4组用户标识符,其中合法的组是_。(分数:1.00)A.FOR-subCaseB.4dDOSizeC.f2_G3IFabcD.WORDvoiddefine13.以下不能输出字符 A的语句是(注:字符 A的 ASCII码值为 65,字符 a的
6、ASCII码值为 97)_。(分数:1.00)A.printf(“%c/n“, “a“-32);B.printf(“%d/n“, “A“);C.printf(“%c/n“, 65);D.printf(“%c/n“, “B“-1);14.软件生命周期中,确定软件系统要做什么的阶段是_。(分数:1.00)A.需求分析B.软件测试C.软件设计D.系统维护15.数据结构中,与所使用的计算机无关的是数据的_。(分数:2.50)A.存储结构B.物理结构C.逻辑结构D.线性结构16.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是 _ 。(分数:2.00)A.p1=p2=*p2=p1
7、;D.p1=p2=p1;17.设有以下说明语句: struct stu int a; float b; stutype; 则以下叙述错误的是_。(分数:3.00)A.struct是结构类型关键字B.struct stu是用户定义的结构类型C.stutype是用户定义的结构类型D.a、b 都是结构成员名18.设有定义语句 int(*f)(int); 则以下叙述正确的是_。(分数:1.00)A.f是指向函数的指针变量,该函数具有一个 int类型的形参B.f是基类型为 int的指针变量C.f是指向 int类型一维数组的指针变量D.f是函数名,该函数的返回值是基类型为 int类型的地址19.已知字母
8、A的 ASCII代码值为 65,若变量 kk为 char型,下列不能正确判断出比中的值为大写字母的表达式是( )。(分数:2.00)A.kk=“A“ p= *p=10; 则变量 a的值为_。(分数:1.00)A.不能确定B.1C.10D.1121.以下关于 return语句的叙述中正确的是_。(分数:1.00)A.一个自定义函数中必须有一条 return语句B.一个自定义函数中可以根据不同情况设置多条 return语句C.定义成 void类型的函数中可以有带返回值的 return语句D.没有 return语句的自定义函数在执行结束时不能返回到调用处22.已有定义:char a=“xyz“,b=
9、“x“,“y“,“z“;,以下叙述中正确的是(分数:1.00)A.数组 a和 b的长度相同B.a数组长度小于 b数组长度C.a数组长度大于 b数组长度D.上述说法都不对23.下列叙述中正确的是_。(分数:1.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D.上述三种说法都不对24.软件生命周期是指_。(分数:1.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程25
10、.下列选项中非法的字符常量是 _ 。(分数:1.00)A.“/t“B.“/039“C.“,“D.“/n“26.下面程序的输出结果是_。 void prty(int *x) printf(“%d/n“,+ *x); main() int a=25; prty( (分数:1.00)A.23B.24C.25D.2627.若有以下定义和语句 ( ) int u010,vOx10,w10; printf(“%d,%d%d/n“,u,v,w); 则输出结果是(分数:1.00)A.8,16,10B.10,10,10C.8,8,10D.8,10,1028.下列关于线性链表的叙述中,正确的是_。(分数:1.00
11、)A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素D.各数据结点的存储顺序与逻辑顺序可以不一致,它们的存储空间也可以不一致29.以下叙述中正确的是_。(分数:2.00)A.C语言中的文件是流式文件,因此只能顺序存取数据B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据D.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失30.有以下程序:
12、 #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:1.00)A.3 5 7B.7 5 3C.3 6 9D.7 5 131.以下叙述中正确的是_。(分数:2.00)A.在对指针进行加、减算术运算时,数字 1表示 1个存储单元的长度B.如果 p是指针变量,则*p 表示变量 p的地址值C.如果 p是指针变量,则char sex;int score2;STU; STU f(STU a) STU b=“Zhao“,“m“,85,90; int i;
13、 strcpy(a.name“b.name); a.sex=b.sex; for(i=0;i2;i+)a.scorei=b.scorei; return a; main() STU c=“Qian“,“f“,95,92,d; d=f(c); printf(“%s,%c,%d,%d,“,d.name,d.sex,d.score0,d.score1); printf(“%s,%c,%d,%d/n“,c.name,c.sex,c.score0,c.score1); 程序运行后的输出结果是_。(分数:1.00)A.Zhao,m,85,90,Qian,f,95,92B.Zhao,m,85,90,Zhao
14、,m,85,90C.Qian,f,95,92,Qian,f,95,92D.Qian,f,95,92,Zhao,m,85,9035.有以下程序 #include stdio.h main() FILE *fp; int a10=1,2,3,0,0,i; fp=topen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i10;i+)
15、printf(“%d,“,ai); 程序的运行结果是_。(分数:1.00)A.1,2,3,0,0,1,2,3,0,0,B.1,2,3,1,2,3,0,0,0,0,C.123,0,0,0,0,123,0,0,0,0,D.1,2,3,0,0,0,0,0,0,0,二级 C语言分类模拟题 522答案解析(总分:45.50,做题时间:90 分钟)一、选择题(总题数:35,分数:45.50)1.有以下程序(注:字母 A的 ASCII码值是 65) #include stdio.h void fun(char *s) while(*s) if(*s%2) printf(“%c“,*s); s+; main(
16、) char a=“BYTE“; fun(a); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.YTB.BTC.YE D.BY解析:解析 fun 函数输出 ASCII码值为奇数的字符,所以答案选择 C。2.若已定义 x和 y为 double类型,则表达式 x=1,y=x+3/2的值是_。(分数:1.00)A.1B.2C.2.0 D.2.5解析:解析 这是一个逗号表达式,它的值应为表达式式 y=3/2的值,而前一个表达式已给 x赋值 1,在没有进行类型转换的情况下,3/2 的值为 1,所以 x+3/2的值应为 2.0。 3.有以下程序: #include stdio
17、.h main( ) int a=2,4,6,8,10,x, *p,y=1; P= for(x=0; x3; x+) y+=*(p+x); printf(“%d/n“,y); 程序的输出结果是_。(分数:1.00)A.13B.19 C.11D.15解析:解析 本题通过语句“p= r= printf(“%d, %d, %d, %d, %d/n“, i, j, *p, *q, *r); 执行后的输出结果是_。(分数:1.00)A.3,5,3,5,5 B.5,3,5,3,5C.3,5,3,5,3D.3,5,3,3,5解析:解析 main()函数中初始化 i的值为 3,j 的值为 5,并初始化指针 p
18、指向 i,指针 q指向 j。另外,还定义了一个指向 q的二维指针 r,所以*p 的值是 i的值 3,*q 的值是 j的值 5,*r 等于*q,是 j的值 5,所以输出的结果是:3,5,3,5,5。故答案选 A选项。5.下列叙述中正确的是(分数:2.00)A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间解析:解析 顺序存储方式是把逻辑上相邻的结点存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现
19、。其优点是占用最少的存储空间。所以选项 D错误。顺序存储结构可以存储如二叉树这样的非线性结构,所以选项 B错误。链式存储结构也可以存储线性表,所以选项 C错误。6.C语言规定,在一个源程序中,main()函数的位置_。(分数:1.00)A.必须在最开始B.必须在系统调用的库函数的后面C.可以任意 D.必须在最后解析:解析 程序中可以把 main()函数放在任何位置,但程序是从 main()函数开始执行的。7.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是_。(分数:2.00)A.char s10=“abcdefg“;B.char t=“abcdefg“,*s=t;C.char s1
20、0;s=“abcdefg“; D.char s10;strcpy(s,“abcdefg“);解析:8.下面各语句行中,能正确进行赋值字符串操作的是_。(分数:2.00)A.char s5=“a“,“b“,“c“,“d,“,“e“;B.char*s;gets(s); C.char*s;*s*=“ABCDEF“;D.char s5;scanf(“%s“,解析:9.以下叙述中错误的是_。(分数:1.00)A.同一个数组中所有元素的类型相同B.不可以跳过前面的数组元素,给后面的元素赋初值 0C.定义语句:int a10=0,给 a数组中所有元素赋初值 0D.若有定义语句:int a4=1,2,3,4,
21、5;,编译时将忽略多余的初值 解析:解析 数组初始化时,若赋初值的个数多于所定义数组的元素个数时,编译器会报错。10.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析 需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面,因此本题答案为 D。11.以下正确的字符串常量是 _ 。(分数:1.00)A.“/“B.“abc“C.Olympic GamesD.“ 解析:解析 选项 A中“/”为转义字符,故选项 A错误,选项 B和 C显然不是字符串常量。选项 D是一个
22、字符串常量,称为空串。12.以下有 4组用户标识符,其中合法的组是_。(分数:1.00)A.FOR-subCaseB.4dDOSizeC.f2_G3IFabc D.WORDvoiddefine解析:解析 C 语言的标识符的定义为:以字母或下划线开头的由字母、数字字符、下划线组成的字符串。而且标识符不能与关键字相同。13.以下不能输出字符 A的语句是(注:字符 A的 ASCII码值为 65,字符 a的 ASCII码值为 97)_。(分数:1.00)A.printf(“%c/n“, “a“-32);B.printf(“%d/n“, “A“); C.printf(“%c/n“, 65);D.prin
23、tf(“%c/n“, “B“-1);解析:解析 在 C语言中%d 表示输出整型数值,所以答案为 B。14.软件生命周期中,确定软件系统要做什么的阶段是_。(分数:1.00)A.需求分析 B.软件测试C.软件设计D.系统维护解析:解析 软件生命周期各阶段的主要任务是:问题定义、可行性研究与计划制定、需求分析、软件设计、软件实现、软件测试、运行维护。其中需求分析是指对待开发软件提出的需求进行分析并给出详细定义,也即是确定软件系统要做什么,故 A选项正确。15.数据结构中,与所使用的计算机无关的是数据的_。(分数:2.50)A.存储结构B.物理结构C.逻辑结构 D.线性结构解析:解析 数据的逻辑结构
24、反映的是数据元素之间的逻辑关系,与使用的计算机无关。16.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是 _ 。(分数:2.00)A.p1=p2=*p2=p1;D.p1=p2=p1; 解析:解析 本题考查指针变量的赋值。 选项 A)中,p1、p2 本身都是地址变量,不能再将 p1取地址赋给 p2;选项 B)中,不能将整型数据直接赋值给指针型数据;选项 C)中,*p2 代表了一个整型变量,而*p2=p1 这个语句试图把一个地址值放入一个整型变量中是错误的:选项 D)中指针间的赋值是正确的。17.设有以下说明语句: struct stu int a; float b; s
25、tutype; 则以下叙述错误的是_。(分数:3.00)A.struct是结构类型关键字B.struct stu是用户定义的结构类型C.stutype是用户定义的结构类型 D.a、b 都是结构成员名解析:18.设有定义语句 int(*f)(int); 则以下叙述正确的是_。(分数:1.00)A.f是指向函数的指针变量,该函数具有一个 int类型的形参 B.f是基类型为 int的指针变量C.f是指向 int类型一维数组的指针变量D.f是函数名,该函数的返回值是基类型为 int类型的地址解析:解析 f 是指向函数的指针,所以 B、C、D 选项错误,答案选择 A。19.已知字母 A的 ASCII代码
26、值为 65,若变量 kk为 char型,下列不能正确判断出比中的值为大写字母的表达式是( )。(分数:2.00)A.kk=“A“ p= *p=10; 则变量 a的值为_。(分数:1.00)A.不能确定B.1C.10 D.11解析:解析 题中定义一个指针变量 p和整数变量 a,并将 a赋初值 1,再把 a地址的值赋给指针 p,最后把 10赋给指针 p所对应的地址单元,此时改变了 a的值,a=10,答案为 C选项。21.以下关于 return语句的叙述中正确的是_。(分数:1.00)A.一个自定义函数中必须有一条 return语句B.一个自定义函数中可以根据不同情况设置多条 return语句 C.
27、定义成 void类型的函数中可以有带返回值的 return语句D.没有 return语句的自定义函数在执行结束时不能返回到调用处解析:解析 return 语句又称为返回语句。该语句的格式如下:“return;”和“return(表达式);”。其中,return 是关键字。该语句有两种格式:不带返回值格式和带返回值格式。该语句用在被调用函数中,在被调用函数中执行到该语句时,将结束对被调用函数的执行,并把控制权返回给调用函数,继续执行调用函数后边的语句。在带有返回值的情况下,将 return语句所带的表达式的值返回给调用函数,作为被调用函数的值。在被调用函数中,可以用 return语句,也可以不用
28、 return语句。如果要求被调用函数有返回值,则一定要用 return语句,采用 return(表达式);格式。如果被调用函数不需要返回值,并且当被调用函数的所有语句执行完后进行返回,则被调用函数可以不用 return语句。22.已有定义:char a=“xyz“,b=“x“,“y“,“z“;,以下叙述中正确的是(分数:1.00)A.数组 a和 b的长度相同B.a数组长度小于 b数组长度C.a数组长度大于 b数组长度 D.上述说法都不对解析:解析 a 数组存放的是字符串,系统会自动在字符串的最后加上一个“/0”,所以 a数组的长度为 4,而 b数组的长度为 3,故 a数组长度大于 b数组长度
29、。23.下列叙述中正确的是_。(分数:1.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D.上述三种说法都不对解析:解析 栈是限制仅在表的一端进行插入和删除的运算的线性表,通常称插入、删除的这一端为栈顶,另一端称为栈底。24.软件生命周期是指_。(分数:1.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程 B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程解析:解析 通常,将软件产品从提出、实现、使用维护到停止
30、使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期,因此本题答案为 A。25.下列选项中非法的字符常量是 _ 。(分数:1.00)A.“/t“B.“/039“ C.“,“D.“/n“解析:解析 选项 A)中,“/t“,表示的是横向跳若干格;选项 B)中,“/039“错误,“/039“是八进制形式表示的字符,但其中出现了“9“,所以错误;选项 C)中,是字符逗号:选项 D)中,“/n“表示的是回车换行。26.下面程序的输出结果是_。 void prty(int *x) printf(“%d/n“,+ *x); main() i
31、nt a=25; prty( (分数:1.00)A.23B.24C.25D.26 解析:27.若有以下定义和语句 ( ) int u010,vOx10,w10; printf(“%d,%d%d/n“,u,v,w); 则输出结果是(分数:1.00)A.8,16,10 B.10,10,10C.8,8,10D.8,10,10解析:28.下列关于线性链表的叙述中,正确的是_。(分数:1.00)A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素 D.各数据结点的存储顺序与逻
32、辑顺序可以不一致,它们的存储空间也可以不一致解析:解析 一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。因此,本题答案为 C。29.以下叙述中正确的是_。(分数:2.00)A.C语言中的文件是流式文件,因此只能顺序存取数据 B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据D.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢
33、失解析:解析 B 选项中打开一个己存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C 选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第 1个数据,可以用 fseek()函数进行重新定位即可。D 选项中,C 语言中的文件可以进行随机读写。故本题答案为 A。30.有以下程序: #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:1.00)A.3 5 7 B.7 5 3C.
34、3 6 9D.7 5 1解析:解析 二维数组 t3实际上指 t33=9,8,7,6,5,4,3,2,1,通过循环语句 for语句可以得到 i=0,t20=3、i=1,t11=5、i=2,t02=7、i=3 时循环结束即 t20=3、t11=5、t02=7。因此 A选项正确。31.以下叙述中正确的是_。(分数:2.00)A.在对指针进行加、减算术运算时,数字 1表示 1个存储单元的长度 B.如果 p是指针变量,则*p 表示变量 p的地址值C.如果 p是指针变量,则char sex;int score2;STU; STU f(STU a) STU b=“Zhao“,“m“,85,90; int i
35、; strcpy(a.name“b.name); a.sex=b.sex; for(i=0;i2;i+)a.scorei=b.scorei; return a; main() STU c=“Qian“,“f“,95,92,d; d=f(c); printf(“%s,%c,%d,%d,“,d.name,d.sex,d.score0,d.score1); printf(“%s,%c,%d,%d/n“,c.name,c.sex,c.score0,c.score1); 程序运行后的输出结果是_。(分数:1.00)A.Zhao,m,85,90,Qian,f,95,92 B.Zhao,m,85,90,Zh
36、ao,m,85,90C.Qian,f,95,92,Qian,f,95,92D.Qian,f,95,92,Zhao,m,85,90解析:解析 本题考查的是函数调用时的参数传递问题。程序在调用函数 f时,传给函数 f的参数只是结构变量 c在栈中的一个副本,函数 f所做所有操作只是针对这个数据拷贝进行的修改,这些都不会影响变量 c的值。35.有以下程序 #include stdio.h main() FILE *fp; int a10=1,2,3,0,0,i; fp=topen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i10;i+) printf(“%d,“,ai); 程序的运行结果是_。(分数:1.00)A.1,2,3,0,0,1,2,3,0,0, B.1,2,3,1,2,3,0,0,0,0,C.123,0,0,0,0,123,0,0,0,0,D.1,2,3,0,0,0,0,0,0,0,解析:解析 fwrite 函数将数组 a写入文件,写入两遍,读出后为选项 A的值,所以选择 A。