プログラミング演習(2組) 第12回 http://www.fit.ac.jp/~matsuki/PEB1.html
今日の内容 前回の課題の解説 今回の課題の説明
タイピング 喰人王を使用して結果を記録する ステージ:第一の店(中華) Excelのシートにスコアを毎回記録していく 残り時間⇒ FeedBackページで報告 総タイプ数 ミスタイプ数 正確さ⇒ FeedBackページで報告 喰いっぷり ⇒ FeedBackページで報告
前回の課題 課題1: 配列を用いて、10個の整数値を入力させて、その平均値、最大値を求めるGetAve関数とGetMax関数を作れ。 課題2: 配列を用いて、10個の整数値を入力させて、大きい順に並び替えるSort関数を作れ。
前回の課題 課題1: 配列を用いて、10個の整数値を入力させて、その平均値、最大値を求めるGetAve関数とGetMax関数を作れ。
関数の作り方 Point1 関数の仕様を決める Point2 関数のプロトタイプ宣言を書く Point3 関数の定義を書く 戻り値の型 関数名 引数の個数、型、変数名 Point2 関数のプロトタイプ宣言を書く Point3 関数の定義を書く Point4 呼び出し部分を正しく記述する
前回の課題 GetAve関数: GetMax関数: 関数名:GetAve 戻り値の型:double型 引数:int型の配列
課題1の解答例 配列の大きさをdefineで指定 プロトタイプ宣言 main()関数 getMax関数の呼び出し getAve関数の呼び出し #include<stdio.h> #define MAX_SIZE 10 int GetMax(int a[]); double GetAve(int a[]); main() { int data[MAX_SIZE]; int i; printf("入力した整数値の最大値と平均値を求めます。\n"); printf("10個の整数値を入力してください。\n"); for(i = 0;i < MAX_SIZE;i++){ printf("%d個目の値:",i+1); scanf("%d",&data[i]); } printf("最大値は%dです。\n",GetMax(data)); printf("平均値は%3.6lfです。\n",GetAve(data)); 配列の大きさをdefineで指定 プロトタイプ宣言 main()関数 getMax関数の呼び出し getAve関数の呼び出し
課題1の解答例 getAve()関数 配列aを引数としている 配列要素の総和を計算 平均を計算 計算した平均を戻り値として返す double GetAve(int a[]) { int k; int sum; double ave; sum = 0; for(k = 0;k < MAX_SIZE;k++){ sum += a[k]; } ave = sum /(double)k; return ave; 配列aを引数としている 配列要素の総和を計算 平均を計算 計算した平均を戻り値として返す
課題1の解答例 getMax()関数 配列aを引数としている 最初の要素a[0]を暫定最大値としている 暫定最大値maxとすべての要素を比較 int GetMax(int a[]) { int j; int max; max = a[0]; for(j = 1;j < MAX_SIZE;j++){ if(max < a[j]) max = a[j]; } return max; 配列aを引数としている 最初の要素a[0]を暫定最大値としている 暫定最大値maxとすべての要素を比較 求めた最大値を戻り値として返す
課題1の解答例 getMax()関数 あくまで,getMax関数は「最大値を計算する」という機能を持つ maxに最大値が入る int GetMax(int a[]) { int j; int max; max = a[0]; for(j = 1;j < MAX_SIZE;j++){ if(max < a[j]) max = a[j]; } printf(“最大値は%fです.\n”, max); return max; maxに最大値が入る 表示する機能はいらない(むしろ邪魔)
#include <math. h> main() { double x, y; x = sqrt(2); y = sin(3 #include <math.h> main() { double x, y; x = sqrt(2); y = sin(3.14 / 3); printf(“x = %lf, y=%lf\n”,x,y); } sin()関数自体に表示する機能はいらない(むしろ邪魔)
前回の課題 課題2: 配列を用いて、10個の整数値を入力させて、大きい順に並び替えるSort関数を作れ。 いろいろな計算方法(アルゴリズムという)が存在する. 最大値を配列の左側に集める方法を行う
方針(Step1) 7 4 5 9 0 a[0]とa[1]を比較 7 4 5 9 0 a[0]とa[2]を比較 7 4 5 9 0
方針(Step2) 9 4 5 7 0 a[1]とa[2]を比較 9 5 4 7 0 a[1]とa[3]を比較 9 7 4 5 0 最大値が入る(全体で2番目の最大値)
方針(Step3) 9 7 4 5 0 a[2]とa[3]を比較 9 7 5 4 0 a[2]とa[4]を比較 9 7 5 4 0 最大値が入る(全体で3番目の最大値)
方針(Step4) 9 7 5 4 0 a[3]とa[4]を比較 9 7 5 4 0 全体の最小値に確定 a[3]には,a[3]からa[4]までの 最大値が入る(全体で4番目の最大値) 全体の最小値に確定
解答例 a[j] a[k] a[j]がa[k]よりも小さい 場合は交換 void Sort(int a[]) { int j; int k; int tmp; for(j = 0;j < MAX_SIZE-1;j++){ for(k = j+1;k < MAX_SIZE;k++){ if(a[j] < a[k]){ tmp = a[j]; a[j] = a[k]; a[k] = tmp; } a[j]がa[k]よりも小さい 場合は交換 a[j] a[k] 確定
今日の課題(締切:7月30日) 課題1:次の仕様を満たす関数を作れ ・関数名:circleInfo ・戻り値:void ・引数: double型 double r double型へのポインタ double *pLength double型へのポインタ double *pArea; ・機能:引数rを半径とする円の円周長と面積を求め,それぞれの結果をポインタpLength, pAreaの指すメモリに格納する(Call by reference)
戻り値: numがMAX_SIZEより大きい場合は0を,そうでない場合は1を返す 課題2: 配列を初期化する関数InitArrayを以下の仕様に従って作れ.但し,配列の大きさは#define MAX_SIZEで指定されていると見なしてよい. 関数名:InitArray 引数: int型配列 int a[], int型変数 int value, int型変数 int num 戻り値: numがMAX_SIZEより大きい場合は0を,そうでない場合は1を返す 機能:a[0]からa[num-1]までをvalueで初期化し,それ以外はすべて0で初期化する(但し,numがMAX_SIZEより大きい場合は,初期化処理は行わない).
課題2のmain関数および宣言部分(例) #include <stdio.h> #define MAX_SIZE 10 int InitArray(int a[], int value, int num); main() { int k; int data[MAX_SIZE]; InitArray(data, 3, 8); for (k=0;k<MAX_SIZE;k++) printf(“%2d “,data[k]); printf(“\n”); }
今日の課題 課題3: ポインタを使って,配列にint型の値を入力させる関数InputArray2を作れ. ・関数名:InputArray2 ・戻り値:void ・引数:int型へのポインタ int *pa
注意事項 ソースファイルについて メールについて ソースファイルは添付ファイルで送る ソースファイル以外は送らない ソースファイルの名前は,半角のみ使用 メールについて 件名は,学籍番号+半角スペース+氏名 (例)S09F2099 松木裕二 本文にも短いカバーレター(説明)をつける
その他 講義に関する質問・課題提出など: Feed back page: 2009pe11y@gmail.com http://www.fit.ac.jp/~matsuki/cgi-bin/newpage11.html メールアドレスの入力は不要です ニックネームを決めてください(Ranking表示に使います)