C言語入門|2章の練習問題

2章では、変数とは何か、どのようなデータ型が用意されているのか、
そして値を変数に格納していく「代入」、初期値を設定する「初期化」などを学びました。

コンピュータのメモリは、数字や文字をそのままの姿で覚えておくのではなく、
データ型にもとづいた形式で保存します。
そのため、プログラムを書くときはただ変数名を決めるだけでなく、
「これは整数用」「これは小数用」「これは文字用」と明確に型を指定する必要があります。

また、初期化されていない変数を使うと、
メモリの中に「過去に残っていた関係ないゴミ」が表示されてしまうことも学びました。
これが「未初期化変数による予期しない動作」です。

2章で登場した重要な命令・構文のおさらい

変数宣言と初期化

変数宣言の書式

型名 変数名;

初期化の書式

変数名 = 値;

ポイント

  • C言語では「型 → 名前」の順番で記述
  • 値を先に使う前に、必ず初期化が必要

変数とデータ型のまとめ

型名格納できる値の例使用例説明
int0, 100, -50数のカウンタ整数用の基本型
long2000000000 など大きい数時刻・資産などの大きい値int より広い範囲
float3.14, 0.005体脂肪率など小数を扱うが精度はそこそこ
doubleより高精度な小数距離・科学計算などfloatより精度が高い
char'A', '7'記号・数字1文字シングルクォート
booltrue, falseフラグ値stdbool.h が必要

よく登場する命令の解説

printf(書式)

printf("メッセージ");  
printf("名前=%s 年齢=%d\n", name, age);

画面に文字や数値を出力する最重要命令。

代入文

x = 5;
y = x + 3;

右辺を左辺の変数に保存する命令。
新しい値は上書きされるので「最新の状態」は常に変化する。

サンプルプログラム

プロジェクト名:2-13-1 ソースファイル名: sample2-13-1.c

#include <stdio.h>
#include <stdbool.h>

int main(void) {
    int year = 2025;
    bool isSunny = true;

    printf("Welcome to C programming!\n");
    printf("Year: %d, Sunny: %d\n", year, isSunny);

    return 0;
}

このプログラムでは、

  • 整数型 year
  • 真偽値 isSunny
    を使い、printfでメッセージを表示しています。

2章の練習問題

以下はすべて新しく作成した問題で、
参考例と同等の形式・難易度になるように構成しています。

【練習2-1】

次の値を格納するために適したデータ型を選び、
それぞれ 変数宣言と初期化 を行ってください。
変数名は意味の分かる名前をつけること。

(ア)-128
(イ)'G'
(ウ)72.45
(エ)true
(オ)50000000L

解答例と解説】

問題データ型宣言と初期化解説
intint minValue = -128;整数として保存
charchar grade = 'G';1文字はchar
floatfloat bmi = 72.45f;小数 → float
boolbool active = true;真偽値
longlong population = 50000000L;大きな整数

【練習2-2】

次の表の内容に従い、用途に合った変数を宣言してください。
宣言文の最後にコメントも記述すること。

用途
int点数を記録する。
double距離を保存する。
boolボタンが押されたか判定する。
char言語コード('J' など)
long合計アクセス数

【解答例と解説】

int score = 0;        // 点数
double distance = 0;  // 距離
bool pressed = false; // ボタン状態
char lang = 'J';      // 言語コード
long accessTotal = 0L; // アクセス数

【練習2-3】

次のプログラムは、実行すると「未初期化の変数が原因で想定外の数字」が表示されてしまいます。

プロジェクト名:2-13-2 ソースファイル名: sample2-13-2.c

#include <stdio.h>

int main(void) {
    int height;
    int weight;

    printf("身長%dcm、体重%dkgです\n", height, weight);

    return 0;
}

(1)このプログラムが正しい結果を表示しない理由を説明してください。
(2)身長170cm、体重65kgという正しい情報を出力するように修正してください。

【解答例と解説】

(1)height と weight が初期化されておらず、メモリ上の「ゴミ値」が使われるため。

(2)修正版

int height = 170;
int weight = 65;

または後から代入する形でも可。

【練習2-4】

次の処理手順に従い、最終的に表示されるのはどれか。
解答群から選べ。

処理

  • 整数型 a ← 5
  • 整数型 b ← 7
  • a ← b
  • b ← a + 3
  • a と b をこの順でコンマ区切りで出力する

解答群
ア 5,7
イ 7,10
ウ 7,8
エ 8,7
オ 10,7

【解答例と解説】

正解:イ 7,10

変数値の変化
a5 → 7
b7 → 7 → 10

【練習2-5】

次の変数宣言のうち、正しいものをすべて選んでください。

(ア) int 2count = 5;
(イ) char symbol = '@';
(ウ) bool flag = false;
(エ) float rate = 0.12;
(オ) double tax rate = 0.08;

【解答例と解説】

正しいもの:イ、ウ、エ

記号正誤解説
×変数名は数字で始められない。
char に1文字
bool はOK
float 正しい
×変数名にスペースは使えない(tax_rate などが必要)

【練習2-6】

次のコードを読み、最終的に画面に出力される値を答えてください。

int x = 10;
int y = 4;

x = x + y;  // 10 + 4 → 14
y = x - 6;  // 14 - 6 → 8

printf("%d,%d\n", x, y);

【解答例と解説】

14,8

xとyの値の変化を順に追うことで解ける問題。