====== 練習問題の答え合わせ ====== ソースコードを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変わってたから貼りなおしたよ。\\