程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 可定制大小和數量的隨機數函數

可定制大小和數量的隨機數函數

編輯:關於VC++

近日在做一個考試軟件時,需要每次題目不同且題數可定制,在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中調試通過。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved