2026年全国青少年信息素养大赛算法应用主题赛(C++赛项模拟训练5:文末附答案)
5道单选+5道多选+4道编程
一、单选题
-
在记录丝绸交易的金额时,需要保留两位小数。下列输出语句能够正确输出变量
money(浮点数)并保留两位小数的是( )。A.
cout << money;B.
printf("%.1f", money);C.
cout << setprecision(2) << money;D.
cout << fixed << setprecision(2) << money; -
商队需要判断是否遇到强盗:如果遇到强盗标记
robber为true或者当前货物价值value大于1000两且夜间night为true,则发出警报。下列表达式正确的是( )。A.
robber || (value > 1000 && night)B.
(robber || value > 1000) && nightC.
robber && value > 1000 || nightD.
robber || value > 1000 || night -
有数组
int horsePower[10] = {3,5,7,9,11,13,15,17,19,21};,要输出第6个元素(从1开始计数),正确的语句是( )。A.
cout << horsePower[6];B.
cout << horsePower[5];C.
cout << horsePower[7];D.
cout << horsePower[4]; -
以下哪个循环会无限执行(死循环)?( )
A.
for(int i=0; i<10; i++);B.
int i=0; while(i<10) { i++; }C.
int i=0; do { i++; } while(i<10);D.
int i=0; while(i>=0) { i++; } -
根据骆驼的负载重量(整数
load)决定是否超载:若负载大于200斤则超载,否则正常。下列switch语句能实现该逻辑的是( )。A.
switch(load) { case load<200: ... break; default: ... }B.
switch(load) { case load>200: ... break; default: ... }C.
switch(load / 200) { case 0: ... break; default: ... }D. 全部错误
二、多选题
-
关于C++中的自增自减运算符,正确的有( )。
A.
i++先使用i的值,然后i加1B.
++i先使i加1,再使用新值C.
i++和++i在独立语句中效果相同D. 自增运算符只能用于整型变量
-
以下哪些是合法的C++语句(假设变量已定义)?( )
A.
if (x > 0) y = 1; else y = 0;B.
if (x > 0) y = 1;C.
if (x > 0) y = 1; else;D.
if (x > 0); else y = 0; -
关于
break和continue在循环中的使用,正确的有( )。A.
break跳出当前最内层循环B.
continue结束本次循环,进入下一次迭代C. 在
for循环中,continue后会执行循环变量的增量表达式D. 在
while循环中,continue前如果没有更新条件变量,可能造成死循环 -
关于数组
int a[5] = {1,2,3};,以下访问结果正确的有( )。A.
a[0]的值是1B.
a[2]的值是3C.
a[3]的值是0D.
a[5]的值是0 -
以下哪些是C++中的算术运算符?( )
A.
+B.
-C.
*D.
/
三、编程题
编程题1:骆驼年龄总和
背景 :一队骆驼的年龄(整数,单位:岁)已知。请计算所有骆驼的年龄总和,并输出平均年龄(保留一位小数)。
输入格式 :
第一行一个整数 n(1 ≤ n ≤ 50),表示骆驼数量。
第二行 n 个整数,表示每峰骆驼的年龄。
输出格式 :
第一行输出年龄总和。
第二行输出平均年龄,保留一位小数。
样例输入:
5
3 5 4 6 2
样例输出:
20
4.0
编程题2:货物正负数统计
背景 :丝路商人记录了若干笔交易的盈亏(整数,正数表示盈利,负数表示亏损,0表示持平)。请统计盈利(大于0)、亏损(小于0)和持平(等于0)的笔数。
输入格式 :
第一行一个整数 n(1 ≤ n ≤ 100)。
第二行 n 个整数,表示每笔交易的盈亏。
输出格式 :
三个整数,依次表示盈利笔数、亏损笔数、持平笔数,中间用空格隔开。
样例输入:
7
10 -5 0 8 -3 0 12
样例输出:
3 2 2
编程题3:丝绸图案中每个字母的出现次数
背景 :丝绸图案用一个只含小写字母的字符串表示。请统计每个字母('a'~'z')出现的次数,并输出出现次数不为0的字母及其次数,按字母顺序输出。
输入格式 :
一行字符串 s,长度 1 ≤ |s| ≤ 200,只含小写字母。
输出格式 :
若干行,每行一个字母和一个整数,中间用空格隔开,按字母顺序输出。
样例输入:
silkroad
样例输出:
a 1
d 1
i 1
k 1
l 1
o 1
r 1
s 1
编程题4:丝路驿站距离排序
背景 :丝绸之路沿途有 n 个驿站,已知每个驿站到长安的距离(整数)。请将这些距离从小到大排序,并输出排序后的结果。
输入格式 :
第一行一个整数 n(1 ≤ n ≤ 100)。
第二行 n 个整数,表示每个驿站到长安的距离(里)。
输出格式 :
一行 n 个整数,表示升序排序后的距离,每两个数之间用一个空格隔开。
样例输入:
6
120 80 150 60 200 90
样例输出:
60 80 90 120 150 200
参考答案
一、单选题
- D(A不控制精度;B是printf方式,但精度设置为1,错误;C缺少fixed,会按有效数字而非小数点后两位;D正确)
- A(根据题意:强盗 或者 (价值>1000且夜间)。A正确;B表示(强盗或价值>1000)且夜间;C由于优先级
&&高于||,等价于(robber && value>1000) || night;D全是||,没有&&。选A。 - B(第6个元素下标5)
- D(i从0开始,i>=0永远为真,i++导致无限增长,最终可能溢出,但循环条件永远真,死循环)
- D(A和B中case后不能跟关系表达式;C中使用整除,load<200时商0,else非0,default处理非0,正确;)
二、多选题
- A, B, C(D错误,自增运算符也可用于迭代器、指针等)
- A, B, C, D(全部合法,D中if后空语句,else y=0;也是合法的)
- A, B, C, D(全部正确)
- A, B, C(D越界未定义,不算正确)
- A, B, C, D(都是算术运算符)
三、编程题参考代码
编程题1
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; // n:骆驼数量
cin >> n; // 读入数量
int sum = 0; // sum:年龄总和
int a; // a:临时存储每峰骆驼的年龄
// 循环读入每峰骆驼的年龄并累加
for(int i = 1; i <= n; i++) {
cin >> a;
sum += a; // 累加年龄
}
// 输出年龄总和
cout << sum << endl;
// 输出平均年龄,保留一位小数
// 方式1:使用 printf 格式化输出
printf("%.1f\n", sum * 1.0 / n);
// 方式2:使用 cout 控制精度
// cout << fixed << setprecision(1) << sum*1.0 / n << endl;
return 0;
}
编程题2
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; //交易笔数
cin >> n; // 读入笔数
int a = 0, b = 0, c = 0; // a:盈利笔数, b:亏损笔数, c:持平笔数
for(int i = 1; i <= n; i++) {
int x; // x:当前交易的盈亏值
cin >> x; // 读入一个整数
if(x > 0) ++a; // 大于0,盈利笔数加1
else if(x < 0) ++b; // 小于0,亏损笔数加1
else ++c; // 等于0,持平笔数加1
}
cout << a << " " << b << " " << c << endl; // 按要求输出三个统计值
return 0;
}
编程题3
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s; // 读入字符串
int cnt[26] = {0}; // cnt[0]对应'a',cnt[1]对应'b'... 初始化为0
// 遍历字符串每个字符
for(char ch : s) {
cnt[ch - 'a']++; // 将字符映射到0~25,对应计数器加1
}
// 按字母顺序输出出现次数不为0的字母及其次数
for(int i = 0; i < 26; ++i) {
if(cnt[i] != 0) {
cout << char('a' + i) << " " << cnt[i] << endl; // 输出字母和次数
}
}
return 0;
}
编程题4
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; // 驿站数量
cin >> n; // 读入数量
int a[110]; // 存储距离的数组(最大100+10)
for(int i = 1; i <= n; i++) {
cin >> a[i]; // 读入每个距离
}
sort(a+1, a + n + 1); // 使用sort函数升序排序
for(int i = 1; i <= n; i++) {
cout << a[i] << " "; // 输出当前距离
}
return 0;
}
关注老师的专栏,查看完整版全国青少年信息素养大赛C++备赛资料(初赛+复赛):
https://blog.csdn.net/weixin_66461496/category_12969975.html
各种学习资料,助力大家一站式学习和提升!!!
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"########## 一站式掌握信奥赛知识! ##########";
cout<<"############# 冲刺信奥赛拿奖! #############";
cout<<"###### 课程购买后永久学习,不受限制! ######";
return 0;
}
【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"跟着王老师一起学习信奥赛C++";
cout<<" 成就更好的自己! ";
cout<<" csp信奥赛一等奖属于你! ";
return 0;
}

