
C言語入門|3章の練習問題
3章では、C言語の「値そのもの」を表す リテラル や、
計算の仕組みを支える 演算子、
そしてプログラムを動かしていくうえで大切な キャスト(型変換)、
さらには 乱数生成 の基礎を学びました。
C言語はとても表現力が高く、
整数・小数・文字・文字列・真偽値など、
さまざまな種類のデータを扱うことができます。
そのため、値の表現(リテラル)には複数の形があり、
例として
- 3.14(浮動小数点数)
- 'A'(1文字)
- "ABC"(文字列)
- 123L(long型)
といったように、
見た目でデータ型を判別できる 特徴があります。
また、C言語の演算子は、
足し算や掛け算だけでなく比較・論理・代入など多岐にわたり、
正しく使い分けることで思いどおりの処理が書けるようになります。

さまざまなリテラル
10 → 整数リテラル(int)
10L → longリテラル(long)
3.14 → doubleリテラル
2.5F → floatリテラル
'Z' → 文字リテラル(char)
"Hello" → 文字列リテラル(String風リテラル)
同じ「10」という数字でも、末尾に L を付けると型が変わるなど、
リテラルは「そのままの姿」でデータ型を表していることがわかります。
C言語と擬似言語の演算子の違い
| 種類 | C言語 | 擬似言語 | 説明 |
|---|---|---|---|
| 代入 | = | ← | 左辺に値を格納する |
| 余り | % | mod | x % 2 は、2で割った余り |
| 比較(等しい) | == | = | C言語では = と区別 |
| 論理積 | && | and | 2条件が両方真 |
| 論理和 | || | or | どちらか真 |
| 否定 | ! | not | 真偽値の反転 |
解説
たとえば C言語で x % 2 == 1 を見ると
「奇数判定だな」とすぐに理解できます。
FE試験で x mod 2 = 1 と出てきても同じです。
キャスト(型変換)
書式
(型名) 値例
int n = (int)3.7; // 小数を整数に変換 → 3キャストは「一時的に型を変える」仕組みで、
小数→整数などのときに利用します。
乱数生成の基礎
以下は、ランダムな0〜9を2つ生成して表示する例です。
プロジェクト名:3-15-1 ソースファイル名: sample3-15-1.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned)time(NULL)); // 乱数のタネ
int a = rand() % 10; // 0〜9
int b = rand() % 10;
printf("Random digits: %d and %d\n", a, b);
return 0;
}ここまでで重要な要素が整理できたところで、3章の練習問題を提示します。
3章の練習問題
【練習3-1】
次に示すリテラルのデータ型を答えてください。
(ア) 2.71828
(イ) 'Q'
(ウ) 90000L
(エ) 45.0F
(オ) "ABC"
(カ) 250
【解答例と解説】
| 記号 | データ型 | 解説 |
|---|---|---|
| ア | double | 小数点の付いたリテラル(F無し) |
| イ | char | 1文字はchar |
| ウ | long | 末尾の L が long を表す |
| エ | float | 末尾の F が float |
| オ | 文字列(文字列リテラル) | ダブルクォートは文字列 |
| カ | int | 整数リテラル |
【練習3-2】
次の式を評価したとき、左辺に格納される値とデータ型を答えてください。
エラーがある場合はエラーと書いてください。
(ア) float f = 5 * 2.5F;
(イ) char c = 66;
(ウ) int n = (int)7.9;
(エ) int x = 3.0F;
(オ) double k = 4 + 2.2;
【解答例と解説】
| 記号 | 結果 | 型 | 解説 |
|---|---|---|---|
| ア | 12.5 | float | 2.5F → float演算 |
| イ | 'B' | char | 66 は ASCII で 'B' |
| ウ | 7 | int | キャストで小数部分切り捨て |
| エ | エラー | - | 浮動小数点数を暗黙にintへは代入不可 |
| オ | 6.2 | double | 4(int)が double に拡張される |
【練習3-3】
次の内容を満たすプログラムを作成してください。
(1) 画面に「数字を2つランダムに生成します。」と表示する。
(2) 0〜9 の乱数を2つ生成し、変数 x と y に代入する。
(3) 「結果:XY」と表示する(XY は作成した2つの数字)。
解答例と解説(プログラム)
プロジェクト名:3-15-2 ソースファイル名: sample3-15-2.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned)time(NULL));
printf("数字を2つランダムに生成します。\n");
int x = rand() % 10;
int y = rand() % 10;
printf("結果:%d%d\n", x, y);
return 0;
}【練習3-4】
次の内容のプログラムを作成してください。
(1) 「値を入力してください。」と表示し、String型(char配列)へ入力を受け付ける。
(2) 入力値を整数に変換し、5倍する。
(3) 「元の値:X、5倍:Y」と表示する。
【解答例と解説】
プロジェクト名:3-15-3 ソースファイル名: sample3-15-3.c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char buf[100];
printf("値を入力してください。\n");
scanf("%s", buf);
int num = atoi(buf);
int result = num * 5;
printf("元の値:%d、5倍:%d\n", num, result);
return 0;
}【練習3-5】
次の演算子の結果を答えてください。
(ア) 7 % 3
(イ) 5 % 2
(ウ) 8 % 4
(エ) 9 % 5
(オ) 11 % 3
【解答例】
| 記号 | 結果 | 解説 |
|---|---|---|
| ア | 1 | 7 ÷ 3 → 余り1 |
| イ | 1 | 奇数判定でよく使う |
| ウ | 0 | 8は4の倍数 |
| エ | 4 | 9 = 5×1 + 4 |
| オ | 2 | 11 = 3×3 + 2 |
【練習3-6】
次の値の組み合わせについて、
「条件が真になるか偽になるか」を答えてください。
条件式
(x % 2 == 1) && (y > 5)
(ア) x=3, y=7
(イ) x=4, y=10
(ウ) x=9, y=4
(エ) x=11, y=6
【解答例と解説】
| 記号 | 結果 | 判定理由 |
|---|---|---|
| ア | 真 | 3は奇数、7>5 |
| イ | 偽 | xは偶数 |
| ウ | 偽 | yが5より大きくない |
| エ | 真 | 11は奇数、6>5 |
