二级C语言分类模拟题539.docx
- 文档编号:13092730
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:19
- 大小:24.46KB
二级C语言分类模拟题539.docx
《二级C语言分类模拟题539.docx》由会员分享,可在线阅读,更多相关《二级C语言分类模拟题539.docx(19页珍藏版)》请在冰点文库上搜索。
二级C语言分类模拟题539
二级C语言分类模拟题539
(总分:
61.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
61.00)
1.以下叙述中正确的是______。
(分数:
2.00)
A.结构体类型中各个成分的类型必须是一致的
B.结构体类型中的成分只能是C语言中预先定义的基本数据类型
C.在定义结构体类型时,编译程序就为它分配了内存空间
D.一个结构体类型可以由多个称为成员(或域)的成分组成 √
解析:
[解析]本题考查结构体类型。
结构体类型中的成分可以是结构体,所以B选项错误;定义结构体时编译程序并不会给它分配内存空间,所以C选项错误;结构体中各个成分的类型可以是不一样的,所以A选项错误。
2.以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处。
#include<stdio.h>
main()
{
inta[10],i=0;
while(i<10)scanf("%d",______);
…
}
(分数:
1.00)
A.a+(i++) √
B.&a[i+1]
C.a+i
D.&a(i++)
解析:
[解析]A项正确,a为数组首地址,i++先取i值再加1,scanf读入的数据依次存放在数组a中;B项错误,程序会进入死循环;C项错误,控制变量i没有依次加1,无法结束循环,也无法对整个数组赋值;D项错误,数组元素引用为[],不是()。
3.有如下程序
#include<stdio.h>
main()
{
chara,b;
inti;
a="3";
b="A";
for(i=0;i<6;i++)
{
if(i%2)putchar(a+i);
elseputchar(b+i);
}
}
程序运行后的输出结果是______。
(分数:
1.00)
A.AB56EF
B.A4C6E8 √
C.B4D6F8
D.A5C7E9
解析:
[解析]程序首先赋值a为字符‘3’,赋值b为字符‘A’,循环变量i的初值为0,每次循环后自增1,最大值为5,if条件判断i的值,当i的值为偶数时,将b与i的和当做字符输出;当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()
{inta[]={2,4,6,8,10},y=0,x,*p;
p=&a[1];
for(x=1;x<3;x++)y+=p[x];
printf("%d/n,y");
}
程序运行后的输出结果是______。
(分数:
2.50)
A.10
B.11
C.14 √
D.15
解析:
[解析]由题目的语句p=&a[1]可知,p指向a数组中下标为1的元素“4”,又因为p为指针变量,所以p[x]与*(p+x)等价,因而在for循环语句中,第一次循环p[1]指向a数组中下标为2的元素“6”,第二次循环p[2]指向a数组中下标为3的元素“8”,所以y=6+8=14,因而选项C为正确答案。
5.有以下程序:
#include<stdio.h>
structS
{intn;inta[20];};
voidf(structS*p)
{
inti,j,t;
for(i=0;i<p->n-1;i++)
for(j=i+1;j<p->n;j++)
if(p->a[i]>p->a[j])
{
t=p->a[i];
p->a[i]=p->a[j];
p->a[j]=t;
}
}
main()
{
inti;
structSs={10,{2,3,1,6,8,7,5,4,10,9}};
f(&s);
for(i=0;i<s.n;i++)
printf("%d,",s.a[i]);
}
程序的运行结果是______。
(分数:
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,
解析:
[解析]本题中子函数f的功能是对结构体变量s中第二个成员数组中的所有数据进行从小到大的冒泡排序,所以结果是C选项。
6.假定当前盘符下有两个文本文件,如下
文件名a1.txta2.txt
内容123#321#
则下面程序段执行后的结果为
#include"stdio.h"
voidfc(FILE*p)
{charc;
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.00)
A.123321 √
B.123
C.321
D.以上答案都不正确
解析:
[解析]本题的功能是顺序的读两个文本文件,依次输出。
当打开文件时出现错误,fopen函数将返回NULL。
7.以下叙述中错误的是______。
(分数:
1.00)
A.数值型常量有正值和负值的区分
B.常量可以用一个符号名来代表
C.定义符号常量必须用类型名来设定常量的类型 √
D.常量是在程序运行过程中值不能被改变的量
解析:
[解析]数值型常量有整型常量和实型常量,不论是整型常量还是实型常量,都有正值和负值之分,所以A正确。
在C语言的预编译处理中,可以用符号名代表一个常量,定义时不必指定常量类型,所以C错误,B正确。
常量的定义就是常量是在程序运行过程中值不能被改变的量,所以D正确。
8.有以下程序:
#include<stdio.h>
#include<stdlib.h>
intfun(intn)
{int*p;
p=(int*)malloc(aizeof(int));
*p=n;return*p;
}
main()
{inta;
a=fun(10);printf("%d/n",a+fun(10));
}
程序的运行结果是______。
(分数:
2.00)
A.0
B.10
C.20 √
D.出错
解析:
[解析]malloc(sizeof(int))的作用是开辟一个长度为sizeof(int)的存储空间,并通过强制类型转换(int*)将此存储空间的地址赋给一个整型的指针变量p,然后执行语句*p=n,使得*p的值为10,并通过return返回此值,即a的值为10。
最后在主函数中通过printf()函数输出a+fun(10)=10+10=20。
9.下面关于编译预处理的叙述正确的是______。
(分数:
1.00)
A.预处理命令行必须使用分号结尾
B.凡是以#号开头的行,都被称为编译预处理命令行 √
C.预处理命令行不能出现在程序的最后一行
D.预处理命令行的作用域是到最近的函数结束处
解析:
[解析]本题考查预编译的预编译处理命令行,预处理命令行不能以分号结尾,所以A选项错误。
预处理命令行可以出现在程序的最后一行,C选项错误。
预处理命令行作用域是整个文件,D选项错误。
10.以下对枚举类型名的定义中正确的是______。
(分数:
1.00)
A.enuma={one,two,three};
B.enuma{one=9,two=1,three}; √
C.enuma={"one","two","three"};
D.enuma{"one","two","three"};
解析:
[解析]声明枚举类型用enum开头。
例如:
enumweekday(sun,mon,tue,wed,thu,fri,sat);
说明:
1、在C编译中,对枚举元素按常量处理,同时可以改变他们的值。
2、枚举值可以用来做判断比较。
3、一个整数不能直接赋给一个枚举变量。
11.以下选项中非法的C语言字符常量是______。
(分数:
2.50)
A."/x9d"
B."9"
C."/x09"
D."/09" √
解析:
[解析]/后跟八进制数据,不能出现数字9。
所以选择D。
12.有以下程序:
#include<stdio.h>
intfun(intn)
{inta;
if(n==1)return1;
a=n+fun(n-1);
return(a);
}
main()
{printf("%d/n",fun(5));}
程序的输出结果是______。
(分数:
1.00)
A.9
B.14
C.10
D.15 √
解析:
[解析]本题考查函数的递归调用。
只需要一步一步地递归调用:
fun函数即可,执行fun(5)=5+(4+(3+(2+fun
(1))))=15,所以答案为D选项。
13.下列不属于软件工程3个要素的是______。
(分数:
2.50)
A.工具
B.过程
C.方法
D.环境 √
解析:
[解析]软件工程包括3个要素,即方法、工具和过程。
方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。
14.若有定义:
intx,*pb;则正确的赋值表达式是______。
(分数:
1.00)
A.pb=&x √
B.pb=x
C.*pb=&x
D.*pb=*x
解析:
[解析]pb是指解除对*pb的引用(也可以认为是取pb所指向的地址的值),被解除引用的指针可以作为左值,&为取地址运算符,&x就是取指向变量x的指针。
15.设有两行定义语句:
intscanf;
floatcase;
则以下叙述正确的是______。
(分数:
1.00)
A.两行定义语句都不合法
B.两行定义语句都合法
C.第1行语句不合法
D.第2行语句不合法 √
解析:
[解析]合法的标识符由字母(大、小写均可)、数字和下划线组成,并且必须以字母或下划线开头。
关键字是指被C语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着固定的含义,用户不可重新定义。
预定义标识符是系统已经有过定义的标识符,用户可以重新定义,可以作为变量名。
scanf为库函数名,属于预定义标识符,可以被用户重定义,所以第一行语句合法。
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.10
B.11
C.12
D.语法错误 √
解析:
[解析]C语言中有基本的算术运算符(+、-、*、/)还包括自增自减运算符(++、-),在C语言解析表达式时,它总是进行贪婪咀嚼,这佯,该表达式就被解析为i+++++i,显然该表达式不合C语言语法。
18.有以下程序
#include<stdio.h>
main()
{
structSTU{charname[9];charsex;doublescore[2];};
structSTUa={"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.score[0],b.score[1]);
}
程序的运行结果是______。
(分数:
2.00)
A.Zhao,m,85,90 √
B.Qian,m,85,90
C.Zhao,f,95,92
D.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.投影
解析:
[解析]选择:
在数据表中给予一定的条件进行筛选数据。
投影:
把表中的某几个属性的数据选择出来。
连接:
有自然连接、外连接、内连接等,连接主要用于多表之间的数据查询。
并:
与数学中的并是一样的。
两张表进行并操作,要求它们的属性个数相同并且需要相容。
20.以下叙述中错误的是______。
(分数:
1.00)
A.函数中的形参属于局部变量
B.在函数内部定义的变量只能在本函数范围内使用
C.在函数外部定义的变量在所有函数中都有效 √
D.在不同的函数中可以使用相同名字的变量
解析:
[解析]全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区域内的函数才可以调用,如果在函数外部定义变量,该变量不能被之前的函数访问。
所以C选项说法错误,答案为C选项。
21.以下程序的输出结果是______。
#include<stdio.h>
main()
{inta=8,b=6,m=1;
switch(a%4)
{case0:
m++;
break;
case1:
m++;
switch(b%3)
{default:
m++;
case0:
m++;break;
}
}
printf("%d/n",m);}
(分数:
2.50)
A.1
B.2 √
C.3
D.4
解析:
[解析]本题考查switch语句。
因为a=8,a%4=0,所以执行case0后面的语句,将m加1,遇到break语句跳出switch。
22.若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c),给a赋予10.0,b赋予22.0,b赋予33.0,不正确的输入形式是____
(分数:
1.00)
A.10<回车>22<回车>33<回车>
B.10.0,22.0,33.0<回车> √
C.10.0<回车>22.O33.00<回车>
D.10.22<回车>33<回车>
解析:
23.有以下程序
main()
{inti,s=0;
for(i=1;i<l0;i+=2)s+=i+1
printf("%d/n",s);
}
程序执行后的输出结果是______。
(分数:
2.00)
A.自然数1~9的累加和
B.自然数1~10的累加和
C.自然数1~9中奇数之和
D.自然数1~10中偶数之和 √
解析:
[解析]本题中s=(1+1)+(3+1)+(5+1)+(7+1)+(9+1)=2+4+6=8+10。
24.对于循环队列,下列叙述中正确的是______。
(分数:
1.00)
A.队头指针是固定不变的
B.队头指针一定大于队尾指针
C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针 √
解析:
[解析]循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。
因为是循环利用的队列结构,所以队头指针有时可能大于队尾指针,有时也可能小于队尾指针。
25.下列定义数组的语句中,正确的是______。
(分数:
1.00)
A.intN10intx[N];
B.#defineN=10;intx[N]; √
C.intx[0..10];
D.intx[];
解析:
[解析]数组说明的一般形式为:
类型说明符数组名[常量表达式]。
A中N是变量,不能用变量定义数组长度。
C选项中数组长度是非法的一串数字,定义数组时必须为其指明长度。
D选项中数组长度为空,因此非法。
故本题答案为B。
26.下面选项中不是关系数据库基本特征的是______。
(分数:
1.00)
A.不同的列应有不同的数据类型 √
B.不同的列应有不同的列名
C.与行的次序无关
D.与列的次序无关
解析:
[解析]在关系数据库中,二维表由行数据组成,每行数据包含若干属性值,每个属性都有指定的类型和取值范围。
数据行数是有限的,每行数据互不相同(元组唯一性),每行的次序可以任意交换(元组的次序无关性);表中属性名(列各)各不相同即字段名不重复,属性名(列名)次序可任意交换。
故本题答案为A选项。
27.若有以下程序:
#include<stdio.h>
main()
{inta=-2,b=0;
do{++b;}while(a++);
printf("%d,%d/n",a,b);
}
则程序的输出结果是______。
(分数:
2.50)
A.1,3 √
B.0,2
C.1,2
D.2,3
解析:
[解析]本题重点考查do…while语句及do…while的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),++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.所谓常量,是指在程序运行过程中,其值不能被改变的量
解析:
[解析]常量是在程序运行时,其值不能被改变的量,跟是否经常使用没关系,所以C错误。
29.若有以下程序:
#include<stdio.h>
main()
{inta=1,b=2,c=3,d=4;
if((a=2)&&(b=1))c=2;
if((c==3)||(d=-1))a=5;
printf("%d,%d,%d,%d/n",a,b,c,d);
}
则程序的输出结果是______。
(分数:
2.50)
A.2,2,2,4
B.2,1,2,-1
C.5,1,2,-1 √
D.1,2,3,4
解析:
[解析]第一个if语句的判断条件是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第一个运算对象a=2非零,判断第二个表达式b=1也非零,所以条件成立执行c=2的赋值操作。
执行第二个if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c==3运算对象为假,所以需要判断第二个运算对象d=-1,结果为非零,所以条件成立,执行a=5,的操作,所以a值为5,b值为1,c值为2,d值为-1。
30.若有定义“floatx=1.5;inta=1,b=3,c=2;”,则正确的switch语句是______。
(分数:
1.00)
A.switch(a+b){case1:
printf("*/n");case2+1:
printf("**/n");} √
B.switch((int)x);{case1:
printf("*/n");case2:
printf("**/n");}
C.switch(x){case1.0:
printf("*/n");case2.0:
printf("**/n");}
D.switch(a+b){case1:
printf("*/n");casec:
printf("**/n");}
解析:
[解析]B选项的“switch((int)x);”语句中不应该有最后的分号。
“switch(expr1)”中的expr1不能用浮点类型或long类型,也不能为一个字符串,因此C错误。
case后面只能是常量表达式,因此D错误。
31.若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是______。
(分数:
1.00)
A.intn=10,a[n];inta[2*n]; √
B.#definen5
C.inta[5+5];
D.#defineN10inta[N];
解析:
[解析]变量不能充当数组定义的长度。
所以A错误。
32.有以下程序:
#include<stdio.h>
#include<string.h>
char*a="you";
char*b="WelcomeyoutoBeijing!
";
main()
{char*p;
p=b;
while(*p!
=*a)p++;
p+=strlen(a)+1;
printf("%s/11",p);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.Beijing!
B.youtoBeijing!
C.WelcomeyoutoBeijing!
D.toBeijing!
√
解析:
[解析]while函数判断p指针指向地址的内容是否和a指针指向地址的内容相等,如果不是,则移动指针p+1,当p指向*b字符串中的‘y’时,和*a首地址元素相等,退出while语句后,p再向右移动a字符串长度+1个单位地址,此时p指向‘t’,输出‘t’及剩余的字符串,答案为D选项。
33.若定义函数int*func(),则函数func的返回值为______。
(分数:
2.50)
A.一个实数
B.一个指向整型变量的指针 √
C.一个指向整型函数的指针
D.一个整型函数的入口地址
解析:
[解析]本题考查函数返回值。
fun函数的返回值类型为int*类型,即函数返回一个指向整型变量的指针。
34.若变量已正确定义,则语句s=32;s^=32;printf("%d",s);的输出结果是______。
(分数:
2.00)
A.-1
B.0 √
C.1
D.32
解析:
[解析]本题考查逻辑异或运算。
异或运算只有在两个比较的位不同时其结果为1,否则结果为0,题目中两个值相同,所以结果为0。
35.有如下程序:
#include<stdio.h>
voidconvert(charch)
{
if(eh<"X")convert(ch+1);
printf("%c",ch);
main()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 分类 模拟 539
![提示](https://static.bingdoc.com/images/bang_tan.gif)