2月8日习题

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 的整数的个数。

代码详细分析

 
  1. 头文件与命名空间

    收起

    cpp

    #include <iostream>
    using namespace std;
    
     
    • #include <iostream>:引入标准输入输出流库,使得程序可以使用 cin 进行输入操作,使用 cout 进行输出操作。
    • using namespace std;:使用标准命名空间,这样在代码中就可以直接使用 std 命名空间下的对象和函数,而无需添加 std:: 前缀。
  2. 主函数部分

    收起

    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)的整数的个数。
  3. 循环遍历与条件判断

    收起

    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。
  4. 输出结果

    收起

    cpp

    cout << cnt;
    return 0;
    
     
    • cout << cnt;:将统计得到的满足条件的整数的个数输出到标准输出。
    • return 0;:表示程序正常结束。

14 届蓝桥杯 C++ 青少组中 / 高级组选拔赛 (STEMA)2022 8 21 日真题

代码功能概述

 

这段 C++ 代码的主要功能是统计在 100 到用户输入的正整数 N(范围是 100 ≤ N < 100000)之间,满足以下三个条件的正整数的个数:

 
  1. 正整数的个位数不为 3。
  2. 正整数的十位数不为 5。
  3. 正整数的百位数不为 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;:表示程序正常结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值