2026年全国青少年信息素养大赛算法应用主题赛(C++赛项模拟训练3:文末附答案)
5道单选+5道多选+4道编程
一、单选题
在计算驼队货物总重量时,现有茶叶重量
tea(整数)和丝绸重量silk(整数),要将两者相加后赋值给已定义变量total。下列语句正确的是( )。
A.total = tea + silk;
B.tea + silk = total;
C.total = tea + silk
D.int total = tea + silk;某段丝绸之路需要判断是否经过绿洲,如果变量
hasOasis为true且距离下一绿洲dist小于100里,则建议补充水源。下列条件表达式正确的是( )。
A.hasOasis && dist < 100
B.hasOasis == true && dist < 100
C.hasOasis && (dist < 100)
D. A、B、C 都正确有5件瓷器,编号0~4,破损情况用数组
broken[5]存储(1表示破损,0表示完好)。要输出第3件瓷器的状态,正确语句是( )。
A.cout << broken[3];
B.cout << broken(3);
C.cout << broken[2];
D.cout << broken;商队有10峰骆驼,每峰载重
load[i](斤)。要使用for循环计算总载重,循环变量i的范围正确的是( )。
A.for (int i = 1; i <= 10; i++)
B.for (int i = 0; i < 10; i++)
C.for (int i = 0; i <= 9; i++)
D. B 和 C 都正确丝绸商人根据货物总价打折:
- 若总价
price≥ 5000 两,打 7 折; - 若 2000 ≤
price< 5000 两,打 8 折; - 若 1000 ≤
price< 2000 两,打 9 折; - 否则不打折。
下列多分支
if语句的写法中,能正确实现上述逻辑的是( )。A.
if(price>=1000)discount=0.9;elseif(price>=2000)discount=0.8;elseif(price>=5000)discount=0.7;elsediscount=1.0;B.
if(price>=5000)discount=0.7;elseif(price>=2000)discount=0.8;elseif(price>=1000)discount=0.9;elsediscount=1.0;C.
if(price>=5000)discount=0.7;if(price>=2000)discount=0.8;if(price>=1000)discount=0.9;elsediscount=1.0;D.
if(price<1000)discount=1.0;if(price<2000)discount=0.9;if(price<5000)discount=0.8;elsediscount=0.7;- 若总价
二、多选题
在C++中,以下哪些数据类型可以用于存储骆驼的载重(单位:斤,可能为非整数)?( )
A.int
B.float
C.double
D.char关于函数的定义,以下语法正确的有( )。
A.intsum(inta,intb){returna+b;}B.
voidprintHello(){cout<<"Hello";}C.
intmultiply(intx,inty){returnx*y}D.
floatdivide(floata,floatb){if(b==0)return0;elsereturna/b;}以下关于
break和continue语句的说法,正确的有( )。
A.break只能用于循环语句中
B.continue只能用于循环语句中
C.break可以提前终止循环或switch
D.continue会跳过本次循环中剩余语句,继续下一次循环关于位运算(仅考虑非负整数),以下说法正确的有( )。
A.a << 1等价于a * 2
B.a >> 1等价于a / 2(整除)
C.a & 1可用于判断a的奇偶性
D.a | 0等于a在C++中,关于局部变量和全局变量,正确的有( )。
A. 局部变量只在定义它的函数内有效
B. 全局变量在程序所有函数中都可以访问
C. 局部变量与全局变量同名时,局部变量优先
D. 全局变量未初始化时默认为0
三、编程题
编程题1:货物重量四舍五入到十斤
背景:商队从长安出发,需要将每批货物的重量(正整数)按“四舍五入到十斤”进行粗略统计。例如,57斤四舍五入到十斤为60斤,52斤为50斤。请实现这个功能。
输入格式:
一个整数w(1 ≤ w ≤ 10000)。
输出格式:
一个整数,表示四舍五入到十斤后的结果。
样例输入1:
57样例输出1:
60样例输入2:
52样例输出2:
50编程题2:骆驼编号查找
背景:有n峰骆驼,每峰骆驼有一个唯一的编号(正整数)。商人想知道某特定编号的骆驼是否存在,若存在输出它的位置(从1开始计数),否则输出0。
输入格式:
第一行一个整数n(1 ≤ n ≤ 100)。
第二行n个互不相同的整数,表示骆驼编号。
第三行一个整数target,表示要查找的编号。
输出格式:
一个整数,表示目标编号在数组中的位置(从1开始),如果不存在则输出0。
样例输入:
5 101 203 154 207 189 154样例输出:
3编程题3:丝绸图案中的元音统计
背景:丝绸图案用一段英文描述(仅含小写字母和空格,无标点)。请统计其中元音字母(a, e, i, o, u)出现的总次数(不区分大小写,但输入均为小写)。
输入格式:
一行字符串s,长度1 ≤ |s| ≤ 200。
输出格式:
一个整数,表示元音字母的个数。
样例输入:
silk road is beautiful样例输出:
9(解释:i,o,a,i,e,a,u,i,u → 9个)
编程题4:丝路织机经纬线交错(矩阵转置)
背景:在丝绸织造中,经线(纵向)和纬线(横向)形成织物纹理。现用一个n行m列的整数矩阵表示织机上的张力值。请实现矩阵转置,即输出一个m行n列的矩阵,其中第i行第j列的元素等于原矩阵第j行第i列的元素。
输入格式:
第一行两个整数n, m(1 ≤ n,m ≤ 20)。
接下来n行,每行m个整数(绝对值 ≤ 1000)。
输出格式:
输出m行,每行n个整数,表示转置后的矩阵,每两个数之间用一个空格隔开(行末无多余空格)。
样例输入:
2 3 1 2 3 4 5 6样例输出:
1 4 2 5 3 6参考答案与评分标准
一、单选题
A(B等号左右两边内容反了 C语句少; D语句多int)
D(A、B、C逻辑等价,B中
hasOasis == true与hasOasis相同,C中括号多余但正确)C (编号0~4,第1件编号0,第2件编号1,第3件编号2,故输出
broken[2])。D(B和C都是0到9,共10个,正确)
B(使用
else if按从高到低的区间顺序判断,避免覆盖)
二、多选题
- B, C(载重可能非整数,float和double均可;int只能整数;char太小)
- A, B, D(C缺少分号,语法错误)
- B, C, D(A错误,break还可以用于switch)
- A, B, C, D(全部正确)
- A, B, C, D(全部正确)
三、编程题参考代码
编程题1
#include<bits/stdc++.h>usingnamespacestd;intmain(){intw;// 定义整数变量w,用于存储输入的货物重量cin>>w;// 从标准输入读取重量intremainder=w%10;// 计算重量除以10的余数(个位数)// 根据四舍五入规则处理if(remainder>=5){// 如果个位数大于等于5,则向上取整w=w-remainder+10;// 去掉个位数后加10(例如57 -> 57-7+10=60)}else{// 如果个位数小于5,则向下取整w=w-remainder;// 直接去掉个位数(例如52 -> 52-2=50)}cout<<w<<endl;// 输出四舍五入到十斤后的结果return0;}编程题2
#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,target;// n: 骆驼总数, target: 要查找的目标编号cin>>n;// 输入骆驼数量intids[100];// 定义数组存储骆驼编号(最大100个)for(inti=0;i<n;++i){// 循环读取n个编号cin>>ids[i];// 将编号存入数组}cin>>target;// 输入要查找的目标编号intpos=0;// 初始化位置为0(0表示未找到)for(inti=0;i<n;++i){// 遍历数组if(ids[i]==target){// 如果当前编号等于目标编号pos=i+1;// 记录位置(数组下标从0开始,位置需+1)break;// 找到后立即退出循环}}cout<<pos<<endl;return0;}编程题3
#include<bits/stdc++.h>usingnamespacestd;intmain(){string s;// 定义字符串变量s,用于存储输入的文本getline(cin,s);// 读取整行(包括空格),存入sintcnt=0;// 计数器,初始为0,用于统计元音个数// 使用范围for循环遍历字符串中的每个字符for(charc:s){// 判断当前字符是否为元音字母(a, e, i, o, u)if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){cnt++;// 是元音则计数器加1}}cout<<cnt<<endl;// 输出元音的总个数return0;}编程题4
#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>m;// 输入原矩阵的行数n和列数minta[30][30];// 定义二维数组// 输入原矩阵,下标从1开始for(inti=1;i<=n;++i){// i从1到nfor(intj=1;j<=m;++j){// j从1到mcin>>a[i][j];// 存入a[i][j]}}// 输出转置矩阵:原矩阵的列变成行,原矩阵的行变成列for(intj=1;j<=m;++j){// 外层循环:原矩阵的列(转置后的行)for(inti=1;i<=n;++i){// 内层循环:原矩阵的行(转置后的列)cout<<a[i][j];// 输出转置后的元素if(i<n)cout<<" ";// 行内除最后一个元素外输出空格}cout<<endl;// 每行结束后换行}return0;}关注老师的专栏,查看完整版全国青少年信息素养大赛C++备赛资料(初赛+复赛):
https://blog.csdn.net/weixin_66461496/category_12969975.html
各种学习资料,助力大家一站式学习和提升!!!
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}【秘籍汇总】(完整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 点击跳转
· 文末祝福 ·
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}