首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言基礎練習:陣列尋找最大值(含輸入覆蓋陷阱)

     編輯:關於C

原始碼問題

int arr[10] = {1,22,30,4,51,6,7,81,9,10};
for(i=1;i<10;i++) scanf("%d",&arr[i]); // 覆蓋初始值!
max=arr[0];
for(i=1;i<10;i++) if(max

scanf 迴圈從 i=1 開始,覆蓋了 arr[1]~arr[9],只剩 arr[0]=1 是初始值。若輸入同樣數字,輸出 81 僅是巧合。

正確版本:分離初始化與輸入

#include 
int main() {
    int arr[10];
    int n = sizeof(arr)/sizeof(arr[0]);
    
    // 方式一:靜態初始化 (無輸入)
    // int arr[10] = {1,22,30,4,51,6,7,81,9,10};
    
    // 方式二:鍵盤輸入
    printf("請輸入 %d 個整數:", n);
    for (int i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    
    // 尋找最大值
    int max = arr[0];
    for (int i = 1; i < n; i++)
        if (arr[i] > max) max = arr[i];
    
    printf("最大值:%d\n", max);
    return 0;
}

進階:通用尋找最大值函式

int find_max(const int *arr, size_t n) {
    if (n == 0) return INT_MIN; // 或錯誤碼
    int max = arr[0];
    for (size_t i = 1; i < n; i++)
        if (arr[i] > max) max = arr[i];
    return max;
}

教學重點

  • 陣列初始化與輸入互斥,勿混淆。
  • 迴圈邊界:i=0; i 或 i=1; i (配合 max=arr[0])。
  • 空陣列防禦:n==0 情況處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved