用c语言写一个代码,输入若干整数,无法知道整数个数,求其中的最大值及其个数
时间: 2024-10-28 15:06:55 浏览: 30
在C语言中,由于不知道整数的个数,我们可以使用动态内存分配和结构体来存储这些未知数量的整数,并同时记录最大值及其出现次数。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 结构体用于存储整数和计数
typedef struct {
int value;
int count;
} Number;
// 比较两个Number结构并更新最大值和计数
void compare(Number *a, Number *b) {
if (a->value > b->value) {
a->count++;
} else if (a->value < b->value) {
b->count = 0; // 如果找到更大的值,当前数的计数重置
b->value = a->value;
}
}
int main() {
// 初始化最大值和计数
Number max_num = {INT_MIN, 0};
FILE *fp = stdin; // 从标准输入读取
// 动态分配内存
char input[20];
while (fgets(input, sizeof(input), fp)) {
int num = atoi(input); // 将字符串转换为整数
// 如果num比当前最大值大,更新最大值
compare(&max_num, &num);
// 增加输入的数字作为单独的元素
Number temp = {num, 1};
// 扩展数组以容纳新元素
Number* numbers = realloc(numbers, sizeof(Number) * (i + 1));
numbers[i] = temp;
i++;
}
printf("最大值: %d\n", max_num.value);
printf("最大值出现次数: %d\n", max_num.count);
free(numbers); // 释放动态分配的内存
return 0;
}
```
在这个代码中,我们通过`fgets`从标准输入读取一行数据,然后将其转换为整数。然后我们比较这个新的整数与当前的最大值,如果它更大,我们就更新最大值和计数。最后,我们还需要记得在程序结束时释放分配给所有输入数字的内存。
注意:这个代码假设输入的是有效的整数值。在实际应用中,你可能需要添加错误处理来检查输入和转换的有效性。另外,`realloc`函数可能导致内存泄露,如果你不打算继续扩展数组,应该使用`malloc`替换`realloc`。
阅读全文