乱数を利用した書き方がわかりません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
加奈子

乱数を利用した書き方がわかりません

#1

投稿記事 by 加奈子 » 9年前

C言語で
50人で5教科のテストをして
⑴50人それぞれの合計点を表す
⑵平均の合計点を表示
⑶合計の1位と50位を表示

を同時にやってくれるプログラムをどう書けばいいのかわかりません(;´・ω・)
私がやってみても全然うまくいかなくて・・・

#include <stdio.h>
#include <stdlib.h>
int main( )
{
int i;
int japan[100], eng[100], math[100], sci[100], hist[100], total[100];
double average;
for(i=0;i<50;i++)
{
japan= rand()%100;
eng= rand()%100;
math= rand()%100;
sci= rand()%100;
hist= rand()%100;
printf(“[%d] %d %d %d %d %d¥n”, i, japan,eng,math,sci, hist);
}


ヒントとしてこれはもらったのですが…
乱数とforとかmax,minをつかってやるんだろうなぁとはわかるのですが...
すいません。だれかわかる方がいたら、お願いします(´・ω・`)

Rittai_3D
記事: 525
登録日時: 11年前

Re: 乱数を利用した書き方がわかりません

#2

投稿記事 by Rittai_3D » 9年前

コードを貼る場合はコードタグを使用し、適切なインデントをしてくださると見やすくて助かります。
あなたが書いたコードを貼ってください。課題の丸投げは禁止されています。

また、二つのことを一緒にするのではなく、一つの処理と一つの処理のように分割して考えた方が簡単だと思います。
初心者です

加奈子

Re: 乱数を利用した書き方がわかりません

#3

投稿記事 by 加奈子 » 9年前

コード:

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int i;
  int japan[100], eng[100], math[100], sci[100], hist[100], total[500];
  double average;
  int max;
  int min;
  for(i=0;i<50;i++)
    {
      japan[i]= rand()%100;
      eng[i]= rand()%100;
      math[i]= rand()%100;
      sci[i]= rand()%100;
      hist[i]= rand()%100;
      total[i]=japan[i]+eng[i]+math[i]+sci[i]+hist[i];
      printf("%d番目,%d点,%d点, %d点, %d点, %d点,合計[%d]点¥n",i, japan[i]
,eng[i],math[i],sci[i], hist[i],total[i]);
      average+=total[i];

      if(total[i]>=max);
        max=total[i];
      if(total[i]<=min);
         min=total[i];
    }
printf("平均点は%f点!,¥n",average/50);
   printf("最高点は%g点!,最低点は%g点!,¥n",max,min);

}
私のです。
遅くなってすいません。
ほんとに初心者なので簡単なミスをしてるかもです

アバター
usao
記事: 1887
登録日時: 11年前

Re: 乱数を利用した書き方がわかりません

#4

投稿記事 by usao » 9年前

average, max, min を適切に初期化しておかないとダメでしょう.

例えば,

コード:

int a;  //初期化してない
a += 5;
とかしたら,aの値がいくつになるのかは謎ですよね.

加奈子

Re: 乱数を利用した書き方がわかりません

#5

投稿記事 by 加奈子 » 9年前

加奈子 さんが書きました:

コード:

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int i;
  int japan[100], eng[100], math[100], sci[100], hist[100], total[500];
  double average=0;
  int max=0;
  int min=0;
  for(i=0;i<50;i++)
    {
      japan[i]= rand()%100;
      eng[i]= rand()%100;
      math[i]= rand()%100;
      sci[i]= rand()%100;
      hist[i]= rand()%100;
      total[i]=japan[i]+eng[i]+math[i]+sci[i]+hist[i];
      printf("%d番目,%d点,%d点, %d点, %d点, %d点,合計[%d]点¥n",i, japan[i]
,eng[i],math[i],sci[i], hist[i],total[i]);
      average+=total[i];

      if(total[i]>=max);
        max=total[i];
      if(total[i]<=min);
         min=total[i];
    }
printf("平均点は%f点!,¥n",average/50);
   printf("最高点は%g点!,最低点は%g点!,¥n",max,min);

}
私のです。
遅くなってすいません。
ほんとに初心者なので簡単なミスをしてるかもです
ってことですか(。´・ω・)?
ほんとにごめんなさい(;_;)/~~~

アバター
usao
記事: 1887
登録日時: 11年前

Re: 乱数を利用した書き方がわかりません

#6

投稿記事 by usao » 9年前

>ってことですか(。´・ω・)?

じゃなくて,ご自身で動作確認して然るべきでは…

オフトピック
・averageの初期値を0にした理由
・maxの初期値を0にした理由
・minの初期値を0にした理由
ついでに
・配列の要素数が100個,500個である理由

等,それぞれ説明できますか?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 乱数を利用した書き方がわかりません

#7

投稿記事 by みけCAT » 9年前

  • 22行目と24行目のセミコロンが蛇足である。
  • 28行目で、データの型と書式指定文字列が合っていない。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: 乱数を利用した書き方がわかりません

#8

投稿記事 by box » 9年前

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N (50)

typedef struct {
    int jpn;
    int math;
    int sci;
    int hist;
    int eng;
    int total;
} Person;

int getScore(Person *m)
{
    int total, i;

    for (total = i = 0; i < N; i++) {
        m[i].jpn   = rand() % 101;
        m[i].math  = rand() % 101;
        m[i].sci   = rand() % 101;
        m[i].hist  = rand() % 101;
        m[i].eng   = rand() % 101;
        m[i].total = m[i].jpn + m[i].math + m[i].sci + m[i].hist + m[i].eng;
        total += m[i].total;
    }
    return total;
}

void sortScore(Person *m)
{
    Person t;
    int i, j;

    for (i = 0; i < N - 1; i++) {
        for (j = i; j < N; j++) {
            if (m[i].total < m[j].total) {
                t = m[i], m[i] = m[j], m[j] = t;
            }
        }
    }
}

void printScore(Person *m)
{
    int i;

    for (i = 0; i < N; i++) {
        printf("%d人目の合計点は%d点\n", i + 1, m[i].total);
    }

}

void printAvg(int total)
{
    printf("合計の平均点は%.2f点\n", (double) total / N);
}

void printTopAndLast(Person *m)
{
    printf("1位の合計点は%d点\n", m[0].total);
    printf("%d位の合計点は%d点\n", N, m[N-1].total);
}

int main(void)
{
    Person member[N] = { 0 };
    int total;

    srand((unsigned int) time(NULL));
    total = getScore(member);
    printScore(member);
    printAvg(total);
    sortScore(member);
    printTopAndLast(member);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る