第5講 もしもボックス=if文の学習
第4話 乱数系列を自動的に変える
huei
国語=41
社会=85
数学=72
理科=38
英語=80
合計点=316
平均点=63.200000
合格

前話で作ったアプリは何回やっても、
上の結果しか出しません。
結果を変えるには、乱数の系列(乱数の発生順番)を変更しなければなりません。
乱数系列を変更するにはsrand(・)を使います。
・をシード値といいます。
シード値が乱数の系列を決めます。
・のところに例えば1と入れて、
#include<stdio.h>
#include<stdlib.h>
int f(); //データ作成社員
void hy(int a,int b,int c,int d,int e,int g); //データを画面に表示する社員
void gh(int g); //合否を判定し画面に表示する社員
int main(){
  int a; //国語のデータ受け皿
  int b; //社会のデータ受け皿
  int c; //数学のデータ受け皿
  int d; //理科のデータ受け皿
  int e; //英語のデータ受け皿
  int g; //合計点
  
srand(1); //シード値を指定
  a=f();
  b=f();
  c=f();
  d=f();
  e=f();
  g=a+b+c+d+e;
  hy(a,b,c,d,e,g);
  gh(g);
}
int f(){
  return(rand()%101);
}
void hy(int a,int b,int c,int d,int e,int g){
  printf("国語=%d\n",a);
  printf("社会=%d\n",b);
  printf("数学=%d\n",c);
  printf("理科=%d\n",d);
  printf("英語=%d\n",e);
  printf("合計点=%d\n",g);
  printf("平均点=%f\n",(double)g/5);
}
void gh(int g){
  if(g>=300)printf("合格\n");
  if(g<300)printf("不合格\n");
}
として実行すると、
wr
(今回)
huei
(前回)
で結果は変わりませんが、

  srand(2); //シード値を指定

とすると、

と変わります。
しかし、手でシード値を入れるのでは大変です。

このシード値を時間毎に自動的に取得させる方法があります。
srand(time(NULL));
とします。
time(NULL)はグリニッチ標準時である1970年1月1日の00:00:00
から現在までの経過時間を秒単位で表したものです。
ただし、timeを使うときには、
冒頭に
#include <time.h>
を入れておく必要があります。

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int f(); //データ作成社員
void hy(int a,int b,int c,int d,int e,int g); //データを画面に表示する社員
void gh(int g); //合否を判定し画面に表示する社員
int main(){
  int a; //国語のデータ受け皿
  int b; //社会のデータ受け皿
  int c; //数学のデータ受け皿
  int d; //理科のデータ受け皿
  int e; //英語のデータ受け皿
  int g; //合計点
  srand(time(NULL)); //シード値を自動的に指定
  a=f();
  b=f();
  c=f();
  d=f();
  e=f();
  g=a+b+c+d+e;
  hy(a,b,c,d,e,g);
  gh(g);
}
int f(){
  return(rand()%101);
}
void hy(int a,int b,int c,int d,int e,int g){
  printf("国語=%d\n",a);
  printf("社会=%d\n",b);
  printf("数学=%d\n",c);
  printf("理科=%d\n",d);
  printf("英語=%d\n",e);
  printf("合計点=%d\n",g);
  printf("平均点=%f\n",(double)g/5);
}
void gh(int g){
  if(g>=300)printf("合格\n");
  if(g<300)printf("不合格\n");
}
コピペ用添付ファイル
これで毎回異なる結果が出るようになります。
では、次話の課題です。
それは、最高点の教科を見いだして、
教科名と得点を表示させることです。

国語=98
社会=94
数学=51
理科=43
英語=64
合計点=350
平均点=70.000000
合格
最高点だった教科は国語です。そして、その点数は98です。

を実現するアプリに変更してください。
といっても、ノーヒントでは初心者には大変難しい課題ですから、
次話で考え方を説明します。
ですが、力自慢の方は是非自分で考えてください。
もちろん、if文を使いますよ。


第3話へ 第5話へ

a

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ