不要用程序封装的形式写,写成一整个,不要用指针,众数C语言
时间: 2024-10-16 13:22:43 浏览: 8
在C语言中,由于缺乏内置的数据结构支持,我们通常不会像Python或Java那样直接使用封装或者高阶函数来寻找众数。但是,我们可以使用数组和循环结构来实现这个功能。这里提供一个不使用指针,也不用`<map>`或类似数据结构的例子,而是通过遍历数组并计数元素出现的次数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_MODES 10
// 结构体来存储数字及其出现次数
typedef struct {
int number;
int count;
} CountItem;
// 找到数组中的所有众数
void findModes(int arr[], int n, int modes[MAX_MODES]) {
int current_count = 0, index = 0;
for (int i = 0; i < n; i++) {
// 初始化计数为0
if (current_count == 0) {
modes[index++] = arr[i];
current_count++;
} else if (arr[i] == modes[current_count - 1]) {
modes[index - 1].count++;
} else if (modes[current_count - 1] != arr[i]) {
if (current_count == MAX_MODES) {
break; // 如果达到最大模式数量,结束查找
}
current_count = 1;
modes[index++] = arr[i]; // 更新当前计数
}
}
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 5, 5, 5, 6, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
int modes[MAX_MODES];
findModes(arr, n, modes);
printf("众数有:\n");
for (int i = 0; i < index && i < MAX_MODES; i++) {
if (modes[i].count > 1) {
printf("%d 出现了 %d 次\n", modes[i].number, modes[i].count);
}
}
return 0;
}
阅读全文