使用循环控制重写以上代码
时间: 2024-10-27 21:14:03 浏览: 14
当然可以,如果你想要使用循环控制而不使用数组,你可以使用栈或队列来存储用户输入的数。下面是利用循环控制实现的例子,我们将使用两个变量`current_num`和`nums`来存储当前输入的数和整个序列:
```c
#include <stdio.h>
#include <stdlib.h> // 为了使用malloc
int main() {
int current_num = 0;
int* nums = NULL;
int size = 0, max, min;
// 循环获取10个数
while(size < 10) {
printf("请输入第%d个数(输入-1结束):", size + 1);
scanf("%d", ¤t_num);
// 检查是否输入-1,表示结束输入
if (current_num == -1) break;
// 如果内存已满,动态扩容
if (size == 0 || nums[size - 1] != current_num) {
size++;
nums = realloc(nums, sizeof(int) * size); // 用realloc分配更多空间
}
nums[size - 1] = current_num; // 存储数
}
// 初始化最大值和最小值
if (size > 0) {
max = nums[0];
min = nums[0];
} else {
printf("未输入任何数值。\n");
return 1;
}
// 对于已经获取的数,更新最大值和最小值
for (int i = 1; i < size; i++) {
if (nums[i] > max) max = nums[i];
if (nums[i] < min) min = nums[i];
}
// 计算平均值
float average = (float)(sum(nums, size)) / size;
// 打印结果
printf("最大值: %d\n", max);
printf("最小值: %d\n", min);
printf("平均值: %.2f\n", average);
free(nums); // 释放内存
return 0;
}
// 辅助函数,计算所有元素之和
int sum(int arr[], int n) {
int total = 0;
for (int i = 0; i < n; i++) {
total += arr[i];
}
return total;
}
```
在这个版本中,用户需要自行输入-1来结束输入过程。注意,每次输入新数时都会检查当前栈是否已满,如果满了就进行动态扩容。
阅读全文