【C言語】数値が7の倍数か判定するプログラムを解説

この記事では、C言語を使って数値が7の倍数かどうかを判定するプログラムを作成する方法を解説します。

基本的な演算子や条件分岐の使い方から始め、実際のプログラムの作成手順、さらに応用例やよくあるエラーの対処法まで、初心者でも理解しやすいように丁寧に説明します。

目次から探す

C言語での基本的な演算子

C言語では、数値の計算や比較を行うためにさまざまな演算子が用意されています。

この記事では、数値が7の倍数かどうかを判定するプログラムを作成するために必要な基本的な演算子について解説します。

剰余演算子(%)の使い方

剰余演算子(%)は、2つの整数を割り算したときの余りを求めるために使用されます。

例えば、10を3で割った余りは1です。

この演算子を使うことで、ある数値が特定の数値の倍数であるかどうかを簡単に判定することができます。

以下に、剰余演算子の基本的な使い方を示します。

#include <stdio.h>
int main() {
    int a = 10;
    int b = 3;
    int remainder = a % b; // 10を3で割った余りを計算
    printf("%d %% %d の余りは %d です。\n", a, b, remainder);
    return 0;
}

このプログラムを実行すると、次のような出力が得られます。

10 % 3 の余りは 1 です。

このように、剰余演算子を使うことで簡単に余りを求めることができます。

7の倍数かどうかを判定する場合、数値を7で割った余りが0であれば、その数値は7の倍数であると言えます。

条件分岐(if文)の基本

条件分岐は、プログラムの実行を特定の条件に基づいて制御するための重要な構文です。

C言語では、if文を使って条件分岐を行います。

if文の基本的な構文は以下の通りです。

if (条件) {
    // 条件が真の場合に実行されるコード
} else {
    // 条件が偽の場合に実行されるコード
}

具体的な例を見てみましょう。

以下のプログラムは、入力された数値が正の数か負の数かを判定します。

#include <stdio.h>
int main() {
    int num;
    printf("数値を入力してください: ");
    scanf("%d", &num);
    if (num > 0) {
        printf("入力された数値は正の数です。\n");
    } else if (num < 0) {
        printf("入力された数値は負の数です。\n");
    } else {
        printf("入力された数値は0です。\n");
    }
    return 0;
}

このプログラムを実行すると、ユーザーが入力した数値に応じて異なるメッセージが表示されます。

数値を入力してください: 5
入力された数値は正の数です。
数値を入力してください: -3
入力された数値は負の数です。
数値を入力してください: 0
入力された数値は0です。

このように、if文を使うことでプログラムの実行を条件に基づいて制御することができます。

次のセクションでは、これらの基本的な演算子と条件分岐を組み合わせて、数値が7の倍数かどうかを判定するプログラムを作成します。

プログラムの作成

ここでは、数値が7の倍数かどうかを判定するプログラムを実際に作成していきます。

プログラムの基本的な流れは以下の通りです。

  1. 変数の宣言と初期化
  2. 入力の受け取り
  3. 7の倍数かどうかの判定
  4. 結果の出力

変数の宣言と初期化

まずは、プログラムで使用する変数を宣言し、必要に応じて初期化します。

ここでは、ユーザーから入力された数値を格納するための変数を用意します。

#include <stdio.h>
int main() {
    int number; // ユーザーから入力された数値を格納する変数

入力の受け取り

次に、ユーザーから数値を入力してもらいます。

scanf関数を使用して、標準入力から数値を受け取ります。

printf("数値を入力してください: ");
    scanf("%d", &number); // 入力された数値をnumber変数に格納

7の倍数かどうかの判定

入力された数値が7の倍数かどうかを判定するために、剰余演算子(%)を使用します。

数値を7で割った余りが0であれば、その数値は7の倍数です。

if (number % 7 == 0) {
        // 7の倍数である場合の処理
        printf("%dは7の倍数です。\n", number);
    } else {
        // 7の倍数でない場合の処理
        printf("%dは7の倍数ではありません。\n", number);
    }

結果の出力

最後に、判定結果を出力します。

上記の条件分岐で、7の倍数であるかどうかに応じて適切なメッセージを表示します。

return 0; // プログラムの終了
}

完成したプログラム

以上のステップをまとめると、以下のようなプログラムが完成します。

#include <stdio.h>
int main() {
    int number; // ユーザーから入力された数値を格納する変数
    // 入力の受け取り
    printf("数値を入力してください: ");
    scanf("%d", &number); // 入力された数値をnumber変数に格納
    // 7の倍数かどうかの判定
    if (number % 7 == 0) {
        // 7の倍数である場合の処理
        printf("%dは7の倍数です。\n", number);
    } else {
        // 7の倍数でない場合の処理
        printf("%dは7の倍数ではありません。\n", number);
    }
    return 0; // プログラムの終了
}

実行結果の例

以下は、上記のプログラムを実行した際の例です。

数値を入力してください: 14
14は7の倍数です。
数値を入力してください: 15
15は7の倍数ではありません。

このように、ユーザーが入力した数値が7の倍数かどうかを簡単に判定することができます。

次に、応用例として複数の数値を判定する方法や関数を使ったリファクタリングについて解説します。

応用例

ここでは、基本的な7の倍数判定プログラムを応用して、複数の数値を一度に判定する方法や、関数を使ってコードをリファクタリングする方法について解説します。

複数の数値を判定する方法

複数の数値を判定する場合、ループを使って一度に複数の入力を処理することができます。

以下に、配列を使って複数の数値を判定するプログラムの例を示します。

#include <stdio.h>
int main() {
    int numbers[] = {14, 21, 22, 35, 49}; // 判定する数値の配列
    int size = sizeof(numbers) / sizeof(numbers[0]); // 配列のサイズを計算
    for (int i = 0; i < size; i++) {
        if (numbers[i] % 7 == 0) {
            printf("%d は7の倍数です。\n", numbers[i]);
        } else {
            printf("%d は7の倍数ではありません。\n", numbers[i]);
        }
    }
    return 0;
}

このプログラムでは、配列 numbers に複数の数値を格納し、for ループを使って各数値が7の倍数かどうかを判定しています。

sizeof 演算子を使って配列のサイズを計算し、ループの範囲を決定しています。

関数を使った判定のリファクタリング

コードをより読みやすく、再利用しやすくするために、7の倍数かどうかを判定する部分を関数に分けることができます。

以下に、関数を使ったリファクタリングの例を示します。

#include <stdio.h>
// 7の倍数かどうかを判定する関数
int isMultipleOfSeven(int number) {
    return number % 7 == 0;
}
int main() {
    int numbers[] = {14, 21, 22, 35, 49}; // 判定する数値の配列
    int size = sizeof(numbers) / sizeof(numbers[0]); // 配列のサイズを計算
    for (int i = 0; i < size; i++) {
        if (isMultipleOfSeven(numbers[i])) {
            printf("%d は7の倍数です。\n", numbers[i]);
        } else {
            printf("%d は7の倍数ではありません。\n", numbers[i]);
        }
    }
    return 0;
}

このプログラムでは、isMultipleOfSeven という関数を定義し、数値が7の倍数かどうかを判定するロジックをその中に移動しました。

main 関数内では、この関数を呼び出して判定を行っています。

これにより、コードがよりシンプルで読みやすくなり、他の部分でも再利用しやすくなります。

以上で、複数の数値を判定する方法と、関数を使ったリファクタリングについての解説を終わります。

これらのテクニックを使うことで、より効率的でメンテナンスしやすいコードを書くことができます。

よくあるエラーとその対処法

C言語でプログラムを作成する際には、さまざまなエラーに遭遇することがあります。

ここでは、よくあるエラーとその対処法について解説します。

コンパイルエラー

コンパイルエラーは、プログラムをコンパイルする際に発生するエラーです。

主に文法ミスやタイプミスが原因で発生します。

以下に、よくあるコンパイルエラーの例とその対処法を紹介します。

例1: セミコロンの忘れ

#include <stdio.h>
int main() {
    int number = 10 // セミコロンがないためエラー
    printf("Number is %d\n", number);
    return 0;
}

対処法: セミコロンを追加します。

#include <stdio.h>
int main() {
    int number = 10; // セミコロンを追加
    printf("Number is %d\n", number);
    return 0;
}

例2: 宣言されていない変数の使用

#include <stdio.h>
int main() {
    printf("Number is %d\n", number); // numberが宣言されていないためエラー
    return 0;
}

対処法: 変数を宣言します。

#include <stdio.h>
int main() {
    int number = 10; // 変数を宣言
    printf("Number is %d\n", number);
    return 0;
}

実行時エラー

実行時エラーは、プログラムの実行中に発生するエラーです。

主にメモリの不正アクセスやゼロ除算などが原因で発生します。

例1: ゼロ除算

#include <stdio.h>
int main() {
    int a = 10;
    int b = 0;
    int result = a / b; // ゼロ除算のためエラー
    printf("Result is %d\n", result);
    return 0;
}

対処法: ゼロ除算を避けるためのチェックを追加します。

#include <stdio.h>
int main() {
    int a = 10;
    int b = 0;
    if (b != 0) {
        int result = a / b;
        printf("Result is %d\n", result);
    } else {
        printf("Error: Division by zero\n");
    }
    return 0;
}

例2: 配列の範囲外アクセス

#include <stdio.h>
int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    printf("Element is %d\n", arr[5]); // 配列の範囲外アクセスのためエラー
    return 0;
}

対処法: 配列の範囲内でアクセスするように修正します。

#include <stdio.h>
int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++) {
        printf("Element %d is %d\n", i, arr[i]);
    }
    return 0;
}

ロジックエラー

ロジックエラーは、プログラムが意図した通りに動作しない場合に発生するエラーです。

コンパイルエラーや実行時エラーとは異なり、プログラムは正常に動作しますが、期待した結果が得られません。

例1: 条件分岐の誤り

#include <stdio.h>
int main() {
    int number = 14;
    if (number % 7 == 1) { // 条件が誤っているためエラー
        printf("Number is a multiple of 7\n");
    } else {
        printf("Number is not a multiple of 7\n");
    }
    return 0;
}

対処法: 条件を正しく修正します。

#include <stdio.h>
int main() {
    int number = 14;
    if (number % 7 == 0) { // 条件を修正
        printf("Number is a multiple of 7\n");
    } else {
        printf("Number is not a multiple of 7\n");
    }
    return 0;
}

例2: ループの誤り

#include <stdio.h>
int main() {
    for (int i = 0; i <= 5; i++) { // ループの条件が誤っているためエラー
        printf("i is %d\n", i);
    }
    return 0;
}

対処法: ループの条件を正しく修正します。

#include <stdio.h>
int main() {
    for (int i = 0; i < 5; i++) { // ループの条件を修正
        printf("i is %d\n", i);
    }
    return 0;
}

以上が、C言語でよくあるエラーとその対処法です。

エラーが発生した際には、エラーメッセージをよく読み、原因を特定して適切に対処することが重要です。

目次から探す