首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言指標陣列排序與統計錯誤修正

     編輯:程式設計綜合問答

原程式碼問題

  • max/min 函式邏輯錯誤:嘗試用指標冒泡排序副作用修改原陣列,且回傳 a[8] 越界(索引 0-7)。
  • aver 函式指標運算 c < c+8 無意義,應用索引迴圈。
  • 主程式先呼叫統計函式,再排序,導致統計結果基於未排序資料;且排序後列印未加空格分隔。

修正版程式碼

#include <stdio.h>

int max(int *a, int n) {
    int m = a[0];
    for (int i = 1; i < n; i++) if (a[i] > m) m = a[i];
    return m;
}
int min(int *a, int n) {
    int m = a[0];
    for (int i = 1; i < n; i++) if (a[i] < m) m = a[i];
    return m;
}
float aver(int *a, int n) {
    long sum = 0;
    for (int i = 0; i < n; i++) sum += a[i];
    return (float)sum / n;
}
void bubble_sort(int *a, int n) {
    for (int i = 0; i < n-1; i++)
        for (int j = 0; j < n-1-i; j++)
            if (a[j] > a[j+1]) {
                int t = a[j]; a[j] = a[j+1]; a[j+1] = t;
            }
}

int main() {
    int a[8];
    printf("please type eight num: ");
    for (int i = 0; i < 8; i++) scanf("%d", &a[i]);

    printf("max=%d min=%d aver=%.2f\n", max(a,8), min(a,8), aver(a,8));

    bubble_sort(a, 8);
    for (int i = 0; i < 8; i++) printf("%d ", a[i]);
    printf("\n");
    return 0;
}

關鍵修正點

  1. 統計函式改為純計算,不修改原陣列,傳入長度參數提高復用性。
  2. 排序獨立函式 bubble_sort,邏輯清晰。
  3. 平均值回傳 float,格式化輸出 %.2f。
  4. scanf 使用 %d 配合 &a[i],移除原碼 scanf_s 非標準用法。

良好的函式設計:單一職責、不改輸入、參數化長度,能大幅降低邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved