甘肃省网站建设_网站建设公司_在线商城_seo优化
2026/1/17 21:29:15 网站建设 项目流程

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


单选题

第1题

2025年4⽉19⽇在北京举⾏了⼀场颇为瞩⽬的⼈形机器⼈半程马拉松赛。⽐赛期间,跑动着的机器⼈会利⽤ ⾝上安装的多个传感器所反馈的数据来调整姿态、保持平衡等,那么这类传感器类似于计算机的( )。

A.处理器

B.存储器

C.输入设备

D.输出设备

【答案】:C

【解析】

传感器的功能是采集数据,属于输入设备。

第2题

在某集成开发环境中调试下⾯代码段时尝试设置断点和检查局部变量,下⾯哪个说法是错误的( )。

int i, N = 0;  // L1
cin >> N;  // L2
for (i=1; i<9; i++)if (N % i == 0) break;  // L3
if (i<9)printf("N不能大于9\n");  // L4

A.断点不可以设在L1标记的代码行

B.执行暂停在L2标记的代码行时,可以检测 i 的值

C.执行暂停在L3标记的代码行时,可以修改 i 的值

D.执行有可能暂停在L4标记的代码行

【答案】:A

【解析】

断点可以设置在任一行代码处。

第3题

对下列C++的代码,描述准确的是( )。

int first = 10;
printf("{%d}\n", First)

A.执行后输出10

B.执行后输出 {First}

C.执行后输出 "{First}"

D.编译报错,因为 First 应该是 first

【答案】:D

【解析】

C++的变量名区分大小写,First 和 first 不是同一个变量。

第4题

在C++中,下列可以做变量名的是( )。

A.X.cpp

B.X-cpp

C.X#cpp

D.X_cpp

【答案】:D

【解析】

C++的变量名智能包含字母、数字、下划线。

第5题

C++表达式 14-3*3%2 的值是( )。

A.0

B.11

C.13

D.-67

【答案】:C

【解析】

乘法和取模的优先级高于减法,先计算乘法,然后取模,然后减法,得到13。

第6题

下⾯的C++代码执⾏后,其输出是( )。

int x = 10, y = 20;
x = x + y;
y = x - y;
x = x - y;
cout << x << ' ' << y;

A.10 20

B.20 10

C.10 10

D.20 20

【答案】:B

【解析】

三行运算执行效果是交换两个变量的值。

第7题

定义整型变量 int a=16 ,则执行 ++a += 3 之后,a的值会是( )。

A.3

B.17

C.19

D.20

【答案】:D

【解析】

先 ++ 再 +=,++ 后 a 变为 17, 再 +=3 后 a 变为 20。

第8题

C++的 int 类型变量 X 的值为 8, 如果执行 cout << (++X)++;,则输出和执行后 X 的值分别是( )。

A.8 9

B.9 9

C.9 10

D.编译错误,无法执行

【答案】:C

【解析】

先执行前面的 ++,x 值为 9;然后执行后置的 ++,x 的值变为 10,但整个表达式的值是后置 ++ 执行前的值,也就是 9。

第9题

下⾯C++代码执⾏后的输出是( )。

int a, b;
a = 3;
b = 4;
printf("a+b=%02d#a+b={a+b}", a+b, a+b);

A.a+b=07#a+b={a+b}

B.a+b= 7#a+b=7

C.a+b=7#a+b={a+b}

D.a+b=7#a+b=7

【答案】:A

【解析】

%02d 表示输出的整数至少占2位,不足时左侧补 0。其余内容是普通字符串,照样输出。

第10题

下⾯的C++代码⽤于求M天后是星期几,两处横线处分别应填⼊的代码是( )。

int N, M, D;
cout << "当前星期几?"; // 星期日是0
cin >> N;
cout << "求多少天后?"; // 输入正整数
cin >> M;D = ______;
if (______)printf("%d天后是星期日", M);
elseprintf("%d天后是星期%d", M, D);

A.

(N + M) / 7
D == 0

B.

(N + M) % 7
D == 0

C.

(N + M) / 7
D <= 0

D.

(N + M) % 7
D = 0

【答案】:B

【解析】

七天对应取模 7 的结果 0~6。0 代表周日

第11题

下⾯C++代码执⾏后输出是( )。

int i;
for (i=1; i<11; i+=3) {continue;if (i % 2 == 0)break;printf("%d#", i);
}
if (i >= 11)printf("END");

A.END

B.1#

C.1#4#END

D.1#4#7#10#END

【答案】:A

【解析】

for 循环执行过程中 i 的取值依次变为 1、4、7、10、13。循环体内容由于 continue 并未执行,最后会打印 END。

第12题

下⾯的C++代码⽤于求 N 的所有因数(即能将 N 整除的数),如输入 12 则将输出 12,6,4,3,2,1。( )

int i, N;
cin >> N;
i = N;
while (____) {if (N % i == 0)printf("%d,", i);i -= 1;
)
printf("1");

A.i -= 1

B.i == 1

C.i > 1

D.i >= 1

【答案】:C

【解析】

注意最后一行输出了1,所以 i 从大到小枚举从 N 到 2 的所有数。

第13题

下⾯C++代码执行后输出的是( )。

int Sum = 0;
for (int i=0; i<10; i++) {if (i % 2 == 0)continue;if (i % 5 == 0)break;Sum += i;
}
cout << Sum;

A.55

B.15

C.9

D.4

【答案】:D

【解析】

i 等于 0 时 continue,1 时 Sum+=i,2 时 continue,3 时 Sum += i,4 时 continue,5 时 break。

第14题

试图编译并执行下⾯C++代码,下⾯描述正确的是( )。

float x;
x = 101;
x++;
cout << ++x;

A.输出 101

B.输出 102

C.输出 103

D.编译将报错,无法执行

【答案】:C

【解析】

后 ++ 加了 1, 前 ++ 又加了 1。

第15题

以下C++代码可以找出百位、十位和个位满⾜特定条件的三位数,横线处应该填入的是( )

int count = 0;
for (int i=100; i<=999; i++) {int a = i / 100;______int c = i % 10;if (a * a + b * b == c * c) {count++;}
}

A.int b = (i / 10) / 10;

B.int b = (i / 10) % 10;

C.int b = (i % 10) / 10;

D.int b = (i % 10) % 10;

【答案】:B

【解析】

取 i 的十位,i / 10 % 10。

判断题

第16题

⼈们现在参加很多闭卷考试时通常都不允许带智能⼿机、平板电脑等,此外很多种智能手表同样因为具有嵌入操作系统及通信等功能,所以也不允许随⾝携带。( )

A.正确

B.错误

【答案】:A

【解析】

考场明确要求

第17题

如果N是C++的整型变量,值为5,则表达式 (N + !N) 的值为4。( )

A.正确

B.错误

【答案】:B

【解析】

!N 为假,值为 0。 5 + 0 = 5

第18题

在下⾯C++代码中,删除break语句对程序执行结果没有影响。 ( )

int i;
for (i=0; i<10; i++) {continue;cout << i << "#";break;
}
if (i >= 10)cout << "END";

A.正确

B.错误

【答案】:A

【解析】

for 循环体的第一行是 continue,后面的代码都不会执行。

第19题

删除下⾯C++代码中的continue后其输出是0#2#4#6#8。( )

int i;
for (i=0; i<10; i++) {if (i % 2 == 0) {cout << i << "#";continue;}
}
if (i >= 10)cout << "END";

A.正确

B.错误

【答案】:B

【解析】

会输出 0#2#4#6#8#END

第20题

将下面C++代码中的 i<100; i= i + 1 修改为 i<200; i += i + 1,其输出与当前代码输出相同。( )

int cnt = 0;
for (int i=0; i<100; i = i + 1)cnt += 1
cout << cnt;

A.正确

B.错误

【答案】:B

【解析】

改之前回输出 100, 改后会输出 8,因为 i += i + 1 导致步长一直增长,i 的值:0,1,3,7,15,......

第21题

交换下面C++代码中的 i+=2 和 cnt+=1,交换前后分别运行的两次输出相同。( )

int i, cnt = 0;
cnt = 0;
while (i<10) {i += 2;cnt += 1;
}
cout << cnt;

A.正确

B.错误

【答案】:B

【解析】

i 没有初始化,值是随机的,每次运行结果可能都不一样。

第22题

下⾯的C++代码执行后将输出45。( )

int cnt;
for (int i=0; i<10; i++)cnt += 1;
cout << cnt;

A.正确

B.错误

【答案】:B

【解析】

cnt 没有初始化,值是随机的。

第23题

执行C++代码 cout << (12 + 12.12)将报错,因为12是int类型,而12.12是float类型,不同类型不能直接运算。( )

A.正确

B.错误

【答案】:B

【解析】

int 和 double 可以运算,运算时会自动把 int 转为 double。

第24题

在C++代码中,不可以将变量命名为false,因为false是C++语⾔的关键字。( )

A.正确

B.错误

【答案】:A

【解析】

false 是 C++ 关键字,关键字不能用来命名变量。

第25题

X是C++的整型变量,则表达式 3 < X < 5 求值结果是4。( )

A.正确

B.错误

【答案】:B

【解析】

表达式 3 < x < 5 先计算 3 < x,再计算 (3 < x) < 5,结果是布尔值 0 或 1。

编程题

B4354 假期阅读

【题目来源】

洛谷:B4354 [GESP202506 一级] 假期阅读 - 洛谷

【题目描述】

小 A 有一本厚厚的书。这本书总共有 \(n\) 页,小 A 一天中最多只能阅读完其中的 \(k\) 页。小 A 的假期总共有 \(t\) 天,他想知道在假期中最多能阅读完这本书的多少页。

【输入】

第一行,一个正整数 \(n\),表示书的页数。

第二行,一个正整数 \(k\),表示小 A 每天最多阅读的页数。

第三行,一个正整数 \(t\),表示小 A 假期的天数。

【输出】

一行,一个整数,表示假期中所能阅读的最多页数。

【输入样例】

8
3
2

【输出样例】

6

【算法标签】

《洛谷 B4354 假期阅读》 #分支结构# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int n, k, t;  // n: 总数量, k: 每次处理量, t: 处理次数int main()
{// 输入总数量、每次处理量和处理次数cin >> n >> k >> t;// 判断能否在t次处理内完成所有数量if (k * t >= n){// 如果可以,输出总数量cout << n << endl;}else{// 否则输出最大能处理的数量cout << k * t << endl;}return 0;
}

【运行结果】

8
3
2
6

B4355 值日

【题目来源】

洛谷:B4355 [GESP202506 一级] 值日 - 洛谷

【题目描述】

小杨和小红是值日生,负责打扫教室。小杨每 \(m\) 天值日一次,小红每 \(n\) 天值日一次。今天他们两个一起值日,请问至少多少天后,他们会再次同一天值日?

【输入】

第一行,一个正整数 \(m\),表示小杨的值日周期;

第二行,一个正整数 \(n\),表示小红的值日周期。

【输出】

一行,一个整数,表示至少多少天后他们会再次同一天值日。

【输入样例】

4
6

【输出样例】

12

【算法标签】

《洛谷 B4355 值日》 #循环结构# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int m, n;  // 定义两个整数变量// 计算两个数的最大公约数(GCD)
int gcd(int a, int b)
{// 使用欧几里得算法递归计算if (a % b == 0) return b;      // 基准情况else return gcd(b, a % b);  // 递归情况
}int main()
{// 输入两个正整数cin >> m >> n;// 计算并输出最小公倍数(LCM)// LCM = (m × n) / GCD(m, n)cout << m * n / gcd(m, n) << endl;return 0;
}

【运行结果】

4
6
12

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询