前提
C言語で動的配列の時間を10回測ってその平均時間を調べています。
ランダムな数字を生成して、配列に入れるときにあらかじめコードに配列のサイズを指定すると、一つ一つの配列の中身が全く同じになってしまいます。ランダムな数を生成するときに自分で配列のサイズを入力するときは配列の中身は全て違うものになります。
その理由はなぜですか。
10回分自分でサイズの入力をしなくてもいい方法はありますか。
参考にしたコード
https://www.scaler.com/topics/pow-function-in-c/
実現したいこと
サイズを予め指定し、且つ、一つ一つの配列の中身を違うものにしたい。
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4#include <time.h> 5 6int main() { 7 8 clock_t cpu_time_start; 9 clock_t cpu_time_end; 10 double sec_start; 11 double sec_end; 12 double result_time; 13 double time_ave,time_cl=0; 14 int k,sum=0; //ここのkを仮に、予めk=2と指定すると以下の配列の中身は全て同じになる。 15 16 for(int ii=0;ii<10;++ii){ 17 printf("Size of the array: "); 18 scanf("%d", &k); //この場合は自分で入力するので、配列の中身は一つ一つ違うものになる。 19 int n = pow(2, k); 20 int *arr = calloc(n, sizeof(int)); // Creating enough space for 'n' integers. 21 if (arr == NULL) { 22 printf("Unable to allocate memory\n"); 23 return -1; 24 } 25 //printf("Enter the elements (space/newline separated): "); 26 srand(time(NULL)); 27 for (int i = 0; i < n; i++){ 28 arr[i] = rand() % 10 + 1; // Notice that, (arr + i) points to ith element 29 sum+=arr[i]; 30 } 31 printf("Given array: "); 32 for (int i = 0; i < n; i++) 33 printf("%d ", *(arr + i)); // Dereferencing the pointer 34 35 printf("\n"); 36 37 cpu_time_start = clock(); 38 sec_start = (double)cpu_time_start/CLOCKS_PER_SEC; 39 40 printf("Modified Array: "); 41 for (int i = 0; i < n - 1; i++) 42 printf("%d ", arr[i]); 43 printf("\n"); 44 45 free(arr); 46 printf("Sum of Array is %d\n",sum); 47 cpu_time_end = clock(); 48 sec_end = (double)cpu_time_end/CLOCKS_PER_SEC; 49 result_time = sec_end - sec_start; 50 51 printf("処理時間 : %f\n",result_time); 52 53 time_cl+=result_time; 54 } 55 time_ave = time_cl/10; 56 printf("%lf",time_ave); 57 return 0; 58} 59 60 61
コードはコードのマークダウンをご利用ください。
マークダウンに関しましてはヘルプを参照してください。
このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください

回答2件
あなたの回答
tips
プレビュー