題目要求:輸入 30 個數字存入陣列,輸出最大值、最小值、總和與平均值。
#include <stdio.h>
int main() {
int i, n = 30;
float max, min, sum = 0, num[30];
printf("請輸入 30 個數字,每輸入一個按 Enter 確認:\n");
for (i = 0; i < n; i++) {
scanf("%f", &num[i]);
sum += num[i];
}
max = min = num[0];
for (i = 1; i < n; i++) {
if (max < num[i]) max = num[i];
else if (min > num[i]) min = num[i];
}
printf("最大值: %.2f\n", max);
printf("最小值: %.2f\n", min);
printf("總和: %.2f\n", sum);
printf("平均值: %.2f\n", sum / n);
return 0;
}
float num[30]; 宣告 30 個浮點數陣列,索引 0~29。scanf("%f", &num[i]); 必須取址 &,將輸入值存入陣列對應位置,同時累加總和。max = min = num[0]; 以第一個元素為基準,避免未初始化比較錯誤。%.2f 保留兩位小數,提升可讀性。| 錯誤 | 後果 | 修正 |
|---|---|---|
scanf("%f", num[i]); 缺少 & | 程式崩潰 (Segmentation Fault) | 必須 &num[i] 傳遞記憶體位址 |
| max/min 初始化為 0 或極大值 | 若輸入全負數或全正數會得到錯誤結果 | 初始化為 num[0] |
使用 int 儲存浮點輸入 | 截斷小數部分 | 宣告 float 或 double |
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 30;
float *num = (float*)malloc(n * sizeof(float));
if (!num) return 1;
float max, min, sum = 0;
// ... 輸入與計算邏輯相同 ...
free(num);
return 0;
}
動態分配適合「執行期才知道陣列大小」的情境,記得 free() 釋放記憶體。