ページ 1 / 1
乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 14:52
by 加奈子
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をつかってやるんだろうなぁとはわかるのですが...
すいません。だれかわかる方がいたら、お願いします(´・ω・`)
Re: 乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 15:00
by Rittai_3D
コードを貼る場合はコードタグを使用し、適切なインデントをしてくださると見やすくて助かります。
あなたが書いたコードを貼ってください。課題の丸投げは禁止されています。
また、二つのことを一緒にするのではなく、一つの処理と一つの処理のように分割して考えた方が簡単だと思います。
Re: 乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 16:32
by 加奈子
コード:
#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);
}
私のです。
遅くなってすいません。
ほんとに初心者なので簡単なミスをしてるかもです
Re: 乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 16:38
by usao
average, max, min を適切に初期化しておかないとダメでしょう.
例えば,
コード:
int a; //初期化してない
a += 5;
とかしたら,aの値がいくつになるのかは謎ですよね.
Re: 乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 16:46
by 加奈子
加奈子 さんが書きました:コード:
#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);
}
私のです。
遅くなってすいません。
ほんとに初心者なので簡単なミスをしてるかもです
ってことですか(。´・ω・)?
ほんとにごめんなさい(;_;)/~~~
Re: 乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 17:07
by usao
>ってことですか(。´・ω・)?
じゃなくて,ご自身で動作確認して然るべきでは…
オフトピック
・averageの初期値を0にした理由
・maxの初期値を0にした理由
・minの初期値を0にした理由
ついでに
・配列の要素数が100個,500個である理由
等,それぞれ説明できますか?
Re: 乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 17:57
by みけCAT
- 22行目と24行目のセミコロンが蛇足である。
- 28行目で、データの型と書式指定文字列が合っていない。
Re: 乱数を利用した書き方がわかりません
Posted: 2015年6月16日(火) 22:08
by box
コード:
#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;
}