第11回(6月26日)

プログラミング演習(2組)
第11回
http://www.fit.ac.jp/~matsuki/PEB1.html
今日の内容
• 前回の課題の解説
• 配列を用いたプログラミング
– 配列要素をすべて表示する関数の作成
– 配列要素をすべて2倍する関数の作成
• 今回の課題の説明
タイピング
• 喰人王を使用して結果を記録する
• ステージ:第一の店(中華)
• Excelのシートにスコアを毎回記録していく
– 残り時間⇒ FeedBackページで報告
– 総タイプ数
– ミスタイプ数
– 正確さ⇒ FeedBackページで報告
– 喰いっぷり ⇒ FeedBackページで報告
前回の課題
課題1:
3つの値を入力させて,最大値を求めるプログラ
ムを関数を使って,実現せよ.ただし,関数は
以下のような仕様に統一する.
• 関数名:getMax
• 引数:すべてdouble型とし, 変数名はa, b, cとする
• 戻り値: double型とし,引数a,b,cの中の最大値を返す
前回の課題
課題2:
三角形の3辺の長さを入力させて,余弦定理を
使って面積を求めるプログラムを作れ.ただし,
計算部分は,以下の仕様の関数を作ること.
• 関数名:getTriangle
• 引数:すべてdouble型とし, 変数名はa, b, cとする
• 戻り値: double型とし,引数a,b,cを3辺とする三角形の
面積を返す
関数の作り方
• Point1 関数の仕様を決める
– 戻り値の型
– 関数名
– 引数の個数、型、変数名
• Point2 関数のプロトタイプ宣言を書く
• Point3 関数の定義を書く
• Point4 呼び出し部分を正しく記述する
課題1の解答例
#include<stdio.h>
double getMax(double a, double b, double c);
プロトタイプ宣言
main()
{
double a, b, c, x;
printf("3つの値を入力してください\n");
printf("1回目");
scanf("%lf", &a);
printf("2回目");
scanf("%lf", &b);
printf("3回目");
scanf("%lf", &c);
x = getMax(a, b, c);
printf("最大値は%fです",x);
main()関数
getMax関数の呼び出し
}
double getMax(double a, double b, double c)
{
double x;
x = a;
if (b > x) x = b;
if (c > x) x = c;
return x;
}
getMax()関数
課題1の解答例
プロトタイプ宣言
double getMax(double a, double b, double c);
変数は省略してもOK
セミコロン「;」
を忘れない
課題1の解答例
#include<stdio.h>
double getMax(double a, double b, double c);
プロトタイプ宣言
main()
{
double a, b, c, x;
printf("3つの値を入力してください\n");
printf("1回目");
scanf("%lf", &a);
printf("2回目");
scanf("%lf", &b);
printf("3回目");
scanf("%lf", &c);
x = getMax(a, b, c);
printf("最大値は%fです",x);
main()関数
getMax関数の呼び出し
}
double getMax(double a, double b, double c)
{
double x;
x = a;
if (b > x) x = b;
if (c > x) x = c;
return x;
}
getMax()関数
課題1の解答例
main()関数
main()
{
double a, b, c, x;
printf("3つの値を入力してください\n");
printf("1回目");
scanf("%lf", &a);
printf("2回目");
scanf("%lf", &b);
printf("3回目");
scanf("%lf", &c);
x = getMax(a, b, c);
printf("最大値は%fです",x);
}
数値の入力処理
getMax関数の呼び出し
結果表示
課題1の解答例
getMax()関数
double getMax(double a, double b, double c)
{
double x;
x = a;
最大値の選択
if (b > x) x = b;
(変数xに最大値が格納される)
if (c > x) x = c;
return x;
最大値(x)を戻り値として返す
}
課題2の解答例
#include <stdio.h>
#include <math.h>
double getTriangle (double a,double b,double c);
プロトタイプ宣言
double getTriangle (double a,double b,double c)
{
double x;
double cos;
double sin;
cos = (b*b+c*c-a*a) / (2*b*c);//余弦定理でcosAを求める
sin = sqrt(1-cos*cos);
//cosAをsinAに変換
x = (b*c*sin)/2;
return x;
}
main()
{
double n;
double a;
double b;
double c;
printf("3つの辺の長さを入力せよ\n");
scanf("%lf",&a);//1つ目入力
scanf("%lf",&b);//2つ目入力
scanf("%lf",&c);//3つ目入力
n = getTriangle(a,b,c);
getTriangle()関数
getTriangle関数
の呼出
printf("三辺の長さはそれぞれ%f、%f、%f。\nこの三角形の面積は%fである。\n",a,b,c,n);
return 0;
}
main()関数
課題2の解答例()
ヘッダーファイルの読み込み(呪文)と、プロトタイプ宣言
#include <stdio.h>
#include <math.h>
ヘッダーファイルの読み込み
・printf、scanf関数を使うため(標準入出力)
・sqrt関数を使うため(数学計算関数)
double getTriangle (double a,double b,double c);
変数は省略してもOK
セミコロン「;」
を忘れない
課題2の解答例
#include <stdio.h>
#include <math.h>
double getTriangle (double a,double b,double c);
プロトタイプ宣言
double getTriangle (double a,double b,double c)
{
double x;
double cos;
double sin;
cos = (b*b+c*c-a*a) / (2*b*c);//余弦定理でcosAを求める
sin = sqrt(1-cos*cos);
//cosAをsinAに変換
x = (b*c*sin)/2;
return x;
}
main()
{
double n;
double a;
double b;
double c;
printf("3つの辺の長さを入力せよ\n");
scanf("%lf",&a);//1つ目入力
scanf("%lf",&b);//2つ目入力
scanf("%lf",&c);//3つ目入力
n = getTriangle(a,b,c);
getTriangle()関数
getTriangle関数
の呼出
printf("三辺の長さはそれぞれ%f、%f、%f。\nこの三角形の面積は%fである。\n",a,b,c,n);
return 0;
}
main()関数
課題2の解答例
main()関数
main()
{
double n;
double a;
double b;
double c;
printf("3つの辺の長さを入力せよ\n");
scanf("%lf",&a);//1つ目入力
数値の入力処理
scanf("%lf",&b);//2つ目入力
scanf("%lf",&c);//3つ目入力
getTriangle関数の呼び出し
n = getTriangle(a,b,c);
printf("三辺の長さはそれぞれ%f、%f、%f。\nこの三角形の面積は%fであ
る。\n",a,b,c,n);
}
結果表示
課題2の解答例
#include <stdio.h>
#include <math.h>
double getTriangle (double a,double b,double c);
プロトタイプ宣言
double getTriangle (double a,double b,double c)
{
double x;
double cos;
double sin;
cos = (b*b+c*c-a*a) / (2*b*c);//余弦定理でcosAを求める
sin = sqrt(1-cos*cos);
//cosAをsinAに変換
x = (b*c*sin)/2;
return x;
}
main()
{
double n;
double a;
double b;
double c;
printf("3つの辺の長さを入力せよ\n");
scanf("%lf",&a);//1つ目入力
scanf("%lf",&b);//2つ目入力
scanf("%lf",&c);//3つ目入力
n = getTriangle(a,b,c);
getTriangle()関数
getTriangle関数
の呼出
printf("三辺の長さはそれぞれ%f、%f、%f。\nこの三角形の面積は%fである。\n",a,b,c,n);
return 0;
}
main()関数
課題2の解答例
getTriangle()関数
double getTriangle (double a,double b,double c)
{
double x;
double cos;
double sin;
cos = (b*b+c*c-a*a) / (2*b*c);//余弦定理でcosAを求める
sin = sqrt(1-cos*cos);
//cosAをsinAに変換
x = (b*c*sin)/2;
//面積計算
return x;
//面積を戻り値として返す
}
課題2の解答例
getTriangle()関数
//ヘロンの公式を使った場合
double getTriangle(double a,double b,double c)
{
double area;
double s;
s = (a+b+c)/2;
area = sqrt(s*(s-a)*(s-b)*(s-c));
return area;
}
課題2の解答例
• 入力された3つの値で,三角形が構成できる
かを判定する関数を追加(黒武者さん,近藤
君,松川君)
#defineの使い方
#include <stdio.h>
#define PI 3.141592
main()
{
double r = 2;
printf(“半径%lfの面積は%lf\n”,r , PI*r*r);
}
配列のプログラム例
#include <stdio.h>
#define MAX_SIZE 10
//プロトタイプ宣言
void display_all(int a[]);
void twice(int a[]);
main()
{
int data[MAX_SIZE] =
{1,2,3,9,8,7,6,5,4,111};
display_all(data);
twice(data);
display_all(data);
void display_all(int a[])
{
int k;
for (k=0;k< MAX_SIZE;k++) {
printf("%d ", a[k]);
}
printf("\n");
}
void twice(int a[])
{
int k;
for (k=0;k< MAX_SIZE;k++) {
a[k] = a[k] * 2;
}
}
}
今日の課題
課題1:
配列を用いて、10個の整数値を入力させて、そ
の平均値、最大値を求めるGetAve関数と
GetMax関数を作れ。
課題2:
配列を用いて、10個の整数値を入力させて、大き
い順に並び替えるSort関数を作れ。
注意事項
• ソースファイルについて
ソースファイルは添付ファイルで送る
ソースファイル以外は送らない
ソースファイルの名前は,半角のみ使用
• メールについて
件名は,学籍番号+半角スペース+氏名
(例)S09F2099 松木裕二
本文にも短いカバーレター(説明)をつける
その他
• 講義に関する質問・課題提出など:
[email protected]
• Feed back page:
http://www.fit.ac.jp/~matsuki/cgi-bin/newpage11.html
メールアドレスの入力は不要です
ニックネームを決めてください(Ranking表示に使います)