配列から最高点を出力する方法とは?

このQ&Aのポイント
  • 学生のテストの点数を配列として受け取り、最高点を出力する方法を教えてください。
  • 関数を使ってif文で最高点を判定する方法についてわかりません。どうすればいいですか?
  • みたいな感じの例題を作るまとめの練習ですが、ちょっと頭がこんがらがってしまいました。お手すきのときにご教示いただけると幸いです。
回答を見る
  • ベストアンサー

5つの要素を持つ配列から最高点を出力する

1,5つの要素を持つ配列を受け取り、その最大値を返すint main(int x[])関数を定義してください。max()関数を使い、キーボードから学生の数とテストの点数を入力させ、最高点を出力うするコードを記述してください。 テストの点数を入力してください。 50 49 35 68 75 最高点は75点です、 みたいな感じの例題を作るまとめの練習ですが、ちょっと頭がこんがらがってしまいました。 とりあえず私が、途中まで記述したソースです。 #include<iostream> using namespace std; int max(int x[]); int main() { int tensu[5]; for (int i = 0; 0 < 5; i++) { cout << "テストの点数を入力してください。\n"; cin >> tensu[i]; } return 0; } int max(int x[]) { } 関数を使ってそれでif判定だとは思うのですが、関数を使ってifを使う方法が解りません。 ご教示よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

今回のコードの設計ポリシーは、 mainからは「何々を実行しろ」という指令を出すことに徹しています。 データの入力用の関数input() と 最高点を求める関数max() を呼び出すと、呼び出された側は 「合点だ」といって、データ入力や最高点の計算を行ないます。 今くらいのコードであれば、main()に全部書いてもいいっちゃいいですが、 それは当方のポリシー(mainに実際の処理を書くことはほとんどしない)に 反します。

aiueo6391
質問者

お礼

回答ありがとうございます。 色々応用が利かない頭なので復習して勉強していきたいと思います。 ありがとうございました。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>#define N (5)という部分 コード中にNという単語が出てきたら、それを(5)に置き換えてから コンパイルしてね、という指示です。 5がそこら中に出てきたとき、例えば10人分の最高点に変えようと思ったら すべての5を漏れなく10に修正する必要があり、めんどうですよね。 #defineを使えば、(5)を(10)にする1ヶ所だけですみます。 >それとポインタは使ってもよいのでしょうか? 関数の実引数において、 int array[] と int *array は等価です。

aiueo6391
質問者

お礼

回答ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

こんな感じでしょうか。 #include <iostream> using namespace std; #define N (5) void input(int *score) { cout << "テストの点数を入力してください。\n"; for (int i = 0; i < N; i++) { cin >> score[i]; } } int max(int *score) { int max = score[0]; // 配列の先頭を、仮の最高点とする for (int i = 1; i < N; i++) { if (score[i] > max) // 今見ている点数が最高点より大きかったら max = score[i]; // その点数を最高点にする } return max; } int main(void) { int score[N]; input(score); cout << "最高点は、" << max(score) << "点です。\n"; return 0; }

aiueo6391
質問者

お礼

回答ありがとうございます。 疑問点が出たのでそこだけ聞きたいのですが、 #define N (5)という部分と、inputのinputって部分は何ですか? それとポインタは使ってもよいのでしょうか? ご教示お願いします。

aiueo6391
質問者

補足

あ、、すみませんinputはinputですね・・・。 #define N (5)が解りません。

関連するQ&A

  • 点数の最高得点を知るプログラム

    #include<iostream> using namespace std;  int main() {  int i;  int box[5]; cout << "テストの点数を入力してください。\n"; for (int i = 0; i < 5; i++) { cin >> box[i]; } return 0; } for文で 点数を入力まで行ったのですが、 関数で配列を使って入力した最大値を調べるプログラムの練習問題なんですが、 何回もエラー出てしまいよく解っていません。 関数からポインタまで配列でどうつかうかがよく解ってないんだと思います。 良かったら教えてください、お願いします。

  • 以下のプログラムについて教えてください

    #include<iostream.h> int main() { int i; int ninzu=0; int tensu[6]; int rakudai[6]; cout<<"6人の点数を入力!\n"; for(i=0; i<6;i++) { cout<<i+1<<"番:"; cin>>tensu[i]; if(tensu[i]<60) { rakudai[ninzu]=i; ninzu++;} } cout<<"60点未満は"<<ninzu<<"人です。\n"; for(i=0; i<ninzu; i++) cout<<rakudai[i]+1<<"番:"<<tensu[rakudai[i]]<<"点\n"; return(0); } というテストの点数が60点未満の学生の一覧表を出力するというプログラムなんですが、12行目からの rakudai[ninzu]...以降が よくわかりません。配列の数を指定するところに数字以外のものが来るというのはいったいどういうことなのでしょう?どなたか教えてください。

  • 初心者向け配列の処理、本に載っているコードの意味が少しわかりません。

    入門者向けの本に載っていたコードなんですが、1行だけ どういった処理を行っているのか理解できないところがありました。 よろしくお願いします。 /* 5人の学生の点数を読み込んで60点以上の学生の一覧を表示 */ #include <stdio.h> #define NUMBER 5 /* 人数 */ int main(void) {    int i;    int snum = 0; /* 合格者の人数 */    int tensu[NUMBER]; /* NUMBER人の学生の点数 */    int succs[NUMBER]; /* 合格者リスト(合格者の添字を格納) */    puts("点数を入力してください。");    for (i = 0; i < NUMBER; i++) {       printf("%2d番:", i + 1);       scanf("%d", &tensu[i]);       if (tensu[i] >= 60)          succs[snum++] = i; /*ここがどういった処理になっているのかわからないです。 */    }    puts(" 合格者一覧 ");    puts("------------");    for (i = 0; i < snum; i++)       printf("%2d番(%3d点)\n", succs[i] + 1, tensu[succs[i]]);    return (0); }

  • プログラムに詳しい方教えてください!

    5人の点数を入力して二つの関数maxとpmaxで最高点を求めたいのですが、 int max(int d[]) { int score; int i; score = d[0]; for(i=1;i<5;i++){ if(score < d[i]){ score = d[i]; } } return score; } int pmax(int *d) { int score; int i; score = *d; for(i=1;i<5;i++){ if(score<*(d+i)){ score = *(d+i); } } return score; } この2つの関数を利用して、 5人の点数を入力してください。 47 34 54 98 37 関数maxが求めた最高点は98点です。 関数pmaxが求めた最高点は98点です。   というように、動かしたいのですが、プログラムの組み方がよくわかりません。 はっきり言って、これは学校の宿題なんですが、どうしてもわからないんです。どうかわかる方、教えてください。

  • C言語の問題-配列について

    今、独学でC言語をやっているんですが本にのっている問題に解答がなくわかりません。 問題はbunpu[tensu[i] / 10]++;はどういう意味を表すかです。 do-while分の繰り返しがおわった後にbumpuに++があるので+1をすればいいのでしょうか?よくわかりません・・・ 学生10人の点数の分布を10点ごとに分布グラフとして表示します。 #include <stdio.h> #define NUMBER 80 int main (void) { int i,j,num; int tensu[NUMBER]; int bunpu[11] = {0}; puts("点数を入力してください"); for("i =0; i < num; i++"){ printf("%2d番",i + 1); do{ scanf("%d",&tensu[i]); if(tensu[i] < 0 || tensu[i] > 100) printf("0以上100以下"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } puts("\n 分布ぐらふ "); printf(" 100:"); for (j = 0;j < bumpu[10];j++) putchar('*') putchar('\n') for(i = 9; i>=0; i--) { printf("%3d - %3d:",i*10,i*10+9); for (j=0; j< bunpu[i];j++) putchar('*'); putchar('\n'); } return(o); }

  • 点数の大きい順に出力する

    #include <iostream> using namespace std; int main() { const int num = 5; int test[num]; cout << num << "人の点数を入力して下さい。\n"; for(int i=0; i<num; i++){ cin >> test[i]; } } } } for(int j=0; j<num; j++){ cout << j+1 << "番目の人の点数は" << test[j]<< "です。\n"; } return 0; } ---------- の for(int s=0; s<num-1; s++){ for(int t=s+1; t<num; t++){ if(test[t] > test[s]){ int tmp = test[t]; test[t] = test[s]; test[s] = tmp; の部分が理解できません。 s<num-1 は 0<4; ということでしょうか? 値が5つ入力されその値が if(test[t] > test[s]){ にどの様に挿入されるのかが 解りません。  

  • javaについて・・・

    このように出力されるプログラムを考えています ↓ 受験者人数を入力してください 3 3人分の点数を入力してください 50 80 20 1人目の点数は50です 2人目の点数は80です 3人目の点数は20です 最高点は80です っという感じのプログラムを考えています。 そしていまここまでプログラムを書いたのはいいのですが 感じんの最高点が表示されません・・・ import java.io.*; class test{ public static void main(String[] args) throws IOException{ System.out.println("テストの受験者数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str =br.readLine(); int num = Integer.parseInt(str); int test[] = new int[num]; int max=0; System.out.println(test.length +"人の点数を入力してください"); for(int i=0; i<num; i++){ String str1 = br.readLine(); test[i] = Integer.parseInt(str1); } for(int i=0; j<num; i++){ System.out.println((i+1)+"番目の人の点数は"+ test[i]+"です。"); if(test[i]>max){ max=test[i]; } } System.out.println("最高点は" +max+ "です。"); } } どこをどのように直せば最高点が表示されるようになるでしょうか? ご指摘おねがいします。

  • 教えてください!!

    このソースのtensu[5]={0};の意味を詳しくお願いします。宜しくお願いします。tensu[5]では、1~100の範囲で入力してください。が実行したら出てきてしまいますが、tensu[5]={0};とやるとうまくできます。そのことを知りたいです。 宜しくお願いします。 #include <stdio.h> int main(void) { int i; int tensu[5]= {0}; int sum=0; puts("点数を入力してください"); for(i=0; i<5; i++){ printf("%2d番:", i+1); do{ if(tensu[i]<0 || tensu[i]>100){ printf("0~100の範囲で入力してください。\n"); printf("%2d番:", i+1); } scanf("%d", &tensu[i]); }while(tensu[i]<0 || tensu[i]>100); sum+=tensu[i]; } putchar('\n'); for(i=0; i<5; i++) printf("%2d番: %d\n", i+1, tensu[i]); printf("合計点: %d\n", sum); printf("平均点: %f\n", (double)sum/5); return (0); }

  • C言語が分からないので分かる方説明お願いします

    C言語が分からないので分かる方説明お願いします #include<stdio.h> int main(void) { int i; int tensu[5]; int sum=0; printf(”点数を入力してください。”); for(i=0;i<5;i++){ printf(”%2d番:”,i+1); scanf(”%d”,&tensu[i]); sum+=tensu[i]; } printf(”合計点:%5d¥n”,sum); printf(”平均点:%5.1f¥n”,(double)sum/5); return(0); } 実行すると 点数を入力してください。 1番:95 2番:83 3番:85 4番:63 5番:89 合計点:415 平均点:83.0 できるだけ詳しく教えてください

  • 配列の要素数に変数を入れたい

    配列に数の入力履歴を入れて最後にその数を出力したいのですが、変数を入れることはできないと勉強した記憶がありまさにその通りコンパイルエラーが出ました。 他に何か方法はありませんでしょうか。 /* 課題1-3 */ #include <time.h> #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int i; int no1; /* 範囲1 */ int no2; /* 範囲2 */ int max; /* 大きい乱数 */ int min; /* 小さい乱数 */ int y; /* 当てさせる数 */ int stage; /* 入力回数 */ int x; /* 読み込んだ値 */ int n; /* 入力制限 */ srand(time(NULL)); no1 = rand(); no2 = rand(); if(no1 > no2){ max = no1; min = no2; } else{ max = no2; min = no1; } y = min + rand() % (max-min); n = ceil(log(max-min)/log(2)); int a[n]; /*←配列の要素数をn個にしたい*/ printf("%d以上%d以下の整数を当ててください。\n", min, max); stage = 0; do{ printf("残り%d回。いくつでしょう:\n", n - stage); scanf("%d", &x); a[stage++] = x; if(y > x) printf("小さいです。\n"); else if(y < x) printf("大きいです。\n"); }while(y != x && stage < n); if(y != x) printf("残念でした。正解は%dです。", y); else printf("正解です。%d回目で正解しました。", stage); puts("\n---入力履歴---"); for(i=0; i<stage; i++) printf("%2d : %4d %+4d\n", i+1, a[i], a[i] - y); return (0); }

専門家に質問してみよう