楽しんだ者勝ち~就活を終えて伝えたいこと~

楽しんだ者勝ち~就活→エンジニア~

就活を終えて伝えたいことを綴ってます。

MENU

C言語で遊んでみた~srand~

【スポンサーリンク】

srandを学ぶ

最近、c言語を少しずつ勉強しているので、遊びで作ったプログラムを載せます。
あらかじめ、ご了承いただきたいのは、このプログラムは特に意味がないということです。


そんな中でも、特徴的な事として、

srand(time(NULL));

を使っているところです。srandはtimeに影響して、乱数を出力します。timeによって乱数が変わるか確認した結果が以下の通りです。(抜粋です)

f:id:mottobungaku:20180926024013p:plain


ちゃんと変わっているのが確認できました。ただ、どこかのタイミングで分散も出したいと思います。

コード

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
#include <time.h>

/*****define*****/
#define count  1024//回数

typedef struct complex{
	int out;
	double average;
}comp;

void rand_num0(comp rand_0[]);
void rand_num1(comp rand_1[]);
void rand_num2(comp rand_2[]);

int main(int argc, char const *argv[]) {


  int i;
  double average;
  comp rand_0[count];
  comp rand_1[count];
  comp rand_2[count];
  rand_num0(rand_0);
  rand_num1(rand_1);
  rand_num2(rand_2);
  FILE *fp;
      if((fp=fopen("test.csv","w"))==NULL){
                printf("FILE not open\n");
        return -1;
      }
      for ( i = 0; i < count; i++) {
        fprintf(fp,"%d,%d,%d\n", rand_0[i].out,rand_1[i].out,rand_2[i].out);
      }
      fprintf(fp,"\nAverage,%lf,%lf,%lf\n", rand_0[0].average,rand_1[0].average,rand_2[0].average);
      printf("End\n");
	     fclose(fp);
        return 0;
}


/*****rand function0*****/
void rand_num0(comp rand_0[]) {

  int i,rand_sum;

  /* 乱数の種を初期化 */
  srand(time(NULL));

  /* 1 〜 43 のランダムな数値 */
  for ( i = 0; i < count; i++) {
    rand_0[i].out = rand() % 43 + 1;
    rand_sum  += rand_0[i].out;
  }
    rand_0[0].average = rand_sum/(count-1);
}

/*****rand function1*****/
void rand_num1(comp rand_1[]) {

  int i,rand_sum;

  /* 乱数の種を初期化 */
  srand(2*time(NULL));

  /* 1 〜 43 のランダムな数値 */
  for ( i = 0; i < count; i++) {
    rand_1[i].out = rand() % 43 + 1;
    rand_sum  += rand_1[i].out;
  }
    rand_1[0].average = rand_sum/(count-1);
}

/*****rand function2*****/
void rand_num2(comp rand_2[]) {

  int i,rand_sum;

  /* 乱数の種を初期化 */
  srand(pow(time(NULL),10)+3.3);

  /* 1 〜 43 のランダムな数値 */
  for ( i = 0; i < count; i++) {
    rand_2[i].out = rand() % 43 + 1;
    rand_sum  += rand_2[i].out;
  }
    rand_2[0].average = rand_sum/(count-1);
}