当前位置: 首页 > news >正文

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

在这里插入图片描述

第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.lryc.cn/news/125788.html

相关文章:

  • HCIP VRRP技术
  • JAVA AES ECB/CBC 加解密
  • Android FrameWork 层 Handler源码解析
  • list
  • ABeam×Startup丨德硕管理咨询(深圳)创新研究团队前往灵境至维·既明科技进行拜访交流
  • TCP的相关性质
  • pointpillars在2D CNN引入自适应注意力机制
  • 【每日一题】1572. 矩阵对角线元素的和
  • leetcode原题:检查子树
  • 2023年国赛数学建模思路 - 案例:ID3-决策树分类算法
  • 可视化绘图技巧100篇进阶篇(七)-三维堆积柱形图(3D Stacked Bar Chart)
  • React源码解析18(7)------ 实现事件机制(onClick事件)
  • Android app专项测试之耗电量测试
  • 设计模式-面试常问
  • 聊聊在集群环境中本地缓存如何进行同步
  • 【C++深入浅出】初识C++上篇(关键字,命名空间,输入输出,缺省参数,函数重载)
  • 租房合同范本
  • 轻薄的ESL电子标签有哪些特性?
  • AI 实力:利用 Docker 简化机器学习应用程序的部署和可扩展性
  • 商用汽车转向系统常见故障解析
  • Python中的MetaPathFinder
  • 工控机防病毒
  • LangChain手记 Question Answer 问答系统
  • 如何优化css中的一些昂贵属性
  • 基于安防监控EasyCVR视频汇聚融合技术的运输管理系统的分析
  • 在WordPress站点中展示阅读量等流量分析数据(超详细实现)
  • 学习 Iterator 迭代器
  • JVM---垃圾回收算法介绍
  • Ubuntu一直卡死的问题(20.04)
  • 自动化测试用例设计实例