18. 整数や実数の桁指定での出力 小数点 m 全体の幅 (桁数) n 0 小数点以下の幅 (桁数) z 数値の幅が桁数に満たない時に上の位の部分を 0 で埋める 符号と整数部分 }| { n 個 z }| { … {z m 個 | • 桁の指定がされた場合、数値は右詰めで出力される。 } • 「符号」 「整数部分」 「小数点」を考え、m ≧ n + 3 となるよう心が ける。 #include <stdio.h> int main() { int n=123; float a=-45.678; printf 文の「出力書式」で「=%d=%f=\n」と %d, %f の前後に = を 出力させることで %d, %f の範囲を明確にしている。 宣言部分で変数の初期化も同時に行うことができる。 「int n;」とした場合、変数 n の宣言をしただけなので値につ いては不定である。 「int n=123;」とすると、変数 n を宣言しか つ変数 n の値を 123 と設定している。 「出力書式」を以下のように変更した場合、どのような出力にな るか実験せよ。 printf("=%d=%f=\n", n, a); この部分に実験用の printf 文を追加 return 0; } 出力書式 =%2d=%8.1f=\n 実行結果 =123=␣␣␣-45.7=4 メモ 整数は 2 桁の幅指定を無視、実数は 8 桁の幅で小数点 以下第二位までの出力なので、第三位を四捨五入 =%3d=%8.2f=\n =%4d=%8.3f=\n =%5d=%7.3f=\n =%5d=%6.3f=\n =%05d=%08.3f=\n 19. 省略形 省略形 意 味 a += b a -= b a *= b a /= b a %= b a++ a-- a←a + b a←a − b a←a ∗ b a←a/b a←a%b a←a + 1 a←a − 1 たとえば x *= y+1; は x = x * (y+1); と同じ意味。 4 実行結果のの ␣ は、空白を明示的に表している。 9 20. 8 ページの 15 番 のプログラムの半径、面積、周の長さの出力が 全体幅 6 桁、小数点以下第二位ま でとなるように修正せよ。 21. 8 ページの 16 番 のプログラムの摂氏、華氏の出力が全体幅 8 桁、小数点以下第賛意までとなるよう に修正せよ。 22. 10000 以下の自然数 2 つ入力し、筆算の形で和の計算を出力せよ。 10000 以下の自然数は 5 桁以下であることに注目し、 5 桁の幅を指定すると右寄せで出力されるの で、各行の桁指定を位置を同じにすれば、位取りが揃う。そこで筆算の出力イメージはに対応するよ うに一行につき一つの printf 文を書くとわかりやすい。 実行例 ↘ 左から続く # ./a.exe # ./a.exe Enter 2 natural numbers (<= 10000) : 1234 ␣␣␣␣1234 ␣+␣␣␣␣56 --------␣␣␣␣1290 ↗ 右に続く 56 Enter ∼ (<= 10000) : 5 9999 ␣␣␣␣9999 ␣+␣␣␣␣␣1 --------␣␣␣10000 1 プログラムの構成 (a) int 型変数の m, n を宣言 (b) 入力を促すメッセージを出力 出力 … printf 文で単に 「Enter 2 natural numbers (<= 10000) : 」 と出力する。 #include <stdio.h> int main() { int m, n; (c) 2 整数を入力 入力 … scanf 文。2 つの整数を入力するための 「入力書式」をかき、 「変数等」の部分には入力し た整数を記憶させるための変数 m, n 指定する。 このとき & を忘れないこと。 /* (b) */ /* (c) */ (d) 一行目の部分に m の値を出力 出力 … printf 文。筆算らしくなるような「出力 書式」を記述し、「変数等」の部分で m を指定 する。 /* (d) */ /* (e) */ (e) 二行目の部分に n の値を出力 出力 … printf 文。筆算らしくなるような「出力 書式」を記述し、 「変数等」の部分で n を指定する。 printf("---------\n"); (f) 三行目の部分に罫線代わりの - を 9 個出力 出力 … printf 文。単に - を 9 個出力するだけだ から、 「変数等」の部分はいらない。 (g) 四行目の部分に m+n の値を出力 出力 … printf 文。筆算らしくなるような「出力 書式」を記述し、「変数等」の部分で m+n を指 定する。 5 紙面の都合で入力を促すメッセージが長いので、略している 10 /* (a) */ /* (f) */ /* (g) */ return 0; }
© Copyright 2024 ExpyDoc