c语言输入一组整数(可以有重复数据),求第二大的值 输入格式: 第一行是数据个数n(大于2且小于20),第二行输入n个整数,空格分隔 输出格式: 输出这组数据中的次大值(注意最大值可能有多个)
时间: 2024-12-13 16:20:10 浏览: 18
在C语言中,你可以通过动态内存分配和数组操作来解决这个问题。下面是一个简单的步骤描述:
1. 首先,读取输入的数据个数n,并检查它是否满足题目要求(大于2且小于20)。
```c
int n;
scanf("%d", &n);
if (n < 3 || n > 19) {
printf("Invalid input. Please enter a number between 3 and 19.\n");
return;
}
```
2. 接着,创建一个大小为n的一维数组存储这些整数,并遍历输入读取数值。
```c
int* numbers = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
```
3. 初始化两个变量,`max_num`用于存储当前最大的数,`second_max`存储次大的数,初始时都设为数组的第一个元素。
```c
int max_num = numbers[0];
int second_max = numbers[0];
```
4. 遍历数组,更新这两个变量。如果遇到比`max_num`大的数,就将`second_max`设置为`max_num`,`max_num`设置为这个新值;如果遇到比`second_max`大但不大于`max_num`的数,则直接更新`second_max`。
```c
for (int i = 1; i < n; i++) {
if (numbers[i] > max_num) {
second_max = max_num;
max_num = numbers[i];
} else if (numbers[i] > second_max && numbers[i] != max_num) {
second_max = numbers[i];
}
}
```
5. 最后,遍历结束后,`second_max`就是第二大的值,将其打印出来。
```c
printf("The second largest value is: %d\n", second_max);
// 释放动态内存
free(numbers);
```
阅读全文