====== 練習問題の答え合わせ ======
ソースコードを404のPCからこぴーできなかったから、ちょいまってて
====== 課題と配列と数当てゲーム ======
==== 初めのころの資料リターンズ ====
== 下の二つの資料のところどころにある練習問題のフローチャートを書いて、プログラムを作ってみよう! ==
* {{ :game-engineer:classes:game-programing-1:ga00.pdf |資料その1}}
* {{ :game-engineer:classes:game-programing-1:ga01.pdf |資料その2}}
==== 配列の練習 ====
ある型のデータが、ずらーっとメモリ上に並んでいるデータ構造を配列と呼びます(ましたね?)\\
例えば、整数の以下のような配列は\\
{{:game-engineer:classes:2022:game-programing-1:second-term:01:hairetsu1.png?400|}}
\\
これをC++で同じ状態を作るとしたら、こんな感じでしたね?\\
**<配列の作り方と初期化>**
* 以下のようにして初期化する
* **型 変数名[要素数] = { 初期化子1, 初期化子2, 初期化子3, … , 要素数分の初期化子 };**
* また、初期化子を並べると要素数が確定するので、要素数の指定を省略できる
* **型 変数名[] = {初期化子1, 初期化子2, 初期化子3, … , 要素数分の初期化子 };
**
int arr[6];
arr[0] = 2;
arr[1] = 5;
arr[2] = 7;
arr[3] = 1;
arr[4] = 0;
arr[5] = 3;
配列のそれぞれの番号を表す[]内の数字のことを**添え字(index:インデックス)**と呼びます。\\
これを、初期化と宣言を同時に行うと以下のようになりました。\\
[[game-engineer:classes:2022:game-programing-1:first-term:6:6-16-1|参考(前にやった配列の初期化の資料)]]
int arr[6] = { 2, 5, 7, 1, 0, 3 };
==== 配列の練習問題 ====
配列を使って、人数分の学生の得点を入力し、平均点と合計点を表示するプログラムを作れ\\
学生の人数は、__定数(整数)__で初めに決めておく(5から10人ぐらいがいいのでは?)\\
- 定数で学生の人数を宣言しておく
- 定数を使って学生数分の配列を用意
- 変数を用意(合計、平均など小数点出そうな計算に使うものは実数型で)
- 人数分のデータを入力(配列のインデックスと、カウンタ型ループを使う)
- データが入った配列をsum(合計計算用の変数)にすべて足す(学生分のデータの合計を求める)
- 合計/SNUMを計算して平均値を求め出力する
- 終了
今日の練習問題
#include
using namespace std;
//出席番号1~5番までの学生の点数を処理するプログラム
//キーボードからデータを入力
//画面には "出席番号〇番の学生の点数:" 〇は番号に変換
//データを入力し終わったら、画面に
//全員の番号と得点
//合計点と平均点
//できそうな人は、最高点と最低点、を表示
//さらに余裕あったら、学生名も入れてみよう!
//学生数は、定数を使うこと!
//ヒント 配列は[0]~[4]までだから、それを1から5番までに使おうとすると
// 番号ずれちゃうから、足したり引いたりして工夫する!
int main()
{
//SNUM:学生の人数(定数=プログラム中でここ以降変わらない数)
const int SNUM = 5;//入力大変だから5にしようね
return 0;
}
ヒント:\\
C++では、以下のようなルールがあります。今まで黙っててごめんね。\\
整数/整数 => 整数\\
整数/実数 => 実数\\
実数/整数 => 実数\\
実数変数 = 整数(代入) => 小数点部分切り捨てで代入\\
実数変数 = 実数 => 小数点部分ありで代入(あたりまえか。。。)\\
整数変数 = 実数 => 小数点部分を切り捨てて、整数に変換されて代入\\
計算結果はどんな型になるか、それをどんな型に代入して使えば正しい動作になるか?\\
常に考えてソースコードを書こう。\\
=== 模範解答 ===
#include //iostreamヘッダー ヘッダーにいろんな機能が詰まってるよ
#include //stringヘッダー それを呼び出して使う
#include //setw使うのに必要
using namespace std;
int main()
{
const int STUNUM = 5;
int stuScore[STUNUM];//定数で配列を取得
string stuName[STUNUM];
int max;
int min;
for (int i = 0; i < STUNUM; i++)//配列はゼロから始まる
{
cout << "出席番号" << i + 1 << "番目の学生の名前を入力:";
cin >> stuName[i];//インデックスで、配列の番号を指定
cout << "出席番号" << i + 1 << "番 " << stuName[i] << "さんの得点を入力:";
cin >> stuScore[i];
}
//max min を求めるループ
max = stuScore[0];
min = stuScore[0];
for (int i = 0; i < STUNUM; i++)
{
if (stuScore[i] < min)
min = stuScore[i]; //今の最小値より小さかったら最小値を更新
if (stuScore[i] > max)
max = stuScore[i]; //今の最大値より大きかったら最大値を更新
}
cout << "+------------------------------------------+" << endl;
for (int i = 0; i < STUNUM; i++)
{
cout << "出席番号" << setw(2) << i + 1 << "番 " << setw(5) << stuName[i]
<< "さんの得点|" << setw(4) << right << stuScore[i] << "|" << endl;
}
cout << "+------------------------------------------+" << endl;
float sum = 0;
float average = 0.0f; //浮動小数点だよ
for (int i = 0; i < STUNUM; i++)
{
sum += stuScore[i];
}
cout << "全員の合計点:" << sum << endl;
average = sum / STUNUM;
cout << "全員の平均点:" << average << endl;
cout << "最高点:" << max << endl;
cout << "最低点:" << min << endl;
return 0;
}
==== さらに練習問題ほしい人用(後半ちょいムズイ) ====
{{ :game-engineer:classes:game-programing-1:gp_exercise.pdf |}}
==== 某掲示板のプログラミングスレの練習問題集 ====
https://vipprog.net/wiki/?%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C.html\\
URL変わってたから貼りなおしたよ。\\