输入N个学生的英语分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。分数均为不超过100的非负整数。请使用c语言并用循环和数组实现。
时间: 2023-08-31 12:21:22 浏览: 196
C语言输入学生成绩,计算并输出这些学生的最低分、最高分、平均分。
### 回答1:
好的,这是一个关于统计英语分数的问题。我可以使用循环和数组来实现。以下是代码示例:
```c
#include <stdio.h>
int main() {
int n, score[101] = {0}, max_count = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int s;
scanf("%d", &s);
score[s]++;
if (score[s] > max_count) {
max_count = score[s];
}
}
for (int i = 0; i <= 100; i++) {
if (score[i] == max_count) {
printf("%d ", i);
}
}
return 0;
}
```
这个程序首先读入学生的数量n,然后使用一个数组score来统计每个分数出现的次数。在读入每个学生的分数时,我们将对应分数的计数器加1,并检查是否需要更新最大计数器max_count。最后,我们遍历整个数组score,输出出现次数等于max_count的分数。
希望这个程序能够帮到你!
### 回答2:
假设输入的学生数量为N,那么我们可以创建一个大小为101的数组score,用于存储每个分数出现的次数。数组的下标对应分数,数组的值对应该分数出现的次数。
具体的实现步骤如下:
1. 创建一个大小为101的整型数组score,并将所有元素初始化为0。
2. 使用循环输入N个学生的英语分数,对每个分数进行统计:如果学生的分数为x,则将score[x]的值加1。
3. 创建两个变量maxCount和maxScore,分别用于保存出现次数最多的分数的出现次数和分数。
4. 使用循环遍历数组score,找到出现次数最多的分数maxScore以及该分数的出现次数maxCount。具体做法如下:
- 设置maxCount为0,maxScore为0。
- 对score数组进行遍历,如果某个分数出现的次数score[i]比当前的maxCount大,则更新maxCount为score[i],maxScore为i。
5. 找出所有出现次数等于maxCount的分数,并按照从小到大的顺序输出。具体做法如下:
- 再次使用循环遍历数组score,如果某个分数出现的次数score[i]等于maxCount,则输出该分数。
下面是用C语言实现上述步骤的代码示例:
```
#include <stdio.h>
int main() {
int N;
int score[101] = {0};
int maxCount = 0;
int maxScore = 0;
// 输入学生数量
printf("请输入学生数量:");
scanf("%d", &N);
// 输入学生的英语分数并统计
printf("请输入学生的英语分数:");
for (int i = 0; i < N; i++) {
int temp;
scanf("%d", &temp);
score[temp]++;
}
// 找出出现次数最多的分数和次数
for (int i = 0; i < 101; i++) {
if (score[i] > maxCount) {
maxCount = score[i];
maxScore = i;
}
}
// 输出出现次数最多的分数
printf("出现次数最多的分数为:");
for (int i = 0; i < 101; i++) {
if (score[i] == maxCount) {
printf("%d ", i);
}
}
return 0;
}
```
希望对你有帮助!
### 回答3:
思路:
1. 首先,根据N的值,定义一个长度为101的整型数组count,用来存储0分到100分各个分数出现的次数。数组下标表示分数,对应的元素值表示该分数出现的次数。
2. 利用循环,将学生的分数逐一输入,并根据分数更新count数组中对应元素的值。
3. 定义一个变量maxCount,初始化为0,用来存储出现次数最多的分数出现的次数。
4. 定义一个动态分配内存的整型一维数组maxScores,用来存储出现次数最多的分数(可能有多个)。
5. 再次利用循环,遍历count数组,找到出现次数最多的分数,并将其存储到maxScores数组中。
6. 最后,按从小到大的顺序输出maxScores数组中的元素。
代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int N;
printf("请输入学生数量N:");
scanf("%d", &N);
int* count = (int*)malloc(101 * sizeof(int)); // 动态分配内存,用来存储分数出现次数
int* maxScores = (int*)malloc(N * sizeof(int)); // 动态分配内存,用来存储出现次数最多的分数
int maxCount = 0; // 出现次数最多的分数出现的次数
for (int i = 0; i < 101; i++) {
count[i] = 0; // 初始化count数组,所有分数出现的次数均为0
}
for (int i = 0; i < N; i++) {
int score;
printf("请输入第%d个学生的英语分数:", i+1);
scanf("%d", &score);
count[score]++; // 根据分数更新count数组中对应元素的值
}
for (int i = 0; i < 101; i++) {
if (count[i] > maxCount) {
maxCount = count[i]; // 更新出现次数最多的分数出现的次数
}
}
// 找到出现次数最多的分数,并存储到maxScores数组中
int index = 0; // 记录maxScores中元素的个数
for (int i = 0; i < 101; i++) {
if (count[i] == maxCount) {
maxScores[index++] = i;
}
}
// 从小到大输出maxScores数组中的元素
printf("出现次数最多的分数是:");
for (int i = 0; i < index; i++) {
printf("%d ", maxScores[i]);
}
// 释放动态分配的内存
free(count);
free(maxScores);
return 0;
}
```
该程序首先要求输入学生数量N,然后根据输入的学生英语分数,利用循环和数组统计各个分数出现的次数。最后,输出出现次数最多的分数(可能有多个),按从小到大的顺序输出。
阅读全文