2023年05月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

2023年05月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试_第1张图片

第1题:输出第二个整数

输入三个整数,把第二个输入的整数输出。
时间限制:1000
内存限制:65536
输入
只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。
输出
只有一行,一个整数,即输入的第二个整数。
样例输入
123 456 789
样例输出
456

解题思路如下:

(1)首先,我们需要读取输入的三个整数。可以使用scanf函数来实现,使用%d格式说明符分别读取三个整数,并将它们存储在对应的变量中。

(2)接下来,我们需要输出第二个整数。由于整数是按照顺序输入的,第二个整数即为第二个变量的值。

(3)最后,我们将第二个整数输出。使用printf函数,并使用%d格式说明符将第二个整数打印到屏幕上。

以下是使用上述思路编写的C程序:

#include 

int main() {
    int num1, num2, num3;

    // 读取三个整数
    scanf("%d %d %d", &num1, &num2, &num3);

    // 输出第二个整数
    printf("%d\n", num2);

    return 0;
}

通过以上步骤,我们可以输入三个整数,然后输出第二个整数。

第2题:计算表达式的值

给定整数x,y的值,计算3x+2y的值。
时间限制:3000
内存限制:65536
输入
一行包含2个整数x,y,以空格作为分隔。数据保证最后计算结果还在整数表示范围内。
输出
按照题目要求输出结果
样例输入
2 3
样例输出
12

解题思路如下:

(1)首先,我们需要读取输入的两个整数x和y。可以使用scanf函数来实现,使用%d格式说明符分别读取两个整数,并将它们存储在对应的变量中。

(2)接下来,我们可以使用给定的表达式3x+2y来计算结果。可以先计算3x的值,再加上2y的值,得到最终结果。可以使用一个临时变量来保存中间结果。

(3)使用乘法运算符*计算3x的值,将乘积存储在临时变量中。然后,使用乘法运算符*计算2y的值,并将乘积加到临时变量中。

(4)最后,我们将计算得到的结果输出。使用printf函数,并使用%d格式说明符将结果打印到屏幕上。

下面是使用上述思路编写的C程序:

#include 

int main() {
    int x, y;
    
    // 读取两个整数
    scanf("%d %d", &x, &y);
    
    // 计算表达式的值
    int result = 3 * x + 2 * y;
    
    // 输出结果
    printf("%d\n", result);
    
    return 0;
}

通过以上步骤,我们可以输入两个整数x和y,并计算表达式3x+2y的值,最后将结果输出。

第3题:大写字母的判断

输入一个字符,判断是否是英文大写字母,即是否是A-Z中的一个。
时间限制:1000
内存限制:65536
输入
一个字符。
输出
如果是英文大写字母,则输出YES,否者输出NO。
样例输入
K
样例输出
YES

解题思路如下:

(1)首先,我们需要读取输入的字符。可以使用scanf函数来实现,使用%c格式说明符读取一个字符,并将其存储在一个char类型的变量中。

(2)接下来,我们需要判断输入的字符是否是英文大写字母。英文大写字母的ASCII码范围是65(A)到90(Z)。因此,我们可以使用条件判断语句来判断输入的字符的ASCII码是否在这个范围内。

(3)如果输入的字符是英文大写字母,则输出"YES";否则,输出"NO"。

以下是使用上述思路编写的C程序:

#include 

int main() {
    char ch;
    
    // 读取一个字符
    scanf("%c", &ch);
    
    // 判断是否是英文大写字母
    if (ch >= 'A' && ch <= 'Z') {
        printf("YES\n");
    } else {
        printf("NO\n");
    }
    
    return 0;
}

通过以上步骤,我们可以输入一个字符,并判断是否是英文大写字母,最后输出相应的结果。

第4题:满足条件的数的累加

现有n个整数,将其中个位数为k的数进行累加求和。
时间限制:1000
内存限制:65536
输入
第一行两个整数n、k,以空格分隔。( 0 < n < 1000, 0 ≤ k ≤ 9) 第二行n个非负整数,以空格分隔,每个数不大于100000。
输出
输出满足题目要求的累加和。
样例输入
10 7
2 5 7 17 11 18 4 27 1 7
样例输出
58

解题思路如下:

(1)首先,我们需要读取输入的整数n和k,以及n个非负整数。可以使用scanf函数来实现,根据题目要求使用适当的格式说明符读取输入。

(2)接下来,我们需要对每个数进行判断,如果个位数等于给定的k,则将其累加到总和中。可以使用一个变量来保存累加和的值。

(3)遍历所有的输入整数,通过取模运算%获取每个数的个位数,然后与给定的k进行比较。如果相等,则将该数累加到总和中。

(4)最后,输出累加和的值。

以下是使用上述思路编写的C程序:

#include 

int main() {
    int n, k;
    int num;
    int sum = 0;
    
    // 读取整数n和k
    scanf("%d %d", &n, &k);
    
    // 读取n个非负整数并进行累加
    for (int i = 0; i < n; i++) {
        scanf("%d", &num);
        
        // 判断个位数是否等于k,如果相等则累加到总和中
        if (num % 10 == k) {
            sum += num;
        }
    }
    
    // 输出累加和
    printf("%d\n", sum);
    
    return 0;
}

通过以上步骤,我们可以输入整数n和k,以及n个非负整数,并对个位数等于给定的k的数进行累加求和,最后输出累加和的值。

第5题:金币

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。
你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。
时间限制:10000
内存限制:65536
输入
一个整数(范围1到10000),表示天数。
输出
骑士获得的金币数。
样例输入
6
样例输出
14

解题思路如下:

(1)首先,我们需要读取输入的天数。可以使用scanf函数来实现,使用%d格式说明符读取一个整数,并将其存储在一个变量中。

(2)接下来,我们需要计算骑士获得的金币数。根据题目描述,金币的发放模式是连续N天每天收到N枚金币,然后在之后的连续N+1天里每天收到N+1枚金币。我们可以使用循环来模拟这个发放模式。

(3)我们定义两个变量coinsdays,分别表示骑士已经获得的金币数和已经过去的天数,初始值都为0。

(4)使用一个循环来模拟金币的发放模式。在每一轮循环中,首先判断已经过去的天数是否小于输入的天数。如果是,则根据当前的天数和金币数量规律计算应该发放的金币数,并将其累加到coins变量中。然后,将过去的天数增加N+1。

(5)最后,输出coins变量的值,即骑士获得的金币数。

以下是使用上述思路编写的C程序:

#include 

int main() {
    int days;
    int coins = 0;
    int days_passed = 0;
    int current_coins = 1;
    int current_days = 1;

    // 读取天数
    scanf("%d", &days);

    // 计算骑士获得的金币数
    while (days_passed < days) {
        coins += current_coins;

        days_passed += current_days;

        // 更新当前金币数和天数
        current_coins++;
        current_days++;
    }

    // 输出金币数
    printf("%d\n", coins);

    return 0;
}

通过以上步骤,我们可以输入天数,并根据金币的发放模式计算骑士获得的金币数,最后输出金币数的值。

你可能感兴趣的:(C/C++等级考试历届真题解析,c语言,c++,算法,电子学会,等级考试)