2023年CSP-J组(入门组)初赛真题(文末附答案)
一、单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)
1. 在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?()。
A.  unsigned
B.  const
C.  static
D.  mutable
2. 八进制数123456708 和076543218的和为()。
A.  222222218
B.  211111118
C.  221111118
D.  222222118
3. 阅读下述代码,请问修改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;
4. 假设有一个链表的节点定义如下:
struct Node {
int data;
Node* next;
};
现在有一个指向链表头部的指针:Node* head。如果想要在链表中插入一个新节点,其成员data的值为42,并使新节点成为链表的第一个节点,下面哪个操作是正确的?()
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.  6
B.  7
C.  8
D.  9
6.  小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息,则小明一共有()种选择时间段的方案。
A.  31
B.  18
C.  21
D.  33
7. 以下关于高精度运算的说法错误的是()。
A. 高精度计算主要是用来处理大整数或需要保留多位小数的运算。
B. 大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商。
C. 高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关。
D. 高精度加法运算的关键在于逐位相加并处理进位。
8.  后缀表达式“6 2 3 + - 3 8 2 / + * 2 ^ 3 +”对应的中缀表达式是()
A.  ((6 - (2 + 3)) * (3 + 8 / 2)) ^ 2 + 3
B.  6 - 2 + 3 * 3 + 8 / 2 ^ 2 + 3
C.  (6 - (2 + 3)) * ((3 + 8 / 2) ^ 2) + 3
D.  6 - ((2 + 3) * (3 + 8 / 2)) ^ 2 + 3
9. 数1010102和1668的和为()。
A.  101100002
B.  2368
C.  15810
D.  A016
ios 字符串转数组10. 假设有一组字符{a,b,c,d,e,f},对应的频率分别为5%,9%,12%,13%,16%,45%。请问以下哪个选项是字符a,b,c,d,e,f分别对应的一组哈夫曼编码?()
A.  1111,1110,101,100,110,0
B.  1010,1001,1000,011,010,00
C.  000,001,010,011,10,11
D.  1010,1011,110,111,00,01
11. 给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFG。请问这棵树的正确后序遍历结果是什么?()
A.  EDBFGCA
B.  EDBGCFA
C.  DEBGFCA
D.  DBEGFCA
12.考虑一个有向无环图,该图包括4条有向边:(1,2),(1,3),(2,4),和(3,4)。以下哪个选项是这个有向无环图的一个有效的拓扑排序?()
A.  4,2,3,1
B.  1,2,3,4
C.  1,2,4,3
D.  2,1,3,4
13. 在计算机中,以下哪个选项描述的数据存储容量最小?()
A.  字节(byte)
B.  比特(bit)
C.  字(word)
D.  千字节(kilobyte)
14. 一个班级有10个男生和12个女生。如果要选出一个3人的小组,并且小组中必须至少包含1个女生,那么有多少种可能的组合?()
A.  1420
B.  1770
C.  1540
D.  2200
15. 以下哪个不是操作系统?()
A.  Linux
B.  Windows
C.  Android
D.  HTML
二、阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填√,错误填×;除特殊说明外,判断题1.5分,选择题3分,共计40分)
(1)
01#include<iostream>
02#include<cmath>
03using namespace std;
04
05double f(double a,double b,double c){
06double s=(a+b+c)/2;
07return sqrt(s*(s-a)*(s-b)*(s-c));
08 }
09
10int main(){
11cout.flags(ios::fixed);
12cout.precision(4);
13
14int a,b,c;
15cin>>a>>b>>c;
16cout<<f(a,b,c)<<endl;
17return0;
18 }
假设输入的所有数都为不超过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”时,输出为()
A.  "6.0000"
B. "12.0000"
C. "24.0000"
D. "30.0000"
20.  当输入为“5 12 13”时,输出为()
A.  "24.0000"
B. "30.0000"
C. "60.0000"
D. "120.0000"
(2)
01#include<iostream>
02#include<vector>
03#include<algorithm>
04using namespace std;
05
06int f(string x,string y){
07int m=x.size();
08int n=y.size();
09vector<vector<int>>v(m+1,vector<int>(n+1,0)); 10for(int i=1;i<=m;i++){
11for(int j=1;j<=n;j++){
12if(x[i-1]==y[j-1]){
13                v[i][j]=v[i-1][j-1]+1;
14            }else{
15                v[i][j]=max(v[i-1][j],v[i][j-1]);
16            }
17        }
18    }
19return v[m][n];
20 }
21
22bool g(string x,string y){
23if(x.size() != y.size()){
24return false;
25    }
26return f(x+x,y)==y.size();
27 }
28
29int main(){
30string x,y;
31cin>>x>>y;
32cout<<g(x,y)<<endl;
33return0;
34 }
判断题
21.  f函数的返回值小于等于min(n,m)。()
22.  f函数的返回值等于两个输入字符串的最长公共子串的长度。()
23.  当输入两个完全相同的字符串时,g函数的返回值总是true()
单选题
24.  将第19行中的“v[m][n]”替换为“v[n][m]”,那么该程序()
A. 行为不变
B. 只会改变输出
C..一定非正常退出
D. 可能非正常退出
25.  当输入为"csp-j p-jcs" 时,输出为( )
A. “0”8. “1”  C  “T”  D. “F”
26 当输入为“csppsc spsccp”时,输出为:()
A. “T”
B. “F”        c. “0”0. “1”
(3)
01#include <iostream>
02#include <cmath>
03using namespace std;
04
05int solve1(int n){
06return n*n;
07 }
08
09int solve2(int n){
10int sum=0;
11for(int i=1;i<=sqrt(n);i++){
12if(n%i==0){
13if(n/i==i){
14                sum+=i*i;
15            }else{
16                sum+=i*i+(n/i)*(n/i);
17            }
18        }
19    }
20return sum;
21 }
22
23int main(){
24int n;
25cin>>n;
26cout<<solve2(solve1(n))<<" "<<solve1((solve2(n)))<<endl; 27return0;
28 }
假设输入的n是绝对值不超过1000的整数,完成下面的判断题和单选题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。