C语言数组任务实现求助:含数组创建、随机填充等需求
你的C语言数组任务问题分析与修正
原代码存在的核心问题
- 数组声明顺序错误:你在
size被用户赋值前就声明了变长数组arr[size],此时size为0,会创建一个大小为0的数组,后续输入元素时会越界,触发未定义行为。必须先获取用户输入的size,再声明数组。 - 未实现随机数填充:任务要求用-6到6的随机数填充数组,但你当前代码是让用户手动输入元素,不符合需求。
- 缺少任务要求的核心功能:没有实现数组元素平均值计算和最大值查找的逻辑。
修正后的完整代码
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int size; printf("input size of array: "); scanf("%d", &size); // 先获取size再声明变长数组 int arr[size]; // 初始化随机数种子,确保每次运行生成不同的随机序列 srand(time(NULL)); printf("\nGenerated array: "); for(int i = 0; i < size; i++){ // 生成-6到6之间的随机数:rand()%13得到0-12,减6后范围是-6到6 arr[i] = rand() % 13 - 6; printf("%d ", arr[i]); } // 计算平均值 double average = 0.0; int sum = 0; for(int i = 0; i < size; i++){ sum += arr[i]; } average = (double)sum / size; printf("\nAverage of array elements: %.2f", average); // 查找最大值 int max = arr[0]; for(int i = 1; i < size; i++){ if(arr[i] > max){ max = arr[i]; } } printf("\nMaximum value in array: %d", max); return 0; }
关键说明
- 随机数生成:
rand() % 13会生成0到12的整数,减去6后就得到-6到6的范围。srand(time(NULL))用当前时间作为随机种子,避免每次运行生成相同的随机序列。 - 平均值计算:用
int类型计算总和后,强制转换为double再除以数组大小,避免整数除法导致的精度丢失。 - 最大值查找:先假设第一个元素为最大值,遍历数组逐个比较更新最大值。
内容的提问来源于stack exchange,提问作者Just Bonhomme
相关产品推荐
相关产品推荐

