
2023年CCF非专业级别软件能力认证第一轮CSP-J1入门级C++语言试题.pdf
10页2023 CCF非专业级别软件能力认证第一轮(CSP-31)入门级C+语言试题认证时间:2023年 9 月 1 6 日09:3011:30考生注意事项:试题纸共有10页,答题纸共有1页,满分100分请在答题纸上作答,写在试题纸上的一律无效不得使用任何电子设备(如计算器、、电子词典等)或查阅任何书籍资料一、单项选择题(共 1 5 题,每题2 分,共计3 0 分;每题有且仅有一个正确选项)1 .在 C+中,下面哪个关键字用于声明一个变量,其值不能被修改?()A.unsignedB.constC.staticD.mutable2.八进制数123456708和076543218的和为()A.222222218B.211111118C.221111118D.2222221183.阅读下述代码,请问修改data的value成员以存储3.14,正确的方式是()union Data int num;float value;char symbol;;union Data data;A.data.value=3.14;B.value.data=3.14;C.data-value=3.14;D.value-data=3.14;CCF CSP-J 2023第一轮C+语言试题第 1页,共 10页4 .假设有一个链表的节点定义如下:struct Node int data;Node*next;现在有一个指向链表头部的指针:Node*heado如果想要在链表中插入一个新节点,其成员data的值为4 2,并使新节点成为链表的第一个节点,下面哪个操作是正确的?()A.Node*newNode=new Node;newNode-data=42;newNode-next=head;head=newNode;B.Node*newNode=new Node;head-data=42;newNode-next=head;head=newNode;C.Node*newNode=new Node;newNode-data=42;head-next=newNode;D.Node*newNode=new Node;newNode-data=42;newNode-next=head;5.根节点的高度为1,一棵拥有2023个节点的三叉树高度至少为()。
A.6B.7C.8D.96.小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息则小明一共有()种选择时间段的方案A.31B.18C.21D.337.以下关于高精度运算的说法错误的是()A.高精度计算主要是用来处理大整数或需要保留多位小数的运算B.大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商C.高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关D.高精度加法运算的关键在于逐位相加并处理进位CCF CSP-J 2023第一轮C+语言试题第2页,共10页8.后缀表达式“6 2 3+-3 8 2/+*2 八3+”对应的中缀表达式是()oA.(6-(2+3)*(3+8/2)A 2+3B.6-2 +3*3 +8/2A 2+3C.(6-(2+3)*(3+8/2)A 2)+3D.6-(2+3)*(3+8/2)八 2+39.数1010102和1668的和为()oA.101100002B.2368C.15810D.A 0i61。
假设有一组字符a,b,c,d,e,f,对应的频率分别为5%、9%、12%、13%、16%、45%请问以下哪个选项是字符a泮/)遇/分别对应的一组哈夫曼编码?()A.1111,1110,101,100,110,0B.1010,1001,1000,011,010,00C.000,001,010,011,10,11D.1010,1011,110,111,00,0111.给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFGo请问这棵树的正确后序遍历结果是什么?()A.EDBFGCAB.EDBGCFAC.DEBGFCAD.DBEGFCA12.考虑一个有向无环图,该图包含4条有向边:(1,2),(1,3),(2,4)和(3,4)以下哪个选项是这个有向无环图的一个有效的拓扑排序?()A.4,2,3,1B.1,2,3,4C.1,2,4,3D.2,1,3,4CCF CSP-J 2023第一轮C+语言试题第3页,共10页13.在计算机中,以下哪个选项描述的数据存储容量最小?()A.字 节(byte)B.比特(bit)C.字(word)D.千字节(kilobyte)14.一个班级有10个男生和12个女生。
如果要选出一个3 人的小组,并且小组中必须至少包含 1 个女生,那么有多少种可能的组合?()A.1420B.1770C.1540D.220015.以下哪个不是操作系统?()A.LinuxB.WindowsC.AndroidD.HTML二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填H错误填x;除特殊说明外,判断题15 分,选择题3 分,共计40分)(1)01#include 02#include 03 using namespace std;0405 double f(double a,double b,double c)06 double s=(a+b+c)/2;07 return sqrt(s*(s-a)*(s-b)*(s-c);08)0910 int main()11 cout.flags(ios:fixed);12 cout,precision(4);1314 int a,b,c;CCF CSP-J 2023第一轮C+语言试题第 4页,共 10页15161718cin a b c;cout f(a,b,c)endl;return 0;假设输入的所有数都为不超过1000的正整数,完成下面的判断题和单选题:判断题16.(2 分)当输入为“2 2 2”时,输出为“1.7321”。
17.(2 分)将第7 行中的“(s-b)*(s-c)”改为“(s-c)*(s-b)”不会影响程序运行的结果18.(2 分)程序总是输出四位小数单选题19.当输入为“3 4 5”时,输出为()oA.6.0000”B.“12.0000”C.“24.0000”D.“30.0000”20.当输入为“5 12 13”时,输出为()oA.“24.0000”B.“30.0000”C.“60.0000”D.“120.0000”(2)01#include 02#include 03#include 04 using namespace std;0506 int f(string x,string y)07 int m=x.size();08 int n=y.size();09 vectorvector v(m+l,vector(n+lJ 0);10 for(int i=1;i=m;i+)11 for(int j=1;j x y;32 cout g(Xj y)endl;33 return 0;34 判断题21.f 函数的返回值小于等于min(n,m))22.f 函数的返回值等于两个输入字符串的最长公共子串的长度。
)23.当输入两个完全相同的字符串时,g 函数的返回值总是true)单选题24.将第19行中的替换为“vnm9那么该程序(A.行为不变 B.只会改变输出 C.一 定 非 正 常 退 出D.)o可能非正常退出25.当输入为“csp-j p-jcs”时,输出为()0A.“0”B.“1”C.T”D.F”26.当输入为csppsc spsccp”时,输出为()A.T”B.F”C.“0 D.“1”(3)01#include 02#include 03 using namespace std;0405 int solvel(int n)06 return n*n;07)0809 int solve2(int n)CCF CSP-J 2023第一轮C+语言试题第 6页,共 10页10 int sum=0;11 for(int i=1;i n;26 cout solve2(solvel(n)solvel(solve2(n)endl;27 return 0;28)假设输入的n是绝对值不超过1000的整数,完成下面的判断题和单选题:判断题27.如果输入的n为正整数,solve2函数的作用是计算n所有的因子的平方和。
28.第13-14行的作用是避免n的平方根因子i(或n/i)进入第16行而被计算两次29.如果输入的n为质数,solve2(n)的返回值为产+1单选题30.(4分)如果输入的n为质数p的平方,那么solve2(n)的返回值为(B.n2+n+1 C.n2+1第一项减去第二项的差值一定()A.p2+p+131.当输入为正整数时,A.大于032.当输入为“5”时,A.“651 625”大于等于且B.不一定大于0输出为()oB.“650 729”C.小于0C.”651 676”)oD.p4+2P2+1小于等于0且D._不一定小于0D.“652 625”CCF CSP-J 2023第一轮C+语言试题第7页,共10页三、完善程序(单选题,每小题3 分,共计30分)(1)(寻找被移除的元素)问题:原有长度为n+1、公差为1 的等差升序数列;将数列输入到程序的数组时移除了一个元素,导致长度为n 的升序数组可能不再连续,除非被移除的是第一个或最后一个元素需要在数组不连续时,找出被移除的元素试补全程序01#include 02#include 0304 using namespace std;0506 int find_missing(vector&nums)07 int left=0,right=nums.size()-1;08 while(left n;22 vector nums(n);23 for(int i=0;i numsi;24 int missing_number=find_missing(nums);25 if(missing_number=)26 cout Sequence is consecutive endl;27 else 28 cout Missing number is missing_number endl;29)30 return 0;31 33.处应填()A.1 B.nums0 C.right D.leftCCF CSP-J 2023第一轮C+语言试题第8页,共10页34.处应填()A.left=mid+1C.right=mid35.处应填()A.left=mid+1C.right=mid36.处应填()A.left+nums0C.mid+nums037.处应填()A.nums0+n B.nums0+nB.right=mid-1D.left=midB.right=mid-1D.left=midB.right+nums0D.right+11 C.nums0+n+l D.numsn-l(2)(编辑距离)给定两个字符串,每次操作可以选择删除(Delete)、插入(Insert)、替换(Replace)一个字符,求将第一个字符串转换为第二个字符串所需要的最少操作次数。
试补全动态规划算法01 ttinclude 02 ttinclude 03#include 04 using namespace std;0506 in t m in(int x,in t y,in t z)07 return min(min(x,y),z);08)0910 in t e d it_ d ist_ d p(strin g s tr l,s trin g str2)11 in t m =s trl.le n g th();12 in t n=s tr2.le n g th();13 v。












