#include <stdio.h>
int main(void) {
printf("九九乘法表\n");
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%-3d", j, i, i * j);
}
putchar('\n');
}
return 0;
}
重點:巢狀迴圈、%-3d 左對齊固寬輸出、putchar 單字元輸出效率高。
#include <stdio.h>
#include <stdbool.h>
bool isPrime(int n);
void printPrimes(int low, int high);
int main(void) {
printf("100 以內質數:\n");
printPrimes(2, 100);
putchar('\n');
return 0;
}
void printPrimes(int low, int high) {
for (int i = low; i <= high; i++) {
if (isPrime(i)) printf("%d ", i);
}
}
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
| 概念 | 說明 |
|---|---|
| 函數原型宣告 | 在 main 前宣告,支援分離編譯 |
| 布林型別 | C99 <stdbool.h> 提供 bool/true/false |
| 試除法優化 | 只需測試至 √n,i*i <= n 避免浮點 |
| 模組化原則 | 單一職責:判斷邏輯與列印分離,利於測試與複用 |
void sieve(int n) {
bool *isPrime = calloc(n + 1, sizeof(bool));
for (int i = 2; i <= n; i++) isPrime[i] = true;
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) {
for (int mult = p * p; mult <= n; mult += p)
isPrime[mult] = false;
}
}
for (int i = 2; i <= n; i++)
if (isPrime[i]) printf("%d ", i);
free(isPrime);
}
時間複雜度 O(n log log n),遠優於試除法 O(n√n),適合大範圍質數生成。