2026年全国青少年信息素养大赛算法应用主题赛(C++赛项-初赛-赛前冲刺模拟卷2文末附答案和解析)
第一部分:选择题(每题只有一个正确答案)
1.下列程序输出什么?
inta=10,b=20;if(a=b)cout<<a;elsecout<<b;A. 10 B. 20 C. 编译错误 D. 0
2.在 C++ 中,下列哪个表达式计算结果的数据类型与其他三项不同?
A.5 / 2
B.5.0 / 2
C.(double)5 / 2
D.5 / 2.0
3.阅读下列程序,当输入为8 3时,输出结果是什么?
inta,b;cin>>a>>b;if(a%b==0||b%a==0)cout<<"Y";elsecout<<"N";cout<<(a>b?a:b)%(a<b?a:b);A.Y1B.Y2C.N1D.N2
4.驼队从长安出发,每日行进路程存储于数组dist[7],现需计算所有奇数日(第 1,3,5,7 天,对应下标 0,2,4,6)的总里程。以下代码中正确的是?
A.
intsum=0;for(inti=0;i<7;i++)if(i%2==1)sum+=dist[i];B.
intsum=0;for(inti=0;i<7;i+=2)sum+=dist[i];C.
intsum=0;for(inti=1;i<7;i++)sum+=dist[i];D.
intsum=0;for(inti=1;i<=7;i+=2)sum+=dist[i];5.丝路商队中的算筹计数器:下列代码运行后输出的结果是什么?
ints=0;for(intx=1;x<=5;x++)for(inty=x;y<=5;y++)s+=x*y;cout<<s;A. 85 B. 100 C. 115 D. 140
6.设int n = 2026;下列哪个代码片段可以输出n的十进制各位数之和(即 2+0+2+6=10)?
A.
intsum=0;while(n>0){sum+=n%10;n/=10;}cout<<sum;B.
intsum=0;while(n!=0){sum+=n/10;n%=10;}cout<<sum;C.
intsum=0;for(inti=n;i>0;i/=10)sum+=i%10;cout<<sum;D. A 和 C 都正确
7.以下关于break与continue的描述,哪个选项的代码会导致无限循环?
A.
for(inti=0;i<10;i++){if(i==5)continue;cout<<i;}B.
inti=0;while(i<10){if(i==5)break;cout<<i;i++;}C.
inti=0;while(i<10){if(i==5)continue;cout<<i;i++;}D.
inti=0;do{if(i==5){i++;continue;}cout<<i;i++;}while(i<10);8.古丝绸之路上有座“年月城”,其纪年规则:年份 y 如果能被 4 整除但不能被 100 整除,或者能被 400 整除,则为闰年。下列哪个表达式能正确判断闰年(是闰年则输出 “leap”,否则输出 “common”)?
A.if (y % 400 == 0 || y % 4 == 0 && y % 100 != 0)
B.if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
C.if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
D. 以上全部等价
9.以下程序段执行后,输出结果是什么?
inta[5]={2,4,6,8,10};int*p=a+2;cout<<*p<<" "<<*(p+1)<<endl;A.6 8B.4 6C.6 10D.4 8
10.以下代码尝试计算1! + 2! + 3! + ... + n!,但存在错误。找出错误之处:
intn,factorial=1,sum=0;cin>>n;for(inti=1;i<=n;i++){for(intj=1;j<=i;j++)factorial*=j;sum+=factorial;}cout<<sum;A. 变量factorial没有在每次外层循环前重置
B. 内层循环的结束条件错误
C. 累加器sum类型应为float
D. 没有错误
11.现有字符串char s[20] = "SilkRoad2026";执行cout << strlen(s) << " " << sizeof(s);输出结果是什么?(5分)
A.12 20B.13 20C.12 12D.13 13
12.驼队有 3 个仓库,每个仓库有 5 个货架,每个货架存放货物重量为整数。现用三维数组int w[3][5][10];存储,w[a][b][c]表示第 a 仓库第 b 货架第 c 个位置(每个货架最多 10 个位置)。以下哪个循环能正确遍历第一个仓库所有货架的所有位置的货物重量?
A.
for(inti=0;i<3;i++)for(intj=0;j<5;j++)for(intk=0;k<10;k++)cout<<w[i][j][k];B.
for(intj=0;j<5;j++)for(intk=0;k<10;k++)cout<<w[0][j][k];C.
for(inti=0;i<5;i++)for(intj=0;j<10;j++)cout<<w[0][i][j];D. B 和 C 都正确
13.阅读以下数组交换算法,问执行后数组arr的元素顺序是?
intarr[6]={1,2,3,4,5,6};for(inti=0;i<3;i++){intt=arr[i];arr[i]=arr[5-i];arr[5-i]=t;}A.{1,2,3,4,5,6}
B.{6,5,4,3,2,1}
C.{6,5,4,3,2,1}但顺序不同
D.{6,5,4,3,2,1}实际没有变化
14.下列代码片段中,变量cnt最终的值是多少?
intcnt=0;for(inti=1;i<=9;i++)for(intj=1;j<=9;j++)if(i*j==36)cnt++;A. 2 B. 3 C. 4 D. 5
15.丝路商队的密码规则:将整数x转换为二进制后,输出其中1的个数。下列代码中,正确实现该功能的是?
A.
intcount=0;while(x){count+=x&1;x>>=1;}cout<<count;B.
intcount=0;while(x){if(x%2==1)count++;x/=2;}cout<<count;C.
intcount=0;for(inti=0;i<32;i++)if((x>>i)&1)count++;cout<<count;D. 以上全部正确
第二部分:判断题(正确选“✔”,错误选“✘”)
16.在 C++ 中,int a[10];定义后,a[10]是合法的,表示第 11 个元素,但值不确定。
17.表达式!(a > b && c == d)等价于!(a > b) || !(c == d)。
18.执行char s[20] = "hello";后,strlen(s)的值为 5,sizeof(s)的值为 20。
19.以下代码段可以正确输出 2024 年的 2 月份天数:
intyear=2024;if(year%4==0&&year%100!=0||year%400==0)cout<<29;elsecout<<28;20.对于int x = 5;表达式(x > 3) ? (x = 10) : (x = 0);执行后 x 的值变为 10。
参考答案与解析
选择题答案
- B
- A
- D
- B
- D
- D
- C
- D
- A
- A
- A
- D
- B
- B
- D
判断题答案
- ✘
- ✔
- ✔
- ✔
- ✔
详细解析
1.a = b将 b 的值 20 赋给 a,赋值表达式的值为 20(非零),条件为真,执行cout << a,输出 20。
2.A 为整数除法,结果类型int;B、C、D 结果均为double。
3.8 % 3 = 2 ≠ 0,3 % 8 = 3 ≠ 0,条件为假,输出 ‘N’。(a > b ? a : b)得 8,(a < b ? a : b)得 3,8 % 3 = 2,输出 “N2”。
4.奇数日对应下标 0,2,4,6,步长为 2,B 正确。D 中i=1到 7 取下标 1,3,5 是偶数日,且 i=7 越界。
5.双重循环计算上三角(含对角线)乘积和:
x=1: 1×1+1×2+1×3+1×4+1×5 = 15
x=2: 2×2+2×3+2×4+2×5 = 4+6+8+10=28
x=3: 9+12+15=36
x=4: 16+20=36
x=5: 25
总和 15+28=43,+36=79,+36=115,+25=140。选 D。
6.A 和 C 均可正确求和,B 中n/10与n%=10逻辑错误,会陷入死循环。选 D。
7.C 中 i=5 时continue跳过i++,i 永远为 5,循环无法终止。其他选项均可正常结束。
8.由于&&优先级高于||,三个表达式都等价于(y%400==0) || (y%4==0 && y%100!=0),都可以正确判断闰年。选 D。
9.指针p = a+2指向a[2](值为 6),*(p+1)指向a[3](值为 8)。输出6 8。
10.factorial在内层循环中不断累乘,没有在外层循环开始时重置为 1,导致后续阶乘计算错误。应在外层循环开始时将factorial重置为 1。选 A。
11.strlen(s)计算字符串长度(不含 ‘\0’),“SilkRoad2026” 共 12 个字符;sizeof(s)为数组大小 20。选 A。
12.第一个仓库索引为 0,遍历所有货架(04)和每个货架的所有位置(09)。B 与 C 写法等价(C 中 i 表示货架,j 表示位置),均正确。选 D。
13.循环交换arr[i]与arr[5-i],i=0 交换 arr[0] 与 arr[5];i=1 交换 arr[1] 与 arr[4];i=2 交换 arr[2] 与 arr[3]。最终数组完全逆序{6,5,4,3,2,1}。选 B。
14.在 1~9 范围内,满足 i×j=36 的有 (4,9)、(6,6)、(9,4),共 3 对。选 B。
15.A 通过位与和右移,B 通过取模和整除,C 通过逐位测试,三种方法均能正确统计二进制中 1 的个数。选 D。
16.错误。数组下标范围是 0 ~ 9,a[10]越界,访问非法。
17.正确。根据德摩根定律,!(A && B)等价于!A || !B。
18.正确。strlen计算有效字符个数(不含 ‘\0’),sizeof计算数组总字节数。
19.正确。表达式正确判断闰年,输出 29。
20.正确。条件x>3为真,执行x=10,最终 x 为 10。
关注老师的专栏,查看完整版全国青少年信息素养大赛C++备赛资料(初赛+复赛):
https://blog.csdn.net/weixin_66461496/category_12969975.html
相关课程《全国青少年信息素养大赛C++初赛真题试卷及答案解析》(视频课)
https://www.bilibili.com/cheese/play/ss447406764
相关课程《全国青少年信息素养大赛C++复赛真题试卷及答案解析》(视频课)
https://www.bilibili.com/cheese/play/ep2532538
各种学习资料,助力大家一站式学习和提升!!!
#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信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++提高组csp-j初赛&复赛真题题解(持续更新):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;}