常見錯誤與修正要點
- 資料型別不一致:
float 陣列配合 %lf/double 計算,避免精度損失。
- 變數未初始化:
s (方差累加) 必須歸零。
- 輸入格式:
float 讀取用 %f,double 用 %lf。
- 方差公式:
σ² = Σ(xi - μ)² / n,最後須除以 n。
- 輸出格式:浮點數用
%.2f,非 %d。
修正後完整程式碼
#include <stdio.h>
#include <math.h>
int main()
{
int n;
printf("輸入資料筆數 (≤100): ");
if (scanf("%d", &n) != 1 || n <= 0 || n > 100) return 1;
double a[100], sum = 0.0;
for (int i = 0; i < n; i++) {
printf("第 %d 個: ", i+1);
scanf("%lf", &a[i]);
sum += a[i];
}
double max = a[0], min = a[0];
for (int i = 1; i < n; i++) {
if (a[i] > max) max = a[i];
if (a[i] < min) min = a[i];
}
double mean = sum / n;
double var_sum = 0.0;
for (int i = 0; i < n; i++) {
double diff = a[i] - mean;
var_sum += diff * diff; // 比 pow() 更快且精確
}
double variance = var_sum / n;
printf("最大值: %.2f\n", max);
printf("最小值: %.2f\n", min);
printf("平均值: %.2f\n", mean);
printf("方差: %.2f\n", variance);
return 0;
}