WEB开发网
开发学院软件开发VC 可定制大小和数量的随机数函数 阅读

可定制大小和数量的随机数函数

 2007-03-16 21:56:53 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 近日在做一个考试软件时,需要每次题目不同且题数可定制,可定制大小和数量的随机数函数,在C++没找到适用函数,就顺手做了一个较通用的C++的随机函数扩展,在相应的类实现中传递最大值和数量,输出随机数序列,请大家编程时参考,void randEx(int MAX,int NUM){int

本文示例源代码或素材下载

近日在做一个考试软件时,需要每次题目不同且题数可定制,在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中调试通过。

Tags:定制 大小 数量

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接