質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

4回答

3211閲覧

完成したプログラムをより良くしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/05/10 04:43

プログラミングでわからないことがあります。
10人の点数を入力して平均値と最高点と最低点を表示するプログラムです。

#include <stdio.h> int main(void){ int i; int a[10]; int max, min; int sum; float ave; printf("10人の試験の点数:\n"); printf("No.1:"); scanf("%d", &a[0]); printf("No.2:"); scanf("%d", &a[1]); printf("No.3:"); scanf("%d", &a[2]); printf("No.4:"); scanf("%d", &a[3]); printf("No.5:"); scanf("%d", &a[4]); printf("No.6:"); scanf("%d", &a[5]); printf("No.7:"); scanf("%d", &a[6]); printf("No.8:"); scanf("%d", &a[7]); printf("No.9:"); scanf("%d", &a[8]); printf("No.10:"); scanf("%d", &a[9]); max = min = a[0]; for(i=1;i<10;++i){ if( max < a[i] ) max = a[i]; if( min > a[i] ) min = a[i]; } sum = a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]; ave = sum / 10.0; printf("平均点は%.1f点です\n", ave); printf("最高点:%d点\n", max); printf("最低点:%d点\n", min); return 0; }

これで正しく表示されるのですが、少し手を加えます。
最後の最高点・最低点の表示の際に、
例えばNo.1が最高なら「最高点(No.1):〇〇」と名前も同時に表示させたいですのですが
考えてもわかりませんでした。最低点も同様です。どうすればいいか教えてください。お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/05/10 04:49

タグがC#,C++になっていますが、コードの中身はCです。タグをCへ変更すべきです。
Zuishin

2017/05/10 04:50

C# 関係ありませんね。タグから C# を外して C を入れてください。
guest

回答4

0

まずは入力時に 得点 だけでなく 名前 も入力できるようにしようか。
つぎに 最高点/最低点はいくつ じゃなく 最高点/最低点は何番目 を求めよう。
何番目 がわかっていれば 何番目の得点 と 何番目の名前 を出力すればいいからね。

投稿2017/05/10 05:11

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えばNo.1が最高なら「最高点(No.1):〇〇」と名前も同時に表示させたいですのですが

最高点が'1番目'であることや、1番目の人の名前を表示したいならその情報が変数に入っている状況を作るようにしてください。

int idOfBestMarkStudent; //最高点の人の番号
char* nameOfBestMarkStudent; //最高点の人の名前

最高点の人の番号は最高点を求める際に覚えておけばよいだけです。
最高点の人の名前は現状のプログラムでは求まりません。なぜなら名前を外部から入力する部分が「設計されていない」からです。まずは外部から名前と点数を入力しその情報を配列へ覚えるようなプログラムを作ってみてください。

ところで、そのような「機能の追加」より先にプログラムの作りを「よりよく」することが先だと思います。

C

1printf("No.1:"); 2scanf("%d", &a[0]); 3printf("No.2:"); 4scanf("%d", &a[1]); 5...

このような「同じような処理を一々書く」のはいただけません。forループを用いて1~10までの生徒のデータを入力するようにプログラムを書きなおしてみてください。

投稿2017/05/10 05:00

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • max = a[i];に加え、その時の要素位置imax_iなどに保持しておくとどうでしょうか?
  • 点数の入力部分と合計の計算部分もループ処理で書いてみましょう。

追記

なお、上記ができたら、次のような修正に挑戦するのも良いと思います。

  • 入力をループで書く。
  • 入力ループを途中で中断できるようにする(点数に-1を入力したら入力終了など)
  • 入力ループ中に、最高、最低点など、結果表示に必要な値をうまく保持、計算しておく。

上記の修正をおこなうと、a[10]のような配列不要、数個の変数だけで好きな人数分だけ最高、最低点と名称、合計、平均を出すことができるようになります。
ただし、最高、最低点が複数人存在する場合は最後の人を採用するものとします。

投稿2017/05/10 04:51

編集2017/05/10 08:30
can110

総合スコア38234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

No.xも配列にし、for文の中で「最大値」ではなく、「最大値の要素番号」を調べるように修正すればいいですね。

構造体を使った方がよりよくなると思いますが。

投稿2017/05/10 04:48

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問