🎬
この講座を動画で見る(約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
確認問題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 で改行も含めて複数行の出力が書ける、ということを覚えておきましょう。
この講座の理解を深めるおすすめ書籍
サイトで動きを理解し、書籍で演習量を補うと効果的です
📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る
※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。