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

Similar documents
今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

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

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

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

PowerPoint Presentation

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

プログラミング基礎

CプログラミングI

演算増幅器

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

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

Microsoft PowerPoint - prog04.ppt

ファイル入出力

PowerPoint Presentation

情報処理演習 B8クラス

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

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

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

ファイル入出力

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

Microsoft PowerPoint - kougi2.ppt

Microsoft Word - 3new.doc

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

プログラミング実習I

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

Microsoft Word - no11.docx

PowerPoint Presentation

gengo1-12

Prog1_12th

memo

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

gengo1-12

cp-7. 配列

スライド 1

2006年10月5日(木)実施

PowerPoint プレゼンテーション

gengo1-12

Microsoft PowerPoint - prog06.ppt

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

PowerPoint プレゼンテーション

PowerPoint Presentation

Microsoft Word - no15.docx

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

Microsoft Word - no202.docx

Microsoft PowerPoint - guidance.ppt

Microsoft PowerPoint - kougi6.ppt

※ ポイント ※

Microsoft PowerPoint - kougi4.ppt

Microsoft PowerPoint - 11.pptx

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

Microsoft PowerPoint - C4(反復for).ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

フローチャートの書き方

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

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

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

memo

第2回講義:まとめ

プログラミング実習I

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

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

kiso2-09.key

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

ポインタ変数

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

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

計算機プログラミング

PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

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

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint ppt

Microsoft Word - no103.docx

第1回 プログラミング演習3 センサーアプリケーション

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

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

PowerPoint プレゼンテーション

講習No.9

Microsoft PowerPoint - kougi7.ppt

PowerPoint プレゼンテーション - 物理学情報処理演習

プログラミング基礎

ポインタ変数

プログラミング基礎

情報処理Ⅰ演習

Microsoft PowerPoint - lec10.ppt

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

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

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

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft Word - no12.doc

Microsoft PowerPoint - prog05.ppt

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

Transcription:

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

今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき その中から最大の要素を答える 3. 配列を引数としてとり その配列の中から最大の要素を返す関数を作る 4. 配列を引数としてとり その配列の中から最小の要素を返す関数を作る 5. ファイルから整数を読み込み その中の最小値 最大値 平均値を答える

数を記憶する 数を記憶するために 変数 を使える しかも いくつでも使って良い ただし どんな 数 かによって宣言の仕方を変えなければならない 例 int x; // 整数の記憶用 float a; // 浮動小数点数の記憶用 同じ種類の数を記憶するには 配列 を使うことも考えよう例 : int x[10]; // 10 個の整数を記憶するための配列 float a[20]; // 20 個の浮動小数点数を記憶するための配列

数を入力する キーボードから数を入力するには scanf (p.18) を使います ただし どんな 数 かによって仕方を変えなければならない 例 : // 整数の入力の場合 int x; scanf( %d, &x); // 浮動小数点数の入力の場合 float a; scanf( %f, &a); 初めに数を記憶するための変数を用意 scanf の第 1 引数に注意 変数の前に & が必要 ( ポインタ ) 注意 : 実際には float a のような変数の宣言は実行文 ( 例 :scanf 文 ) の 前 に書かないとエラーになります

1) キーボード入力された整数 10 個の中から最大のものを答える 手順 : ( 最初は手順を与えておきます 段々と自分で考えられるようになりましょう ) 最初は10 個ではなく 3 個から始めます 1) 整数 3 個を記憶するための配列を用意 2) キーボード入力した整数を配列に入力繰り返しによる 3) これらの要素を1つずつみて 最大のものを記憶するここも繰り返しによる条件分岐 4) 配列の要素を見終わったら 記憶した 最大要素 を出力

1) 整数 3 個を記憶するための配列を用意 これはもうできますね ここでは配列名を array としておきましょう

2) キーボード入力した整数を配列に入力 for 文を使って 3 個の数を array の要素にセットしましょう (1) そのために 1) で用意した配列 array と 整数型の変数 (i と しておきます ) を用意します int array[3]; int i; (2) キーボード入力された整数を変数にセットするには scanf を使います scanf("%d", &x); // 変数 x に入力された数をセットする 問題 :array[i] にセットするにはどうすればよい? (3) for を使って (2) を 3 回繰り返します

for 文による繰り返し for 文は 特定の回数 何かを繰り返すために使われます パターン : i を整数型の変数とする ( 前の方で宣言されているとする ) for (i=0; i < 3; i++) { // 3 回の繰り返し 何かの仕事 ; 質問 : i < 3 ではなく i <= 3 とするとどうなるでしょう? 3 ではなく 10 とするとどうでしょうか?

キーボード入力した整数を配列に入力 for 文を使って 3 個の数を array の要素にセットしましょう int array[3]; int i; for (i=0; i < 3; i++) { scanf("%d", &array[i]); 注目 : ここでは i は繰り返しの回数の記憶だけではなく配列のどこに数を記憶するかを表すという重要な役割 注意 : 配列は 0 番目から始まる! だから array[3] によって array[0], array[1], array[2] という 3 つの記憶場所が作られる

n 個の要素から最大値を探す 配列の要素を 1 つずつみて 最大のものを記憶する 方法を考えましょう この作業には以下が必要です ( どうでしょう 考えつきましたか?) 1) 今まで見た要素の中で最大のものを記憶する ための変数を用意する 2) その変数に初期値を与える ( 次で 要素の比較 をするため ) 3) 配列の要素を 1 つずつ取り出して 記憶した要素を比較する 必要ならば 変数の値を更新する

n 個の要素から最大値を探す (1) 1) 今まで見た要素の中で最大のものを記憶する ための変数を用意する これは簡単ですね 変数名を ( なんでもよいのですが )max としておきましょう int max;

n 個の要素から最大値を探す (2) 2) その変数に初期値を与える ( 次で 要素の比較 をするため ) これも簡単ですね 配列の最初の要素を代入すればよいのですここで配列の名前を array とすると max = array[0];

n 個の要素から最大値を探す (3) 3) 配列の要素を 1 つずつ取り出して 記憶した要素を比較する 必要ならば 変数の値を更新する これもできますね 配列の要素を 1 つずつ取り出すには for 文を使います int i; // カウンタ変数 for(i=1; I < n; i++) { // 配列の要素を一個ずつ取り出す if (array[i] > max) { なにをしたらよいでしょう? 書いてください

必要ならば 変数の値を更新する int i; // カウンタ変数 for(i=1; i < n; i++) { // 配列の要素を一個ずつ取り出す if (array[i] > max) { なにをしたらよいでしょう? 書いてください ここでそれぞれの変数の 意味 を考える max : 最大値の候補を記憶する変数 array[i] : 読み込んだn 個の整数 max よりもarray[i] の方が大きいのだから max の値を書き換える! max = array[i];

キーボード入力された整数 3 個の中から最大のものを答える ( 完成させてください ) #include <stdio.h> Int main(void) { //(1) 整数 3 個を記憶するための配列を用意 // (2) キーボード入力した整数を配列に入力 // (3) 1) 今まで見た要素の中で最大のものを記憶する 変数 // 2) その変数に初期値を与える // 3) 配列の要素を 1 つずつ取り出して 記憶した要素を比較 // (4) 配列の要素を見終わったら 記憶した 最大要素 を出力 return(0);

走らせてみましょう チェック項目 1) コンパイル ( ビルド ) はできたか? 2) 3 個のいろいろな整数 ( マイナスの数も含む ) を入力 させて 最大の要素を出力できたか? 3) 数の入力や 結果の表示の仕方はわかりやすいものだったか? 発展 :3 個ではなく 10 個の整数をあつかえるようにしましょう

2. 整数を要素とする配列 (p.57-59) に初期値を与えておき その中から最大の要素を答える よくわかる C 言語 p.59 にあるように 整数を要素とする配列の初期値は次のようにして与えます : int array[10] = {2, 3, -5, 0, 9, 12, -10, 8, -3, 9 ;

2. 整数を要素とする配列に初期値を与えておき その中から最大の要素を答える ( 完成させよ ) #include <stdio.h> Int main(void) { //(1) 整数 10 個を記憶するための配列を用意 初期値を与える // (2) は不要 // (3) 1) 今まで見た要素の中で最大のものを記憶する 変数 // 2) その変数に初期値を与える // 3) 配列の要素を 1 つずつ取り出して 記憶した要素を比較 // (4) 配列の要素を見終わったら 記憶した 最大要素 を出力 return(0);

3. 配列と要素数とを引数としてとり その配列の中から最大の要素を返す関数を作る そのような関数を maxinarray と名付ける すると 2 の答は次のようになるだろう : #include <stdio.h> // ここに maxinarray の関数定義が入る Int main(void) { //(1) 整数 10 個を記憶するための配列を用意 初期値を与える int array[10] = {2, 3, -5, 0, 9, 12, -10, 8, -3, 9 ; int max=maxinarray(array,10); // (2-3) 関数の呼び出し // (4) 記憶した 最大要素 を出力 printf( Max number in the Array = %d n, max); return(0);

3. 配列と要素数とを引数としてとり その配列の中から最大の要素を返す関数を作る main 関数の中で最大の要素を返すことはできても 関数 を作る というところで戸惑ってしまった人に #include <stdio.h> Int main(void) { //(1) 整数 10 個を記憶するための配列を用意 初期値を与える // (2) は不要 // (3) 1) 今まで見た要素の中で最大のものを記憶する 変数 // 2) その変数に初期値を与える // 3) 配列の要素を 1 つずつ取り出して 記憶した要素を比較 // (4) 配列の要素を見終わったら 記憶した 最大要素 を出力 return(0); この部分を 関数 maxinarray の呼出とするそのために考える事はこの関数の (1) 入力 ( 引数 ) (2) 処理 --- ほぼこのまま (3) 出力 ( 帰り値 )

関数を作る #include <stdio.h> Int main(void) { //(1) 整数 10 個を記憶するための配列を用意 初期値を与える // (2) は不要 // (3) 1) 今まで見た要素の中で最大のものを記憶する 変数 // 2) その変数に初期値を与える // 3) 配列の要素を 1 つずつ取り出して 記憶した要素を比較 // (4) 配列の要素を見終わったら 記憶した 最大要素 を出力 return(0); 関数名を maxinarray とする (1) 入力 整数が入った配列と // (3-4) は 関数の呼び出し で置き換えます int max=maxinarray(array, NUM); そのサイズ (2) 処理 (3) 出力 ( 帰り値 ) 上記の (3) 配列の中の最大値 = 記憶した最大要素

関数を定義する 関数 の定義のパタンは main 関数とほぼ同じ int main(void) { int x,y; // 変数宣言 scanf( %d %d, &x, &y); printf( sum=%d, x+y); return 0; // 値を返す 関数の型関数名 ( 引数リスト ) { 関数で使う変数の宣言いろいろな処理 値を返す ( 出力 ) 関数への入力

関数 maxinarray 出力 = 記憶した最大要素は int 型 int maxinarray (int ar[], int n) { int max=ar[0]; int i; for (i=1; i< n; i++) { // 一個ずつmax 値と比較 // maxよりも大きければ max 値を更新 return max; 入力 = 整数を要素とする配列 int ar[] と要素数 int n 今まで見た要素の中で最大のものを記憶する 変数を宣言 その変数に初期値を与える 出力 = 最大要素 要素を比較して最大値を求める

3. 配列と要素数とを引数としてとり その配列の中から最大の要素を返す関数 改訂 10 という数はここでは意味がある数なので 定数 として扱おう #include <stdio.h> #define NUM 10 // ここに maxinarray の関数定義が入る Int main(void) { //(1) 整数 10 個を記憶するための配列を用意 初期値を与える int array[num] = {2, 3, -5, 0, 9, 12, -10, 8, -3, 9 ; int max=maxinarray(array, NUM); // (2-3) 関数の呼び出し // (4) 記憶した 最大要素 を出力 printf( Max number in the Array = %d n, max); return(0);

3. 配列と要素数とを引数としてとり その配列の中から最大の要素を返す関数 これを完成させてください #include <stdio.h> #define NUM 10 // ここに maxinarray の関数定義が入る Int main(void) { //(1) 整数 10 個を記憶するための配列を用意 初期値を与える int array[num] = {2, 3, -5, 0, 9, 12, -10, 8, -3, 9 ; int max=maxinarray(array, NUM); // (2-3) 関数の呼び出し // (4) 記憶した 最大要素 を出力 printf( Max number in the Array = %d n, max); return(0);

4. 配列を引数としてとり その配列の中から最小の要素を返す関数を作る そのような関数を mininarray と名付ける その定義はどうなるでしょう? maxinarray とはどこが同じでしょう? また どのように違うでしょう? どのように使えるでしょうか? 考えて書いてみてください

4. 配列を引数としてとり その配列の中から最小の要素を返す関数を作る 完成させてください #include <stdio.h> #define NUM 10 // ここに maxinarray の関数定義が入る // ここに mininarray の関数定義が入る Int main(void) { //(1) 整数 10 個を記憶するための配列を用意 初期値を与える int array[num] = {2, 3, -5, 0, 9, 12, -10, 8, -3, 9 ; int max=maxinarray(array, NUM); // (2-3) 関数の呼び出し int min=mininarray(array, NUM); // (4) 記憶した 最大要素 を出力 printf( Max = %d and Min = %d n, max, min); return(0);

5. ファイルから整数を読み込み その中の最小値 最大値 平均値を答える このためには (1) ファイルから整数を読み込んで配列に記憶する (p.103) (2) 読み込んだ整数の個数を記憶する (3) 最小値 最大値を返す関数に加えて 平均値を返す関数を作る ことが必要 さあ 考えてみよう ( 次回 )

ファイルの操作について ファイルの内容を取り込む ファイルに書出す どちらにしても基本はほとんど同じ : (1) ファイルポインタの記憶用の変数を用意例 : FILE *fp; (2) ファイルを開く : ファイルへのパスを指定し 読み込み または 書き込み モードで 開く 例 : fp1 = fopen( H: data.txt, r ); // 読み込み (read) fp2 = fopen( H: rest.txt, w ); // 書き込み (write) (3) 読み込み関数でファイルからデータを読む例 : fscanf(fp1, %d, &x); // 整数を読み込んで変数 xに代入書き込み関数でファイルにデータを書く例 : fprintf(fp2, 最大値 = %d n, max); // 変数 maxの値などを書き込む

宿題 課題 1 から 4 までについて プログラム 実行例 プログラムの説明を提出してください 予習 : 教科書の ファイルの操作 の箇所を読んでくること FILE fopen fclose fprintf fscanf について調べる