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

C語言經典練習:素數判斷與矩形法求定積分

     編輯:C 語言問答

C語言基礎算法實戰:素數判斷與數值積分

在C語言學習初期,編寫判斷素數的函數以及用矩形法計算定積分是兩個非常經典的練習題目。它們不僅能鍛煉循環與函數的使用,還能加深對數學邏輯轉化為代碼的理解。

一、素數判斷函數的實現

素數(質數)是指在大於1的自然數中,除了1和它本身以外沒有其他因數的數。編寫一個函數 prime(int n) 來判斷輸入整數是否為素數,核心思路是試除法:只需檢查從2到 sqrt(n) 之間的整數是否能整除 n。

代碼示例

#include <stdio.h>
#include <math.h>

int prime(int n) {
    if (n <= 1) return 0; // 1及以下非素數
    int i;
    for (i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) return 0; // 能整除,說明是合數
    }
    return 1; // 沒有找到因數,是素數
}

int main() {
    int num;
    printf("請輸入一個整數: ");
    scanf("%d", &num);
    
    if (prime(num))
        printf("%d 是素數\n", num);
    else
        printf("%d 不是素數(或小於等於1)\n", num);
        
    return 0;
}

關鍵點:循環條件 i <= sqrt(n) 大幅減少迭代次數;函數返回 1 表示素數,0 表示非素數,邏輯清晰。

二、矩形法求定積分

定積分 ∫[a,b] f(x) dx 可用數值方法逼近。矩形法(又稱黎曼和)將區間 [a,b] 等分為 n 份,寬度 h = (b-a)/n,第 k 個矩形高度為 f(a + k*h),面積和即為積分近似值。

模塊化設計

題目要求將被積函數 f(x)、積分函數 sab(a,b,n) 以及主函數分離:

  • file1.c:定義 double f(double x)(如 return x*x;)與 double sab(double a, double b, int n)。
  • main.c:包含主函數,調用 sab 並輸出結果。

核心代碼片段

// file1.c
double f(double x) {
    return x * x; // 例:f(x) = x^2
}

double sab(double a, double b, int n) {
    double h = (b - a) / n;
    double sum = 0.0;
    for (int k = 1; k <= n; k++) {
        sum += f(a + k * h);
    }
    return sum * h;
}

// main.c
#include <stdio.h>
extern double sab(double a, double b, int n); // 外部聲明

int main() {
    double a, b; int n;
    printf("輸入積分下限、上限、等分數: ");
    scanf("%lf %lf %d", &a, &b, &n);
    printf("積分近似值 = %lf\n", sab(a, b, n));
    return 0;
}

編譯時需將兩文件連接:gcc main.c file1.c -o integral -lm。

三、選擇排序實現一維數組排序

選擇排序基本思想:每輪從無序區選出最小(或最大)元素,與無序區首位交換。時間複雜度 O(n²),適合小規模數據教學。

void selection_sort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        int min_idx = i;
        for (int j = i+1; j < n; j++)
            if (arr[j] < arr[min_idx]) min_idx = j;
        if (min_idx != i) {
            int tmp = arr[i]; arr[i] = arr[min_idx]; arr[min_idx] = tmp;
        }
    }
}

主函數中初始化數組、調用排序、打印結果即可驗證。

總結

這三個練習涵蓋了函數封裝、數學建模、模塊化編譯、數組操作等C語言核心技能。建議動手敲代碼、單步調試,體會邏輯與語法的結合。

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