それぞれ 括弧内を提出すること. 写しただけでなく, 自分で機能を考えてそれを実現するプログラムを作成すること.
例えば以下のようなプログラムを作成してみましょう. これは, 標準出力に出力するプログラムである.
#include <stdio.h> #include <stdlib.h> int main(void) { int i; for(i=0; i<50; i++) printf("%d,%d\n", i, i*i); return EXIT_SUCCESS; }
「標準出力」(STDard Output)への出力は, 特に指定しない場合には画面に出力される.
この結果をファイルに保存するためには, リダイレクトを用いる. そのためには, 後述するように端末の中でプログラムを実行する.
$ ./a.out > abc.csv
$ more abc.csvまた, ここで挙げたプログラムで出力した結果は, Excel や OpenOffice の Calc などに テキスト(CSV; Comma-Separated Values)として読み込むことにより, グラフ化できる.
$ ls
$ dir
$ Z:
$ cd folderA一つ上(親)のディレクトリに移動する場合は, 親のディレクトリを表す..という特殊な名前を用いる.
$ cd ..
$ abc.exeUNIX の場合
$ ./a.out
出力結果をファイルに保存する場合は,
Windowsの場合
$ abc.exe > abc.csvUNIX の場合
$ ./a.out > abc.csv
出力先のファイルが既に存在する場合は, 上書きされてしまうので十分注意すること.
KDevelop の場合は,
~/hello$ cd debug ~/hello/debug$ cd src
~/hello/debug/src$ ls Makefile hello hello.o実行ファイルであることを表すためにファイル名の後ろに アスタリスク(*)が表示されている場合もあるが *はファイル名には含まれないので注意すること.
src の中に実行ファイル(次の例では hello)が作成されていれば, そのファイル名の前に ./を付けて, 実行する.
~/hello/debug/src$ ./hello
~/hello/debug/src$ ./hello > abc.csv
#include <stdio.h> #include <stdlib.h> int main(void) { int returned_value, x, y; while(1){ returned_value = scanf("%d%d", &x, &y); if(returned_value == EOF) break; printf("%d X %d = %d\n", x, y, x*y); } return EXIT_SUCCESS; }ここで EOFは入力が終了したことを意味する整数である.
例えば次のように実行できる.
$./a.out 3 4 3 X 4 = 13 8 7 8 X 7 = 56 ^ZWindows では
^Z
Unix では ^D
により入力を終了できる.
ここで, ^Z
はコントロールキー (Ctrl) を押しながら Zを押すことを意味する.
このうち 「3 4」の行と「8 7」の行は, キーボードからの入力である.
予め次のようなデータのファイルを作成しておくと, ファイルから入力できる.
3 4 8 7
このファイルのファイル名をabc.datとすると次のように実行できる. ここで 矢印(<)の向きが, 標準出力の出力先を変更する時とは, 逆であることに注意すること.
$ ./a.out < abc.dat 3 X 4 = 12 8 X 9 = 72
上のプログラムは慣用的に次のように書かれる.
#include <stdio.h> #include <stdlib.h> int main(void) { int x, y; while ( scanf("%d%d", &x, &y) != EOF ) { printf("%d X %d = %d\n", x, y, x*y); } return EXIT_SUCCESS; }char 型の入力については, 教科書L8-11を参照のこと.
ここまでの例では 数値をコンマで区切って入力できない. フィールドをコンマで区切って入力する場合は, scanf の書式の対応する部分に コンマ(,) を記述する.
#include <stdio.h> #include <stdlib.h> // フィールドをコンマで区切って入力する場合は, // scanf の書式の対応する部分に コンマ(,) を記述する. int main(void) { int x, y; while ( scanf("%d,%d", &x, &y) != EOF ) { printf("%d X %d = %d\n", x, y, x*y); } return EXIT_SUCCESS; }
(c)1999-2013 Tetsuya Makimura