【初心者向け】C言語の基本構文まとめ|これだけは押さえておきたい書き方のルール

C言語

「C言語を勉強したいけど、なんだか難しそう…」と思っていませんか?

確かにC言語は、PythonやJavaScriptと比べると、書き方のルールが厳しく感じるかもしれません。

でも実は、C言語の書き方のルール(基本構文)は、とてもシンプルで理にかなっているのです。

C言語をマスターすると、こんな良いことがあります:

  • 他のプログラミング言語が理解しやすくなる(JavaやC++など多くの言語がC言語の影響を受けている)
  • コンピューターの仕組みが深く理解できる
  • 組み込みシステムやOS開発などの分野で活躍できる
  • プログラミングの基礎力がしっかり身につく

この記事では、「プログラミング初めて」という方でも、C言語の基本構文がしっかり理解できるように、身近な例を使って一つずつ丁寧に説明します。

スポンサーリンク
  1. C言語の基本構造を理解しよう
    1. 最初に見る「Hello, World!」
    2. コードを分解して理解しよう
    3. なぜこの書き方なの?
  2. ライブラリの読み込み:include文の使い方
    1. includeって何?
    2. よく使うライブラリ一覧
    3. 実際の使用例
    4. includeを忘れるとどうなる?
  3. main関数:プログラムの心臓部
    1. main関数の役割
    2. main関数の基本的な書き方
    3. いろんなパターンのmain関数
    4. return文の重要性
    5. 実際のプログラム例
  4. 画面表示と入力:printfとscanf
    1. printf:画面に表示する魔法の関数
    2. 基本的なprintfの使い方
    3. 特別な文字(エスケープシーケンス)
    4. 書式指定子(フォーマット指定子)
    5. scanf:ユーザーからの入力を受け取る
    6. なぜ&マークが必要なの?
    7. いろんなデータを入力してもらう
    8. scanfを使うときの注意点
  5. 変数とデータ型:データの保存ルール
    1. 変数って何?
    2. C言語の変数の特徴
    3. 主要なデータ型
    4. 変数の宣言と初期化
    5. 実際のプログラム例
    6. 変数名のルール
    7. 変数の値を変更する
    8. データ型の使い分けのコツ
  6. 条件分岐:プログラムに判断させよう
    1. if文:もしも〜なら
    2. 基本的なif文の書き方
    3. if-else文:そうでなければ
    4. 複数の条件:else if文
    5. 比較演算子
    6. 論理演算子で複数の条件を組み合わせる
    7. 実用的な例:簡単な年齢判定システム
  7. 繰り返し処理:同じことを何度もさせよう
    1. なぜ繰り返し処理が必要?
    2. for文:決まった回数繰り返す
    3. for文の仕組みを詳しく解説
    4. いろんなfor文のパターン
    5. while文:条件が成り立つ間繰り返す
    6. do-while文:最低1回は実行する
    7. 実用的な例:九九の表を作る
    8. ループ制御:break と continue
  8. コメント:コードを読みやすくしよう
    1. コメントって何?なぜ必要?
    2. なぜコメントが大切なの?
    3. コメントの書き方
    4. 良いコメントの例
    5. 悪いコメントの例
    6. 実用的なコメントの例
    7. コメントを書くタイミング
  9. まとめ

C言語の基本構造を理解しよう

最初に見る「Hello, World!」

プログラミングを学ぶときの定番、「Hello, World!」をC言語で書いてみましょう:

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}

実行結果

Hello, World!

「うわ、いきなり複雑…」と思うかもしれませんが、実は一つずつ見ると、とてもシンプルなのです。

コードを分解して理解しよう

1行目:#include <stdio.h>

  • 「標準入出力の機能を使えるようにしてください」という お願い
  • まるで図書館で本を借りるときの「利用カード」のようなもの
  • printf(画面に表示)を使うために必要

3行目:int main(void) {

  • プログラムの「入り口」を作る宣言
  • どんなC言語のプログラムも、必ずここから実行が始まる
  • { は「ここから main関数の中身が始まりますよ」という合図

4行目:printf("Hello, World!\n");

  • 画面に「Hello, World!」と表示する命令
  • \n は「改行してください」という特別な記号
  • 行の最後の ;(セミコロン)は「この命令はここで終わり」という印

5行目:return 0;

  • 「プログラムが正常に終了しました」とコンピューターに報告
  • 0 は「成功」という意味(数学と違って、プログラムでは0が成功!)

6行目:}

  • main関数の終わりを示す
  • {} はペアで使う(開いたら必ず閉じる)

なぜこの書き方なの?

疑問1:なぜ最初に#includeが必要?
C言語は「必要な機能だけ読み込む」という考え方です。
これにより、プログラムが軽くて早くなります。
まるで、料理に必要な道具だけをキッチンに並べるようなイメージです。

疑問2:なぜmain関数が必要?
コンピューターは「どこから始めればいいかわからない」ので、「ここがスタート地点ですよ」と教えてあげる必要があります。
main関数がその「スタート地点」の目印なのです。

この基本構造が理解できたら、次は実際に文字を表示したり、データを入力したりする方法を学んでみましょう。

ライブラリの読み込み:include文の使い方

includeって何?

#includeは、「他の人が作った便利な機能を借りてきます」という宣言です。

身近な例で考えてみましょう

  • 料理をするとき → 包丁、まな板、フライパンなどの道具が必要
  • 数学の問題を解くとき → 紙とペン、定規、コンパスなどの道具が必要
  • C言語でプログラムを作るとき → printf、scanfなどの機能が必要

よく使うライブラリ一覧

#include <stdio.h>    // 画面への表示、キーボードからの入力
#include <stdlib.h>   // メモリの管理、プログラムの終了など
#include <string.h>   // 文字列の操作(文字をつなげる、比較するなど)
#include <math.h>     // 数学の計算(平方根、三角関数など)

実際の使用例

#include <stdio.h>   // printf を使うため
#include <math.h>    // sqrt (平方根) を使うため

int main(void) {
    printf("5の平方根は %.2f です\n", sqrt(5));
    return 0;
}

実行結果

5の平方根は 2.24 です

重要なポイント

  • includeは必ずプログラムの最初に書く
  • 使わない機能のincludeは書かなくてもOK(でも書いても害はない)
  • < > で囲むのは「システムが用意したライブラリ」という意味

includeを忘れるとどうなる?

// #include <stdio.h>  ← これを忘れると...

int main(void) {
    printf("Hello!\n");  // エラー!printfが使えない
    return 0;
}

エラーメッセージ例

error: 'printf' was not declared in this scope

まるで、包丁がないのに野菜を切ろうとするようなものです。

必要な道具(ライブラリ)を最初に用意しておくことが大切ですね。

includeの仕組みがわかったら、次はプログラムの「心臓部」であるmain関数について詳しく学んでみましょう。

main関数:プログラムの心臓部

main関数の役割

main関数は、C言語プログラムの「司令塔」です。

どんなに大きなプログラムでも、必ずmain関数から実行が始まります。

身近な例で考えてみましょう

  • 学校の朝礼 → 校長先生の話から1日が始まる
  • 料理のレシピ → 「1. 材料を準備する」から始まる
  • C言語のプログラム → main関数から始まる

main関数の基本的な書き方

int main(void) {
    // ここにプログラムの処理を書く
    return 0;
}

各部分の意味

  • int:「この関数は整数を返します」という約束
  • main:関数の名前(これは決まりなので変更不可)
  • (void):「この関数は引数(外からのデータ)を受け取りません」という意味
  • { }:関数の中身を囲む(この中に実際の処理を書く)
  • return 0;:「正常に終了しました」という報告

いろんなパターンのmain関数

パターン1:基本形

int main(void) {
    printf("基本的なmain関数です\n");
    return 0;
}

パターン2:コマンドライン引数を受け取る形

int main(int argc, char *argv[]) {
    printf("引数の数: %d\n", argc);
    printf("プログラム名: %s\n", argv[0]);
    return 0;
}

初心者の方は、まず基本形をマスターしましょう!

return文の重要性

int main(void) {
    printf("処理1\n");
    printf("処理2\n");
    
    return 0;  // 「成功しました」という意味
    
    printf("この行は実行されません\n");  // returnの後なので実行されない
}

return文で使う数字の意味

  • return 0; → 成功、正常終了
  • return 1; → エラー、異常終了
  • return -1; → エラー、異常終了

実際のプログラム例

#include <stdio.h>

int main(void) {
    // 挨拶
    printf("=== 計算プログラム ===\n");
    
    // 計算実行
    int a = 10;
    int b = 5;
    int sum = a + b;
    
    // 結果表示
    printf("%d + %d = %d\n", a, b, sum);
    
    // 終了メッセージ
    printf("計算完了!\n");
    
    return 0;  // 正常終了
}

実行結果

=== 計算プログラム ===
10 + 5 = 15
計算完了!

main関数の書き方がわかったら、次は画面に文字を表示したり、ユーザーからデータを入力してもらったりする方法を学んでみましょう。

画面表示と入力:printfとscanf

printf:画面に表示する魔法の関数

printfは「print formatted」の略で、「整った形で印刷する」という意味です。

画面に文字や数字を表示するときに使います。

基本的なprintfの使い方

文字を表示する

#include <stdio.h>

int main(void) {
    printf("こんにちは!\n");
    printf("今日は良い天気ですね\n");
    return 0;
}

実行結果

こんにちは!
今日は良い天気ですね

数字を表示する

#include <stdio.h>

int main(void) {
    printf("私の年齢は %d 歳です\n", 20);
    printf("身長は %.1f cm です\n", 170.5);
    return 0;
}

実行結果

私の年齢は 20 歳です
身長は 170.5 cm です

特別な文字(エスケープシーケンス)

printf("改行 → こんにちは\n世界");
printf("タブ → 名前\t年齢\n");
printf("引用符 → 彼は\"こんにちは\"と言った\n");
printf("バックスラッシュ → C:\\Program Files\\\n");

実行結果

改行 → こんにちは
世界
タブ → 名前	年齢
引用符 → 彼は"こんにちは"と言った
バックスラッシュ → C:\Program Files\

書式指定子(フォーマット指定子)

書式指定子意味使用例
%d整数printf("%d", 123)
%f小数printf("%f", 3.14)
%.2f小数点以下2桁printf("%.2f", 3.14159)
%c1文字printf("%c", 'A')
%s文字列printf("%s", "hello")

scanf:ユーザーからの入力を受け取る

scanfは「scan formatted」の略で、「決まった形で読み取る」という意味です。

基本的な使い方

#include <stdio.h>

int main(void) {
    int age;
    
    printf("あなたの年齢を入力してください: ");
    scanf("%d", &age);  // &マークに注意!
    
    printf("あなたは %d 歳ですね\n", age);
    
    return 0;
}

実行例

あなたの年齢を入力してください: 25
あなたは 25 歳ですね

なぜ&マークが必要なの?

int age;
scanf("%d", &age);  // &age ← これが正しい
scanf("%d", age);   // age  ← これはエラー!

&マークの意味

  • age → 「変数ageの値」を意味
  • &age → 「変数ageの住所」を意味

scanfは「どこに値を保存すればいいか」を知りたいので、変数の「住所」を教えてあげる必要があります。まるで宅配便の配達先住所のようなものです。

いろんなデータを入力してもらう

#include <stdio.h>

int main(void) {
    char name[50];  // 文字列用の配列
    int age;
    float height;
    
    printf("お名前を入力してください: ");
    scanf("%s", name);  // 文字列は&不要
    
    printf("年齢を入力してください: ");
    scanf("%d", &age);
    
    printf("身長を入力してください(cm): ");
    scanf("%f", &height);
    
    printf("\n=== 入力内容の確認 ===\n");
    printf("お名前: %s\n", name);
    printf("年齢: %d 歳\n", age);
    printf("身長: %.1f cm\n", height);
    
    return 0;
}

実行例

お名前を入力してください: 田中
年齢を入力してください: 25
身長を入力してください(cm): 170.5

=== 入力内容の確認 ===
お名前: 田中
年齢: 25 歳
身長: 170.5 cm

scanfを使うときの注意点

注意1:スペースが含まれる文字列は読み取れない

// "田中 太郎" と入力しても "田中" しか読み取れない
scanf("%s", name);

注意2:バッファに残るデータ

// 数字の後に文字を入力するときは注意が必要
scanf("%d", &num);
getchar();  // 改行文字を読み飛ばす
scanf("%c", &ch);

printfとscanfの使い方がわかったら、次はデータを保存するための「変数」について詳しく学んでみましょう。

変数とデータ型:データの保存ルール

変数って何?

変数とは、「データを保存しておく箱」のようなものです。

身近な例で考えてみましょう

  • 学校のロッカー → 教科書や体操服を保存
  • 冷蔵庫の容器 → 食べ物を保存
  • 変数 → 数字や文字を保存

C言語の変数の特徴

C言語では、変数を使う前に必ず「何を保存する箱なのか」を宣言する必要があります。

int age;        // 整数を保存する箱を「age」という名前で作る
float height;   // 小数を保存する箱を「height」という名前で作る
char grade;     // 1文字を保存する箱を「grade」という名前で作る

主要なデータ型

データ型保存できるデータサイズ使用例
int整数4バイト年齢、個数、点数
float小数4バイト身長、体重、温度
doubleより精密な小数8バイト科学計算、金融計算
char1文字1バイト成績、性別、記号

変数の宣言と初期化

宣言だけ

int age;        // 箱を作るだけ(中身は未定)
float weight;   // 箱を作るだけ(中身は未定)

宣言と同時に値を入れる(初期化)

int age = 20;           // 作ると同時に20を入れる
float weight = 65.5;    // 作ると同時に65.5を入れる
char grade = 'A';       // 作ると同時に'A'を入れる

実際のプログラム例

#include <stdio.h>

int main(void) {
    // 変数の宣言と初期化
    int students = 30;          // クラスの人数
    float average_score = 78.5; // 平均点
    char class_grade = 'B';     // クラスの評価
    
    // 計算
    int total_score = students * average_score;
    
    // 結果表示
    printf("=== クラス情報 ===\n");
    printf("人数: %d 人\n", students);
    printf("平均点: %.1f 点\n", average_score);
    printf("合計点: %d 点\n", total_score);
    printf("クラス評価: %c\n", class_grade);
    
    return 0;
}

実行結果

=== クラス情報 ===
人数: 30 人
平均点: 78.5 点
合計点: 2355 点
クラス評価: B

変数名のルール

良い変数名の例

int age;           // 年齢
int student_count; // 学生数
float pi_value;    // 円周率の値

悪い変数名の例

int a;       // 何を表すかわからない
int 123age;  // 数字から始まるのはダメ
int class;   // C言語の予約語なのでダメ

変数名のルール

  • 英字またはアンダースコア(_)で始める
  • 数字で始めてはいけない
  • C言語の予約語(if、for、whileなど)は使えない
  • 大文字と小文字は区別される(ageAgeは違う変数)

変数の値を変更する

#include <stdio.h>

int main(void) {
    int score = 80;  // 最初は80点
    
    printf("最初の点数: %d 点\n", score);
    
    score = score + 10;  // 10点アップ
    printf("10点アップ後: %d 点\n", score);
    
    score = 95;  // 95点に変更
    printf("変更後: %d 点\n", score);
    
    return 0;
}

実行結果

最初の点数: 80 点
10点アップ後: 90 点
変更後: 95 点

データ型の使い分けのコツ

整数を使う場面

  • 人数、個数、回数
  • 年、月、日
  • 点数(小数点以下がない場合)

小数を使う場面

  • 身長、体重、温度
  • 割合、平均値
  • 金額(小数点以下がある場合)

文字を使う場面

  • 成績(A、B、C)
  • 性別(M、F)
  • Yes/No(Y、N)

変数とデータ型がわかったら、次はプログラムに「判断」をさせる条件分岐を学んでみましょう。

条件分岐:プログラムに判断させよう

if文:もしも〜なら

if文は、「もし条件が当てはまるなら、この処理をする」という命令です。

身近な例で考えてみましょう

  • 「もし雨が降っているなら、傘を持って行く」
  • 「もしテストが80点以上なら、ゲームをしても良い」
  • 「もし年齢が18歳以上なら、運転免許を取れる」

基本的なif文の書き方

if (条件) {
    // 条件が当てはまるときの処理
}

実際の例

#include <stdio.h>

int main(void) {
    int age = 20;
    
    if (age >= 18) {
        printf("あなたは大人です\n");
    }
    
    return 0;
}

実行結果

あなたは大人です

if-else文:そうでなければ

if (条件) {
    // 条件が当てはまるときの処理
} else {
    // 条件が当てはまらないときの処理
}

実際の例

#include <stdio.h>

int main(void) {
    int score;
    
    printf("テストの点数を入力してください: ");
    scanf("%d", &score);
    
    if (score >= 60) {
        printf("合格です!おめでとう!\n");
    } else {
        printf("不合格です。次回頑張りましょう。\n");
    }
    
    return 0;
}

複数の条件:else if文

#include <stdio.h>

int main(void) {
    int score;
    
    printf("テストの点数を入力してください: ");
    scanf("%d", &score);
    
    if (score >= 90) {
        printf("優秀!素晴らしい成績です\n");
    } else if (score >= 80) {
        printf("良好!よく頑張りました\n");
    } else if (score >= 60) {
        printf("合格!次はもう少し頑張りましょう\n");
    } else {
        printf("不合格!復習して再チャレンジ\n");
    }
    
    return 0;
}

実行例

テストの点数を入力してください: 85
良好!よく頑張りました

比較演算子

演算子意味使用例
==等しいage == 20
!=等しくないage != 20
>より大きいscore > 80
<より小さいscore < 60
>=以上score >= 60
<=以下score <= 100

論理演算子で複数の条件を組み合わせる

AND演算子(&&):両方の条件が成り立つとき

#include <stdio.h>

int main(void) {
    int age;
    int has_license;
    
    printf("年齢を入力してください: ");
    scanf("%d", &age);
    
    printf("運転免許を持っていますか?(1:はい, 0:いいえ): ");
    scanf("%d", &has_license);
    
    if (age >= 18 && has_license == 1) {
        printf("車を運転できます\n");
    } else {
        printf("車を運転できません\n");
    }
    
    return 0;
}

OR演算子(||):どちらかの条件が成り立つとき

#include <stdio.h>

int main(void) {
    char weather;
    
    printf("今日の天気は?(S:晴れ, R:雨, C:曇り): ");
    scanf(" %c", &weather);  // スペースに注意
    
    if (weather == 'R' || weather == 'C') {
        printf("傘を持って行きましょう\n");
    } else {
        printf("良い天気ですね!\n");
    }
    
    return 0;
}

実用的な例:簡単な年齢判定システム

#include <stdio.h>

int main(void) {
    int age;
    
    printf("=== 年齢判定システム ===\n");
    printf("年齢を入力してください: ");
    scanf("%d", &age);
    
    if (age < 0) {
        printf("エラー: 正しい年齢を入力してください\n");
    } else if (age <= 12) {
        printf("あなたは子供です\n");
        printf("- 子供料金が適用されます\n");
    } else if (age <= 17) {
        printf("あなたは中高生です\n");
        printf("- 学生割引が適用されます\n");
    } else if (age <= 64) {
        printf("あなたは大人です\n");
        printf("- 通常料金です\n");
    } else {
        printf("あなたはシニアです\n");
        printf("- シニア割引が適用されます\n");
    }
    
    return 0;
}

実行例

=== 年齢判定システム ===
年齢を入力してください: 25
あなたは大人です
- 通常料金です

条件分岐がわかったら、次は同じ処理を繰り返し実行する「ループ」について学んでみましょう。

繰り返し処理:同じことを何度もさせよう

なぜ繰り返し処理が必要?

例:1から10まで数える

繰り返しを使わない場合:

printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
printf("5\n");
printf("6\n");
printf("7\n");
printf("8\n");
printf("9\n");
printf("10\n");

これはとても面倒ですよね。もし1から1000まで数えるとしたら、1000行も書く必要があります!

for文:決まった回数繰り返す

for文は「決まった回数だけ繰り返す」ときに使います。

基本の書き方

for (初期化; 条件; 増減) {
    // 繰り返したい処理
}

1から10まで数える例

#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }
    
    return 0;
}

実行結果

1
2
3
4
5
6
7
8
9
10

for文の仕組みを詳しく解説

for (int i = 1; i <= 10; i++) {
    printf("%d\n", i);
}

各部分の説明

  1. int i = 1:変数iを1で初期化(最初に1回だけ実行)
  2. i <= 10:この条件が成り立つ間、繰り返し続ける
  3. printf("%d\n", i):実際の処理を実行
  4. i++:iを1増やす(処理の最後に実行)
  5. 2に戻って条件をチェック(条件が偽になるまで繰り返し)

動作の流れ

i=1: 1<=10? YES → 1を表示 → i=2
i=2: 2<=10? YES → 2を表示 → i=3
i=3: 3<=10? YES → 3を表示 → i=4
...
i=10: 10<=10? YES → 10を表示 → i=11
i=11: 11<=10? NO → 終了

いろんなfor文のパターン

偶数だけを表示

#include <stdio.h>

int main(void) {
    printf("1から20までの偶数:\n");
    for (int i = 2; i <= 20; i += 2) {
        printf("%d ", i);
    }
    printf("\n");
    
    return 0;
}

実行結果

1から20までの偶数:
2 4 6 8 10 12 14 16 18 20

逆順に表示

#include <stdio.h>

int main(void) {
    printf("カウントダウン:\n");
    for (int i = 10; i >= 1; i--) {
        printf("%d ", i);
    }
    printf("スタート!\n");
    
    return 0;
}

実行結果

カウントダウン:
10 9 8 7 6 5 4 3 2 1 スタート!

while文:条件が成り立つ間繰り返す

while文は「条件が成り立つ間ずっと繰り返す」ときに使います。

基本の書き方

while (条件) {
    // 繰り返したい処理
}

例:ユーザーが0を入力するまで繰り返す

#include <stdio.h>

int main(void) {
    int number;
    
    printf("数字を入力してください(0で終了):\n");
    
    while (1) {  // 無限ループ
        printf("> ");
        scanf("%d", &number);
        
        if (number == 0) {
            break;  // ループから抜ける
        }
        
        printf("あなたが入力した数字: %d\n", number);
    }
    
    printf("プログラムを終了します\n");
    return 0;
}

実行例

数字を入力してください(0で終了):
> 5
あなたが入力した数字: 5
> 12
あなたが入力した数字: 12
> 0
プログラムを終了します

do-while文:最低1回は実行する

do-while文は「最低1回は実行してから、条件をチェックする」ときに使います。

#include <stdio.h>

int main(void) {
    int choice;
    
    do {
        printf("\n=== メニュー ===\n");
        printf("1. 挨拶\n");
        printf("2. 計算\n");
        printf("3. 終了\n");
        printf("選択してください (1-3): ");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                printf("こんにちは!\n");
                break;
            case 2:
                printf("2 + 3 = 5\n");
                break;
            case 3:
                printf("プログラムを終了します\n");
                break;
            default:
                printf("1-3の数字を入力してください\n");
        }
    } while (choice != 3);
    
    return 0;
}

実用的な例:九九の表を作る

#include <stdio.h>

int main(void) {
    printf("=== 九九の表 ===\n");
    
    // 横の数字を表示
    printf("   ");
    for (int j = 1; j <= 9; j++) {
        printf("%4d", j);
    }
    printf("\n");
    
    // 線を引く
    printf("   ");
    for (int j = 1; j <= 9; j++) {
        printf("----");
    }
    printf("\n");
    
    // 九九の計算
    for (int i = 1; i <= 9; i++) {
        printf("%d |", i);  // 縦の数字を表示
        for (int j = 1; j <= 9; j++) {
            printf("%4d", i * j);
        }
        printf("\n");
    }
    
    return 0;
}

実行結果

=== 九九の表 ===
      1   2   3   4   5   6   7   8   9
   ------------------------------------
1 |   1   2   3   4   5   6   7   8   9
2 |   2   4   6   8  10  12  14  16  18
3 |   3   6   9  12  15  18  21  24  27
4 |   4   8  12  16  20  24  28  32  36
5 |   5  10  15  20  25  30  35  40  45
6 |   6  12  18  24  30  36  42  48  54
7 |   7  14  21  28  35  42  49  56  63
8 |   8  16  24  32  40  48  56  64  72
9 |   9  18  27  36  45  54  63  72  81

ループ制御:break と continue

break:ループを途中で抜ける

#include <stdio.h>

int main(void) {
    printf("1から100の中で最初に見つかる7の倍数:\n");
    
    for (int i = 1; i <= 100; i++) {
        if (i % 7 == 0) {
            printf("%d\n", i);
            break;  // ここでループを抜ける
        }
    }
    
    return 0;
}

実行結果

1から100の中で最初に見つかる7の倍数:
7

continue:今回の処理をスキップして次へ

#include <stdio.h>

int main(void) {
    printf("1から10までの奇数:\n");
    
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue;  // 偶数はスキップ
        }
        printf("%d ", i);
    }
    printf("\n");
    
    return 0;
}

実行結果

1から10までの奇数:
1 3 5 7 9

繰り返し処理がわかったら、次はコードを読みやすくするコメントの書き方を学んでみましょう。

コメント:コードを読みやすくしよう

コメントって何?なぜ必要?

コメントとは、「プログラムの説明書き」のようなものです。コンピューターは無視しますが、人間がコードを読むときにとても役立ちます。

身近な例で考えてみましょう

  • 料理のレシピ → 「弱火で10分煮る」「塩は少なめに」
  • 地図 → 「駅から徒歩5分」「この道は一方通行」
  • プログラムのコメント → 「ここで計算する」「エラーチェック」

なぜコメントが大切なの?

理由1:他の人が読みやすくなる

// コメントなし(わかりにくい)
int x = a * 0.08;

// コメントあり(わかりやすい)
int tax = price * 0.08;  // 消費税を計算

理由2:将来の自分が理解しやすくなる 1ヶ月後に自分のコードを見返したとき、「なんでこんなコードを書いたんだっけ?」となることがよくあります。コメントがあれば思い出しやすくなります。

理由3:複雑な処理の説明ができる

// 複雑な数式にコメントで説明
float bmi = weight / (height * height);  // BMI = 体重 ÷ 身長²

コメントの書き方

1行コメント(//)

#include <stdio.h>

int main(void) {
    // これは1行コメントです
    int age = 20;  // 変数の説明もできます
    
    printf("年齢: %d\n", age);
    
    return 0;
}

複数行コメント(/ /)

#include <stdio.h>

/*
 * このプログラムは年齢を表示するプログラムです
 * 作成者: 初心者プログラマー
 * 作成日: 2025年6月6日
 */

int main(void) {
    int age = 20;
    
    /*
     * ここで年齢を表示します
     * 将来的には誕生日から自動計算する予定
     */
    printf("年齢: %d\n", age);
    
    return 0;
}

良いコメントの例

処理の目的を説明

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

int main(void) {
    float a, b, c;
    
    printf("三角形の3辺の長さを入力してください\n");
    printf("辺a: ");
    scanf("%f", &a);
    printf("辺b: ");
    scanf("%f", &b);
    printf("辺c: ");
    scanf("%f", &c);
    
    // ヘロンの公式を使って面積を計算
    float s = (a + b + c) / 2;  // 半周長を計算
    float area = sqrt(s * (s - a) * (s - b) * (s - c));
    
    printf("三角形の面積: %.2f\n", area);
    
    return 0;
}

複雑な条件の説明

#include <stdio.h>

int main(void) {
    int year;
    
    printf("年を入力してください: ");
    scanf("%d", &year);
    
    // うるう年の判定ルール:
    // 1. 4で割り切れる
    // 2. ただし100で割り切れる年は平年
    // 3. ただし400で割り切れる年はうるう年
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        printf("%d年はうるう年です\n", year);
    } else {
        printf("%d年は平年です\n", year);
    }
    
    return 0;
}

エラー処理の説明

#include <stdio.h>

int main(void) {
    int a, b;
    
    printf("2つの数を入力してください\n");
    printf("数1: ");
    scanf("%d", &a);
    printf("数2: ");
    scanf("%d", &b);
    
    // ゼロ除算エラーをチェック
    if (b == 0) {
        printf("エラー: 0で割ることはできません\n");
        return 1;  // エラーで終了
    }
    
    // 除算を実行
    float result = (float)a / b;
    printf("%d ÷ %d = %.2f\n", a, b, result);
    
    return 0;
}

悪いコメントの例

当たり前のことを書く

// 悪い例
int age = 20;  // 変数ageに20を代入

// 良い例
int age = 20;  // プレイヤーの初期年齢

コードと一致しないコメント

// 悪い例(コメントとコードが違う)
int price = 1000;  // 税込み価格

// 良い例
int price = 1000;  // 税抜き価格

実用的なコメントの例

#include <stdio.h>

// ====================================
// 簡単な成績管理プログラム
// 機能: 点数を入力して成績を判定
// ====================================

int main(void) {
    int score;
    char grade;
    
    // ユーザーから点数を入力してもらう
    printf("テストの点数を入力してください (0-100): ");
    scanf("%d", &score);
    
    // 入力値の妥当性をチェック
    if (score < 0 || score > 100) {
        printf("エラー: 0-100の範囲で入力してください\n");
        return 1;
    }
    
    // 点数に基づいて成績を判定
    if (score >= 90) {
        grade = 'A';       // 優秀
    } else if (score >= 80) {
        grade = 'B';       // 良好
    } else if (score >= 70) {
        grade = 'C';       // 普通
    } else if (score >= 60) {
        grade = 'D';       // 合格ライン
    } else {
        grade = 'F';       // 不合格
    }
    
    // 結果を表示
    printf("点数: %d点\n", score);
    printf("成績: %c\n", grade);
    
    // TODO: 将来的にはファイルに保存する機能を追加
    // TODO: 複数の科目に対応
    
    return 0;
}

コメントを書くタイミング

プログラムを書く前

/*
 * やりたいこと:
 * 1. ユーザーから2つの数を入力してもらう
 * 2. どちらが大きいかを比較する
 * 3. 結果を表示する
 */

// TODO: ここにプログラムを書く

プログラムを書いた後

#include <stdio.h>

int main(void) {
    int num1, num2;  // 比較する2つの数
    
    // 数値を入力してもらう
    printf("1つ目の数: ");
    scanf("%d", &num1);
    printf("2つ目の数: ");
    scanf("%d", &num2);
    
    // 大小比較
    if (num1 > num2) {
        printf("%d の方が大きいです\n", num1);
    } else if (num2 > num1) {
        printf("%d の方が大きいです\n", num2);
    } else {
        printf("2つの数は同じです\n");
    }
    
    return 0;
}

コメントの書き方がわかったら、最後にC言語の基本構文全体をまとめて確認してみましょう。

まとめ

C言語の基本構文について、初心者の方でも理解できるように詳しく解説しました。

この記事で学んだこと

基本構造

  • すべてのプログラムは #includemain関数 から始まる
  • { } でコードのブロックを区切る
  • ; で文の終わりを示す
  • return 0; でプログラムの正常終了を示す

ライブラリの読み込み

  • #include <stdio.h> で入出力機能を使用
  • #include <math.h> で数学関数を使用
  • 必要な機能だけを読み込む

入出力

  • printf() で画面への表示
  • scanf() でユーザーからの入力
  • 書式指定子(%d、%f、%cなど)でデータ型を指定

変数とデータ型

  • int:整数、float:小数、char:1文字
  • 使用前に必ず型を宣言
  • 意味のわかりやすい変数名をつける

条件分岐

  • if文 で条件による処理の分岐
  • else if で複数の条件を処理
  • 比較演算子(==、!=、>、<など)で条件を記述

繰り返し処理

  • for文 で決まった回数の繰り返し
  • while文 で条件が成り立つ間の繰り返し
  • breakcontinue でループを制御

コメント

  • // で1行コメント
  • /* */ で複数行コメント
  • コードの説明や注意点を記述

覚えておきたい基本パターン

#include <stdio.h>

int main(void) {
    // 変数の宣言
    int number;
    
    // 入力
    printf("数字を入力: ");
    scanf("%d", &number);
    
    // 処理と出力
    if (number > 0) {
        printf("正の数です\n");
    } else {
        printf("0以下です\n");
    }
    
    return 0;
}

コメント

タイトルとURLをコピーしました