第
13
届蓝桥杯
C++
青少组中
/
高级组选拔赛
2022
年
3
月
13
日真题


代码功能概述
这段 C++ 代码的主要功能是从用户那里获取一个字符输入,若该字符是大写字母,将其转换为对应的小写字母并输出;若输入不是大写字母,也会按照 ASCII 码的规则对输入字符对应的 ASCII 码值加上 32 后输出对应的字符。
代码详细分析
1. 头文件和命名空间
收起
cpp
#include <iostream>
using namespace std;
#include <iostream>
:引入标准输入输出流库,使得程序可以使用cin
进行输入操作,使用cout
进行输出操作。using namespace std;
:使用标准命名空间,这样在代码中就可以直接使用std
命名空间下的对象和函数,而无需添加std::
前缀。
2. 主函数部分
收起
cpp
int main() {
char a;
cin >> a;
char a;
:声明一个字符型变量a
,用于存储用户输入的字符。cin >> a;
:从标准输入读取一个字符,并将其存储到变量a
中。
3. 字符转换与输出
收起
cpp
cout << char(a + 32);
return 0;
}
a + 32
:在 ASCII 编码中,大写字母和对应的小写字母的 ASCII 码值相差 32。例如,大写字母'A'
的 ASCII 码值是 65,对应的小写字母'a'
的 ASCII 码值是 97,97 - 65 = 32
。所以,当输入是大写字母时,将其 ASCII 码值加上 32 就可以得到对应的小写字母的 ASCII 码值。char(a + 32)
:将计算得到的 ASCII 码值强制转换为字符类型。cout << char(a + 32);
:将转换后的字符输出到标准输出。return 0;
:表示程序正常结束。
代码存在的问题及改进建议
问题
- 代码没有对输入的字符进行判断,如果输入的字符本身就不是大写字母,那么加上 32 后输出的结果可能不是预期的,可能会输出一些不可打印的字符或者不符合需求的字符。


代码功能概述
你提供的这段 C++ 代码的主要功能是统计用户输入的两个正整数 a
和 b
(其中 a
小于等于 b
)之间(包含 a
和 b
),各个数位上数字之和等于 8 的整数的个数。
代码详细分析
-
头文件与命名空间
收起
cpp
#include <iostream> using namespace std;
#include <iostream>
:引入标准输入输出流库,使得程序可以使用cin
进行输入操作,使用cout
进行输出操作。using namespace std;
:使用标准命名空间,这样在代码中就可以直接使用std
命名空间下的对象和函数,而无需添加std::
前缀。
-
主函数部分
收起
cpp
int main() { int a, b; cin >> a >> b; int cnt = 0;
int a, b;
:声明两个整型变量a
和b
,用于存储用户输入的两个正整数。cin >> a >> b;
:从标准输入读取两个整数,并分别赋值给a
和b
。int cnt = 0;
:声明一个整型变量cnt
并初始化为 0,用于统计满足条件(各数位数字之和为 8)的整数的个数。
-
循环遍历与条件判断
收起
cpp
for (int i = a; i <= b; i++) if ((i % 10 + i / 10 % 10 + i / 100) == 8) cnt++;
for (int i = a; i <= b; i++)
:使用for
循环遍历从a
到b
的所有整数。i % 10
:计算i
的个位数。i / 10 % 10
:先将i
除以 10 去掉个位数,再对结果取模 10,得到i
的十位数。i / 100
:将i
除以 100,得到i
的百位数(这里假设i
是三位数,如果i
是两位数,i / 100
的结果为 0)。if ((i % 10 + i / 10 % 10 + i / 100) == 8)
:判断i
的个位数、十位数和百位数之和是否等于 8,如果等于 8,则将计数器cnt
加 1。
-
输出结果
收起
cpp
cout << cnt; return 0;
cout << cnt;
:将统计得到的满足条件的整数的个数输出到标准输出。return 0;
:表示程序正常结束。
第
14
届蓝桥杯
C++
青少组中
/
高级组选拔赛
(STEMA)2022
年
8
月
21
日真题




代码功能概述
这段 C++ 代码的主要功能是统计在 100 到用户输入的正整数 N
(范围是 100 ≤ N < 100000)之间,满足以下三个条件的正整数的个数:
- 正整数的个位数不为 3。
- 正整数的十位数不为 5。
- 正整数的百位数不为 7。
代码详细分析
1. 头文件与命名空间
收起
cpp
#include <iostream>
using namespace std;
#include <iostream>
:引入标准输入输出流库,使得程序可以使用cin
进行输入操作,使用cout
进行输出操作。using namespace std;
:使用标准命名空间,这样在代码中就可以直接使用std
命名空间下的对象和函数,而无需添加std::
前缀。
2. 主函数部分
输入部分
收起
cpp
int main() {
int N;
cout << "请输入一个满足 100 ≤ N < 100000 的正整数 N: ";
cin >> N;
int N;
:声明一个整型变量N
,用于存储用户输入的正整数。cout << ...
:向用户输出提示信息,告知用户输入的要求。cin >> N;
:从标准输入读取一个整数,并将其赋值给变量N
。
计数变量初始化
收起
cpp
int count = 0;
- 声明一个整型变量
count
并初始化为 0,用于统计满足条件的正整数的个数。
遍历与条件判断
收起
cpp
for (int i = 100; i <= N; ++i) {
int unitsDigit = i % 10;
int tensDigit = (i / 10) % 10;
int hundredsDigit = (i / 100) % 10;
if (unitsDigit != 3 && tensDigit != 5 && hundredsDigit != 7) {
count++;
}
}
for (int i = 100; i <= N; ++i)
:使用for
循环遍历从 100 到N
的所有整数。int unitsDigit = i % 10;
:通过取模运算得到当前整数i
的个位数。int tensDigit = (i / 10) % 10;
:先将i
除以 10 去掉个位数,再对结果取模 10,得到当前整数i
的十位数。int hundredsDigit = (i / 100) % 10;
:先将i
除以 100 去掉个位数和十位数,再对结果取模 10,得到当前整数i
的百位数。if (unitsDigit != 3 && tensDigit != 5 && hundredsDigit != 7)
:判断当前整数的个位数是否不为 3、十位数是否不为 5 以及百位数是否不为 7,如果都满足,则将计数器count
加 1。
输出结果
收起
cpp
cout << "100 到 " << N << " 之间满足条件的正整数有 " << count << " 个。" << endl;
return 0;
}
cout << ...
:将统计得到的满足条件的正整数的个数输出到标准输出。return 0;
:表示程序正常结束。