コンピューターのもっとも基本的な入出力装置であるキーボードとディスプレイをコンソー
ル(console:操作卓)と呼ぶ.これらのコンソール入出力を利用した関数のプログラムの学習をする.
とは言え,諸君はこれらの関数はかなり使ってきている.ここではそれら内容を整理して,
これらの使い方の復習を行う.
コンソール入出力のことを,標準入出力と言うことがある.この標準入出力には,ファイ
ルの入出力先に指定ができ
3,そのために名前が付いている.標準入力を
stdin,標準出
力を
stdoutと言う.これらの関係を,以下に示す.
キーボード |
|
標準入力 |
|
stdin |
ディスプレイ |
|
標準出力 |
|
stdout |
printf()関数を使えば,簡単にディスプレイ(標準出力)に表示できる.括弧内の最
初のクォーテーションで囲まれた部分が出力される.
Hello worldのプログラムでお
なじみであろう.変数に格納されたデータ--整数や実数,文字,文字列--を表示させた
ければ,変換仕様(p.320〜)を使う.教科書には,いろいろ書かれており,諸君にはわか
りにくいだろう.実際には,
printf("%d+%d=%d\n", a, b, result);
にように書く.この文の動作は,図
1のとおりである.
図 1:
ディスプレイに表示させるprintf関数の意味
|
ここで難しいのは,変換仕様の使い方である.本講義で使う変換仕様はそんなに多くなく,
表1にまとめることができる.この中でも,文字列は滅多に使わ
ないだろう.
あと,重要なことはエスケープシーケンス(p.27)である.エスケープシーケンスもいろい
ろあるが,'\n'と'\t'の使い方が分かれば,本
講義では十分である.
表 1:
型に依存する変数定義や入出力
型 |
表示方法 |
変換仕様 |
備考 |
整数 |
|
%d |
10進数に変換 |
実数 |
浮動小数点 |
%f |
小数点の表示.非常に大きな数値や小さ
い数値の表示には向かない. |
|
|
%20.15f |
合計20カラムで,小数点以下15桁で表示 |
|
指数表示 |
%e |
非常に大きな数値や小さい数値を含む場合に都合が良い. |
文字 |
|
%c |
ひとつの文字を表示する場合に使う. |
文字列 |
|
%s |
文字列を表示させる場合に使う. |
書式付き出力(
printf)を使うと,任意の形でデータを出力できる.教科書のP.320〜
325を読み,以下の練習問題を実施せよ.
- [練習1]
- 円周率を,いろいろなフォーマットで出力せよ.ただし,円
周率はmath.hの中でM_PIで定義されている.それ
は,リスト4のようにすれば表示できる.
- 通常の%fで表示せよ.
- 小数点以下,3桁で表示せよ.
- 小数点以下,10桁で表示せよ.
- 指数形式で表示せよ.
リスト4には,数学関数用のヘッダーファイル
math.hが使われているので,コンパイルには-lmオ
プションが必要である.例えば
gcc -o fuga hoge.c -lm
とする.
- [練習2]
- 整数の22446688を8進数で表示せよ.また,16進数で表
示せよ.
- [練習3]
- 円周率と円周率の2乗の両方を小数点以下,10桁で表示せよ.た
だし,2つの数値の間はタブ区切りとする.
1 #include <stdio.h>
2 #include <math.h>
3
4 int main(void){
5
6 printf("%f\n", M_PI);
7
8 return 0;
9 }
キーボード入力の場合,書式付入力の
scanf()という関数を使う方法が最も簡単である.こ
の関数の引数は,ポインター
4で,キー
ボードからのデータを入れる変数のアドレスを指定する.ポインターだのアド
レスだのと面倒なことが多いが,そんなことが分からなくても,キーボードからデータの
入力は可能なので安心してよい.
標準入力(キーボード)からデータを読み込んで,それを変数hogeに代入する場合,
scanf("%lf",&hoge);
と書けばよい.これは,
- scanf()は,キーボードからデータを入力するための関数.
- %lfは入力データが倍精度実数を表す.
- 変数hogeはデータの格納先を表す変数である.変数の前に&を付ける
ことを忘れてはならない.
というようなことを表している.図
2のような感じである.
図 2:
キーボードからデータを変数に取り込むscanf関数の意味
|
キーボードからのデータの入力でも型を指定する必要がある.このようにコンピューター
プログラムでは型というものが重要となる.これは,データをメモリーに格納する方法をプログラ
マーが指定する必要があるからである.これまで,使ってきた型指定の方法を表
2にまとめる.ただし,倍精度実数で,非常に大きな数値や小さい
数値の場合指数表示(%e)を使う.
表を見て分かると降り,文字列は少し複雑である.幸いなことに,本講義では文字列を使
うことはほとんどないので,この部分は余り気にしなくてよい.
表 2:
型に依存する変数定義や入出力
|
整数 |
倍精度実数 |
文字 |
文字列 |
変数 |
int hoge |
double hoge |
char hoge |
char hoge[256] |
入力 |
scanf("%d",&hoge) |
scanf("%lf",&hoge) |
scanf("%c",&hoge) |
scanf("%s",hoge) |
出力 |
printf("%d",hoge) |
printf("%f",hoge) |
printf("%c",hoge) |
printf("%s",hoge) |
|
|
printf("%e",hoge) |
|
|
データを入力する場合,データを入れた後に完了を示す
[Enter]キーを押す.この
[Enter]キーを示す文字'
\n'も読み込まれようとして,悪さ
をすることがある.この,改行コード'
\n'を読み捨てる必要がある.
それを行うために,教科書(p.335)には3通りの方法(p.337)を示している.
- 数字を読み込んだあと,%*cで改行文字を読み捨てる.
- 数字を読み込んだあと,getchar()で1文字読み捨てる.
- 数字を読み込んだあと,gets()で残りの文字列を全て読み捨てる.
どれも一長一短がある.諸君が作成するプログラムは,諸君自身でしか使わないので,入
力の処理にこだわらない方がよい.へんなデータを入れて,プログラムがクラッシュして
も損害は無いからである.そこで,本講義では最も簡単な,最初の方法をとることにする.
すなわち,キーボードから実数を読み込んで,変数hogeに代入する場合,
scanf("%lf%*c",&hoge);
と書く.
リスト
5にいろいろな型のデータを読み込んで,表示するプログラム
を示す.このプログラムが理解できれば,コンソール入出力の基本はOKである.
1 #include <stdio.h>
2
3 int main(void){
4 int i;
5 double d;
6 char c;
7 char s[256];
8
9 scanf("%d%*c",&i);
10 scanf("%lf%*c",&d);
11 scanf("%c%*c",&c);
12 scanf("%s%*c",s);
13
14 printf("\n\n");
15
16 printf("%d\n",i);
17 printf("%f\n",d);
18 printf("%c\n",c);
19 printf("%s\n",s);
20
21 return 0;
22
23 }
- [練習4]
- キーボードから角度[deg]を読み込んで,三角関数
(
)の値を表示するプログラムを作成せよ.出力
する三角関数の値は,1行に表示しタブ区切りとすること.
リスト
6のプログラムの実行結果を予想せよ.分からない場合は,実行してみよ.
1 #include <stdio.h>
2 #include <math.h>
3
4 #define NP 50
5
6 int main(void){
7 int i, iy;
8 double x;
9
10 for(i=0; i<=NP; i++){
11 x = 2*M_PI/NP*i;
12 iy = 30*sin(x)+40;
13 printf("%*c\n",iy,'*');
14 }
15
16 return 0;
17 }
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成19年6月26日