C言語における基本的な入出力と条件処理の実践例

単純な文字パターンの出力

以下のコードは、特定の文字で構成されたパターンを画面に表示するものです。人型を模したアスキーアートを複数行にわたって出力しています。

#include <stdio.h>

int main() {
    printf(" 0\n");
    printf("<H>\n");
    printf("I I\n");
    return 0;
}

並列表示のための整形出力

次に、2つの同じパターンを横に並べて表示する例です。空白を利用して視覚的に分離しています。

#include <stdio.h>

int main() {
    printf(" 0    0\n");
    printf("<H>  <H>\n");
    printf("I I  I I\n");
    return 0;
}

三角形の成立条件判定

3辺の長さを入力として受け取り、それらが三角形を形成できるかを判定するプログラムです。三角不等式を利用しています。

#include <stdio.h>

int main() {
    double side1, side2, side3;
    scanf("%lf %lf %lf", &side1, &side2, &side3);

    if (side1 + side2 > side3 && 
        side1 + side3 > side2 && 
        side2 + side3 > side1) {
        printf("これらの辺は三角形を構成できます\n");
    } else {
        printf("これらの辺では三角形を作れません\n");
    }
    return 0;
}

ユーザーの学習習慣に関する対話型処理

文字入力を用いてユーザーの行動習慣を確認し、それに応じたメッセージを返すコードです。改行文字の処理に注意が必要です。

#include <stdio.h>

int main() {
    char prep, practice;

    printf("授業前に予習・後に復習していますか?(y/n): ");
    prep = getchar();
    getchar(); // 改行文字の消費

    printf("実際にコードを書いていますか?(y/n): ");
    practice = getchar();

    if ((prep == 'y' || prep == 'Y') && (practice == 'y' || practice == 'Y')) {
        printf("\n継続は力なり、その調子!\n");
    } else {
        printf("\n今からでも遅くない、一緒に頑張ろう\n");
    }
    return 0;
}

ポイント: 最初の getchar() 後にある追加の getchar() は、キーボード入力後のバッファに残る改行(\n)を読み捨てるために必要です。これを省略すると次の入力関数が即座に終了してしまいます。

異なるデータ型の連続入力処理

整数、文字、浮動小数点数を順に入力し、それぞれを正しく読み取る例です。入力バッファの管理が重要になります。

#include <stdio.h>

int main() {
    int val1, val2, val3;
    char ch1, ch2, ch3;
    double num1, num2;

    scanf("%d %d %d", &val1, &val2, &val3);
    printf("整数: %d, %d, %d\n", val1, val2, val3);

    scanf(" %c %c %c", &ch1, &ch2, &ch3); // スペースを入れて前後の空白を無視
    printf("文字: %c, %c, %c\n", ch1, ch2, ch3);

    scanf("%lf %lf", &num1, &num2);
    printf("実数: %.2f, %.2f\n", num1, num2);

    return 0;
}

時間換算:秒から年へ

10億秒が何年に相当するかを計算するプログラム。丸め処理も含んでいます。

#include <stdio.h>

int main() {
    double secondsPerYear = 31536000.0; // 1年 = 365日
    double totalSeconds = 1000000000.0;
    double years = totalSeconds / secondsPerYear;
    int roundedYears;

    if (years - (int)years >= 0.5) {
        roundedYears = (int)years + 1;
    } else {
        roundedYears = (int)years;
    }

    printf("10億秒は約%d年です\n", roundedYears);
    return 0;
}

累乗計算の繰り返し処理

ユーザーが入力した数値を365乗するループ処理。EOFで終了します。

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

int main() {
    double base, result;
    while (scanf("%lf", &base) != EOF) {
        result = pow(base, 365);
        printf("%.2f の365乗: %.2f\n\n", base, result);
    }
    return 0;
}

摂氏から華氏への温度変換

繰り返し入力に対応した温度単位変換ツール。

#include <stdio.h>

int main() {
    double celsius, fahrenheit;
    while (scanf("%lf", &celsius) != EOF) {
        fahrenheit = (9.0 * celsius) / 5.0 + 32;
        printf("摂氏%.2f度 → 華氏%.2f度\n", celsius, fahrenheit);
    }
    return 0;
}

ヘロンの公式による面積計算

3辺の長さから三角形の面積を求めるプログラム。数学ライブラリを使用します。

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

int main() {
    int x, y, z;
    double perimeter, area;

    while (scanf("%d %d %d", &x, &y, &z) != EOF) {
        perimeter = (x + y + z) / 2.0;
        area = sqrt(perimeter * (perimeter - x) * (perimeter - y) * (perimeter - z));
        printf("x=%d,y=%d,z=%d,面積=%.3f\n", x, y, z, area);
    }
    return 0;
}

タグ: C言語 標準入出力 条件分岐 ループ処理 数学関数

5月27日 14:15 投稿