选择题 共15道
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15阅读程序 共17道
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32完善程序 共10道
33 34 35 36 37 38 39 40 41 42715 | 2024年CCF非专业级别软件能力认证第一轮 (CSP-J)入门级C++语言试题-练习
选择题 共15道
01 32 位 int 类型的存储范围是( ) 2分
登录后查看选项
02 计算(1488 - 10102) × D16 - 11012 的结果,并选择答案的十进制值:( ) 2分
登录后查看选项
03 某公司有 10 名员工,分为 3 个部门:A 部门有 4 名员工,B 部门有 3 名员工、C 部门有 3 名员工。现需要从这 10 名员工中选出 4 名组成一个工作组,且每个部门至少要有 1 人。问有多少种选择方式?( ) 2分
登录后查看选项
04 以下哪个序列对应数组 0 至 8 的 4 位二进制格雷码(Gray code)? 2分
登录后查看选项
05 记 1KB 为 1024 字节(byte),1MB 为 1024KB,那么 1MB 是多少二进制位(bit)? 2分
登录后查看选项
06 以下哪个不是 C++中的基本数据类型? 2分
登录后查看选项
07 以下哪个不是 C++中的循环语句? 2分
登录后查看选项
08 在 C/C++中,(char)('a'+13)与下面的哪一个值相等( ) 2分
登录后查看选项
09 假设有序表中有 1000 个元素,则用二分法查找元素 x 最多需要比较( )次 2分
登录后查看选项
10 下面哪一个不是操作系统名字( ) 2分
登录后查看选项
11 在无向图中,所有顶点的度数之和等于( ) 2分
登录后查看选项
12 已知二叉树的前序遍历为[A,B,D,E,C,F,G],中序遍历为[D,B,E,A,F,C,G],求二叉树的后序遍历的结果是( ) 2分
登录后查看选项
13 给定一个空栈,支持入栈和出栈操作。若入栈操作的元素依次是 1 2 3 4 5 6,其中 1 最先入栈,6 最后入栈,下面哪种出栈顺序是不可能的( ) 2分
登录后查看选项
14 有 5 个男生和 3 个女生站成一排,规定 3 个女生必须相邻,问有多少种不同的排列方式? 2分
登录后查看选项
15 编译器的主要作用是什么( )? 2分
登录后查看选项
阅读程序 共17道
16
阅读程序(1)
#include <iostream>
using namespace std;
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int countPrimes(int n) {
int count = 0;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
count++;
}
}
return count;
}
int sumPrimes(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
sum += i;
}
}
return sum;
}
int main() {
int x;
cin >> x;
cout << countPrimes(x) << " " << sumPrimes(x) << endl;
return 0;
}
当输入为“10”时,程序的第一个输出为“4”,第二个输出为“17”。( )
2分
#include <iostream>
using namespace std;
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int countPrimes(int n) {
int count = 0;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
count++;
}
}
return count;
}
int sumPrimes(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
sum += i;
}
}
return sum;
}
int main() {
int x;
cin >> x;
cout << countPrimes(x) << " " << sumPrimes(x) << endl;
return 0;
}
登录后查看选项
17 若将 isPrime(i)函数中的条件改为 i<=n/2,输入“20”时,countPrimes(20)的输出将变为“6”。( ) 2分
登录后查看选项
18 sumPrimes 函数计算的是从 2 到 n 之间的所有素数之和。( ) 2分
登录后查看选项
19 当输入为“50”时,sumPrimes(50)的输出为( ) 2分
登录后查看选项
20 如果将 for(int i=2;i*i<=n;i++)改为 for(int i=2;i<=n;i++),输入“10”时,程序的输出( ) 2分
登录后查看选项
21
阅读程序(2)
#include <iostream>
#include <vector>
using namespace std;
int compute(vector<int> &cost) {
int n = cost.size();
vector<int> dp(n + 1, 0);
dp[1] = cost[0];
for (int i = 2; i <= n; i++) {
dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i - 1];
}
return min(dp[n], dp[n - 1]);
}
int main() {
int n;
cin >> n;
vector<int> cost(n);
for (int i = 0; i < n; i++) {
cin >> cost[i];
}
cout << compute(cost) << endl;
return 0;
}
当输入的 cost 数组为{10,15,20}时,程序的输出为 15( )
2分
#include <iostream>
#include <vector>
using namespace std;
int compute(vector<int> &cost) {
int n = cost.size();
vector<int> dp(n + 1, 0);
dp[1] = cost[0];
for (int i = 2; i <= n; i++) {
dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i - 1];
}
return min(dp[n], dp[n - 1]);
}
int main() {
int n;
cin >> n;
vector<int> cost(n);
for (int i = 0; i < n; i++) {
cin >> cost[i];
}
cout << compute(cost) << endl;
return 0;
}
登录后查看选项
22 如果将 dp[i-1]改为 dp[i-3],程序可能会产生编译错误( ) 2分
登录后查看选项
23 程序总是输出 cost 数组中的最小的元素( ) 2分
登录后查看选项
24 当输入的 cost 数组为{1,100,1,1,1,100,1,1,100,1}时,程序的输出为( )。 2分
登录后查看选项
25 如果输入的 cost 数组为{10,15,30,5,5,10,20},程序的输出为( ) 2分
登录后查看选项
26 若将代码中的 min(dp[i-1],dp[i-2])+cost[i-1]修改为 dp[i-1]+cost[i-2],输入 cost 数组为{5,10,15}时,程序的输出为( ) 2分
登录后查看选项
27
阅读程序(3)
#include <iostream>
#include <cmath>
using namespace std;
int customFunction(int a, int b) {
if (b == 0) {
return a;
}
return a + customFunction(a , b - 1);
}
int main() {
int x, y;
cin >> x >> y;
int result = customFunction(x, y);
cout << pow(result, 2) << endl;
return 0;
}
当输入为“2 3”时,customFunction(2,3)的返回值为“64”。( )
2分
#include <iostream>
#include <cmath>
using namespace std;
int customFunction(int a, int b) {
if (b == 0) {
return a;
}
return a + customFunction(a , b - 1);
}
int main() {
int x, y;
cin >> x >> y;
int result = customFunction(x, y);
cout << pow(result, 2) << endl;
return 0;
}
登录后查看选项
28 当 b 为负数时,customFunction(a,b)会陷入无限递归。( ) 2分
登录后查看选项
29 当 b 的值越大,程序的运行时间越长。( ) 2分
登录后查看选项
30 当输入为“5 4”时,customFunction(5,4)的返回值为( )。 2分
登录后查看选项
31 如果输入 x = 3 和 y = 3,则程序的最终输出为( ) 2分
登录后查看选项
32 若将customFunction 函数改为“return a + customFunction(a-1,b-1);并输入“3 3”,则程序的最终输出为( ) 2分
登录后查看选项
完善程序 共10道
33
完善程序(1)
(判断平方数) 问题:给定一个正整数 n,判断这个数 是不是完全平方数,即存在一个正整数 x 使得 x 的平方等于 n。试补全程序。
#include<iostream>
#include<vector>
using namespace std;
bool isSquare(int num){
int i = ___(1)___;
int bound =___(2)___;
for(;i<=bound;++i){
if(___(3)___){
return ___(4)___;
}
}
return ___(5)___;
}
int main(){
int n;
cin>>n;
if(isSquare(n)){
cout<<n<<" is a Square number"<<endl;
}else{
cout<<n<<" is not a Square number"<<endl;
}
}
①处应填( )
2分
#include<iostream>
#include<vector>
using namespace std;
bool isSquare(int num){
int i = ___(1)___;
int bound =___(2)___;
for(;i<=bound;++i){
if(___(3)___){
return ___(4)___;
}
}
return ___(5)___;
}
int main(){
int n;
cin>>n;
if(isSquare(n)){
cout<<n<<" is a Square number"<<endl;
}else{
cout<<n<<" is not a Square number"<<endl;
}
}
登录后查看选项
34 ②处应填( ) 2分
登录后查看选项
35 ③处应填( ) 2分
登录后查看选项
36 ④处应填( ) 2分
登录后查看选项
37 ⑤处应填( ) 2分
登录后查看选项
38
完善程序(2)
(汉诺塔问题)给定三根柱子,分别标记为 A、B 和 C。初始状态下,柱子A上有若干个圆盘,这些圆盘从上到下按从小到大的顺序排列。任务是将这些圆盘全部移到柱子c上,且必须保持原有顺序不变。在移动过程中,需要遵守以不规则:
1.只能从一根柱子的顶部取出圆盘,并将其放入另一根柱子的顶部。
2.每次只能移动一个圆盘
3.小圆盘必须始终在大圆盘之上。
试补全程序
#include <bits/stdc++.h>
using namespace std;
void move(char src, char tgt) {
cout << "从柱子" << src << "挪到柱子上" << tgt << endl;
}
void dfs(int i, char src, char tmp, char tgt) {
if(i == ___(1)___) {
move(___(2)___);
return;
}
dfs(i-1, ___(3)___);
move(src, tgt);
dfs(___(5)___, ___(4)___);
}
int main() {
int n;
cin >> n;
dfs(n, 'A', 'B', 'C');
}
①处应填( )
2分
#include <bits/stdc++.h>
using namespace std;
void move(char src, char tgt) {
cout << "从柱子" << src << "挪到柱子上" << tgt << endl;
}
void dfs(int i, char src, char tmp, char tgt) {
if(i == ___(1)___) {
move(___(2)___);
return;
}
dfs(i-1, ___(3)___);
move(src, tgt);
dfs(___(5)___, ___(4)___);
}
int main() {
int n;
cin >> n;
dfs(n, 'A', 'B', 'C');
}
登录后查看选项
39 ②处应填( ) 2分
登录后查看选项
40 ③处应填( ) 2分
登录后查看选项
41 ④处应填( ) 2分
登录后查看选项
42 ⑤处应填( ) 2分
登录后查看选项