簡體   English   中英

雙精度隨機數數組

[英]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表中顯示錯誤是'無效類型'double * [double]'對於數組下標'

從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

但我們警告說:

  1. 使用任何此類表達式生成的隨機數的分布不均勻。
  2. 始終將std::srand與變量(可能是std::time(0) )一起使用,以便在多次執行相同二進制文件時獲得不同的輸出。
for (double i = 1; i <21; i++)
{
    dArr[i] = static_cast<double>(rand()%100)/10;

您無法訪問具有double的數組(即dArr[i]無效,因為我不是整數類型 - 它是雙精度浮點值),必須是整數類型。 只要讓我成為一個整體,你就會好。

也就是說,你的循環從1-20而不是0-19將起作用(因為你使你的數組​​1元素太大),但你不應該這樣做。 習慣寫作

for (int i = 0; i < size_of_array; i++)

然后只需分配正確大小的數組(在你的例子中,20而不是21)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM