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

C 語言基礎考試題庫 15 題完整解析與標準答案

     編輯:關於C

題庫概覽

#題目核心知識點
1最大公約數/最小公倍數輾轉相除法 (歐幾里得演算法)
2大小寫字母統計字元分類、ASCII 碼範圍
3a+aa+aaa... 疊加求和迴圈累積、位移運算思維
4階乘累加 1!+2!+...+n!迴圈遞推計算階乘
5質數判斷函數試除法、優化至 sqrt(n)
6三角形面積 (海倫公式)結構體、三角不等式、海倫公式
7圓重疊判斷結構體、兩點距離公式、半徑和比較
8字串凱薩加密字元循環位移、邊界處理
910 數最大/最小值單次掃描雙變數追蹤
10野指標錯誤分析區域變數生命週期、指標懸空
11三點構成三角形面積點結構體、距離公式、海倫公式
12印出 100 個質數質數判斷函數複用、計數器控制
1310 數平均值累加求和、浮點數除法
14交錯級數 1-2+3-4...+100奇偶判斷、累加器正負切換
15分數級數 1/2+2/3+...+n/(n+1)整數除法陷阱、需轉浮點數

精選題目標準解法

題目 1:輾轉相除法 (GCD/LCM)

int gcd(int a, int b) {
    while (b != 0) {
        int r = a % b;
        a = b;
        b = r;
    }
    return a;
}

int lcm(int a, int b) {
    return a / gcd(a, b) * b; // 先除後乘防溢位
}

題目 5/12:質數判斷與列印

int isPrime(int x) {
    if (x < 2) return 0;
    for (int i = 2; i * i <= x; i++) { // 優化:只需檢查至 sqrt(x)
        if (x % i == 0) return 0;
    }
    return 1;
}

// 印前 100 個質數
void printFirst100Primes() {
    int count = 0, num = 2;
    while (count < 100) {
        if (isPrime(num)) {
            printf("%d ", num);
            count++;
        }
        num++;
    }
}

題目 6/11:三角形面積 (結構體版)

typedef struct { double x, y; } Point;
typedef struct { double a, b, c; } Triangle;

double triangleArea(Triangle t) {
    if (t.a + t.b <= t.c || t.a + t.c <= t.b || t.b + t.c <= t.a)
        return -1; // 無法構成三角形
    double s = (t.a + t.b + t.c) / 2;
    return sqrt(s * (s - t.a) * (s - t.b) * (s - t.c));
}

double triangleAreaFromPoints(Point p1, Point p2, Point p3) {
    double a = hypot(p1.x - p2.x, p1.y - p2.y);
    double b = hypot(p1.x - p3.x, p1.y - p3.y);
    double c = hypot(p2.x - p3.x, p2.y - p3.y);
    Triangle t = {a, b, c};
    return triangleArea(t);
}

題目 7:圓重疊判斷

typedef struct { double x, y, r; } Circle;

int circlesOverlap(Circle c1, Circle c2) {
    double dx = c1.x - c2.x;
    double dy = c1.y - c2.y;
    double dist = sqrt(dx*dx + dy*dy);
    return dist < (c1.r + c2.r); // 嚴格小於:相切不算重疊
}

題目 8:字串加密 (凱薩密碼變體)

void encrypt(char *str) {
    for (int i = 0; str[i]; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            str[i] = (str[i] == 'z') ? 'a' : str[i] + 1;
        } else if (str[i] >= 'A' && str[i] <= 'Z') {
            str[i] = (str[i] == 'Z') ? 'A' : str[i] + 1;
        }
    }
}

題目 10:野指標經典錯誤

int *p;
{
    int a = 10; // 區塊結束時 a 被銷毀
    p = &a;
}
*p = 20; // 錯誤!p 指向已釋放的棧記憶體 → 未定義行為

修正:使用動態記憶體 p = malloc(sizeof(int)) 或延長變數生命週期。

題目 15:整數除法陷阱

// 錯誤:整數除法截斷
int sum = 0;
for (int i = 1; i <= n; i++) sum += i / (i + 1); // 全部為 0!

// 正確:轉浮點數
double sum = 0.0;
for (int i = 1; i <= n; i++) sum += (double)i / (i + 1);

通用最佳實踐模式

模式程式碼範本適用題目
單次掃描統計for(i=0; str[i]; i++) { if(cond) cnt++; }2, 9, 18
輾轉相除while(b){ r=a%b; a=b; b=r; }1
試除法質數for(i=2; i*i<=n; i++) if(n%i==0) return 0;5, 12
海倫公式s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c))6, 11
雙指標交換temp=p[n]; p[n]=p[m]; p[m]=temp;14
陣列前移刪除for(j=i; j10, 12

考試高分技巧

  1. 讀題圈關鍵字:「正整數」、「不超過 10」、「海倫公式」、「輾轉相除法」
  2. 先寫函數原型:模組化思維,主函數只負責 I/O 與流程
  3. 邊界測試:n=0, n=1, 最大值、最小值、非法輸入
  4. 防溢位:LCM 先除後乘、階乘用 long long 或 double
  5. 整數除法警惕:涉及分數必須轉 double/float

結語

這 15 道題精準覆蓋 C 語言基礎考試的高頻考點:演算法實作 (GCD、質數、海倫)、字元/字串處理、結構體應用、指標陷阱、數值計算陷阱。掌握上述通用模式與邊界思維,配合標準庫函數 (sqrt, hypot, strtok) 靈活運用,即能高效解決同類問題。

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