文字と数字の出力

今回は、文字と数字を表示させてみます。
今までに少し扱いましたケド。

早速、数字を表示させて見ます。
以下のソースをコンパイルして実行してみてください。

#include <stdio.h>

int main(void){
/* 数字の出力 */
printf("1年間は%d日あります。一日%d分有ります。", 365, 24*60);
printf("\n");
printf("1.0 = %f, 2.0 = %1.0f, 1+2=%10.5f", 1.0, 2.0, (1.0+2.0));
printf("\n");
printf("a = %d, 97 = %c", 'a', 97);
printf("\n");
}

1年間は365日あります。一日1440分有ります。
1.0 = 1.000000, 2.0 = 2, 1+2=3.00000
a = 97, 97 = a
続行するには何かキーを押してください . . .

以上の様な実行結果が得られるはずです。

それでは、一つずつ解説します。

printf("1年間は%d日あります。一日%d分有ります。", 365, 24*60);

大体お分かり頂けると思いマスが、

printf("%d", 数値)

この様に書くと、%dの部分が数値になって表示されます。
扱える数字のタイプは整数のみです。 (実数は扱えません)
そして、数値の部分には 24*60 の様な 式でもOKです。 (掛け算の記号は*(アスタリスク)で表します)

よって、 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30の様なキモイ式でもOKです。
(但し、あまりにも大きすぎる数は表示できません。)

それでは、四則演算子などのプログラミングにおける記号の一覧を覚えましょう。

記号 意味
+ 加算 50+50 = 100
- 減算 100-50 = 50
/ 除算 100/2 = 50
% 剰余(余り) 100/30 = 10
< 左不等号(大きい) 50 < 100 = 1
<= 等価左不等号(以上) 50 <= 50 = 1
> 右不等号(小さい) 100 > 50 = 1
>= 等価右不等号(以下) 50 >= 50 = 1

1は真(true)と言って、正しいという特別な意味が有り、 0は逆に偽(false)という特別な意味がある。
全てのプログラミング言語で、この値は共通していマス。

それでは、次に

printf("1.0 = %f, 2.0 = %1.0f, 1+2=%10.5f", 1.0, 2.0, (1.0+2.0));

ですが、これは浮動小数点(実数)を扱うタイプです。
先ほどの %dとは反対で、整数は扱えないが実数を扱えるものデス。

そして、記述する際に気を付けなければならない事は必ず小数点を付ける事です。
もし、付け忘れると意味不明な数値になります。

それと (1.0+2.0) の様に括弧が付いていますが 有っても無くても良いです。
しかし、付けた方が分かり易く 無難です。

ちなみに、(10*(1+1))とすると 括弧内の式が優先されて (10*2) と同じ値になります。

最後に %c の説明。

printf("a = %d, 97 = %c", 'a', 97);

コレは、今までと違って 整数も扱えないし実数も扱えません。
しかし 文字1つだけを扱うことができます。

それでは、実行結果を見て下さい。
a = 97, 97 = a と成っているハズです。

これは、コンピュータが英数字を扱う為に内部で数値として処理を行っているからデス。


この、数値に対応する表を ASCIIコード(アスキーコード)と言います。
それではASCIIコード表を見てみましょう。 (書くのが面倒だから画像デス。)



アスキーコードは、0から127までで 日本語は有りません。
その中で文字は 33から 126までです。(0から32, 127番は特殊な文字で見えません)

ちなみに、(0xほげほげ)という部分は 16進数と言って これと言って意味がありません。
見栄えが悪いから適当に付け足したダケです。


// おまけ
// ASCIIコード出力プログラムのソースコード(インデントがちょっとオカシク見えるカモ)

#include <stdio.h>

#define PRINT_LINE puts("------------------------------------------------------------------------------")

int main(void){
int i, j=0;

PRINT_LINE;
puts(" ASCIIコード出力");
PRINT_LINE;

for(i='!'; i <= '~'; i++){
/* 9文字毎に改行 */
if(j == 9){
puts("");
j = 0;
}
printf("%3d(0x%02X) = %c\t", i, i, i);
j++;

}
puts("");
PRINT_LINE;

return 0;
}