41期C语言新增选择题6套资料.docx
- 文档编号:12967178
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:159
- 大小:180.27KB
41期C语言新增选择题6套资料.docx
《41期C语言新增选择题6套资料.docx》由会员分享,可在线阅读,更多相关《41期C语言新增选择题6套资料.docx(159页珍藏版)》请在冰点文库上搜索。
41期C语言新增选择题6套资料
第一套
1.下列叙述中正确的是
A)所谓算法就是计算方法
B)程序可以作为算法的一种描述方法
C)算法设计只需考虑得到计算结果
D)算法设计可以忽略算法的运算时间
参考答案:
B
【解析】算法是指对解题方案的准确而完整的描述,算法不等于数学上的计算方法,也不等于程序,A选项错误。
算法设计需要考虑可行性、确定性、有穷性与足够的情报,不能只考虑计算结果,C选项错误。
算法设计有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的,D选项错误。
算法在实现时需要用具体的程序设计语言描述,所以程序可以作为算法的一种描述方法,B选项正确。
2.下列各序列中不是堆的是
A)(91,85,53,36,47,30,24,12)
B)(91,85,53,47,36,30,24,12)
C)(47,91,53,85,30,12,24,36)
D)(91,85,53,47,30,12,24,36)
参考答案:
C
【解析】若有n个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件时称为堆:
大根堆,所有结点的值大于或等于左右子结点的值;小根堆,所有结点的值小于或等于左右子结点的值。
A、B、D选项属于大根堆,C选项由于47<91,判断属于小根堆,但91>85,不满足条件,不是堆,故正确答案为C选项。
3.深度为5的完全二叉树的结点数不可能是
A)15
B)16
C)17
D)18
参考答案:
A
【解析】在树结构中,定义一棵树的根结点所在的层次为1,其他结点所在的层次等于它的父结点所在的层次加1,树的最大层次称为树的深度。
完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。
深度为5的二叉树,结点个数最多为25-1=31,最少为24=16,不可能是15,故正确答案为A选项。
4.
A)ABDEGCFH
B)DBGEAFHC
C)DGEBHFCA
D)ABCDEFGH
参考答案:
A
【解析】二叉树遍历可以分为3种:
前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。
本题中前序遍历为ABDEGCFH,中序遍历为DBGEAFHC,后序遍历为DGEBHFCA,故A选项正确。
5.下面描述不属于软件特点的是
A)软件是一种逻辑实体,具有抽象性
B)软件在使用中不存在磨损、老化问题
C)软件复杂性高
D)软件使用不涉及知识产权
参考答案:
D
【解析】软件具有以下特点:
软件是一种逻辑实体,具有抽象性;软件没有明显的制作过程;软件在使用期间不存在磨损、老化问题;对硬件和环境具有依赖性;软件复杂性高,成本昂贵;软件开发涉及诸多的社会因素,如知识产权等。
故选项D正确。
6.下面对类-对象主要特征描述正确的是
A)对象唯一性
B)对象无关性
C)类的单一性
D)类的依赖性
参考答案:
A
【解析】对象的基本特点是:
标识唯一性、分类性、多态性、封装性、模块独立性好。
类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。
对象具有的性质,类也具有。
故A选项正确。
下面对类-对象主要特征描述正确的是
A)对象唯一性
B)对象无关性
C)类的单一性
D)类的依赖性
参考答案:
A
【解析】对象的基本特点是:
标识唯一性、分类性、多态性、封装性、模块独立性好。
类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。
对象具有的性质,类也具有。
故A选项正确。
7.在数据库中,数据模型包括数据结构、数据操作和
A)数据约束
B)数据类型
C)关系运算
D)查询
参考答案:
A
【解析】数据模型通常由数据结构、数据操作及数据约束3部分组成。
故A选项正确。
8.一个运动队有多个队员,一个队员仅属于一个运动队,一个队一般都有一个教练,则实体运动队和队员的联系是
A)一对多
B)一对一
C)多对一
D)多对多
参考答案:
A
【解析】一般来说,实体集之间必须通过联系来建立联接关系,分为三类:
一对一联系(1:
1)、一对多联系(1:
m)、多对多联系(m:
n)。
实体运动队和队员的关系为1:
m联系,故A选项正确。
9.设循环队列为Q(1:
m),其初始状态为front=rear=m。
经过一系列入队与退队运算后,front=30,rear=10。
现要在该循环队列中作顺序查找,最坏情况下需要比较的次数为
A)19
B)20
C)m-19
D)m-20
参考答案:
D
【解析】循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,队列初始状态为front=rear=m,当front=30,rear=10时,队列中有m-30+10+1=m-19个元素,比较次数为m-20次,D选项正确。
设循环队列为Q(1:
m),其初始状态为front=rear=m。
经过一系列入队与退队运算后,front=30,rear=10。
现要在该循环队列中作顺序查找,最坏情况下需要比较的次数为
A)19
B)20
C)m-19
D)m-20
参考答案:
D
【解析】循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,队列初始状态为front=rear=m,当front=30,rear=10时,队列中有m-30+10+1=m-19个元素,比较次数为m-20次,D选项正确。
10.
A)投影
B)交
C)选择
D)并
参考答案:
A
【解析】用于查询的3个操作无法用传统的集合运算表示,引入的运算为投影运算、选择运算、笛卡尔积。
常用的扩充运算有交、除、连接及自然连接等。
投影,从关系模式中指定若干个属性组成新的关系,题目中从R中指定AB组成新的关系T,故A选项正确。
选择,从关系中找出满足给定条件的元组的操作称为选择,即结果T应该包含R中全部属性,故C选项错误。
假设,R与S经过某种关系得到T,则并:
R∪S是将S中的记录追加到R后面;交:
R∩S结果是既属于R又属于S的记录组成的集合。
上述两种操作中,关系R与S以及T要求有相同的结构,故B、D选项错误。
11.以下叙述正确的是
A)计算机只接收由0和1代码组成的二进制指令或数据
B)计算机只接收由0和1代码组成的十进制指令或数据
C)计算机可直接接收并运行C源程序
D)计算机可直接接收并运行任意高级语言编写的源程序
参考答案:
A
【解析】计算机认识自己的母语--机器语言,即0和1代码组成的二进制指令或数据,故A选项正确,B选项错误。
C语言是一种高级语言,计算机不能直接运行C源程序和高级语言编写的源程序,C和D选项错误。
12.以下叙述正确的是
A)计算机只接收由0和1代码组成的二进制指令或数据
B)计算机只接收由0和1代码组成的十进制指令或数据
C)计算机可直接接收并运行C源程序
D)计算机可直接接收并运行任意高级语言编写的源程序
参考答案:
A
【解析】计算机认识自己的母语--机器语言,即0和1代码组成的二进制指令或数据,故A选项正确,B选项错误。
C语言是一种高级语言,计算机不能直接运行C源程序和高级语言编写的源程序,C和D选项错误。
13.若有定义:
charc;intd;程序运行时输入:
c=1,d=2<回车>,能把字符1输入给变量c、整数2输入给变量d的输入语句是
A)scanf("c=%dd=%d",&c,&d);
B)scanf("c=%cd=%d",&c,&d);
C)scanf("c=%d,d=%d",&c,&d);
D)scanf("c=%c,d=%d",&c,&d);
参考答案:
D
【解析】scanf()函数中,%d对应的参数是整数型地址,%c对应参数为char型地址,C,A选项错误;如果输入地址有多个,应该用逗号隔开,B选项错误,故答案为D选项。
14.以下选项中,与n=i++完全等价的表达式是
A)n=i,i=i+1
B)n+=i+1
C)i=i+1,n=i
D)n=++i
参考答案:
A
【解析】运算符"++"放在变量后面时,表示变量先参与其他操作,再完成加1,故表达式n=i++运算顺序是先将i赋值给n,再将i+1赋值给i,因此答案为A选项。
15.设有定义:
intn=1234;
doublex=3.1415;
则语句
printf("%3d,%1.3f\n",n,x);
的输出结果是
A)1234,3.142
B)123,3.142
C)1234,3.141
D)123,3.141
参考答案:
A
【解析】函数printf()中,%md指输出带符号的十进制整数,给定最小宽度为m位,不足m位左端补空格,超过m位按实际位数输出,%.nf表示以小数形式输出实数,小数占n位,对应题目,答案为A选项。
16.有以下程序
#include
main()
{inta,b;
for(a=0;a<3;a++)
{scanf("%d",&b);
switch(b)
{default:
printf("%d,",++b);
case1:
printf("%d,",++b);
case2:
printf("%d,",++b);
}
}
}
执行时输入:
123<回车>,则输出结果是
A)2,2,3,4,4,4,
B)2,3,4,
C)2,3,3,4,5,6,
D)2,3,4,3,4,4,
参考答案:
C
【解析】程序在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,执行对应的case语句,之后不再进行判断,继续执行此case后面的语句,并且各个case和default的出现次序不影响执行结果,即题目中的default放在开始位置,与放在最后是一样的结果;运算符"++"放在变量前面时,表示将变量+1,再参与其他操作。
本题,第一次循环输入b=1,执行case1,输出2,再执行case2,输出3,第二次循环输入b=2,执行case2输出3,第三次循环,输入b=3,没有case与其对应,故执行default输出b=4,接着执行case1:
,输出5,再执行case2,输出b=6,至此退出for语句。
因此,最后输出为2,3,3,4,5,6,答案为C选项。
17.设变量m为float类型,变量n为int类型,则以下能实现将m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是
A)m=(m*100+0.5)/100.0
B)n=m*100+0.5,m=n/100.0
C)n=m/100+0.5,m=n*100.0
D)m=m*100+0.5/100.0
参考答案:
B
【解析】n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保留m的小数点后两位,需要将m乘以100,若要将m小数点后第三位四舍五入,再需要加上0.5,然后赋给整型变量,所以n=m*100+0.5,接下来需要将m还原成有两位小数的浮点数,除号两边操作数有一个是浮点数时,结果为浮点数,将n/100.0赋值给m,得到m的值含两位小数,故答案为B选项。
18.有以下程序
#include
main()
{inta=1,b=1;
for(;a--;)
b--;
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是
A)-1,0
B)0,0
C)-1,-1
D)1,1
参考答案:
A
【解析】题干中语句for(;a--;),条件a--!
=0先判断a!
=0成立,则进入循环,然后a减1,起始a=1不等于0,满足条件进入for循环,然后a自减1为0,b自减1为0,继续循环;再跳回for语句时,a!
=0不成立,不会进入循环,但是a也要自减1为-1,循环结束;因此最后输出a=-1,b=0.因此答案为A选项。
19.若有定义:
chars[30]={0};
运行时输入:
Thisisastring.<回车>
则以下不能正确读入整个字符串:
Thisisastring.
到字符数组s中的语句组是
A)i=0;while((c=getchar())!
='\n')s[i++]=c;
B)gets(s);
C)for(i=0;(c=getchar())!
='\n';i++)s[i]=c;
D)scanf("%s",s);
参考答案:
D
【解析】在使用格式符"%s"进行字符串的输入时,空格和回车(Enter)会被读入,并且函数scanf以它们作为分隔符停止一个字符串的输入,因此答案为D选项。
20.有如下程序
#include
main()
{
inta=0,b=1;
if(a++&&b++)
printf("TRUE");
else
printf("FALSE");
printf("_OUT:
a=%d,b=%d\n",a,b);
}
程序运行后的输出结果是
A)FALSE_OUT:
a=1,b=1
B)FALSE_OUT:
a=0,b=2
C)TRUE_OUT:
a=1,b=2
D)TRUE_OUT:
a=0,b=1
参考答案:
A
【解析】逻辑与运算符遵循"短路求值"策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,进入else分支执行,a的值+1,b不变,因此答案为A选项。
21.有如下程序
#include
main()
{
inti,data;
scanf("%d",&data);
for(i=0;i<5;i++)
{
if(i printf("%d-",i); } } 程序运行时,从键盘输入: 3<回车>后,程序输出结果为 A)3-4- B)1-2-3- C)0-1-2- D)0-1-2-3- 参考答案: A 【解析】从键盘输入3,即data=3,进入for语句,满足i<3时,运行continue语句只结束本次循环,而不是终止整个循环的执行,当i加到3时,if条件不满足,执行printf函数,输出3-,i再加到4,输出4-,i再加1等于5,退出for循环,程序运行后结果是: "3-4-"。 因此答案为A选项。 22.有以下程序 #include main() { inta=0,b=1; if(++a==b++) printf("1"); else printf("0"); printf("a=%d,b=%d\n",a,b); } 程序运行后的输出结果是 A)1a=0,b=1 B)0a=1,b=2 C)1a=1,b=2 D)0a=0,b=2 参考答案: C 【解析】运算符"++"放在变量后面时,表示先执行其他操作,再将变量+1,运算符"++"放在变量前面时,表示将变量+1,再参与其他操作。 因此if(++a==b++)为真,输出1,再输出a,b,程序运行后的结果是: 1a=1,b=2。 因此答案为C选项。 23.有如下程序段 for(i=0;i<10;i++) if(i<=5)break; 则循环结束后i的值为 A)1 B)0 C)5 D)10 参考答案: B 【解析】if(i<=5)break语句,表示如果i<=5,执行break语句,跳出循环程序,起始i=0满足if语句,则循环结束后i值为0,因此答案为B选项。 24.设有定义: inta=0,b=1;,以下表达式中,会产生"短路"现象,致使变量b的值不变的是 A)a++&&b++ B)a++||++b C)++a&&b++ D)+a||++b 参考答案: A 【解析】运算符"++"放在变量前面时,表示将变量+1,再参与其他操作,a++&&b++时,由于a值是0直接判定与运算结果为0,忽视b++的值,因此b值不发生改变,答案为A选项。 25.有如下程序段 for(i=0;i<10;i++) if(i>5)break; 则循环结束后i的值为 A)10 B)5 C)9 D)6 参考答案: D 【解析】if(i>5)break;表示判断i值,如果大于5后,执行break语句,结束循环程序,这里i=6,循环结束。 因此答案为D选项。 26.有以下程序段 intx,i; for(i=1;i<=100;i++) {scanf("%d",&x); if(x<0)continue; printf("%4d\n",x); } 下面针对上述程序段的描述正确的是 A)最多可以输出100个非负整数 B)当x<0时结束整个循环 C)当x>=0时没有任何输出 D)printf函数调用语句总是被跳过 参考答案: A 【解析】continue语句只结束本次循环,而不是终止整个循环的执行,因此B选项错误;当x>=0时,程序执行printf("%4d\n",x)语句,因此排除C,D选项,答案为A选项。 27.关于地址和指针,以下说法正确的是 A)通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量 B)可以取一个常数的地址赋值给同类型的指针变量 C)可以取一个表达式的地址赋值给同类型的指针变量 D)可以取一个指针变量的地址赋值给基类型相同的指针变量 参考答案: A 【解析】常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允许这样做,编译会出错,B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不允许这样做,编译会出错,C选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D选项错误。 故答案为A选项。 28.有以下程序 #include #defineN4 voidfun(inta[][N]) { inti; for(i=0;i a[0][i]+=a[N-1][N-1-i]; } main() {intx[N][N]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}},i; fun(x); for(i=0;i printf("\n"); } 程序运行后的输出结果是 A)4,7,10,13, B)1,6,11,16, C)17,6,11,16, D)5,13,21,29, 参考答案: C 【解析】N=4,for(i=0,i 17.6.11.16。 因此答案为C选项。 29.有以下程序 #include #defineN4 voidfun(inta[][N]) { inti; for(i=0;i a[0][i]+=a[N-1][N-1-i]; } main() {intx[N][N]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}},i; fun(x); for(i=0;i printf("\n"); } 程序运行后的输出结果是 A)4,7,10,13, B)1,6,11,16, C)17,6,11,16, D)5,13,21,29, 参考答案: C 【解析】N=4,for(i=0,i 17.6.11.16。 因此答案为C选项。 30.以下叙述正确的是 A)不能在数组说明符的一对方括号中使用表达式 B)charc1,*c2,**c3,c4[2];是C语言的合法语句 C)数组下标的最小值可以是负值 D)若有数组定义intarray[5];则语句printf("%d",array[1.23]);是合法的 参考答案: B 【解析】在B选项中,c1是字符型变量,c2是字符型指针变量,c3是指向字符型指针的指针变量,c4[2]是一个一维字符数组,这些都是C语言的合法语句,因此答案为B选项。 31.有以下程序 #include main() { inta=2,*ptr; ptr=&a; *ptr=8; a=(*ptr)++; printf("%d,%d\n",a,*ptr); } 程序运行后的输出结果是 A)9,9 B)8,9 C)2,4 D)0,4 参考答案: A 【解析】题干中定义一个指针变量ptr,再把a的地址值赋给ptr,此时a和*ptr代表同一内存单元中的值,*ptr=8表示把a和*ptr的值修改为8,a=(*ptr)++表示把指针ptr对应地址单元里的值赋给a,再将ptr对应地址单元里的值加1,因此*(ptr)值为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 41 语言 新增 选择题 资料