• 検索結果がありません。

プログラミング演習

N/A
N/A
Protected

Academic year: 2021

シェア "プログラミング演習"

Copied!
24
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング演習

プログラミング演習 II II

2005 2005

1 1

19 19

日(第日(第

9 9

回)回)

理学部数学科・木村巌 理学部数学科・木村巌

(2)

前回までの復習 前回までの復習

共用体(共用体(

union type union type

列挙列挙

(enumerated type (enumerated type

構造体、構造体のポインタ、構造体、構造体のポインタ、

typedef typedef

などなど を用いた、リンクトリストの実装例

を用いた、リンクトリストの実装例

(3)

今日学ぶこと 今日学ぶこと

ファイル入出力ファイル入出力

標準入出力から・への入出力標準入出力から・への入出力

ファイルとストリームファイルとストリーム

ストリームへの入出力ストリームへの入出力

コマンドラインからの入力コマンドラインからの入力

(4)

ストリーム ストリーム

ストリーム:入出力できるモノを抽象化ストリーム:入出力できるモノを抽象化 した概念した概念

 C C

言語のプログラムでは、言語のプログラムでは、

標準入力(キーボード)標準入力(キーボード)

標準出力(画面)標準出力(画面)

標準エラー出力(画面)標準エラー出力(画面)

以上三つが、デフォルトで

以上三つが、デフォルトで

open open

されていされてい

(5)

書式付き入出力 書式付き入出力

標準入力・出力への書式付き入出力標準入力・出力への書式付き入出力

 printf(), scanf() printf(), scanf()

 printf() printf()

の変換仕様:表の変換仕様:表

12-1 12-1

p. 388 p. 388

 scanf() scanf()

の変換仕様:表の変換仕様:表

12-2 12-2

p. 389 p. 389

出力幅、出力精度の指定出力幅、出力精度の指定

 Sample1.c Sample1.c

からから

Sample4.c Sample4.c

までを打ち込んまでを打ち込ん で、コンパイル・実行してみよう

で、コンパイル・実行してみよう

(6)

いろいろな入出力 いろいろな入出力

 scanf() scanf()

は、空白の入った文字列を読み込は、空白の入った文字列を読み込 めないめない

 gets() gets()

は使うべきではないは使うべきではない

読み込んだデータの保存場所が、読み込んだ読み込んだデータの保存場所が、読み込んだ データよりも少ない場合、メモリが上書きさ データよりも少ない場合、メモリが上書きさ れるれる

 fgets() fgets()

を使う(後述)を使う(後述)

(7)

1 1

文字入出力文字入出力

 int getchar(void), void putchar(int) int getchar(void), void putchar(int)

 getchar() getchar()

の返値はの返値は

int. int.

char char

ではない)ではない)

 EOF EOF

End Of File End Of File

)が、多くの環境で)が、多くの環境で

-1 -1

いう値を割り当てられるが、

いう値を割り当てられるが、

char char

だと符号なだと符号な しなので、

しなので、

-1 -1

255 255

と勘違いしてしまうと勘違いしてしまう

 Sample7.c Sample7.c

を入力して、コンパイル・実行を入力して、コンパイル・実行 してみよう

してみよう

(8)

ファイル入出力 ファイル入出力

ファイルをオープンする:ファイルとスファイルをオープンする:ファイルとス トリームとを結びつける

トリームとを結びつける

ファイル(と結べつけられたストリーファイル(と結べつけられたストリー ム)を読み書きする

ム)を読み書きする

ファイルをクローズする:ファイルとスファイルをクローズする:ファイルとス トリームとの結びつきを解消する

トリームとの結びつきを解消する

(9)

fopen(), fclose() fopen(), fclose()

ファイルを開く:ファイルを開く:

FILE *fopen (char *fn, char * FILE *fopen (char *fn, char * mode);

mode);

 fn fn

で指定されたファイル名を持つファイルをで指定されたファイル名を持つファイルを

mode mode

で指定されたモードでオープンするで指定されたモードでオープンする

 FILE FILE

型の構造体へのポインタが返値.これを型の構造体へのポインタが返値.これを ファイルポインタという.

ファイルポインタという.

ファイルポインタは、ストリームという概念の実ファイルポインタは、ストリームという概念の実

ファイルモード:表ファイルモード:表

12-3 12-3

p. 402 p. 402

)参照)参照

 Sample8.c Sample8.c

をコンパイル・実行してみようをコンパイル・実行してみよう

(10)

fopen(), fclose()

fopen(), fclose()

の使い方の使い方

 fopen() fopen()

は、ファイルをオープンできなは、ファイルをオープンできな かった場合、

かった場合、

NULL NULL

を返すを返す

ファイルへの入出力が済んだら、ファイファイルへの入出力が済んだら、ファイ ルを閉じる:

ルを閉じる:

fclose() fclose()

(11)

ファイルへの出力 ファイルへの出力

 fputs(char *str, FILE *fp); fputs(char *str, FILE *fp);

ファイルポインタファイルポインタ

fp fp

へ、へ、

str str

を出力するを出力する

 fprintf(FILE *fp, char *fmt, …); fprintf(FILE *fp, char *fmt, …);

ファイルポインタファイルポインタ

fp fp

へ、書式指定へ、書式指定

fmt fmt

出力する.

出力する.

printf() printf()

と同じ書式指定が可能と同じ書式指定が可能

(12)

ファイルからの入力 ファイルからの入力

ファイルからのファイルからの

1 1

行入力行入力

fgets(char *buf, size_t n, FILE *fp); fgets(char *buf, size_t n, FILE *fp);

ファイルポインタファイルポインタ

fp fp

から、から、

buf buf

へ、へ、

n byte n byte

読み込む読み込む

読み込むバイト数を指定できるので、バッファをあ読み込むバイト数を指定できるので、バッファをあ ふれさせる心配がない(

ふれさせる心配がない(

gets() gets()

の代わりに使う)の代わりに使う)

大量のデータを入力大量のデータを入力

fscanf(FILE *fp, str *fmt, …); fscanf(FILE *fp, str *fmt, …);

書式指定書式指定

fmt fmt

に従って、ファイルポインタに従って、ファイルポインタ

fp fp

から読から読

(13)

バイナリファイルの読み書き バイナリファイルの読み書き

テキストファイルとバイナリファイルテキストファイルとバイナリファイル

テキストファイル:人間がそのまま読め、テキテキストファイル:人間がそのまま読め、テキ ストエディタ(メモ帳や秀丸など)で編集でき ストエディタ(メモ帳や秀丸など)で編集でき

バイナリファイル:それ以外バイナリファイル:それ以外

バイナリファイルの利点バイナリファイルの利点

計算機で処理しやすいデータのままでよい計算機で処理しやすいデータのままでよい

(人間に読みやすいように加工していない)(人間に読みやすいように加工していない)

処理が速い処理が速い

(14)

バイナリファイル書き出し バイナリファイル書き出し

 fopen() fopen()

で、モードにで、モードに

b b

を加えると、バイを加えると、バイ ナリファイルとしてオープンする

ナリファイルとしてオープンする

 size_t fwrite (void *buf, size_t n, size_t c, FIL size_t fwrite (void *buf, size_t n, size_t c, FIL E *fp);

E *fp);

 buf buf

のデータを、のデータを、

n byte n byte

分、分、

c c

回、ファイ回、ファイ ルポインタ

ルポインタ

fp fp

へ書き出すへ書き出す

Sample13.c

Sample13.c

をコンパイル・実行してみよをコンパイル・実行してみよ

(15)

バイナリファイルの読み込み バイナリファイルの読み込み

 size_t fread (void *buf, size_t n, size_t c, FILE size_t fread (void *buf, size_t n, size_t c, FILE

*fp);

*fp);

ファイルポインタファイルポインタ

fp fp

から、から、

n byte, c n byte, c

回、回、

buf buf

へ読み込むへ読み込む

 Sample14.c Sample14.c

を入力し、コンパイル・実行を入力し、コンパイル・実行 してみよう

してみよう

(16)

ランダムアクセス ランダムアクセス

シーケンシャルアクセス(シーケンシャルアクセス(

sequential acces sequential acces s s

ファイルの先頭から順番に、データの読み書ファイルの先頭から順番に、データの読み書 きを行うきを行う

ランダムアクセス(ランダムアクセス(

random access random access

ファイルの任意の場所について、データの読ファイルの任意の場所について、データの読 み書きを行う

み書きを行う

(17)

ランダムアクセス ランダムアクセス

 int fseek(FILE *fp, size_t n, int WHENCE); int fseek(FILE *fp, size_t n, int WHENCE);

ファイルポインタファイルポインタ

fp fp

のファイルの、のファイルの、

WHENC WHENC E E

で指定される位置から、で指定される位置から、

n n

バイト移動するバイト移動する

 WHENCE WHENCE

の部分は、の部分は、

SEEK_SET, SEEK_CUR, SEEK_SET, SEEK_CUR, SEEK_END

SEEK_END

のいずれか.意味は、教科書のいずれか.意味は、教科書

p. 41 p. 41

7 7

の表を見よの表を見よ

(18)

ランダムアクセスしてファイルを ランダムアクセスしてファイルを

読む読む

 size_t fread(void *BUF, size_t SIZE, size_t C size_t fread(void *BUF, size_t SIZE, size_t C OUNT, FILE *FP);

OUNT, FILE *FP);

ファイルポインタファイルポインタ

FP FP

のファイルから、のファイルから、

B B UF UF

に、に、

SIZE SIZE

バイト、バイト、

COUNT COUNT

回読み込回読み込

 Sample15.c Sample15.c

をコンパイル・実行してみよをコンパイル・実行してみよ

(19)

コマンドライン引数を使う コマンドライン引数を使う

 int main (int ac, char *av[]) int main (int ac, char *av[])

main() main()

関数を関数を 宣言する宣言する

プログラムの引数(起動時に指定されたプログラムの引数(起動時に指定された 値)を、値)を、

av av

という配列を使って受け取るという配列を使って受け取る

ことが出来る ことが出来る

 ac ac

は、引数の数は、引数の数

 av av

は、文字列の配列(それぞれが引数)は、文字列の配列(それぞれが引数)

 av[0] av[0]

は、プログラムの名前が入っているは、プログラムの名前が入っている

(20)

簡単な例簡単な例

#include <stdio.h>

#include <stdio.h>

int main (int ac, char *av[]) int main (int ac, char *av[]) { {

printf (“ac = %d, av[0] = %s, av[1] = %s.\n”, printf (“ac = %d, av[0] = %s, av[1] = %s.\n”, ac, av[0], av[1]);

ac, av[0], av[1]);

return 0;

return 0;

} }

上記を入力(上記を入力(

Sample.c Sample.c

)し、コンパイル・実行してみよう)し、コンパイル・実行してみよう

(21)

コマンドライン引数 コマンドライン引数

コマンドライン引数の使い道コマンドライン引数の使い道

プログラムに、処理すべきファイルを指定すプログラムに、処理すべきファイルを指定す

与える引数によって、挙動を変える与える引数によって、挙動を変える

 Sample16.c Sample16.c

をコンパイル・実行してみよをコンパイル・実行してみよ

(22)

今日学んだこと 今日学んだこと

ファイル入出力ファイル入出力

標準入出力から・への入出力標準入出力から・への入出力

ファイルとストリームファイルとストリーム

ストリームへの入出力ストリームへの入出力

コマンドラインからの入力コマンドラインからの入力

(23)

レポート課題 レポート課題

ファイル名を引数として与えると、そのファイル名を引数として与えると、その ファイルの内容を端末に表示するプログ ファイルの内容を端末に表示するプログ ラムラム

mycat-n.c mycat-n.c

を作れ.ただし、行の先頭を作れ.ただし、行の先頭

に、行番号を表示すること.

に、行番号を表示すること.

実行例:実行例:

$ ./mycat-n.exe llist.h

1: typedef struct _Node { 2: char *contents;

3: struct _Node *next;

4: } *Node;

5:

(24)

レポート課題 レポート課題

締め切り:締め切り:

2005 2005

1 1

25 25

日一杯(日本日一杯(日本 時間で)時間で)

提出:メールで木村(提出:メールで木村(

iwao iwao @ @ sci sci . . toyama-u toyama-u .ac. .ac. jp jp

)まで.)まで.

感想などあると木村が喜びます感想などあると木村が喜びます

参照

関連したドキュメント

 TV会議やハンズフリー電話においては、音声のスピーカからマイク

12,000 円割引 + 500 円割引 = 12,500 インターネットからの 新規お申込みだと 円割引 ※1. 初度登録から

WAV/AIFF ファイルから BR シリーズのデータへの変換(Import)において、サンプリング周波 数が 44.1kHz 以外の WAV ファイルが選択されました。.

【ご注意点】 ・カタログの中からお好みの商品を1点お 選びいただき、同封のハガキに記載のお

Using the special C- mount ring adapter, the lens can be directly attached to a CCD camera, enabling it to be used as a low cost image ob- servation lens and variable focus lens

ポンプの回転方向が逆である 回転部分が片当たりしている 回転部分に異物がかみ込んでいる

In addition, any information given in this document is subject to customer’s compliance with its obligations stated in this document and any applicable legal requirements, norms

文字を読むことに慣れていない小学校低学年 の学習者にとって,文字情報のみから物語世界