C言語関係掲示板

過去ログ

No881 構造体を使わずに成績データを並び替える

[戻る] [ホームページ]
No.11404

降順プログラムへの改変
投稿者---インフィニティ(2003/12/22 17:40:08)


#include<stdio.h>

main()
{
  int Eng,Math,His,count,Gtotal,Total,;
  char Name[40];
  float Average;

  printf("   氏名   英語 数学 歴史   平均点\n");
  printf("\n");
  count=Gtotal=0;
  while (scanf("%s %d %d %d",Name,&Eng,&Math,&His)==4){
  count++;
  Total=Eng+Math+His;
  Gtotal+=Total;
  Average=(float)Total/3;
  printf("%-12.12s %4d %4d %4d : %6.1f\n",Name,Eng,Math,His,Average);
}
  printf("--------------------------------\n");
  printf("               学生数:%d\n",count);
  if(count>0)
    printf("             全平均点:           %8.1f\n",
           (float)Gtotal/((float)count*3));
}

このプログラムにデータを入力し、実行すると
入力data
Aさん100 100 100
Bさん 89 72 45
Cさん100 90 83

出力
Aさん 100 100 100 : 100.0
Bさん 89 72 45 : 68.7
Cさん 100 93 87 : 91.0

となります。これを改変し

配列 Eng[100] Math[100] His[100]として宣言して、出力される結果を
入力data
100 100 100
89 72 45
100 90 83

出力
100 100 100 : 100.0
100 93 87 : 91.0
89 72 45 : 68.7

と降順に並べ変えた上で出力させるプログラムにしたいのですが。

最初に新しく配列を宣言したところでどうデータを扱えば良いか分からず、全く手が付けれません。。。

No.11406

Re:降順プログラムへの改変
投稿者---shu(2003/12/22 18:01:16)
http://park6.wakwak.com/~nougaki/


構造体を使ってみてはどうでしょう。

http://www9.plala.or.jp/sgwr-t/c/sec15.html

No.11431

Re:降順プログラムへの改変
投稿者---インフィニティ(2003/12/23 15:26:44)


shuさんアドバイスありがとうございます^^
構造体の方、目を通して見ました。
ただ、今回の問題は学校の課題でして(汗
まだ構造体と言うのは習っていないのでちょっと使えなさそうなんです…
名前入りで出力する場合、構造体が必要になりそうですが今回の問題では改変したプログラムに入力するデータの方には名前がいらないみたいなので(数値のデータのみ)、構造体無しで出来そうなのですが、やっぱり構造体を使わないと駄目でしょうか?
聞いてばかりですいません^^;


No.11432

Re:降順プログラムへの改変
投稿者---かずま(2003/12/23 17:58:20)


> やっぱり構造体を使わないと駄目でしょうか?

そんなことはありません。
たとえば、次のプログラムは構造体を使っていません。
#include <stdio.h>

#define N  100

int main(void)
{
    int i, k, n, gtotal = 0;
    int index[N], eng[N], math[N], his[N], total[N];

    for (n = 0; n < N; n++) {
        if (scanf("%d%d%d", &eng[n], &math[n], &his[n]) != 3) break;
        gtotal += total[n] = eng[n] + math[n] + his[n];
        for (i = n; i > 0; i--) {
            k = index[i-1];
            if (total[k] >= total[n]) break;
            index[i] = index[i-1];
        }
        index[i] = n;
    }
    printf(" 英語 数学 歴史   平均点\n\n");
    for (i = 0; i < n; i++) {
        k = index[i];
        printf("%4d %4d %4d : %6.1f\n",
            eng[k], math[k], his[k], total[k] / 3.0);
    }
    printf("-------------------------\n");
    printf("        学生数 : %4d\n", n);
    if (n > 0)
        printf("      全平均点 : %6.1f\n", gtotal / (3.0 * n));
    return 0;
}

> 聞いてばかりですいません^^;

では、上のプログラムを解読し、あなたと同レベルの人にわかるように
説明してみてください。


No.11433

Re:降順プログラムへの改変
投稿者---かずま(2003/12/23 18:14:22)


> たとえば、次のプログラムは構造体を使っていません。
間違いではないのですが、

    index[i] = index[i-1];
を
    index[i] = k;

に変更します。