C言語プログラミング課題:関数とアルゴリズムの実装演習

1. スコア判定プログラム

成績評価を行う関数を実装します。switch文を利用してスコアの階級分けを行います。

#include <stdio.h>

char get_grade(int score) {
    switch (score / 10) {
        case 10: case 9: return 'A';
        case 8: return 'B';
        case 7: return 'C';
        case 6: return 'D';
        default: return 'F';
    }
}

int main() {
    int score;
    while (scanf("%d", &score) != EOF) {
        printf("スコア: %d, 等級: %c\n", score, get_grade(score));
    }
    return 0;
}

2. 各桁の合計計算

数値の各桁の合計を求める処理を反復(ループ)構造で実装します。

int calculate_digit_sum(int num) {
    int sum = 0;
    while (num != 0) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

3. 冪乗(べきじょう)の計算

分割統治法を用いて、指数計算を効率的に行います。

int power(int base, int exp) {
    if (exp == 0) return 1;
    if (exp % 2 == 1) return base * power(base, exp - 1);
    int half = power(base, exp / 2);
    return half * half;
}

4. 双子素数の抽出

100以内の双子素数(差が2である素数のペア)を探し出します。

int is_prime(int n) {
    if (n < 2) return 0;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) return 0;
    }
    return 1;
}

void find_twin_primes(int limit) {
    for (int i = 2; i <= limit - 2; i++) {
        if (is_prime(i) && is_prime(i + 2)) {
            printf("%d, %d\n", i, i + 2);
        }
    }
}

5. パスカルの三角形(組み合わせ計算)

再帰を用いて組み合わせ $nCr$ を計算します。

int combination(int n, int r) {
    if (r == 0 || r == n) return 1;
    if (r > n) return 0;
    return combination(n - 1, r) + combination(n - 1, r - 1);
}

6. 最大公約数の探索

複数の引数を受け取り、その最小値に注目して公約数を求めるアルゴリズムです。

int get_gcd_logic(int a, int b, int c) {
    int min_val = (a < b) ? (a < c ? a : c) : (b < c ? b : c);
    // 指定されたロジックに基づく実装
    return min_val; 
}

7. グラフィカルな出力処理

指定された階層数に応じて、図形を描画する関数群です。

void print_shapes(int layers) {
    for (int i = 0; i < layers; i++) {
        int count = (2 * (layers - i)) - 1;
        // インデントと各パーツの表示
        for(int j=0; j<i; j++) printf("\t");
        for(int k=0; k<count; k++) printf(" O\t");
        printf("\n");
    }
}

タグ: C Algorithm Recursion math

5月24日 02:15 投稿