こんにちは。お世話になっております。
Visual Studio2013です。
テストの結果を集計するコンソールアプリケーションを作成中です。
①「受験者数は?」を表示し、受験者数を入力
②「氏名は?」と表示し、氏名を入力
③「点数は?」と表示し、点数を入力
④②、③を受験人数分繰り返す
⑤「平均点:1 合計点:2 最高点:3 終了:9」と表示させ番号を入力
⑥1を選択で平均点、2を選択で合計点、3を選択で最高点の氏名と点数が表示されて、⑤に戻る
⑦9が選択されるとプログラムが終了する
自分が作成したコードは以下の通りです
using System; using System.Diagnostics; using System.Threading; class Program { static void Main(string[] args) { Console.WriteLine("受験者数は?"); int ninzu = int.Parse(Console.ReadLine()); // 人数分の名前と点数を格納する配列を宣言 string[] name = new string[ninzu]; int[] score = new int[ninzu]; int sum = 0; for (int i = 0; i < ninzu; ++i) { Console.WriteLine("氏名は?"); name[i] = Console.ReadLine(); Console.WriteLine("点数は?"); score[i] = int.Parse(Console.ReadLine()); sum = sum + score[i]; } bool pEnd = false; while(true) { Console.WriteLine("平均点:1 合計点:2 最高点:3 終了:9"); string str = Console.ReadLine(); switch (str) { case "1": // 平均点 double average = (double)sum / ninzu; string aveScore = average.ToString("F1"); Console.WriteLine("平均点" + aveScore + "点"); continue; case "2": // 合計点 Console.WriteLine("合計点" + sum + "点"); continue; case "3": // 最高点と最高得点者の名前(複数あり) int highscore = -1; int j, k; for (j = 0; j < ninzu; ++j) // 最高得点 { if (highscore < score[j]) highscore = score[j]; } for (k = 0; k < ninzu; ++k) { // 条件は… // 「highscore」と配列score[]の要素が同じ かつ // その配列score[]とname[]の添え字が一致する // name[](つまり最高得点者)を表示させたい // 最高得点者のみを全て表示する条件にしたい // if(…) ?? } Console.WriteLine(highscore); continue; case "9": // プログラム終了 pEnd = true; break; } if (pEnd) { break; } } } }
配列name[]の中から最高得点者(複数の場合もあり)を取得し表示させる方法がわからず、苦戦しております。
for文で受験者数分まわして、if文で配列score[]の要素がhighscoreと一致、かつ
その要素の添え字とname[]の添え字が一致とすれば、
最高得点者の氏名が取得できるのでは?
と思いましたが、うまくコードが書けません。
なにかよい方法はないでしょうか?
知恵をお借りしたいです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー