CCFCSPJ入门级CC++语言试题与答案解析.docx
- 文档编号:6074363
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:17
- 大小:53.56KB
CCFCSPJ入门级CC++语言试题与答案解析.docx
《CCFCSPJ入门级CC++语言试题与答案解析.docx》由会员分享,可在线阅读,更多相关《CCFCSPJ入门级CC++语言试题与答案解析.docx(17页珍藏版)》请在冰豆网上搜索。
CCFCSPJ入门级CC++语言试题与答案解析
2019CCF非专业级别软件能力认证第一轮
(CSP-J)入门级C++语言试题参考答案与解析
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1.中国的国家顶级域名是()
A..cnB.•chC..chnD..china
答案:
A
考点:
计算机基础-计算机网络-•域名
解析:
典型的国家顶级域名有.cn(中国)、.us(美国)、.uk(英国)、.jp(Fl本)、.sg(新加坡)等。
典型的通用顶级域名有.edu(教育机构)、.gov(政府部门)、.net(网络组织)、.com(商业组织)、.org(非营机构)、.mil(军事部门)等。
2.二进制数11101110010111和01011011101011进行逻辑与运算的结果是()。
A.01001010001011B.01001010010011
C.01001010000001D.01001010000011
答案:
D
考点:
计算机基础-数制与编码-二进制-位运算
解析:
逐位进行与运算。
对于每-位,0与0得0,1与0得0,0与1得0,1与1得1。
3.一个32位整型变量占用()个字节。
A.32B.128C・4D・8
答案:
C
考点:
计算机基础-计算机体系结构-内存空间
解析:
8位是1字节,因此32位是4字节。
在C++语言中,int是最常用的带符号32位整型变暈,可表示数值[-2二unsignedint是最常用的无符号32位整型变量,可表示数值[0,232-l]o
4.若有如下程序段,其中s、a、b、c均已定义为整型变屋,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++)s=s-1;
则与上述程序段功能等价的赋值语句足()
A.s=a-c;B.s=a-b;C・s=s-c;D.s=b-c;答案:
A
考点:
程序设计基础-C++语法基础-循环语句
解析:
s初始化为3,紧接着for循环c次,每次s减1,因此该程序段相当于s=a~Co
5.设有100个已排好序的数据元素.采用折半查找时,最大比较次数为()
A.7B.10C.6D.8
答考解
:
A
:
程序设计基础-算法与数据结构■折半査找(二分查找)
:
对100个有序元素进行折半查找,每次查找可将检索范围缩小一半。
由2”-1〈100"27-1可知,最大比较次数为7。
6・链表不具有的特点是()
A.插入删除不需要移动元素B.不必事先估计存储空间
C.所需空间与线性表长度成正比D.可随机访问任一元素
答案:
D
考点:
程序设计基础■算法与数据结构-链表
解析:
链表是通过记录每个元素的后继位置來实现数据存储,所需空间与元素个数成正比,优点是不必事先估汁存储空间、插入或删除指定位置元素的时间复杂度为0
(1):
但缺点是由于其元素的内存地址不连续,无法进行0
(1)的随机访问。
7・把8个同样的球放在5个同样的袋子里,允许有的袋子空着不放,问共有多少冲不同的分法?
()提示:
如果8个球都放在一个袋子里,无论足哪个袋子,都只算同一种分法
A.22B.24C.18D.20
答考解案合
案:
C
点:
数学■计数问题
析:
枚举法求解,8个同样的球分1个袋子共1种方案,分2个袋子共4种方,分3个袋子共5种方案,分4个袋子共5种方案,分5个袋子共3种方案,计18种。
&一棵二叉树如右图所示,若采用顺序存储结构,即用维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为i,则英左孩子位于下标2i处.右孩子位于下标2i+l处),则该数组的展大下标至少为()。
答考解点
案:
C
点:
程序设计基础-算法与数据结构-树结构
析:
根据题目给定的规则可知,下标最大的结点为树中深度最大且最靠右的结,其下标为((l*2+l)*2+l)*2+l=15o
9.
100以内最人的索数是()。
A.89B.97
答案:
B
考点:
数学-素数与合数
解析:
98・100均为合数,97为素数。
10.319和377的最大公约数是()。
A.27B.33C.29D.31
答案:
C
考点:
数学■公约数与公倍数
解析:
使用辗转相除法可得GCI)(319,377)=GCD(319,58)=GCD(58,29)=290或将两数分解质因数后,提取公共部分亦可求解。
11.新学期开学了,小胖想减肥,健身教练给小胖制定了两个训练方案。
方案一:
每次连续跑3公里口J以消耗300千卡(耗时半小时):
方案二:
每次连续跑5公里可以消耗600千卡(耗时1小时)。
小胖每周周一到周四能抽出半小时跑步,周五到周口能抽出-小时跑步。
另外,教练遂议小胖每周最名跑21公里,否则会损伤膝孟。
请问如果小胖想严格执行教练的训练方案,并且不想损伤膝盖,每周最参通过跑步消耗多少千卡?
()
A.3000B.2500C.2400D.2520
答案:
C
考点:
程序设计基础••算法与数据结构■枚举算法
解析:
设方案1执行x天,方案2执行y天,则有3x+5y<=21>x+y<=7、y<=30要求300x+600y的最大值,枚举可得最优方案为x=2、y=3,此时300x+600y为2400.或使用线性规划亦可求解。
12•—副纸牌除掉大小王有52张牌,四种花色,每种花色13张。
假设从这52张牌中随机抽取13张纸牌,则至少()张牌的花色一致。
A.4B.2C.3D.5
答案:
A
考点:
数学■抽屉原理
解析:
最坏情况,13张牌对应四种花色的牌数为3、3、3、4o
13.—吐数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是
9,9颠倒过来看还是6,其他数字颠倒过来都不构成数字。
类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901o假设某个城市的车牌只山5位数字组成,每-•位都可以取0到9。
请问这个城市就多有多少个车牌倒过来恰好还是原来的车牌?
()
A.60B.125C.75D.100
答案:
C
考点:
数学■乘法原理
解析:
前2位有0、1、&6、9共5种选择,第3位只能放0、1、8,后2位由前2位决定,因此总方案数为5*5*3*l*l=75o
14.假设一棵二叉树的后序遍历呼列为DGJHEBII'CA,序遍历用列为DBGEIIJACIF,则其前序遍历序列为()。
A.ABCDEFGIIIJB.ABDEGHJCFIC.ABDEGJIICFID.ABDEGHJFIC答案:
B
考点:
程序设计基础-算法与数据结构-树结构
解析:
后序遍历的规则是“左右根”、中序遍历的规则是''左根右”,因此可知,A是树根、DBGE町是A左子树的中序遍历(对应后续遍历DGJHEB)、CIF是A右子树的中序遍历(对应后续遍历IFC),递归画出对应的二叉树,再根据前序遍历规则“根左右”即可求出答案。
15.以下哪个奖项是计算机科学领域的最高奖?
()
A.图灵奖B.再班奖C.诺贝尔奖D.普利策奖
答案:
A
考点:
计算机基础-常识■重要人物
解析:
图灵奖由美国计算机协会于1966年设、'/:
其名称取自计算机科学之父图灵,专门奖励对计算机事业作出重要贡献的个人,被誉为“计算机界的诺贝尔奖”。
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填错误填X;除特殊说明外,判断题1.5分,选择题4分,共计40分)
程序一
1#inelude
2#include
3usingnamespacestd;
4charst[100];
5intmain(){
6scanf('^s"jst);
7intn=strlen(st);
8
for(inti=
1;i<=n;++i){
9
if(n%i:
==0){
10
charc=
妣[i・1];
11
if(c>=
•a*)
12
st[i・
1]=c・'a,+*A';
13
}
14
}
15
printf(,l%s\
st);
16
return0;
17
}
考点:
程序设汁基础-算法与数据结构-字符串
概述:
程序用于将字符串下标(如果从1开始编号,但C++语言中实际是从0开始编号)是n约数的对应小写字母转换为大写字母。
•判断题
1)输入的字符串只能由小写字母或大写字冊组成。
()答案:
错
解析:
输入的字符串也可以包含数字等其他字符。
2)若将第8行的“i=1”改为“i=0°,程序运行时会发牛错误。
()
答案:
对
解析:
若i可以为0,则第9行的辻语句条件“n%i=0”将发生运行时错误REo
3)若将第8行的“i<=n”改为“i*i<=n”,程序运行结果不会改变。
()
答案:
错
解析:
当第8行的循环条件为“iOn”时,字符串的末尾字符会被程序加工,但
若改为“i*i<=n”,字符串的末尾字符将不会被程序加工(除非字符串长度为1)。
4)若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。
()
答案:
对
解析:
大写字母的ASCII编码值小于小写字母的。
若输入的字符串全部由大写字母组成,则程序不会对其进行加工。
•选择题
5)若输入的字符巾长度为18,那么输入的字符阳跟输出的字符妝相比,至多有()个字符不同。
A.18B.6C.10D.1
答案:
B
解析:
18的止约数共有6个,因此程序至多修改输入字符串中的6个字符,即输出字符串与输入字符串至多有6个字符不同。
。
6)若输入的字符串长度为(),那么输入的字符串跟输岀的字符串相比,至多有36个字符不同。
A.36B.100000C・1D.128
答案:
B
解析:
根据程序的作用可知,要使输出字符串和输入字符串之间至多有36个字符不同,36应当是字符串长度n的约数个数。
木题选项中,仅有100000满足要求,将其分解质因数得1000002环5",得其的止约数共有(5+1)*(5+1)=36个。
程序二
1#inelude
2usingnamespacestd;
3intn,m;
4inta[100],b[100];
5
6
intmain(){
7
scanf(,,%d%d,,>
&n,&m);
8
for(inti=
1;i<=n;++i)
9
a[i]=b[i]
=0;
10
for(inti=
1;i<=m;++i){
11
intx»y;
12
scanf(il%d%d\&y);
13
if(a[x]<
y&&b[y] 14 if(a[x] >0) 15 b[a[x]] =0; 16 if(b[y] >0) 17 a[b[y]] =0; 18 a[x]=y; 19 b[y]=x; 20 } 21 } 22 intans=0; 23 for(inti= 1;i<=n;++i){ 24 if(a[i]== 0) 25 ++ans; 26 if(b[i]== 0) 27 ++dns; 28 } 29 printf(u%d\nM ans); 30 return0; 31 } 假设输入的n和m都是正整数,x和y都是4[1,n]的范围内的整数,完成下面的判断题和单选题: 考点: 程序设计基础■算法与数据结构■模拟算法 概述: 程序可以视作通过模拟算法选出一系列互不冲突的数对一一若数对g,yj和(x? yj之间有x.==x2或*则认为这两个数对存在冲突,现按顺序考虑每一个数对(Xi,yj(要求满足前提: 在已经选用的数对中,与左值Xi匹配的右值小于力、与右值y: 匹配的左值小于,若该数对与此前已经选用的数对冲突,则用当前数对替换所冲突的原数对: 若无冲突,则直接选用当前数对。 程序中的Hx]用于记录,在己选用的数对中,与左值x相匹配的右值;b[y]用于记录,在已选用的数对中,与右值y相比配的左值;n表示数对左值和右值的取值范国为[l,n]: 最后的ans用于统计剩余多少左值或右值,没有相应数对被我们选中。 判断题 1)当m>0时,输出的值一定小于2n°() 答案: 对 解析: 由限定条件0 2)执行完第27行的“++ans"时,ans—定是偶数。 () 答案: 错 解析: 山于数对是一个左值与一个右值相匹配,因此ansM终一定是偶数。 但第27行的“++ans”在第23行的for循环的内部,其中间结果可能为奇数。 3)a[i]和b[i]不可能同时大于0。 () 答案: 错 解析: &[i]用于记录与左值i相匹配的右值,不存在则为0;b[i]用于记录与右值i相匹配的左值,不存在则为0。 当存在数对(i,y)和(x,i)都被我们选中时,a[i]和b[i]就会同时大于0o 4)若程序执行到第13行时,x总是小于y,那么第15行不会被执行。 () 答案: 错 解析: 存在反例一一依次考虑数对(1,2)(1,3)时,第15行程序会被执行。 •选择题 5)若m个x两两不同,且m个y两两不同,则输出的值为() A.2n-2mB.2n+2C.2n-2D.2n 答案: A 解析: 此时,输入的数对两两互不冲突,因此程序会将它们全部选中,根据上述ans的意义可知,其结果为2n-2mo 6)若m个x两两不同,且m个y都相等,则输出的值为() A.2n~2B.2nC・2mI).2n~2m 答案;A 解析: 此时,输入的数对两两存在冲突,因此程序最终只会选用一个数对,根据上述ans的意义可知,其结果为2n-2o程序三 1#inelude 2usingnamespacestd; 3constintmaxn=10000; 4intn; 5inta[maxn]; 6intb[maxn]; 7intf(int1,intr,intdepth){ 8if(1>r) 9return0; 10 intmin=maxn》mink; 11 for (int i=1;i<=r;++i){ 12 il F(min >a[i]){ 13 min= a[i]; 14 mink: =i; 15 } 16 17 int Ires =f(ljmink-1,depth +1); 18 int rres =f(mink+1,depth +1); 19returnIres+rres+depth♦b[mink]; 20} 21intmain(){ 22 cin>>n; 23 for(inti=0;i 24 cin>>a[i]; 25 for(inti=0;i 26 cin>>b[i]; 27 cout< 28 return0; 29 } 考点: 程序设计基础■算法与数据结构-树结构 概述: 程序可以视作根据二叉树的中序遍历,构造一棵满足要求的树,并输出各结点深度与b值的加权和一一要求二叉树的根结点般小,并递归要求左右子树的根结点最小(除非相应子树为空)。 •判断题 1)如果a数组有重复的数字,则程序运行时会发生错误。 () 答案: 错 解析: 若a数组有重复数字,则程序在根据a数组递归构造符合要求的二叉树时,对于相同结点值,会优先考虑位于左侧的。 2)如果b数组全为0,则输岀为0。 () 答案: 对 解析: 程序最终输出的是各结点深度与b值的加权和,因此若b数组全为0,则加权和显然为0。 •选择题 3)当n=100时,最坏情况下,与第12行的比较运算执行的次数最接近的是: ()。 A.5000B.600C・6D.100 : A : 最坏情况下,程序所构造的二叉树的每个结点至多仅有一个子结点,此时,将递归100层,其中第i层进行100-i+l次第12行的比较运算,总执行次 4)n=100时,最好情况匚与第12行的比较运算执行的次数最接近的是: ()。 A.100B.6C.5000D.600 答案: D 解析: 最佳情况下,程序构造二叉树时,对于每个结点会尽可能均分英左右子树。 定义根结点深度为1,则含n=100个结点的树的深度最小为logn^7,此时每选定一层结点,程序都盂要执行约n次的第12行的比较运算,因此总执行次数约为nlogn~600。 5)当n=10时.若b数组满足,对任意OSiVm都有b[i]=i4-1.那么输出垠大为()。 A.386B.383C.384D.385 答案: D 解析: 此时,要使输出的ans值尽可能大,程序所松造的二叉树的深度应尽可能地大。 定义根结点深度为1,则含10个结点的二叉树的最大深度为10,因此ans的最大值为1*1+2*2+3*3+・-+10*10=385。 6)(4分)当n=100吋,若b数组满足,对任意OSiVn,都有b[i]= 1,那么输出最小为()。 A.582B.580C.579I).581 答案: B 解析: 此时,要使输出的ans值尽可能小,程序应参照完全二叉树构造此树,其中深度为1的结点共1个,深度为2的结点共2个,深度为3的结点共4个……深度为6的结点共32个,剩余37个结点的深度为7,因此ans的最小值为 (1*1-2*2+3*4+・・・+6*32)+7*37=580。 三、完善程序(单选题,每题3分,共计30分) 程序一 (矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为: 数字0变成矩阵昨;],数字1变成矩阵I: J]o最初该矩阵只有一个元素0,变幻n次后,矩阵会变成什么样? 例如,矩阵鼓初为: [0]: 矩阵变幻1次后: [JJ]: 矩阵变幻2次后: 0000 0101 0011 Lo11oJ 输入一行一个不超过10的止整数no输出变幻n次后的矩阵. 试补全程序。 提示: “<<”表示二进制左移运算符,例如(11)2«2=(1100)2; 而“八”表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位一一进行比较,若两个二进制位相同,则运算结果的对应二进制位为0,反之为 1#include 2usingnamespacestd; 3intn; 4constintmax_size=1<<10; 5 5intres[max_size][max_size]; 7 6voidrecursive(intx,inty,intn,intt){ 7if(n==0){ 8res[x][y]=①; 9return; 10} 11intstep=1<<(n-1); 12recursive(②,n・1,t); 13recursive(x? y+step,n・t); 14recursive(x+step,y,n•1,t); 15recursive(③,n・1,! t); 16} 19 17intmain(){ 18scanf(H%dH,&n); 19recursive(0,0,④); 20intsize=⑤; 21for(inti=0;i 22for(intj=0;j 23printf("%dM,res[i][j]); 24puts(““); 25} 26return0; 27} 考点: 程序设计基础-算法与数据结构-分治算法 概述: 程序采用分治算法,递归模拟矩阵的变换过程。 递归函数 recursive(x,y,n,t)表示计算左上角(x,y),大小2"*2",ftl单个数字t变幻而來的矩阵。 1)①处应填() A.n%2B.0C.tD.1 答案: C 解析: 此处为递归边界,当需要计算的是氓位矩阵时,相应元素应赋值为t,即无需再经任何变换。 2)②处应填() A.x-step,y-stepB・x,y・step C.x・step,yD.x,y 答案: D 解析: 左上角(x,y),且大小2*2"的矩阵,可以分成4个2"*2心的矩阵分别计算。 此处需要计算的是4个矩阵中位于左上方的矩阵,该矩阵的左上角坐标为(x,y)o B・x+step,y+step I).x»y•stap ! B : 左上角(x,y),且大小2*2"的矩阵,可以分成4个2n,*2nH的矩阵分别计此处需要计算的是4个矩阵中位于右下方的矩阵,该矩阵的左上角坐标为nI,y+2n,)o 4)④处应填(〉 A.n■1,n%2B・n,0 C.n%2D.n-1^0 答案: B 解析: 此处是递归计算的入口,即题目最终所求的是大小2*2",由单个数字0变幻闻来的矩阵,因此递归函数的后两个参数应设为n和0。 5)⑤处应填() A.1<<(n+1)B.1< C.n+1I).1«(n・1) 答案: B 解析: 此处是讣算最终所求的矩阵大小,即边Ksizc为賂位运算写做"l«n\程序二 2.(计数排序)计数排序足一个广泛使用的排序方法。 下面的程序使用双关键字计数排序,将n对10000以内的整数,从小到大排序。 例如有三对整数(3,4)、(2,4)、(3,3),那么排序之后应该是(2,4)、(3,3)、(3,4)o 输入第一行为m接下来n行.第i行有两个数n[i]和b[i]・分别表示第i对整数的第一关键字和笫二关键字。 从小到大排序后输出。 数据范围l 提示,应先对第二关键字排序,再对第一关键字排序V数组ord[]存储第二关键字排序的结果,数组res[]存储双关键字排序的结果。 试补全程序。 1#inelude 2#inelude 3usingnamespacestd; 4constintmaxn=10000000; 5constintmaxs=10000; 6 6intn; 7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CCFCSPJ 入门 CC 语言 试题 答案 解析