6.生成一个100行5列的二维数组,该一维数组的元素符合均值为0,标准差为1.5的正态分布,将生成的二维数组写入csv格式文件中,要求写入文件的数据保留4位小数
时间: 2023-03-26 21:00:30 浏览: 76
labview 求解标准差(适合一到三维数组)
好的,我可以回答这个问题。以下是生成100行5列的二维数组,并将其写入csv格式文件的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define ROWS 100
#define COLS 5
double rand_normal(double mean, double stddev)
{
static double n2 = .;
static int n2_cached = ;
if (!n2_cached)
{
double x, y, r;
do
{
x = 2. * rand() / RAND_MAX - 1;
y = 2. * rand() / RAND_MAX - 1;
r = x * x + y * y;
} while (r == . || r > 1.);
double d = sqrt(-2. * log(r) / r);
double n1 = x * d;
n2 = y * d;
double result = n1 * stddev + mean;
n2_cached = 1;
return result;
}
else
{
n2_cached = ;
return n2 * stddev + mean;
}
}
int main()
{
srand(time(NULL));
double data[ROWS][COLS];
for (int i = ; i < ROWS; i++)
{
for (int j = ; j < COLS; j++)
{
data[i][j] = rand_normal(, 1.5);
}
}
FILE *fp = fopen("data.csv", "w");
if (fp == NULL)
{
printf("Failed to open file.\n");
return 1;
}
for (int i = ; i < ROWS; i++)
{
for (int j = ; j < COLS; j++)
{
fprintf(fp, "%.4f", data[i][j]);
if (j < COLS - 1)
{
fprintf(fp, ",");
}
}
fprintf(fp, "\n");
}
fclose(fp);
printf("Data written to file.\n");
return ;
}
```
这个程序使用了 Box-Muller 转换来生成正态分布的随机数。生成的数据被存储在一个二维数组中,并写入名为 "data.csv" 的文件中。
阅读全文