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

news2025/1/19 20:36:18

在这里插入图片描述

第1题:字符统计

给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。
输入
输入包含一行,一个字符串,长度不超过1000。
输出
输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。
样例输入
abbccc
样例输出
c 3

下面是一个使用C语言编写的字符统计问题的程序的示例代码:

#include <stdio.h>
#include <string.h>

int main() {
    char str[1001];
    scanf("%s", str);

    int count[26] = {0};  // 用于统计每个字符出现的次数,下标0代表字符'a',下标1代表字符'b',以此类推

    int len = strlen(str);
    for (int i = 0; i < len; i++) {
        count[str[i] - 'a']++;  // 统计字符出现的次数
    }

    char maxChar;
    int maxCount = 0;

    for (int i = 0; i < 26; i++) {
        if (count[i] > maxCount) {
            maxCount = count[i];
            maxChar = i + 'a';
        }
    }

    printf("%c %d\n", maxChar, maxCount);

    return 0;
}

在上述代码中,我们首先定义了一个字符数组str来保存输入的字符串。

然后,我们定义一个整数数组count,用于统计每个字符出现的次数。数组的下标从0到25分别对应字符’a’到’z’。

接下来,我们使用strlen函数获取输入字符串的长度,然后使用一个循环遍历字符串的每个字符。通过将字符减去字符’a’的ASCII码值,将其映射到count数组的正确下标上,并将对应下标的元素加1,以统计字符出现的次数。

完成字符统计后,我们定义变量maxCharmaxCount,分别用于保存出现次数最多的字符和该字符出现的次数。初始时,将maxCount设置为0。

然后,我们使用另一个循环遍历count数组,找到出现次数最多的字符。如果当前字符出现的次数大于maxCount,则更新maxCountmaxChar的值。

最后,我们使用printf函数输出maxCharmaxCount的值,并在中间加上一个空格。

你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。

第2题:图像处理

给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1.四周最外侧的像素点灰度值不变;
2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
时间限制:1000
内存限制:65536
输入
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。 接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。
输出
n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
样例输入
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100
样例输出
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100

下面是一个使用C语言编写的图像模糊处理问题的程序的示例代码:

#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);

    int image[n][m];

    // 读取图像像素值
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &image[i][j]);
        }
    }

    int blurredImage[n][m];

    // 模糊化处理
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (i == 0 || i == n - 1 || j == 0 || j == m - 1) {
                // 四周最外侧的像素点保持不变
                blurredImage[i][j] = image[i][j];
            } else {
                // 中间像素点的灰度值为周围五个像素点的平均值
                blurredImage[i][j] = (image[i][j] + image[i - 1][j] + image[i + 1][j] + image[i][j - 1] + image[i][j + 1]) / 5;
            }
        }
    }

    // 输出模糊处理后的图像
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d", blurredImage[i][j]);
            if (j < m - 1) {
                printf(" ");
            }
        }
        printf("\n");
    }

    return 0;
}

在上述代码中,我们首先使用scanf函数读取图像的行数n和列数m

然后,我们定义一个二维数组image来保存图像的像素值。

接下来,我们使用两个嵌套的循环读取输入的像素值,并将其保存到image数组中。

然后,我们定义另一个二维数组blurredImage来保存模糊处理后的图像像素值。

接下来,我们使用两个嵌套的循环遍历图像的每个像素点。如果当前像素点是图像的四周最外侧的像素点,则将其灰度值保持不变;否则,将当前像素点及其上下左右相邻的四个像素点的灰度值相加,然后除以5取整,得到模糊处理后的新灰度值。

完成模糊处理后,我们使用两个嵌套的循环遍历blurredImage数组,并使用printf函数输出模糊处理后的图像像素值。在每行的输出中,相邻的两个像素值之间用一个空格隔开,每行结束后输出一个换行符。

你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。

第3题:替换单词

输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
时间限制:1000
内存限制:65536
输入
输入包括3行, 第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 <= 100);
第3行是a将被替换的单词b(长度 <= 100).
s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
样例输入
You want someone to help you
You
I
样例输出
I want someone to help you

下面是一个使用C语言编写的替换单词问题的程序的示例代码:

#include <stdio.h>
#include <string.h>

void replaceWord(char *str, const char *oldWord, const char *newWord) {
    char *pos, temp[100];
    int index = 0;
    int oldWordLen = strlen(oldWord);

    // 在字符串中找到要替换的单词,并将其替换为新单词
    while ((pos = strstr(str, oldWord)) != NULL) {
        strcpy(temp, str);
        index = pos - str;
        str[index] = '\0';
        strcat(str, newWord);
        strcat(str, temp + index + oldWordLen);
    }
}

int main() {
    char str[1000];
    char oldWord[100], newWord[100];

    // 读取输入的字符串、待替换的单词和替换后的单词
    fgets(str, sizeof(str), stdin);
    fgets(oldWord, sizeof(oldWord), stdin);
    fgets(newWord, sizeof(newWord), stdin);

    // 去除字符串中的换行符
    str[strcspn(str, "\n")] = '\0';
    oldWord[strcspn(oldWord, "\n")] = '\0';
    newWord[strcspn(newWord, "\n")] = '\0';

    // 替换单词
    replaceWord(str, oldWord, newWord);

    // 输出替换后的字符串
    printf("%s\n", str);

    return 0;
}

在上述代码中,我们首先定义了一个replaceWord函数,用于在字符串中替换指定的单词。

replaceWord函数中,我们使用strstr函数在字符串中查找要替换的单词的位置。如果找到了要替换的单词,我们将字符串切割成三部分:替换位置之前的部分、替换位置的单词、替换位置之后的部分。然后,我们使用strcpy函数将字符串的前半部分复制到临时数组temp中,使用strcat函数将新单词和剩余部分拼接到字符串中,以完成替换。

main函数中,我们首先定义了字符数组stroldWordnewWord,分别用于保存输入的字符串、待替换的单词和替换后的单词。

然后,我们使用fgets函数逐行读取输入的字符串、待替换的单词和替换后的单词。注意,fgets函数会读取换行符,因此我们需要使用strcspn函数将换行符替换为字符串结束符\0

接下来,我们调用replaceWord函数替换字符串中的单词。

最后,我们使用printf函数输出替换后的字符串。

你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。

第4题:偶数降序输出

给定一个长度为N (不大于500) 的正整数序列,请将其中的所有偶数取出,并按降序输出。
输入描述:
共两行;第一行为N;第二行为N个正数,其间用空格间隔
输出描述:
降序输出的偶数序列,数与数之间用空格间隔
数据保证至少有一个偶数
样例输入:
10
1 3 2 6 5 4 9 8 7 10
样例输出:
10 8 6 4 2

下面是一个使用C语言编写的偶数降序输出问题的程序的示例代码:

#include <stdio.h>

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] < arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int N;
    scanf("%d", &N);

    int sequence[N];
    int evenCount = 0;

    // 读取序列并筛选出偶数
    for (int i = 0; i < N; i++) {
        scanf("%d", &sequence[i]);
        if (sequence[i] % 2 == 0) {
            evenCount++;
        }
    }

    int evenNumbers[evenCount];
    int index = 0;

    // 将偶数存储到新数组evenNumbers中
    for (int i = 0; i < N; i++) {
        if (sequence[i] % 2 == 0) {
            evenNumbers[index] = sequence[i];
            index++;
        }
    }

    // 使用冒泡排序对偶数进行降序排序
    bubbleSort(evenNumbers, evenCount);

    // 输出降序排列的偶数序列
    for (int i = 0; i < evenCount; i++) {
        printf("%d", evenNumbers[i]);
        if (i < evenCount - 1) {
            printf(" ");
        }
    }
    printf("\n");

    return 0;
}

在上述代码中,我们首先使用scanf函数读取输入的整数N,表示序列的长度。

然后,我们定义一个数组sequence来保存输入的正整数序列,并定义一个变量evenCount来记录偶数的个数。

接下来,我们使用一个循环读取输入的正整数序列,并在读取的同时判断每个数是否为偶数,如果是偶数,则将evenCount加1。

然后,我们定义一个新的数组evenNumbers,其大小为evenCount,用于存储筛选出的偶数。

接着,我们使用另一个循环将偶数存储到evenNumbers数组中。

之后,我们使用冒泡排序算法对evenNumbers数组进行降序排序。

最后,我们使用一个循环输出降序排列的偶数序列,每个数之间用空格隔开。

你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。

第5题:满足条件的数的累加2

现有n个整数,将其中个位数为k的数进行累加求和
输入
第一行一个整数n。第二行n个非负整数,以空格分割,每个数不大于100000。第三行一个整数k。
输出
输出满足题目要求的累加和
样例输入
10
2 5 7 17 11 18 4 27 1 7
7
样例输出
58

下面是一个使用C语言编写的满足条件的数的累加求和问题的程序的示例代码:

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);

    int numbers[n];
    int k;
    scanf("%d", &k);

    // 读取n个非负整数
    for (int i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    int sum = 0;

    // 对满足个位数为k的数进行累加求和
    for (int i = 0; i < n; i++) {
        if (numbers[i] % 10 == k) {
            sum += numbers[i];
        }
    }

    // 输出累加和
    printf("%d\n", sum);

    return 0;
}

在上述代码中,我们首先使用scanf函数读取输入的整数n,表示非负整数的个数。

然后,我们定义一个数组numbers来保存输入的非负整数序列。

接下来,我们使用一个循环读取输入的非负整数序列,并将每个数存储到numbers数组中。

接着,我们使用scanf函数读取输入的整数k,表示要求个位数为k的数。

然后,我们定义一个变量sum并初始化为0,用于存储满足条件的数的累加和。

之后,我们使用一个循环遍历numbers数组,并判断每个数的个位数是否为k,如果满足条件,则将该数累加到sum中。

最后,我们使用printf函数输出累加和sum

你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

autodock后的pdbqt文件怎么通过网站分析?

首先需要在pymol中打开这个docking后的分子 然后再打开受体&#xff0c; 注意&#xff1a;顺序不要反&#xff0c;顺序反了会导致网址分析错误 最后导出为pdb就可以了放在网站上用了 网址&#xff1a;https://plip-tool.biotec.tu-dresden.de/plip-web/plip/index

RK3568KK操作手册

一&#xff0e;烧录MCU 板子不用上电&#xff0c;接上烧录器 打开 HOPE3000 For e-Link 烧录软件。选择文件&#xff0c;选择要烧录的固件&#xff1a;HT66F2030.MTP 选择3V 点击下载&#xff0c; 点击所有 烧录成功如图所示&#xff1a; 二&#xff0e;接上电源&am…

什么是自动化测试?如何做自动化测试?

前面介绍了功能测试和接口测试&#xff0c;在介绍接口测试时提到了实现API自动化。那具体什么是自动化&#xff0c;为什么要做自动化&#xff0c;这里我们集中总结。 一. 什么是自动化&#xff1f; 顾名思义&#xff0c;自动化测试是相对人工测试而言的&#xff0c;它是指把人…

易云维®医院后勤一站式服务平台实现对医院人、物、设备进行信息化管理

传统后勤移动系统的缺陷 使用的门槛和成本高。在国内只有一些大医院开展及应用&#xff0c;由于传统移动运维系统需要定制软件、结合专用平板使用&#xff0c;导致整体项目价格昂贵&#xff0c;故一般采购医院配置的平板少&#xff0c;从而影响记录实时互动追踪的效果&#xf…

如何克服预测性维护中IT和OT的融合挑战?

预测性维护&#xff08;Predictive Maintenance&#xff0c;简称PdM&#xff09;在现代制造业中扮演着关键角色&#xff0c;通过实时数据分析和资产监控&#xff0c;帮助企业预测设备故障&#xff0c;优化维护计划&#xff0c;并提高生产效率。然而&#xff0c;PdM的成功实施面…

无法解析的外部符号cusolverDnCreate

问题&#xff1a; 无法解析的外部符号cusolverDnCreate 解决方案 那么就在启动项目-》属性-》连接器-》输入-》附加依赖项&#xff1a;加&#xff1a; cublas.lib cublas_device.lib cuda.lib cudadevrt.lib cudart.lib cudart_static.lib cufft.lib cufftw.lib curand.lib …

Flink 流式读写文件、文件夹

文章目录 一、flink 流式读取文件夹、文件二、flink 写入文件系统——StreamFileSink三、查看完整代码 一、flink 流式读取文件夹、文件 Apache Flink针对文件系统实现了一个可重置的source连接器&#xff0c;将文件看作流来读取数据。如下面的例子所示&#xff1a; StreamExe…

编写一个通用函数,从键盘输入n,显示正n边形。通过调用函数,在屏幕上同时显示下面的四个图形

题目&#xff1a;编写一个通用函数&#xff0c;从键盘输入n&#xff0c;显示正n边形。通过调用函数&#xff0c;在屏幕上同时显示下面的四个图形。 结果&#xff1a; 调用举例&#xff1a; drawShape(3)drawShape(4)drawShape(5)drawShape(6) 代码&#xff1a; import turt…

数据库MySQL 创建查询恢复数据库

创建数据库 查询数据库 备份恢复数据库

【Docker】 使用Docker-Compose 搭建基于 WordPress 的博客网站

引 本文将使用流行的博客搭建工具 WordPress 搭建一个私人博客站点。部署过程中使用到了 Docker 、MySQL 。站点搭建完成后经行了发布文章的体验。 WordPress WordPress 是一个广泛使用的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;用于构建和管理网站、博客和…

【深入理解ES6】块级作用域绑定

1. var声明及变量提升机制 提升&#xff08;Hoisting&#xff09;机制&#xff1a;通过关键字var声明的变量&#xff0c;都会被当成在当前作用域顶部生命的变量。 function getValue(condition){if(condition){var value "blue";console.log(value);}else{// 此处…

7-2 成绩转换

分数 15 全屏浏览题目 切换布局 作者 沈睿 单位 浙江大学 本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则&#xff1a; 大于等于90分为A&#xff1b;小于90且大于等于80为B&#xff1b;小于80且大于等于70为C&#xff1b;小于70且大于等于60为D&#xff1b;小…

RK3568 ubuntu18.04环境搭建

一.打开Window10虚拟化功能 打开Windows 10控制面板&#xff0c;选择“应用“ 点击右上角“程序与功能” 点击“启用或关闭Windows 功能”&#xff0c;勾选“适用于Linux 的Windows 子系统”和“虚 拟机平台” 二.VMware新建虚拟机 打开Vmware,选择“创建新的虚拟机” 选择“…

tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询

Mybatis-Plus极大简化了我们的开发&#xff0c;作为mybatis的增强版&#xff0c;Mybatis-Plus确实帮我们减少了很多SQL语句的编写&#xff0c;通过其提高的API&#xff0c;可以方便快捷第完成增删查改操作。但是&#xff0c;其实除了Mybatis-Plus以外&#xff0c;还有一个技术t…

TikTok带货有什么优势?品牌营销的新趋势

在当今数字化时代&#xff0c;品牌营销正日益倾向于社交媒体平台&#xff0c;而TikTok作为一款全球热门的短视频社交平台&#xff0c;正在成为品牌营销的新趋势。TikTok带货&#xff0c;也就是品牌利用TikTok平台进行商品推广和销售&#xff0c;已成为一种创新的、高效的营销方…

BaseMapper的insert方法快速插入数据未提交问题

一、前言 今天测试一批日志数据插入数据库&#xff0c;发现通过BaseMapper的int insert(T entity);方法在大量数据进行插入的时候插入的数据变成了未提交。意思就是程序运行insert成功&#xff0c;但是数据库里却没有数据。当一条一条数据插入的时候却是可以的&#xff0c;循环…

Linux下设计简易线程池

Linux下设计简易线程池 文章目录 Linux下设计简易线程池1.介绍2.具体实现2.1任务类头文件Task.hpp2.2线程池文件ThreadPool.hpp2.3主函数Main.cc 1.介绍 ​ 线程池是一种池化技术&#xff0c;是消费者生产者模型的具体体现。它能够预先创建一批能够被重复使用的线程&#xff0…

Java是编译型还是解释型

定义 编译语言&#xff08;英语&#xff1a;Compiled language&#xff09;是一种程式语言类型&#xff0c;通过编译器来实作。它不像直译语言一样&#xff0c;由直译器将程式码一句一句执行&#xff0c;而是以编译器&#xff0c;先将程式码编译为机器码&#xff0c;再加以执行…

麦肯锡发布《2023年度科技报告》!

在经历了 2022 年技术投资和人才的动荡之后&#xff0c;2023 年上半年&#xff0c;人们对技术促进商业和社会进步的潜力重新燃起了热情。生成式人工智能&#xff08;Generative AI&#xff09;在这一复兴过程中功不可没&#xff0c;但它只是众多进步中的一个&#xff0c;可以推…

世纪之争:量子物理学解决了「黑洞悖论」

在黑洞内部&#xff0c;20 世纪物理学的两大理论支柱似乎发生了冲突。现在&#xff0c;一群年轻的物理学家认为&#xff0c;他们通过诉诸新世纪的中心支柱——量子信息物理学&#xff0c;已经解决了这一冲突。 2013 年 8 月&#xff0c;数十位著名理论物理学家齐聚加利福尼亚州…