printfは,
与えられた入力を,画面に(ターミナルに)表示する
という処理を行う関数です.
ターミナルに文字の列や数字などを表示する場合などに用います.
プログラミング演習Iでは,printfの二通りの「使い方」を学びます:
「書式化」を行わない場合 ← 復習はこちらから
「書式化」を行う場合
今回は「書式化」を行う場合について説明します.
書式化を行う場合
書式とは,英語ではformatに相当します.printfの「f」はformatの「f」です.
C言語における書式化とは,
表示させたいものを「どのような体裁で表示するか」を指定すること
を意味します.「どのような体裁で表示するか」を指定する記号を変換指定といいます.
変換指定は,具体的には
%の後に数値やドットやアルファベットが特定の順序で並んだもの
です.詳細はこちら(または教科書p.376 - p.379).
今回は,数字を入力とする場合について扱います.文字列に対する書式化については,扱いません.
"変換指定"と数字をprintf関数への入力として与えると,指定された書式でターミナルに数字が表示されます.
書式変換
書式変換の例:
与えられた整数を,10進数で表示させるための変換指定は %d (dはdecimal(10進数)の「d」)
与えられた整数を,16進数で表示させるための変換指定は%x(xはhexadecimal(16進数)の「x」 )
与えられたを浮動小数点数を,小数点以下6桁に丸めて表示させるための変換指定は%f(fは floating point number(浮動小数点数)の「f」)
与えられたを浮動小数点数を,小数点以下3桁に丸めて表示させるための変換指定は%.3f(3は小数点以下第3位までを表示することを意味)
※浮動小数点数:小数点のついた数値.
※「丸め方」は実行環境によって異なる.演習室の環境では,最も近い方向へ丸める.
例題(printf_reidai9.c)
例1)10という整数を10進数で表示させたいときには,
printf("%d", 10); //10を10進数で表示
と記述します.出力結果は「10」です.
例2)10という整数を16進数で表示させたいときには,
printf("%x", 10); //10を16進数で表示
と記述します.出力結果は「a」です(10進数の0, 1, ..., 8, 9, 10, 11, 12, 13, ...は16進数で0, 1, ..., 8, 9, a, b, c, d, ...に対応.)
例3)3.1415という浮動小数点数を小数点以下3桁に丸めて表示させたいときには,
printf("%.3f", 3.1415); //3.1415を小数点以下3桁に丸めて表示
と記述します.出力結果は「3.142」です.
注意
「整数を小数点以下6桁に丸めて表示することはできない」などのように,与える数字のタイプ(型)と変換書式の与え方にはルールがあり,それを満たさなければエラーが生じます.詳細は後ほど勉強します.
第一引数に"変換書式",第二引数に数字を入れること.順番を間違えないように.また,変換書式の両端にダブルクオーテーションを忘れずにつけること(数字を文字列として表示させるため).
書式文字列
先ほどは,数字のみを表示させていましたが,数字と文字を組み合わせてターミナルに表示させたいときもあるでしょう.
"変換指定を含む文字列"と数字をprintf関数への入力として与えると,指定された書式に変換された数字を伴う文字列が表示されます.
"変換指定を含む文字列"を書式文字列といいます.
例4)「10を10進数で表示:」という文字列の後に,10を10進数で表示させたいときには,
printf("10を10進数で表示:%d\n",10);
と記述します.出力結果は「10を10進数で表示:10 」です.
例5)「10を16進数で表示:」という文字列の後に,10を16進数で表示させたいときには,
printf("10を16進数で表示:%x\n",10);
と記述します.出力結果は「10を16進数で表示:a 」です.
複数の変換指定の利用
複数の変換指定を用いて複数の数字を表示させることもできます.複数の数字を与えたい場合には,printf関数の( )内部にカンマで区切って実引数を追加します.
例6)「10を10進数で表示すると■で,16進数で表示すると□です」という文字列において,■に10を10進数で,□に10を16進数で表示させたいときには,
printf("10を10進数で表示すると%dで,16進数で表示すると%xです\n", 10, 10);
と記述します.出力結果は「10を10進数で表示すると10で,16進数で表示するとaです 」です.
練習9-1:(renshu9_1.c)
学籍番号の数字の部分(7桁)について,以下の2通りに表示せよ.
文字列として表示(書式化を行わない)
10進数として表示(変換指定は%d)
,学籍番号の4桁目までを整数,5桁目以降を小数点以下の数とみなして(学籍番号が2212345であれば「2212.345」とみなす),以下の2通りに表示せよ.
浮動小数点数として小数点以下第6位まで表示(変換指定は %f )
浮動小数点数として小数点以下第2位まで表示(変換指定は %.2f )
例えば,学籍番号が2212345であれば,以下のような出力結果を表示させること.
文字列:2212345
10進数:2212345
浮動小数点数(小数第6位まで):2212.345000
浮動小数点数(小数第2位まで):2212.34