18. 整数や実数の桁指定での出力 m 全体の幅 (桁数) n 小数点以下の幅

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;
}