Cプログラミング演習資料.

Slides:



Advertisements
Similar presentations
1 B10 CPU を作る 1 日目 解説 TA 高田正法
Advertisements

知能情報工学演習 I 第 12 回( C 言語第6 回) 課題の回答 岩村雅一
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
プログラムのパタン演習 解説.
情報処理演習C2 ファイル操作について (2).
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング演習(2組) 第12回
C言語 配列 2016年 吉田研究室.
第13回 プログラミングⅡ 第13回
記憶クラス 変数をどのような記憶領域に割り当てるかを指定するのが記憶クラス 記憶クラスには、自動変数、静的変数、外部変数などがある。
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
前回の復習 ファイル入出力①.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング 2 ファイル処理.
プログラミング論 ファイル入出力
プログラミング入門2 ファイルの入出力 ポインタ 芝浦工業大学情報工学科 青木 義満
繰り返し計算 while文, for文.
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
Cプログラミング演習.
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
フーリエ級数展開 ~矩形波について~ 長江 栞 中島 涼 中村 勇樹
高度プログラミング演習 (03).
知能情報工学演習I 第12回(後半第6回) 課題の回答
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング論 ファイル入出力
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
関数の再帰呼び出しとは ハノイの塔 リダイレクト レポート課題
関数への道.
プログラミング基礎B 文字列の扱い.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
2分法のプログラム作成方法 2分法のプログラム(全体構成) プログラム作成要領 2分法のメイン関数(変数宣言)
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
疑似乱数, モンテカルロ法によるシミュレーション
演習0 func0, func1, func2を作成せよ. main()関数の中で,func0()を呼び出しを実行せよ.
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
演習07-0 “Hello\n” “World!\n”と
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
プログラミング序論演習.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
精密工学科プログラミング基礎 第7回資料 (11/27実施)
ループだよ!難しいよ! 第5章 while(ループ);.
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
ファイル操作について (1).
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
演習00-0 “Hello\n” “World!\n”と
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
高度プログラミング演習 (07).
Cプログラミング演習資料.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
プログラミング演習I 補講用課題
Presentation transcript:

Cプログラミング演習資料

ファイルからの読み込み ファイルから整数のデータを読み込む方法に二通り:比較しよう int n,i,ar[NUM]; FILE *fp; 共通部分 NUMの値は 1000などとする int n,i,ar[NUM]; FILE *fp; fp= fopen(FName,"r"); for(i=0; i<NUM; i++) { fscanf(fp,"%d",&ar[i]); } n =0; while (fscanf(fp,”%d”,&ar[n]) != EOF) { n++; } ファイルの行数が既知(NUM行)の場合にしか使えない 少なかったり多かったりすると問題が起きる ファイルの行数が未知でも大丈夫 読み込んだ個数がnの値となっている  ∴お勧め!

ファイルのデータを使う場合のmain関数 #define NUM 100 int main(void) { int i=0,ar[NUM]; FILE *fp = fopen("data.txt","r"); while ( fscanf(fp,"%d",&ar[i]) != EOF ) { printf("%d ", ar[i]); i++; } fclose(fp); printf("\n平均=%f, 分散=%f\n",mean(ar,i),var(ar,i)); return 0; ちゃんと読み込めているかどうかのチェック 読み込めていたらコメントアウトする 平均を求める関数meanの呼び出し 分散を求める関数varの呼び出し データを記憶した配列(ar)と要素数(n)を引数として、それぞれの関数を呼び出す

関数… int main(void) { int ar[NUM1], br[NUM2], cr[NUM3]; // 途中省略 // arの和を求める sumA = 0; for (i=0; i < NUM1; i++) { sumA += ar[i]; } // brの和を求める sumB = 0; for (i=0; i < NUM2; i++) { sumB += br[i]; // crの和を求める sumC = 0; for (i=0; i < NUM3; i++) { sumC += cr[i]; ... 同じことを何回も書かなければならない。 プログラムがわかりにくく、間違いを起こしやすい main関数の中で処理をするの をやめ、関数の形で書くこと を議論してきた。その大きな 理由は、関数の形にしておく と「再利用できる」ことにあ る。 次の例をみてみよう:

関数… int main(void) { int ar[NUM1], br[NUM2], cr[NUM3]; // 途中省略 sumA = 0; for (i=0; i < NUM1; i++) { sumA += ar[i]; } // brの和を求める sumB = 0; for (i=0; i < NUM2; i++) { sumB += br[i]; // crの和を求める sumC = 0; for (i=0; i < NUM3; i++) { sumC += cr[i]; ... 同じことを何回も書かなければならない。 プログラムがわかりにくく、間違いを起こしやすい ひとつにまとまっている int sum(int x[ ], int n) { // xは配列、nは要素数 // xの和を求める int i, ans= 0; for (i=0; i < n; i++) { ans += x[i]; } return ans; int main(void) { int ar[NUM1], br[NUM2], cr[NUM3], as, bs, cs; as = sum(ar, NUM1); bs = sum(br, NUM2); cs = sum(cr, NUM3); ... 関数sumを適切な引数で呼び出せば良い main関数にかぎらず、いろいろなところで利用可能

ファイルに書出す #define NUM 100 int main(void) { int i=0,ar[NUM]; fp = fopen(“result.txt”,”w”) // “result.txt”ファイルを書き出し用に開く fprintf(fp, "\n平均=%f, 分散=%f\n", mean(ar,i),var(ar,i)); // printf とよく似ている fclose(fp); #define NUM 100 int main(void) { int i=0,ar[NUM]; FILE *fp = fopen("data.txt","r"); while ( fscanf(fp,"%d",&ar[i]) != EOF ) { printf("%d ", ar[i]); i++; } fclose(fp); printf("\n平均=%f, 分散=%f\n",mean(ar,i),var(ar,i));      return 0; 注意点: 関数が配列を引数とするときにどう書くか?

i=getData(ar, “data.txt”) 更に進んで:ファイルから読み込んだ数を配列で記憶するのも「関数」にする これが template0501.cでやっていたこと int getData(int ar[], char fname[]) { FILE *fp; // ファイルポインタ int n=0 ; // 読み込んだ整数の個数 fp = fopen(fname,”r”) // while文を用いてファイルから数を読み込む while (fscanf(fp, “%d”, &ar[n])!=EOF) { n++; } return n; // 読み込んだ整数の個数を返す #define NUM 100 int main(void) { int i=0,ar[NUM]; FILE *fp = fopen("data.txt","r"); while ( fscanf(fp,"%d",&ar[i]) != EOF ) { printf("%d ", ar[i]); i++; } fclose(fp); printf("\n平均=%f, 分散=%f\n",mean(ar,i),var(ar,i)); return 0; i=getData(ar, “data.txt”) 注意点: 関数が配列を引数とするときにどう書くか?

これまでみてきた処理のパタン (1) 数式の指定通りに計算 例: 階乗計算 nを自然数として n! = 1×2×... × n (2) 配列を使うもの ⇒ 繰り返し  (a) 答えの変数の初期値 0 例:要素の和を求める     例: 分散 要素と平均との差の自乗の和を求め、要素数で割る (b) 答えの変数の初期値は、配列の先頭要素     例:最大/最小要素を求める 答えの候補と、それぞれの要素とを比較し、答えの候補の値を更新する     例:2番めに大きい・小さい要素 最大(最小)と2番目の2つを記憶する必要がある