C言語入門 標準出力

Last-modified: 2012-06-16 (土) 14:53:39
 

今回の目的

標準入力に望んだ形式でデータを出力できるようにすることが目的です。

標準入力と標準出力

標準入力、標準出力、標準エラー出力は特別なファイルで、プログラム実行時に自動的に開かれます。
デフォルトの状態では、標準入力がキーボード、標準出力及び標準エラー出力がディスプレイになっています。

標準入出力は、リダイレクションにより、ファイルに切り替えたり、
パイプを用いることで他のプロセスに渡したり受け取ったりすることが可能です。

標準入出力を使うためには、#include<stdio.h> の記述が必要です
stdio は、Standard Input Output の略です。

標準出力の利用

printf 関数を利用することで、標準出力が利用できます。
ここでは、printf 関数の使い方をまず説明しましょう。

printf 関数は次のような形式で呼び出します。

 printf("フォーマット文字列", 値1, 値2, ...);

printf のように括弧をつけて呼び出すものを、関数といいます。
そして、関数に渡す値のことを引数 (ひきすう) と呼びます。
printf 関数は、1つ以上の引数を受け取る関数です。

1つ目の引数であるフォーマット文字列は、2つめ以降の引数がどのようなものかを指定するものです。
引数を1つしか使わないという選択も可能です。

printf フォーマット

printf のフォーマット文字列はかなり複雑なため、一般的なものを紹介します。
詳しく知りたい方は、自分で検べて下さい。

正式な書式は次のようになります。

% フラグ フィールド幅 .精度 型修飾 変換文字

このうち、変換文字以外は省略可能です。

フラグ

  • - 左詰めで出力する
  • 0 フィールド幅が指定された場合にゼロで埋める

どちらとも次のフィールド幅指定に関係します。

フィールド幅

フィールド幅を指定すると、出力の幅がこれより小さい場合は空白で埋められます。
また、フラグで0を指定している場合、空白の代わりにゼロで埋められます。

printf("%5d\n", 12);
printf("%-5d\n", 12);
printf("%05d\n", 12);

次のように出力されます。

printf-padding_0.png

精度

小数点以下の桁数を指定するときに使います。
一般的に、四捨五入が行われます。

printf("%.2f", 2.71828);

表示例

2.72

型修飾

  • h short
  • l long
  • ll long long
  • L long double

その他の型 (char, int, float, double) ではいりません。

変換文字

必須です。
これだけ指定すれば、とりあえず出力ができます。

  • 整数
    • d 10進数 (符号あり)
    • u 10進数 (符号なし)
    • i 8進数 (符号あり)
    • o 8進数 (符号なし)
    • x 16進数 (符号なし)
  • 実数
    • e 指数形式で表示
    • f 小数形式で表示
    • g e, f の短い方で表示

char 型の扱い

C言語では char 型は整数型の中で特殊な型です。
char 型は、1バイトという性質上、文字文字列を表す際に利用されます。
このような char 型の使い方については、後日詳細に扱います。

printf 関数の使用例

具体的な使用例を紹介します。

単純に数値を表示する (10進数)

char a = 1;
short b = 2;
int c = 3;
long d = 4;
long long e = 5;

float f = 5.1;
double g = 5.2;
long double h = 5.3;

printf("%d\n", a);
printf("%hd\n", b);
printf("%d\n", c);
printf("%ld\n", d);
printf("%lld\n", e);

printf("%f\n", f);
printf("%f\n",g);
printf("%Lf\n", h);

表示例

1
2
3
4
5
5.100000
5.200000
5.300000

n 進数で表示する

long a = 16;

printf("%x\n", 16);
printf("%lx\n", a);
printf("%o\n", 10);

表示例

10
10
12

桁数を指定して表示する

printf("%d|\n", 1);
printf("%5d|\n", 2);
printf("%-5d|\n", 4);
printf("%05d|\n", 8);
printf("%f|\n", 1.6);
printf("%.2f|\n", 3.2);
printf("%5.2f|\n", 6.4);
printf("%-5.2f|\n", 1.28);
printf("%05.2f|\n", 2.56);

表示例

printf-padding2.png

printf 関数以外の方法

printf 関数は万能であり、printf 関数で出力したいものが出力できないということはあまりありません *1

ここで紹介する関数は、printf 関数で代用可能であり、使用しなくてもかまいません。
覚えてなくても、特に問題にはならないでしょう。

puts 関数

文字列を出力して改行します。
数値などの出力はできません。

以下の2行は同等です。

puts("Goodbye Pascal");
printf("Goodbye Pascal\n");

出力

Goodbye Pascal
Goodbye Pascal

putchar 関数

文字を1文字だけ出力します。

以下の2行は同じ出力結果になります。

putchar('A');
printf("A");

出力

AA

文字と文字列

プログラミングでは、文字といえば1文字のことをいいます。
複数の文字の場合は文字列といいます。

C言語では、文字をシングルクオーテーション (一重引用符) で囲み、文字列をダブルクオーテーション (二重引用符) で囲みます。

文字列については、また後で詳しく扱います。

課題

課題1

まず、int 型の変数 y, m, d を用意して、今日の日付 (年, 月, 日) を代入せよ。
次に、printf 関数を用いて、次に指定する形式で表示しなさい。

年4桁 月2桁 日2桁

月や日が1桁であっても2桁であっても、常に2桁で表示させること。

2011年9月1日

2011 09 01

2011年12月12日

2011 12 12

課題2

double 型の変数 pi に、円周率を小数点以下5桁までの有効数字で代入しなさい。
次に、printf 関数を用いて、変数 pi の値を小数点以下2桁まで表示しなさい。

円周率*2

3.14159

挑戦課題

外部サイトの問題です。
AOJ の登録方法は オンラインジャッジのススメ をご覧ください。

 


*1 バイナリデータを除く。
*2 もちろん覚えてますよね。