双精度随机数数组
Double-precision Random number array
完成了一些作业来生成一个加载和显示数组大小为 20 的双精度随机数的程序。
我知道它很乱但不擅长这个
#include <iostream> //required for cin, cout, endl
#include <cstdlib> //required for setw(), setfill()
#include <iomanip>
using namespace std;
void printArray(int arr[]);
void fillRandArray(int arr[]);
void fillDecimalArray(double dArr[]);
void printDecimalArray (double dArr[]);
int main()
{
int random[21];
double decimal[21];
rand();
fillRandArray(random);
fillDecimalArray(decimal);
printArray(random);
printDecimalArray(decimal);
cin.get();
cin.get();
return 0;
}
void fillRandArray(int arr[])
{
for (int i = 1; i < 21; i++)
{
arr[i] = rand() % 100 + 1;
}
}//end load of rand array
void fillDecimalArray(double dArr[ ])
{
for (double i = 1; i <21; i++)
{
dArr[i] = static_cast<double>(rand()%100)/10;
}
}
void printArray(int arr[])
{
cout << " 5x4 Array" <<endl;
cout <<endl;
int cols = 5;
for(int i = 1; i < 21; i++)
{
cout << setw(5) << setfill(' ');
cout << arr[i];
if(i%cols == 0)
cout << endl;
}//end print array
}//end of printArray()
void printDecimalArray (double dArr[])
{
int cols = 4;
for (double i = 1; i <21; i++)
{
cout << setw(5) << setfill(' ');
int precision = 2;
cout << dArr[i];
cout << endl;
}
}
需要以 4x5 显示 table
错误是'数组下标的无效类型'double*[double]''
for (double i = 1; i <21; i++)
{
dArr[i] = static_cast<double>(rand()%100)/10;
您不能访问带有双精度的数组(即 dArr[i]
无效,因为 i 不是整数类型 - 它是双精度浮点值),必须是整数类型。把 i 设为 int 就好了。
就是说,您从 1-20 而不是 0-19 的循环将起作用(因为您使数组 1 个元素太大),但您不应该这样做。习惯写作
for (int i = 0; i < size_of_array; i++)
然后只需分配正确大小的数组(在您的示例中,20 而不是 21)
C++11以后,可以使用std::uniform_real_distribution
#include <random>
...
std::random_device rd;
std::mt19937 gen(rd());
const double min_v = 1.0, max_v = 100.0;
std::uniform_real_distribution<> dis(min_v, max_v);
for (int n = 0; n < 20; ++n) {
// ^ ^ ^^
dArr[n] = dis(gen);
}
如果在范围 (1-20) 中使用循环,请使用 cout << arr[i-1];
或在范围 (0-19) 中使用循环并将条件更改为 if((i + 1) % cols == 0) ...
如果你必须使用rand()
来生成这些数字,你可以使用:
dArr[n] = 1 + (rand() % 99) + static_cast<double>(rand() % 101) / 100.0;
// Expression Range
// [1] rand() % 99 0 - 98
// [2] 1 + (rand() % 99) 1 - 99
// [3] rand() % 101 0 - 100
// [4] (rand() % 101) / 100.0 0.00 - 1.00
// [5] [2] + [4] 1.00 - 100.0
但我们警告说:
- 使用任何此类表达式生成的随机数分布不均匀。
- 始终将
std::srand
与变量(可能 std::time(0)
)一起使用,以便在多次执行同一二进制文件时获得不同的输出。
完成了一些作业来生成一个加载和显示数组大小为 20 的双精度随机数的程序。 我知道它很乱但不擅长这个
#include <iostream> //required for cin, cout, endl
#include <cstdlib> //required for setw(), setfill()
#include <iomanip>
using namespace std;
void printArray(int arr[]);
void fillRandArray(int arr[]);
void fillDecimalArray(double dArr[]);
void printDecimalArray (double dArr[]);
int main()
{
int random[21];
double decimal[21];
rand();
fillRandArray(random);
fillDecimalArray(decimal);
printArray(random);
printDecimalArray(decimal);
cin.get();
cin.get();
return 0;
}
void fillRandArray(int arr[])
{
for (int i = 1; i < 21; i++)
{
arr[i] = rand() % 100 + 1;
}
}//end load of rand array
void fillDecimalArray(double dArr[ ])
{
for (double i = 1; i <21; i++)
{
dArr[i] = static_cast<double>(rand()%100)/10;
}
}
void printArray(int arr[])
{
cout << " 5x4 Array" <<endl;
cout <<endl;
int cols = 5;
for(int i = 1; i < 21; i++)
{
cout << setw(5) << setfill(' ');
cout << arr[i];
if(i%cols == 0)
cout << endl;
}//end print array
}//end of printArray()
void printDecimalArray (double dArr[])
{
int cols = 4;
for (double i = 1; i <21; i++)
{
cout << setw(5) << setfill(' ');
int precision = 2;
cout << dArr[i];
cout << endl;
}
}
需要以 4x5 显示 table 错误是'数组下标的无效类型'double*[double]''
for (double i = 1; i <21; i++)
{
dArr[i] = static_cast<double>(rand()%100)/10;
您不能访问带有双精度的数组(即 dArr[i]
无效,因为 i 不是整数类型 - 它是双精度浮点值),必须是整数类型。把 i 设为 int 就好了。
就是说,您从 1-20 而不是 0-19 的循环将起作用(因为您使数组 1 个元素太大),但您不应该这样做。习惯写作
for (int i = 0; i < size_of_array; i++)
然后只需分配正确大小的数组(在您的示例中,20 而不是 21)
C++11以后,可以使用std::uniform_real_distribution
#include <random>
...
std::random_device rd;
std::mt19937 gen(rd());
const double min_v = 1.0, max_v = 100.0;
std::uniform_real_distribution<> dis(min_v, max_v);
for (int n = 0; n < 20; ++n) {
// ^ ^ ^^
dArr[n] = dis(gen);
}
如果在范围 (1-20) 中使用循环,请使用 cout << arr[i-1];
或在范围 (0-19) 中使用循环并将条件更改为 if((i + 1) % cols == 0) ...
如果你必须使用rand()
来生成这些数字,你可以使用:
dArr[n] = 1 + (rand() % 99) + static_cast<double>(rand() % 101) / 100.0;
// Expression Range
// [1] rand() % 99 0 - 98
// [2] 1 + (rand() % 99) 1 - 99
// [3] rand() % 101 0 - 100
// [4] (rand() % 101) / 100.0 0.00 - 1.00
// [5] [2] + [4] 1.00 - 100.0
但我们警告说:
- 使用任何此类表达式生成的随机数分布不均匀。
- 始终将
std::srand
与变量(可能std::time(0)
)一起使用,以便在多次执行同一二进制文件时获得不同的输出。