近日在做一個考試軟件時,需要每次題目不同且題數可定制,在C++沒找到適用函數,就順手做了一個較通用的C++的隨機函數擴展,請大家編程時參考。
void randEx(int MAX,int NUM)
{
int k=0;
int j=0;
time_t t;
//設置rand函數所用的啟始種子值,以期每次產生的隨機數序列均不相同。
srand((unsigned) time(&t));
for (k=1;k<=NUM;k++)//定制隨機數數量。
{
RAND[k]=rand()%MAX;//定制隨機數在0至最大值之間。
do
{
for (j=1;j<k;j++) if (RAND[j]==RAND[k]) //一次隨機數序列中有相同隨機數則再
//產生一個,直至一次隨機數序列中隨機數全不相同。
{
RAND[k]=rand()%MAX;
break;
}
}while(j<k);
}
}
具體用法:首先在你的工程中相應類頭文件中定義一個整型數組RAND[],把此函數加入頭文件,在相應的類實現中傳遞最大值和數量,輸出隨機數序列。詳見示例工程, 示例工程中主要代碼如下:
// TestRandDlg.h : header file
//
class CTestRandDlg : public CDialog
{
public:
CTestRandDlg(CWnd* pParent = NULL); // standard constructor
int RAND[20];
void randEx(int MAX,int NUM);
CWnd* p_StaticWnd;
.....
}
// TestRandDlg.cpp : implementation file
//
.....
void CTestRandDlg::OnTestrand()
{
UpdateData(TRUE);
randEx(m_nRandMax,m_nRandNum);
CString str;
if (m_nRandNum>=1){
str.Format("%d",RAND[1]);
p_StaticWnd = GetDlgItem(IDC_STATIC1);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=2){
str.Format("%d",RAND[2]);
p_StaticWnd = GetDlgItem(IDC_STATIC2);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=3){
str.Format("%d",RAND[3]);
p_StaticWnd = GetDlgItem(IDC_STATIC3);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=4){
str.Format("%d",RAND[4]);
p_StaticWnd = GetDlgItem(IDC_STATIC4);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=5){
str.Format("%d",RAND[5]);
p_StaticWnd = GetDlgItem(IDC_STATIC5);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=6){
str.Format("%d",RAND[6]);
p_StaticWnd = GetDlgItem(IDC_STATIC6);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=7){
str.Format("%d",RAND[7]);
p_StaticWnd = GetDlgItem(IDC_STATIC7);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=8){
str.Format("%d",RAND[8]);
p_StaticWnd = GetDlgItem(IDC_STATIC8);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=9){
str.Format("%d",RAND[9]);
p_StaticWnd = GetDlgItem(IDC_STATIC9);
p_StaticWnd->SetWindowText(str);}
if (m_nRandNum>=10){
str.Format("%d",RAND[10]);
p_StaticWnd = GetDlgItem(IDC_STATIC10);
p_StaticWnd->SetWindowText(str);}
UpdateData(FALSE);
}
本工程在VC++6.0+WindowsXP中調試通過。
本文配套源碼