🇯🇵 日本語 | 🇺🇸 English

第6回 確認問題(変数・printf)

C言語の変数とprintfの理解度を確認するクイズ。

🎬
この講座を動画で見る(約6分)
注目ポイント解説 + 音声ナレーション

確認問題1 ― 代入の順番を追う

以下のプログラムを実行すると、どのような結果が得られるか予測してから答えを選びましょう。
#include<stdio.h>

int main(void){
  int a, b;
  a = 10;
  b = 30;
  b = a;
  a = 5;
  printf("a は %d, b は%d \n", a, b);
  return 0;
}

出力結果は?

a は 10, b は 30
a は 5, b は 10
a は 5, b は 30
a は 10, b は 10
解説: 代入を順番に追うと...
a=10 → a:10
b=30 → b:30
b=a → bにaの値(10)を代入 → b:10(30は上書きされて消える)
a=5 → aを5に上書き → a:5
a は 5, b は 10
a
b

確認問題2 ― int型に%fを使うとどうなる?

確認問題1と同じプログラムですが、printfの%d%fに変えています。
int a, b;
a = 10; b = 30; b = a; a = 5;
printf("a は %f, b は%f \n", a, b); // %fに変更!

出力結果は?

a は 5.000000, b は 10.000000
a は 0.000000, b は 0.000000
コンパイルエラー
解説: int型の変数に%f(実数用)を使うと、正しい値は表示されません
環境によって表示は異なりますが、0.000000や意味不明な数値になります。
int型には%d、double型には%fを使いましょう!

確認問題3 ― double型に%dを使うとどうなる?

double a, b;
a = 3.1; b = 2.6; b = 2.12; a = 4.52;
printf("a は %f, b は%d \n", a, b); // bだけ%d!

出力結果は?

a は 4.520000, b は 2.120000
a は 4.520000, b は 2
a は 4.520000, b は(意味不明な数値)
解説: aは%fで正しく表示(4.520000)されますが、bはdouble型なのに%d(整数用)を指定しているため、正しく表示されません
環境によっては -488420520 のような意味不明な値が表示されます。
double型の表示には必ず%fを使いましょう。

確認問題4 ― %.2f と四捨五入

%.2f はどう丸められるかの確認です。
#include<stdio.h>

int main(void){
  double a = 3.145;
  double b = 3.144;
  printf("a=%.2f, b=%.2f\n", a, b);
  return 0;
}

出力結果は?

a=3.14, b=3.14(切り捨て)
a=3.14, b=3.15
a=3.15, b=3.14(四捨五入)
a=3.145, b=3.144(そのまま)
解説: %.2f四捨五入で表示します(切り捨てではない)。
3.145 → 小数3桁目が5 → 切り上げ → 3.15
3.144 → 小数3桁目が4 → 切り捨て → 3.14
これは表示だけの話で、変数の中身(a や b)は元のまま変わりません。

確認問題5 ― 複数の値を1つの printf で

1回の printf で複数の変数の値をまとめて表示できます。書式と引数の対応に注目。
#include<stdio.h>

int main(void){
  int age = 25;
  int score = 82;
  printf("年齢: %d 点数: %d\n", age, score);
  return 0;
}

出力結果は?

年齢: 25 点数: 82
年齢: %d 点数: %d
年齢: 25 点数: %d(2つ目の %d が置き換わらない)
年齢: 82 点数: 25(順番が逆)
解説: 書式文字列の中にある %d は、カンマの後ろの引数の順番通りに置き換わります。
① 1つ目の %d ← age(=25)
② 2つ目の %d ← score(=82)
年齢: 25 点数: 82

ポイント: 変数を別々の printf で出さなくても、1つの printf で何個でもまとめて表示できます。コードが短くなり、表示も一行にきれいに収まります。% の数と、カンマの後ろの引数の数が一致しているかを確認するのが鉄則。

確認問題6 ― printf の途中で \n を入れると?

複数の値を1つの printf で表示するとき、途中に \n(改行)を入れることもできます。
#include<stdio.h>

int main(void){
  int x = 3, y = 7;
  printf("x = %d\ny = %d\n", x, y);
  return 0;
}

出力結果は?

x = 3 y = 7(1行にまとめて表示)
1行目: x = 3 / 2行目: y = 7(2行で表示)
x = 3\ny = 7\n(\n が文字として出る)
コンパイルエラー(改行は先頭か末尾のみ)
解説: \n は書式文字列のどこに書いてもOK。「ここで改行する」という意味で、印字位置が次の行に移ります。
書式 "x = %d\ny = %d\n" を前から順に出力すると:
x = 3 を表示
\n で改行
y = 7 を表示
④ 末尾の \n で改行
結果:
x = 3
y = 7

ポイント: 1つの printf で改行も含めて複数行の出力が書ける、ということを覚えておきましょう。

関連する講座

入門編
第3回 変数
C言語の変数とは?int, double, charの使い方を図解で解説。
入門編
第4回 printf・scanf
C言語のprintf関数とscanf関数の使い方。書式指定子を一覧で解説。
入門編
第7回 確認問題(scanf)
C言語のscanfの理解度を確認するインタラクティブなクイズ。
← 前の講座
第4回 printf・scanf
次の講座 →
第7回 確認問題(scanf)
この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。