2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟题4:文末附答案)
一、单选题
-
在C++程序中,主函数是程序的入口,其返回值类型通常是( )。
A. void
B. int
C. double
D. char
-
丝绸之路上,一只骆驼的最大载重量是250千克,需要存储该值并参与运算。下列变量定义正确的是( )。
A.
int 骆驼载重 = 250;B.
float load-camel = 250.0;C.
int load_camel = 250;D.
250 = load; -
一支商队从长安出发前往敦煌,前3天每天行进30公里,后4天每天行进25公里。以下代码段能正确计算总路程的是( )。
A.
int s = 0; for(int i=1;i<=3;i++) s+=30; for(int i=1;i<=4;i++) s+=25;B.
int s = 30*3 + 25*4;C.
int s = 0; for(int i=0;i<3;i++) s=s+30; for(int i=0;i<4;i++) s=s+25;D. 以上都是
-
某批瓷器总共有N件,运输过程中破损了M件,破损率计算公式为(M/N)×100%。若用C++计算破损率(得到整数百分比),已知M和N是整型变量,以下哪个表达式能正确得到整数百分比?( )
A.
M / N * 100B.
(double)M / N * 100C.
M * 100 / ND.
(int)(M * 100 / N) -
驼队携带了300升水,每天消耗23升水,最多能支撑多少天?下面代码计算正确的是( )。
A.
int days = 300 / 23;B.
int days = 300 % 23;C.
double days = 300 / 23;D.
double days = 300.0 / 23; -
丝绸服饰图案设计,一个基本单元宽度为5个像素,要判断横坐标x(从0开始)是否位于每个基本单元的第3个像素位置(即相对位置索引为2),应使用的表达式是( )。
A.
x % 5 == 2B.
x / 5 == 2C.
x % 2 == 5D.
x / 2 == 5 -
在文物数字化过程中,使用二维数组
int mural[10][10];存储敦煌壁画10×10的像素灰度值,要访问第5行第3列(行和列均从0开始计数)的像素,正确的写法是( )。A.
mural[5][3]B.
mural[4][2]C.
mural[3][5]D.
mural[2][4] -
从楼兰到和田有两条路线:路线A需5天,路线B需7天。比较天数并输出较短路线名称。以下代码正确的是( )。
A.
if(5<7) cout<<"A"; else cout<<"B";B.
int a=5,b=7; if(a<b) cout<<"A"; else cout<<"B";C.
int a=5,b=7; if(a<b) cout<<"A"; else if(a>=b) cout<<"B";D. 以上都正确
-
阅读以下代码:
cppint num = 5; int result = num++ * 2; cout << result << "," << num;输出结果是( )。
A.
10,5B.
10,6C.
12,6D.
12,5 -
骆驼队有6只骆驼,载重量分别为{210,190,230,175,200,215},要计算总载重量,以下代码正确的是( )。
A.
cppint weight[6]={210,190,230,175,200,215}; int sum=0; for(int i=1;i<=6;i++) sum+=weight[i];B.
cppint weight[6]={210,190,230,175,200,215}; int sum=0; for(int i=0;i<6;i++) sum+=weight[i];C.
cppint weight[6]={210,190,230,175,200,215}; int sum=0; for(int i=0;i<=6;i++) sum+=weight[i];D. 数组定义错误
-
编写函数判断给定年份是否为闰年(能被4整除且不能被100整除,或者能被400整除),用于分析丝绸之路历史年份。以下函数原型正确的是( )。
A.
bool isLeap(int year){ return (year%4==0 && year%100!=0) || (year%400==0); }B.
int isLeap(int year){ if(year%400==0) return 1; else if(year%4==0 && year%100!=0) return 1; else return 0; }C.
bool isLeap(int year){ return (year%4==0) && (year%100!=0) || (year%400==0); }D. 以上都正确
-
驼队在沙漠中遇到不同编号的绿洲,使用switch语句根据绿洲编号分配补给:1号增加30升水,2号增加50升,3号增加20升,其他编号不增加。以下switch结构正确的是( )。
A.
cppswitch(num){ case 1: water+=30; break; case 2: water+=50; break; case 3: water+=20; break; default: break; }B.
cppswitch(num){ case 1: water+=30; case 2: water+=50; case 3: water+=20; default: ; }C.
cppswitch num{ case 1: water+=30; case 2: water+=50; case 3: water+=20; }D.
cppswitch(num){ case 1: water+=30; case 2: water+=50; case 3: water+=20; break; }
-
模拟丝绸之路上织锦图案,使用嵌套循环输出一个3行5列的星形矩阵,每行星号之间用空格隔开。正确的代码段是( )。
A.
cppfor(int i=0;i<3;i++){ for(int j=0;j<5;j++) cout<<"* "; cout<<endl; }B.
cppfor(int i=1;i<=3;i++){ for(int j=1;j<=5;j++) cout<<"*"; cout<<endl; }C.
cppfor(int i=0;i<3;i++){ for(int j=0;j<5;j++) cout<<"*"; cout<<endl; }D.
cppfor(int i=0;i<3;i++){ for(int j=0;j<=5;j++) cout<<"*"<<' '; cout<<endl; } -
存储丝绸之路上的城市名称如"长安"、"敦煌"、"楼兰",要判断两个字符串是否相等,使用C++ string类型,正确的是( )。
A.
if(str1 == str2)B.
if(strcmp(str1,str2)==0)C.
if(str1.equals(str2))D.
if(str1 = str2) -
判断骆驼是否适合运输的条件为:年龄在3到10岁之间(包含边界)且负重能力大于150千克。设变量age和load,正确的条件表达式是( )。
A.
age>=3 && age<=10 && load>150B.
age>=3 || age<=10 && load>150C.
age>=3 && age<=10 || load>150D.
age>3 && age<10 && load>150
二、判断题
- C++中,数组的下标从1开始。( )
- 在switch语句中,每个case分支后面都必须加上break语句,否则会导致语法错误。( )
- for循环的循环体如果包含多条语句,必须使用花括号括起来。( )
- 浮点数的相等比较可以直接使用==运算符,不会出现精度问题。( )
- 在函数内部定义的局部变量,其作用域仅限于该函数内部。( )
参考答案与解析
单选题解析
-
B
C++标准规定main函数返回值类型为int,用于向操作系统返回程序状态。
-
C
变量名只能由字母、数字、下划线组成且不能以数字开头。A使用了中文字符(非标准),B包含非法字符"-",D赋值方向错误。C符合命名规范。
-
D
A和C通过循环累加正确计算总路程;B直接使用算术表达式也正确。三种方法均可行。
-
C
整数除法会截断,应先乘后除:
M*100/N得到整数百分比(向下取整)。A因先除后乘结果通常为0;B得到浮点数但未转为整数;D与C效果相同但多了不必要的类型转换,C更简洁常用。 -
A
整数除法自动舍弃小数部分,
300/23得13,即最多支撑13天。B得到余数;C、D定义类型为double,不符合天数应为整数的语义。 -
A
取模运算
x % 5得到在单元内的偏移量,偏移为2时条件成立。 -
B
行和列均从0开始,第5行下标为4,第3列下标为2,故访问
mural[4][2]。 -
D
A直接比较字面量正确;B和C均通过变量比较,逻辑正确且输出"A"。三个选项均能正确输出结果。
-
B
num++先使用原值5参与乘法得到10,然后num自增为6,故输出10,6。 -
B
数组下标范围0~5,循环条件
i<6正确遍历所有元素。A从1开始,漏加第一个且越界;C的i<=6越界访问。 -
D
A和C逻辑等价且返回bool类型;B使用int返回0/1,在C++中可隐式转换为bool。三个函数均正确实现闰年判断。
-
A
A语法完整,使用break避免穿透,default处理其他情况。B缺少break会导致执行多个case;C语法错误,switch后应跟圆括号;D前两个case缺少break会导致执行多个case。
-
A
A每行输出"* "共5次后换行,星号间有空格。B和C星号间无空格;D每行打印了6个*。
-
A
C++的string类重载了
==运算符,可直接比较内容。B适用于C风格字符串且需头文件,不能直接用于string对象;C是Java语法;D为赋值操作。 -
A
三个条件必须同时满足:年龄在3~10之间(含边界)且负重>150,用逻辑与
&&连接。
判断题解析
-
×
C++数组下标从0开始。
-
×
缺少break不会导致语法错误,但会发生"穿透",继续执行后续case中的代码。
-
√
若循环体包含多条语句,必须用花括号括起来形成复合语句;单条语句可省略。
-
×
浮点数存储有精度误差,直接使用
==比较可能因微小误差导致结果错误,通常应判断差值是否小于一个极小值。 -
√
局部变量在函数内部定义,其作用域从定义处开始到函数结束,外部无法访问。
关注老师的专栏,查看完整版全国青少年信息素养大赛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;
}

