CSDN博客

img CNBT

VC学习资料收集(21):可定制大小和数量的随机数函数

发表于2004/12/29 3:33:00  3477人阅读

分类: 技术文章收集

可定制大小和数量的随机数函数
作者:
93106部队 袁海鸿

下载本文示例源代码

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

相关博文

我的热门文章

img
取 消
img