プログラミング演習(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 関数の定義を書く • Point4 呼び出し部分を正しく記述する 前回の課題 • GetAve関数: – 関数名:GetAve – 戻り値の型:double型 – 引数:int型の配列 • GetMax関数: – 関数名:GetMax – 戻り値の型:int型 – 引数:int型の配列 課題1の解答例 #include<stdio.h> #define MAX_SIZE 10 int GetMax(int a[]); double GetAve(int a[]); 配列の大きさをdefineで指定 プロトタイプ宣言 main() { int data[MAX_SIZE]; int i; main()関数 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)); } getMax関数の呼び出し getAve関数の呼び出し 課題1の解答例 getAve()関数 double GetAve(int a[]) { int k; int sum; double ave; 配列aを引数としている sum = 0; for(k = 0;k < MAX_SIZE;k++){ sum += a[k]; } ave = sum /(double)k; return ave; } 配列要素の総和を計算 平均を計算 計算した平均を戻り値として返す 課題1の解答例 getMax()関数 int GetMax(int a[]) { int j; int max; max = a[0]; 配列aを引数としている 最初の要素a[0]を暫定最大値とし ている for(j = 1;j < MAX_SIZE;j++){ if(max < a[j]) max = a[j]; } return max; } 暫定最大値maxとすべ ての要素を比較 求めた最大値を戻り値として返す 課題1の解答例 getMax()関数 int GetMax(int a[]) あくまで,getMax関数は { 「最大値を計算する」と int j; いう機能を持つ int max; max = a[0]; for(j = 1;j < MAX_SIZE;j++){ if(max < a[j]) maxに最大値が入る max = a[j]; } printf(“最大値は%fです.\n”, max); return max; 表示する機能はいらな } い(むしろ邪魔) #include <math.h> main() { sin()関数自体に表示す double x, y; る機能はいらない(むし x = sqrt(2); ろ邪魔) y = sin(3.14 / 3); printf(“x = %lf, y=%lf\n”,x,y); } 前回の課題 課題2: 配列を用いて、10個の整数値を入力させて、大き い順に並び替えるSort関数を作れ。 • いろいろな計算方法(アルゴリズムという)が存 在する. • 最大値を配列の左側に集める方法を行う 方針(Step1) a[0]とa[1]を比較 a[0]とa[2]を比較 a[0]とa[3]を比較 a[0]とa[4]を比較 a[0] a[1] a[2] a[3] a[4] 7 4 5 9 0 7 4 5 9 0 7 4 5 9 0 9 4 5 7 0 9 4 5 7 0 a[0]には,5つの中の最大値が入る 方針(Step2) a[1]とa[2]を比較 a[1]とa[3]を比較 a[1]とa[4]を比較 a[0] a[1] a[2] a[3] a[4] 9 4 5 7 0 9 5 4 7 0 9 7 4 5 0 9 7 4 5 0 a[1]には,a[1]からa[4]までの 最大値が入る(全体で2番目の最大値) 方針(Step3) a[2]とa[3]を比較 a[2]とa[4]を比較 a[0] a[1] a[2] a[3] a[4] 9 7 4 5 0 9 7 5 4 0 9 7 5 4 0 a[2]には,a[2]からa[4]までの 最大値が入る(全体で3番目の最大値) 方針(Step4) a[3]とa[4]を比較 a[0] a[1] a[2] a[3] a[4] 9 7 5 4 0 9 7 5 4 0 a[3]には,a[3]からa[4]までの 最大値が入る(全体で4番目の最大値) 全体の最小値に確定 解答例 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) 課題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 松木裕二 本文にも短いカバーレター(説明)をつける その他 • 講義に関する質問・課題提出など: [email protected] • Feed back page: http://www.fit.ac.jp/~matsuki/cgi-bin/newpage11.html メールアドレスの入力は不要です ニックネームを決めてください(Ranking表示に使います)
© Copyright 2024 ExpyDoc