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

C語言陣列經典練習題精選:南開大學上機題 35 題完整解析

     編輯:C 語言問答

題庫來源與價值

原內容來自 2006 年南開大學上機考試題庫,涵蓋一維陣列、二維陣列、字串、指標、結構體、鏈結串列等核心考點,共 35 題,是 C 語言陣列操作與演算法思維的經典訓練集。

題目分類與核心考點對照

類別題號核心考點關鍵技術
一維陣列統計/篩選1, 2, 3, 27平均值篩選、條件篩選、因數查找、7/11 整除陣列遍歷、計數器、模運算
4, 29字母頻率統計、奇數位大寫轉換ctype.h、ASCII 碼運算、字串遍歷
20, 30素數篩選、二維陣列最大值試除法素數判定、巢狀迴圈
字串操作5, 17, 19, 21, 31, 32, 33, 35, 36字串反轉、刪除指定字元、ASCII 碼排序、回文判斷、字串轉整數、比較長度、前導/尾部星號處理、刪除空格指標遍歷、雙指標、strlen/strcpy、isalpha/isdigit
24, 25字串轉長整數、比較字串長度(不得用庫函數)手寫 atoi/strlen、指標算術
二維陣列/矩陣11, 12, 13, 14, 18, 30左下三角歸零、周邊平均/求和、每列最小值、矩陣轉置、2×M 最大值索引邊界控制、i,j 關係、對角線判斷
8, 9, 10, 26級數求和、組合數、迭代法解方程、π 級數逼近累加器、階乘遞推、牛頓迭代/定點迭代、級數收斂判斷
進階資料結構15, 16緊鄰素數、保留兩位小數四捨五入素數生成、定點運算技巧
22, 23, 28, 34鏈結串列最大值、回文判斷、一維陣列最大值索引、結構體陣列最高分統計鏈結串列遍歷、指標操作、結構體陣列

精選經典題目深度解析

題 1:低於平均分統計(一維陣列基礎)


// 正確版:修正原答案邊界與型別
int fun(int score[], int m, int below[]) {
    if (m <= 0) return 0;
    long sum = 0;  // 防止加總溢位
    for (int i = 0; i < m; ++i) sum += score[i];
    int avg = sum / m;
    int k = 0;
    for (int i = 0; i < m; ++i) {
        if (score[i] < avg) below[k++] = score[i];
    }
    return k;
}

題 10:迭代法解 cos(x) - x = 0(數值分析經典)


#include <math.h>
float fun() {
    float x1 = 0.0f, x0;
    do {
        x0 = x1;
        x1 = cosf(x0);  // 單精度版本
    } while (fabsf(x0 - x1) > 1e-6f);
    return x1;  // 約 0.739085
}

收斂條件:|x_{n+1} - x_n| < ε,此處固定點迭代 x = cos(x) 在 [0,1] 收斂。

題 18:3×3 矩陣轉置(原地演算法)


void transpose(int a[3][3]) {
    for (int i = 0; i < 3; ++i)
        for (int j = i + 1; j < 3; ++j) {  // 只遍歷上三角,避免重複交換
            int tmp = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = tmp;
        }
}

題 26:級數求 π(數學之美)


/*
π/2 = 1 + 1/3 + (1×2)/(3×5) + (1×2×3)/(3×5×7) + ...
項遞推:t_n = t_{n-1} * n/(2n+1)
*/
double compute_pi(double eps) {
    double sum = 1.0, term = 1.0;
    for (int n = 1; fabs(term) >= eps; ++n) {
        sum += term;
        term *= (double)n / (2 * n + 1);
    }
    return sum * 2;
}

題 34:結構體陣列最高分統計(多欄位資料處理)


typedef struct { int id; int score; } Student;

int top_students(Student *a, Student *b, int n) {
    if (n <= 0) return 0;
    int max_score = a[0].score;
    for (int i = 1; i < n; ++i)
        if (a[i].score > max_score) max_score = a[i].score;
    int k = 0;
    for (int i = 0; i < n; ++i)
        if (a[i].score == max_score) b[k++] = a[i];
    return k;
}

原答案常見錯誤修正

題號原答案問題修正要點
4case 'n': pp[12]++; 重複,漏 'm'完整 26 個 case,或用 pp[ch-'a']++
7for(i=0;i<t;i++) 應 i<t,I vs i 混淆統一小寫 i,邊界 i<n
11for(j=0;j<=I;j++) 應 j<=i(左下含對角線)左下三角:j <= i
18for(j=0;j<I,j++) 逗號運算子錯誤j < i 只交換上三角
20素數判定邏輯錯誤,j>=i 條件錯置試除至 sqrt(i),旗標法
22鏈結串列 do-while 缺少 q=q->next 更新標準遍歷模式
24字串轉整數算法效率低(重複乘 10)霍納法則:result = result*10 + (ch-'0')
37結構體 p->s[i] 但定義未見 s 陣列補全結構體定義

高效練習策略

  1. 分類攻克:按上表類別,每類先做 2-3 題掌握模式,再挑戰變體。
  2. 手寫不複製:每題必須在編輯器完整輸入、編譯、測試、除錯。
  3. 邊界測試:空陣列、單元素、最大長度、負數、重複值、已排序/逆序。
  4. 重構優化:AC 後嘗試:少一個迴圈、不用額外陣列、指標版、遞迴版、泛型 void* 版。
  5. 對照標準庫:理解 qsort、bsearch、memmove 如何解決同類問題。

推薦進階題庫

  • LeetCode Array/Two Pointers/String 標籤(Easy → Medium)
  • 《程式設計珠玑》第 2 版(Jon Bentley)陣列/字串章節
  • 《C 陷阱與缺陷》陣列/指標相關條目
  • 南開/清華/浙大等高校上機題庫(GitHub 搜尋 C programming exam)
  • 總結

    這 35 題涵蓋了 C 語言陣列操作的 遍歷、統計、篩選、排序、矩陣運算、字串處理、指標技巧、數值計算、資料結構雛形 等核心能力。系統性完成並深度理解每題的邊界條件、演算法複雜度、標準庫替代方案,可構建扎實的 C 語言工程基礎。

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