gengo1-12

Similar documents
gengo1-12

gengo1-12

PowerPoint プレゼンテーション

Microsoft PowerPoint - 第3回目.ppt [互換モード]

ファイル入出力

ファイル入出力

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

PowerPoint Presentation

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

演算増幅器

2006年10月5日(木)実施

情報処理演習 B8クラス

Prog1_12th

プログラミング基礎

PowerPoint Presentation

Microsoft PowerPoint - prog04.ppt

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

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

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

02: 変数と標準入出力

計算機プログラミング

※ ポイント ※

02: 変数と標準入出力

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

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

memo

PowerPoint プレゼンテーション

1. ファイルにアクセスするには ファイルにアクセスするには 1. ファイルを開く 2. アクセスする 3. ファイルを閉じるという手順を踏まなければなりません 1.1. ファイルを読み込む まずはファイルの内容を画面に表示させるプログラムを作りましょう 開始 FILE *fp char fname

Microsoft PowerPoint - kougi6.ppt

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

ポインタ変数

gengo1-6

プログラミング実習I

スライド タイトルなし

gengo1-8

Microsoft PowerPoint pptx

練習&演習問題

講習No.12

Microsoft PowerPoint - prog06.ppt

データ構造

gengo1-10

Microsoft PowerPoint pptx

プログラミング演習3 - Cプログラミング -

slide4.pptx

プログラミング演習3 - Cプログラミング -

ポインタ変数

PowerPoint プレゼンテーション

データ構造

Microsoft Word - 3new.doc

Microsoft PowerPoint - kougi4.ppt

全体ロードマップ インターネット電話 音の符号化 ( 信号処理 ) 今日 音の録音 再生 ネットワーク ( ソケット ) プログラミング ファイル入出力 インターネットの基礎 C プログラミング基礎

Microsoft Word - no15.docx

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

Microsoft Word - 06

memo

Microsoft Word - no204.docx

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

PowerPoint Presentation

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - kougi2.ppt

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

gengo1-11

Microsoft PowerPoint - kougi8.ppt

PowerPoint プレゼンテーション

訋箊æ©�ã…Šã…�ㇰㅩã…�ㅳㇰ - 第13åłž ã…Łã‡¡ã‡¤ã…«å⁄¦ç’ƒ

講習No.9

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

Prog1_10th

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

Microsoft PowerPoint - 計算機言語 第7回.ppt

第2回講義:まとめ

memo

memo

基礎プログラミング2015

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

PowerPoint プレゼンテーション

V

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

kiso2-03.key

数値計算

02: 変数と標準入出力

Microsoft Word - Training10_プリプロセッサ.docx

情報処理概論(第二日目)

ゲームエンジンの構成要素

プログラミング基礎

データ構造

プログラミング基礎

ポインタ変数

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

ポインタ変数

Prog1_15th

Microsoft PowerPoint - kougi11.ppt

C言語入門

Microsoft PowerPoint - lec10.ppt

演算増幅器

Microsoft PowerPoint ppt

Taro-リストⅢ(公開版).jtd

PowerPoint プレゼンテーション

Transcription:

外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数 a, x の宣言 変数 a, x はどの関数 (main 文を含む ) からも利用可能 外部変数はどの関数からも参照可能なので 関数を独立したブラックボックスとして定義することが困難になる 変数の隠ぺいができないため 外部変数の乱用は避けるべき 1 外部変数と局所変数 int a=10, i; double x=3.14159; printf( a = %d\n, a); sample2(); printf( %f\n, x); void sample2(void) for(i=0; i<10; i++) printf( %d\n, i); 外部変数 a, x の宣言 変数 a, x はどの関数 (main 文を含む ) からも利用可能 外部変数はどの関数からも参照可能なので 関数を独立したブラックボックスとして定義することが困難になる 変数の隠ぺいができないため 外部変数の乱用は避けるべき 繰り返し変数 i は sample2 の内部でのみ使用するので 局所変数として宣言すべき 2

プリプロセッサ コンパイルに先立ち ソースプログラムを指示された内容に従って書き直す処理を前処理 ( プリ プロセス ) という 前処理を行うプログラムをプリ プロセッサと呼ぶ 通常 コンパイラが呼び出されると自動的にプリプロセッサが働いてソースプログラムを修正し 修正済みのプログラムがコンパイラに渡される 従ってプリプロセッサの存在をユーザが意識することはない ソースファイルプリプロセスコンパイル 標準ライブラリ リンク % cc test.c -E 実行可能ファイル コンパイラオプション -E により プリプロセス後のファイルを標準出力 ( コンソ ール ) に出力 コンパイル リンクは行わない 3 前処理指令 #include ファイルの取り込みを指定!< 8 / f c 0 処理系の標準ヘッダファイルを読み込む!< 8 /CD8< ;0!< 8 />6D; ;0!< 8 f c ユーザ定義のヘッダファイルを読み込む ヘッダファイルはソースファイルと同じディレクトリに有るものとする 長いソースプログラムを複数のファイルに分割してコンパイルするときに用いる 共通する変数や関数の宣言をヘッダファイルにまとめて書く 4

前処理指令 2 #define 記号定数 ( マクロ ) の定義を指定!8 < h tp xm プリプロセッサは ソースファイルの記号定数を文字列で置き換える #define SIZE 10 int i, score[size]; for(i=0; i<size; i++) scanf( %d, &score[i]); 配列要素数をマクロ定義しておけば要素数の変更にも容易に対応可能 マクロ定義しておかないと 要素数に関係するソースの全ての部分を書き換えないといけない 大変... 5 ファイル処理 これまでは データの入出力は標準入出力 ( キーボード及びコンソール ) を用いてきた ( シェルのリダイレクションを含む ) が 入出力はファイル経由でも可能 外部記憶装置 ( ハードディスクなど ) に格納されたデータの集合をファイルという ファイルを扱うために FILE という型が stdio.h に定義されている テキストファイル (text file) とバイナリファイル (binary file) 内容が文字と改行文字などそのまま表示可能なファイルをテキストファイル データが バイト列となっているものをバイナリファイルという ここではテキストファイルのみを取り 扱う ファイルの入出力を行うには 事前 事後の操作が必要 1) ファイルのオープン ( ファイルを開く ) 2) ファイルへの入出力 3) ファイルのクローズ ( ファイルを閉じる ) 6

ファイルのオープン ファイル型へのポインタ変数宣言 fp はファイルへのポインタ 宣言しただけでは具体的なファイルを指していない ファイルのオープンには ライブラリ関数 fopen() を用いる fp = fopen("data", "w"); ファイル名 モード "w" 書き込みモード ( ファイルを新規作成 ) "r" 読み込みモード ( ファイルが存在しないとエラー ) 上記の例では 新規に data という名前のファイルが作成され ファイルへのポインタ fp はこのファ イルを指す 以後は fp を介してファイル入出力等を行う ファイル data が既存の場合 内容は消 去されて新規ファイルが作成される 7 ファイル名の指定 文字列リテラルとしてファイル名を指定し ファイルをオープンする例 char file_name[]="data"; 文字型配列として宣言と同時に初期化 fp = fopen(file_name, "w"); char file_name[100]; scanf("%s", file_name); fp = fopen(file_name, "w"); 文字型配列として宣言 scanf() で文字列として入力ヌル文字を含めて 100 文字以下! 8

ファイルオープン時のエラー処理 ファイルオープンに失敗すると fopen() は特殊な値 NULL を返す 下例のように オープンに失敗した場合 ライブラリ関数 exit() でプログラムを正常に終了 if( (fp = fopen("data", "w")) == NULL ) printf("can t open file!\n"); exit(); 書き込みモードでファイルを開く場合 ディスク容量が一杯 もしくは 読み込みモードで指定したファイルが存在しない等の理由でファイルオープンが失敗する場合がある エラー処理を行わないと ファイルへの入出力の時点で Bus error 等のプログラムの異常終了が起こる ライブラリ関数 exit() はプログラムの実行を終了する 9 ファイルへの入出力 ライブラリ関数 fprintf(), fscanf() を用いた入出力 それぞれ 標準入出力に関する printf(), scanf() に相当する fprintf(fp, "socre is %d\n", i); ファイルポインタ fp が指すファイルへ書式付き出力 fscanf(fp, "%d", &data); ファイルポインタ fp が指すファイルからデータを整数値として読み込み 変数 data に格納 使い方は printf(), scanf() と同じ 10

ファイルのクローズ オープンしたファイルはプログラム終了時にクローズする必要がある ファイルのクローズ fclose(fp); ライブラリ関数 fclose() でファイルを閉じる 一般にプログラムが終了する直前でファイルを閉じる 11 具体例 1 fp = fopen("data", "w"); fprintf(fp, "Hello!\n"); fclose(fp); data という名前のファイルを新規作成し 文字列 Hello!\n を書き込む 開いたファイルはちゃんと閉じること %./a.out % cat data Hello! % more data Hello! 実行結果は左の通り data というファイルが出来ていて 内容は Hello!\n である cat は テキストファイルを表示するコマンド 同じようなコマンドとして more がある 12

具体例 2 int score; fp = fopen("data2", "r"); while( fscanf(fp, "%d", &score)!=eof ) printf("%d\n", score); fclose(fp); 既存のファイル data2 を読み込みモード "r" で開き ファイルに書かれているデータを整数値として読み込んで表示 書き込みモード "w" でファイルを開くと ファイルが新規作成されて中身が消えてしまうので注意! ファイルオープンの際 エラー処理をしていないので data2 というファイルが存在しないと実行時エラーで異常終了する 13 具体例 2 % cat > data2 90 100 80 75 80 Ctrl-D % more data 90 100 80 75 80 %./a.out... データファイル data2 の作成 cat コマンドを用いて 端末から直接入力 もしくは emacs などのエディタを用いて直接入力 14

ファイル入出力続き ファイルから 1 文字ずつ文字を読み込むライブラリ関数 getc(), putc() 標準入出力に関する getchar(), putchar() に相当 int getc(file *fp); fp が指すファイルから 1 文字読み込み 文字コード (int) を返す int putc(int c, FILE *fp); fp が指すファイルへ文字コード c に対応する文字を書き込む 書き込み時にエラーが起こると EOF を返す 15 具体例 3 テキストファイル data_original の内容を別のファイル data_copy にコピーするプログラム FILE *fp_in, *fp_out; int code; fp_in =fopen("data_original", "r"); fp_out=fopen("data_copy", "w"); while( (code=getc(fp_in))!= EOF ) putc(code, fp_out); fclose(fp_in); fclose(fp_out); コピー元のファイルは読込みモードでオープンすること コピー元のファイルから 1 文字ずつ読み込んで コピー先のファイルへ書きだす 16

問題 1 指定したテキストファイルをオープンして内容を表示するプログラムを作れ このテキストファイルに含まれる文字の数を表示せよ テキストファイル King_Lear.txt は演習時に配付する #include <stdio.h> int code, count = 0; fp = fopen("king_lear.txt", "r"); /* fp が指すファイルから 1 文字ずつ読み取って表示 */ /* 表示 */ fclose(fp); 17 問題 2 成績が記入してあるファイルを読み込み 平均点を表示するプログラム なお データファイル名は score_data 成績は 100 点満点で整数として記入されているとする データファイルは演習時に配付する データ入力にリダイレクションは使わず ファイルをオープンして読み込むこと " 6 D e dv l s ( o r v l S iu - u " 18

問題 3 キーボードから文字を 1 文字ずつ読み込み Ctrl-D で中断する 読み込んだ文字をファイルに書き出すプログラムを作れ なお書きだすファイルの名前は text_file とする " 6 D xm D %2 n 4 >> 6 6D< <C C 6D ;6 8 D %2 " " 6D D D5 < 4 >> 6 6D< <C C 6D ;6 8 " 書き出したファイルの内容を確認せよ 19 問題 4 指定したファイル名のファイルの内容を表示し 文字数と行数を表示するプログラム エラー処理も行うこと " 6 D f c C6>!< 8 /CD8< ;0 >6< # H < D #. xmp xm p " " 6 D f c C6> ) f c _ a " scanf でファイル名を文字列として入力 このファイルを fopen で開く その後は 1 文字ずつファイルから文字を読み込んでいけばよい 指定したファイルが存在しなかった場合の処理も正しく行うこと 20