情報処理演習 B8クラス

Similar documents
ファイル入出力

Taro-ファイル処理(公開版).jtd

Microsoft Word - Cプログラミング演習(10)

Microsoft PowerPoint - 14th.ppt [互換モード]

Microsoft PowerPoint - prog04.ppt

PowerPoint Presentation

C言語講座 ~ファイル入出力編~

PowerPoint Presentation

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

PowerPoint プレゼンテーション

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - kougi4.ppt

PowerPoint プレゼンテーション

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

02: 変数と標準入出力

プログラミング基礎

Microsoft PowerPoint - prog06.ppt

PowerPoint プレゼンテーション

Microsoft Word - Cプログラミング演習(12)

プログラミング演習 土曜日(Q組)

今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ

Microsoft Word - no15.docx

格子点データの解析 1 月平均全球客観解析データの解析 客観解析データや衛星観測データのような格子点データは バイナリ形式のデータファイルに記録されていることが多いです バイナリ形式のデータファイルは テキスト形式の場合とは異なり 直接中身を見ることができません プログラムを書いてデータを読み出して

memo

Microsoft PowerPoint - lec10.ppt

Cプログラミング1(再) 第2回

PowerPoint プレゼンテーション

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

プログラミング基礎

プログラミング実習I

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

PowerPoint Presentation

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

Transcription:

予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ ( ポインタ, アドレス, ポインタと配列の関係など ) 10. 終了 中間レポート2 11. 終了 文字列とポインタ ( ポインタによる文字列の操作など ) 12. 終了 予備日 13. 1/12 ファイル処理 14. 1/13 最終レポート ( 統一補講日 ) 15. 1/19 最終レポート このレジュメ, 演習課題のプログラム例は,WebCT, または http://www.ritsumei.ac.jp/~ykubo から閲覧, 印刷可能です.

本日の内容 ( 第 13 章 ) ファイル処理 2 ファイルとストリーム ファイルのオープン クローズ データの読み込み 書き込み テキストとバイナリ データを読み込んだり, 保存したりする ファイル の取り扱いについて学習する

ファイルとストリーム 3 ストリーム : ファイル, キーボード, ディスプレイ, プリンタ等々の周辺機器に対するデータの流れの概念 標準ストリーム stdin: 標準入力ストリーム ( 入力を読み取る. 大抵の場合はキーボード.scanf 関数,getchar 関数など ) stdout: 標準出力ストリーム ( 出力を書き込む. 大抵の場合はディスプレイ.printf 関数,puts 関数など ) FILE 型のポインタ stdio.h で定義 stderr: 標準エラーストリーム ( エラーを書き出す. 大抵の場合はディスプレイ ) FILE 型 (FILE 型はストリームの制御に必要な情報を記録するための型 ) ファイル位置表示子 : 現在アクセスしているアドレスを記録 エラー表示子 : 読み取りエラー 書き込みエラーを記録 ファイル終了表示子 : ファイルの終わりに達したかどうかを記録

ファイルのオープン クローズ 4 ファイルを使用するには, ファイルを オープン する. 使い終わったら クローズ する ファイルのオープン fopen 関数を利用する モードを選択 : 読み取り書き込み更新追加 ファイルのクローズ fclose 関数を利用する

ファイルのオープン クローズ ( 例 ) 5 "abc" というファイルを " 読み取りモード " でオープンし, 閉じるプログラム. オープン出来なかった場合は, ファイルをオープンできません と表示する /* */ List 13-1 ファイルのオープンとクローズ #include <stdio.h> int main(void) { FILE *fp; fp = fopen("abc", "r"); /* ファイルのオープン */ if (fp == NULL) printf(" a ファイルをオープンできません n"); else { /* ファイルから読込みなどを行う */ fclose(fp); /* ファイルのクローズ */ return (0);

ファイルからデータを読み込む 6 Aiba 160 59.3 Kurata 162 51.6 Masaki 182 76.5 Tanaka 170 60.7 Tsuji 175 83.9 Washio 175 72.5 データファイル hw.dat データファイル hw.dat をオープンする fp = fopen("hw.dat","r"); データファイル hw.dat から 名前( 文字列 ) 身長(double 型実数 ) 体重(double 型実数 ) を読み取る. fscanf(fp, "%s%lf%lf", name, &height, &weight); データファイル hw.dat をクローズする fclose(fp);

ファイルからデータを読み込む ( 例 ) 7 /* */ #include <stdio.h> 身長と体重を読み込んで平均値を求めて表示する int main(void) { FILE *fp; int ninzu = 0; /* 人数 */ char name[100]; /* 名前 */ double height, weight; /* 身長 体重 */ double hsum = 0.0; /* 身長の合計 */ double wsum = 0.0; /* 体重の合計 */ List 13-2 Aiba 160 59.3 if ((fp = fopen("hw.dat", "r")) == NULL) /* オープン */ printf(" aファイルをオープンできません n"); else { while (fscanf(fp, "%s%lf%lf", name, &height, &weight) == 3) { printf("%-10s %5.1f %5.1f n", name, height, weight); ninzu++; hsum += height; wsum += weight; printf("---------------------- n"); printf(" 平均 %5.1f %5.1f", hsum / ninzu, wsum / ninzu); fclose(fp); /* クローズ */ return (0); 実行結果 Kurata 162 51.6 Masaki 182 76.5 Tanaka 170 60.7 Tsuji 175 83.9 Washio 175 72.5 --------------------- 平均 170.7 67.4

ファイルにデータを書き込む 8 List13-2( 身長と体重を読み込んで平均値を求めて表示する ) プログラムを改良して, 計算結果をファイルに記録するようにする. データ書き出しファイル kekka.dat をオープンする fp2 = fopen("kekka.dat","w"); ファイル kekka.dat に 平均身長 (double 型実数 ) 平均体重 (double 型実数 ) を書き出す fprintf(fp2, " 平均身長 :%f 平均体重 : %f ", hsum/ninzu, wsum/ninzu); ファイル kekka.dat をクローズする fclose(fp2);

ファイルにデータを書き込む ( 例 ) /* */ List 13-2( 改良 ) 身長と体重を読み込んで平均値を求めて表示する 9 #include <stdio.h> int main(void) { FILE *fp, *fp2; int ninzu = 0; /* 人数 */ char name[100]; /* 名前 */ double height, weight; /* 身長 体重 */ double hsum = 0.0; /* 身長の合計 */ double wsum = 0.0; /* 体重の合計 */ if ((fp = fopen("hw.dat", "r")) == NULL) /* オープン */ printf(" aファイルをオープンできません n"); else { while (fscanf(fp, "%s%lf%lf", name, &height, &weight) == 3) { printf("%-10s %5.1f %5.1f n", name, height, weight); ninzu++; hsum += height; wsum += weight; printf("---------------------- n"); printf(" 平均 %5.1f %5.1f", hsum / ninzu, wsum / ninzu); fclose(fp); /* クローズ */ if ((fp2 = fopen("kekka.dat", "w")) == NULL) /* オープン */ printf(" aファイルをオープンできません n"); else { printf(" 平均身長 : %f 平均体重 : %f", hsum/ninzu, wsum/ninzu); fclose(fp); /* クローズ */ return (0);

テキストファイルとバイナリファイル 10 整数 357, 2057 を fprintf 関数によってファイルに書き出す場合を考えよう (a) テキストで書き出す場合は,1 文字 1 バイトで, 各桁を 文字 として書き出す (b) バイナリで書き出す場合は,int 型の大きさ ( この場合は 2 バイト ) で,2 進数のビットの並びとして書き出す

バイナリファイルへの実数値の保存 11 double 型実数 double pi = 3.14159265358979323846; をバイナリファイルに書き出してみよう データ書き出しファイル kekka.dat をオープンする fp = fopen("kekka.dat","wb"); ファイル kekka.dat に変数 pi (double 型実数 ) に格納された値を書き出す fwrite(&pi, sizeof(double), 1, fp); 先頭番地 (&pi) から, double 型の大きさ のデータを, 1 個, fp が示す対象へ書き出す. 読み出しは? データファイル data.dat をオープンする fp = fopen("data.dat","rb"); ファイル data.dat から double 型実数を 1 個読み取り, 変数 pi に格納する fread(&pi, sizeof(double), 1, fp);

バイナリファイルへの実数値の保存 ( 例 ) 12 /* */ List 13-9 #include <stdio.h> 円周率の値をバイナリファイルに書き込んで読み取る int main(void) { FILE *fp; double pi = 3.14159265358979323846; 実行結果実行結果一例円周率は3.141592653589793116000です /* 書込み */ if ((fp = fopen("pi.bin", "wb")) == NULL) /* オープン */ printf(" a ファイルをオープンできません n"); else { fwrite(&pi, sizeof(double), 1, fp); /* pi を書き込む */ fclose(fp); /* クローズ */ /* 読取り */ if ((fp = fopen("pi.bin", "rb")) == NULL) /* オープン */ printf(" a ファイルをオープンできません n"); else { fread(&pi, sizeof(double), 1, fp); /* pi に読み取る */ printf(" 円周率は %23.21f です n", pi); fclose(fp); /* クローズ */ return (0);

演習課題 13 演習 1 List13-2 のプログラムを改良して, データファイル hw.dat からデータを読み込み, 平均身長, 平均体重を計算し, その結果をデータファイルの末尾に追加するプログラムを作成しなさい.