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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

解決済

上位3位までを出力するとき、同点が複数いた場合の処理の方法

hagito
hagito

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

9回答

0評価

0クリップ

1611閲覧

投稿2021/08/31 19:06

編集2021/08/31 20:30

<プログラムの目的>
20人の学生の「学生番号、名前、3科目の点数」がまとめられたファイルを読み込み、3科目の合計点数が高い上位3人を出力する。なお、上位3位までに同点の生徒がいた場合は全員出力する。

1位、2位、3位が複数いた場合は全員出力。1位が一人、2位が一人、3位が二人の場合は、四人出力。

1位が2人、2位が0、3位が2人の場合は、四人出力。

1位が4人の時は、四人出力。

ファイルは以下の形式。
1001 name 49 50 23
1002 name 22 79 43
......

<質問内容>
3科目の合計点数が高い順に出力まではできました。ただ、同点の生徒がいた場合の処理がわからないです。どうすれば同じ点数の学生を全員出力できるのでしょうか。

c

#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 //まずは構造体。 typedef struct { int num;//学生番号 char name[SIZE]; int sub1;//科目1 int sub2;//科目2 int sub3;//科目3 int sum;//3科目の合計 } students; students s[20]; //3科目の合計点数を降順に。 void bubble_sort(int n, students s[]) { students tmp; int i, j; for (i=0; i<n; i++) { for (j=n-1; j>i; j--) { if (s[j].sum > s[j-1].sum) { tmp = s[j]; s[j] = s[j-1]; s[j-1] = tmp; } } } } //最後の出力 void print_students(students s) { printf("%d,%s,%d\n", s.num, s.name, s.sum); } int main(int argc, char *argv[]) { FILE *fp; char line[SIZE], name[SIZE]; int i, sub1, sub2, sub3, num, sum[20]; //エラー処理 if ((fp = fopen(argv[1], "r"))== NULL) { printf("Can't open the file.\n"); return 1; } //配列が空じゃない時に回り続ける。 i = 0; for (; fgets(line, SIZE, fp) != NULL ;) { sscanf(line, "%d %s %d %d %d", &num, name, &sub1, &sub2, &sub3); //値をバンバン代入していく。まずはsum. s[i].sum = sub1 + sub2 + sub3; // printf("%d\n", s[i].sum); //次に、name. strcpy(s[i].name, name); //次に、num. s[i].num = num; i++; } bubble_sort(20, s); //これだと  int z = 3; for (i=0; i<z; i++) { print_students(s[i]); if (s[i].sum == s[i+1].sum) { z++; } } fclose(fp);```ここに言語を入力 コード

return 0;
}

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/08/31 20:58 編集

>どうすれば同じ点数の学生を全員出力できるのでしょうか まさしくそれがこの課題のキモですから、丸投げで聞くのはダメなのではないでしょうか。 実は案外簡単なので、閃きさえあればコードはすぐ書けます。頑張ってみてください。
hagito

2021/09/01 00:20

返信ありがとうございます。 焦りに焦ってしまい、丸投げという形で質問してしまいました。次から気をつけます。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。