C言語プログラミング演習問題集

プログラミング問題と解説

問題1: 再帰関数の呼び出し回数

#include <stdio.h>
int count = 0;

int fibonacci(int num) {
    count++;
    if (num == 0) return 1;
    if (num == 1) return 2;
    return fibonacci(num - 1) + fibonacci(num - 2);
}

int main() {
    fibonacci(8);
    printf("%d", count);
    return 0;
}

実行結果: 67

問題2: do-whileループの挙動

int num = 1;
do {
    printf("%2d\n", num++);
} while(num--);

実行結果: 無限ループ

問題3: インクリメント演算子の評価順序

int val1 = 1;
int val2;
val2 = val1++;

実行後の値: val1=2, val2=1

問題4: 複合代入演算子の計算

int x = 10;
int y = 20;
int z = 3;
z *= x + y;

最終的なzの値: 90

問題5: 変数のスコープ

#include <stdio.h>
int global_val = 1;

void test_func() {
    int local_val = 2;
    local_val += 1;
}

int main() {
    test_func();
    printf("%d\n", global_val);
    return 0;
}

出力結果: 1

問題6: do-whileループの実行回数

int val_a = 0, val_c = 0;
do {
    --val_c;
    val_a = val_a - 1;
} while(val_a > 0);

実行後のval_cの値: -1

問題7: データ型と除算

double d1 = 2;
double d2 = d1 + 3/2;

実行後のd2の値: 3.000000

問題8: forループの実行回数

for(int i = 0, j = 0; (j = 123) && (i < 4); i++);

ループ実行回数: 4

問題9: ポインタ演算

int year = 1009;
int *ptr = &year;

yearを1010に増加できない式: *ptr++

問題10: ビット演算

int result = 11 | 10;

実行結果: 11

問題11: データ型の自動変換

char c; int i; float f; double d;

式 c*i+d-f の結果の型: double

最小公倍数の計算

#include <stdio.h>
int main() {
    long long a, b;
    scanf("%lld %lld", &a, &b);
    long long i = 1;
    while (i * a % b != 0) {
        i++;
    }
    printf("%lld", i * a);
    return 0;
}

文字列入力の方法

#include <stdio.h>
int main() {
    char str[100] = {0};
    int index = 0;
    int ch;
    while ((ch = getchar()) != '\n') {
        str[index++] = ch;
    }
    printf("%s", str);
    return 0;
}

文字列の単語逆順処理

#include <stdio.h>
#include <string.h>

void reverse_chars(char *left, char *right) {
    while (left < right) {
        char temp = *left;
        *left = *right;
        *right = temp;
        left++;
        right--;
    }
}

int main() {
    char text[100] = {0};
    gets(text);
    
    int length = strlen(text);
    reverse_chars(text, text + length - 1);
    
    char *current = text;
    while (*current) {
        char *start = current;
        while (*current != ' ' && *current != '\0') {
            current++;
        }
        char *end = current - 1;
        reverse_chars(start, end);
        if (*current == ' ') current++;
    }
    
    printf("%s", text);
    return 0;
}

タグ: C言語 プログラミング 演習問題 再帰関数 ポインタ

6月27日 20:33 投稿