C/C++中使用rand()、srand()产生随机数

2010年3月9日 Yarkee 3 条评论


如何用C/C++产生随机数?可以使用rand()函数, srand()函数。这两个函数都包含在<iostream>中
(1)  如果你只要产生一个不限范围随机数,则直接使用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX之间。RAND_MAX的值为2147483647。
例如:
#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;i+)
cout<<rand()<<endl;
return 0;
}
(2)  如果你要产生一个一定范围内的随机数,比如0~N之间,则使用rand()%N,这一取模运算即可。
例如:随机生成10个0~100的数:
#include<iostream>
using namespace std;
int main()
{
const int N=100;
cout<<rand()%N;
return 0;
}//产生一个[0,100)范围内的随机数
(3)但是上面所说随机数都只是固定不变的,如果你第二次运行的时候输出结果仍和第一次一样。这与是因为没有显式调用srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,如果未设显式随机数种子,rand()在调用时会自动设随机数种子为1。上面的两个例子就是因为没有设置随机数种子,而导致每次随机数种子的值都为1 ,导致rand()所产生的随机数值都一样。
srand()函数定义 : void srand (unsigned int seed);
我们经常使用time(0)的返回值来当做种子,time()是一个取系统时间的函数,包含在库”time.h”中
例如:
#include<iostream>
#include”time.h”
using namespace std;
int main()
{
const int N=100;
srand((int)time(0));
for(int x=0;x<10;x++)
cout<<rand()%N<<endl;
return 0;
}
这样的话,重复调用这个程序,输出的结果都不同了。



分类: 编程 标签: , ,

转载:C/C++ time.h从头学(下)

2010年3月7日 Yarkee 3 条评论

接前文…

4.与日期和时间相关的函数及应用
在本节,我将向大家展示怎样利用time.h中声明的函数对时间进行操作。这些操作包括取当前时间、计算时间间隔、以不同的形式显示时间等内容。

4.1 获得日历时间

我们可以通过time()函数来获得日历时间(Calendar Time),其原型为:

time_t time(time_t * timer);

如果你已经声明了参数timer,你可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:

#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NULL);
printf(“The Calendar Time now is %d\n”,lt);
return 0;
}

运行的结果与当时的时间有关,我当时运行的结果是:

The Calendar Time now is 1122707619

其中1122707619就是我运行程序时的日历时间。即从1970年1月1日0时0分0秒到此时的秒数。

4.2 获得日期和时间

这里说的日期和时间就是我们平时所说的年、月、日、时、分、秒等信息。从第2节我们已经知道这些信息都保存在一个名为tm的结构体中,那么如何将一个日历时间保存为一个tm结构的对象呢?

其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:

struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);

其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么我用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时,即2005年7月30日15点18分20秒。下面是个例子:

#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *local;
time_t t;
t=time(NUL);
local=localtime(&t);
printf(“Local hour is: %d\n”,local->tm_hour);
local=gmtime(&t);
printf(“UTC hour is: %d\n”,local->tm_hour);
return 0;
}

运行结果是:

Local hour is: 15
UTC hour is: 7

阅读全文…

分类: 编程 标签:

选择排序,插入排序,快速排序之比较

2010年3月7日 Yarkee 没有评论

选择排序,插入排序,快速排序是三种比较常用的程序设计算法

1.

在介绍选择排序法之前先介绍一种把最小的数放在第一个位置上的算法,当然也可以用前面所讲的冒泡排序法,现在我们改用一种新的算法:其指导思想是先并不急于调换位置,先从A[1]开始逐个检查,看哪个数最小就记下该数所在的位置P,等一躺扫描完毕,再把A[P]和A[1]对调,这时A[1]到A[10]中最小的数据就换到了最前面的位置。算法的步骤如下:

1)、先假设A[1]中的数最小,记下此时的位置P=1;

2)、依次把A[P]和A[I](I从2变化到10)进行比较,每次比较时,若A[I]的数比A[P]中的数小,则把I的值赋给P,使P总是指向当前所扫描过的最小数的位置,也就是说A[P]总是等于所有扫描过的数最小的那个数。在依次一一比较后,P就指向10个数中最小的数所在位置,即A[P]就是10个数中最小的那个数;

3)把A[P]和A[1]的数对调,那么最小的数就在A[1]中去了,也就是在最前面了。

如果现在重复此算法,但每重复一次,进行比较的数列范围就向后移动一个位置。即第二遍比较时范围就从第2个数一直到第N个数,在此范围内找最小的数的位置P,然后把A[P]与A[2]对调,这样从第2个数开始到第N个数中最小数就在A[2]中了,第三遍就从第3个数到第N个数中去找最小的数,再把A[P]与A[3]对调……此过程重复N-1次后,就把A数组中N个数按从小到大的顺序排好了。这种排序的方法就是选择排序法

2.

插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止.

算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是

1 + 2 + 3 + … + N = O(N ^ 2)的复杂度.

阅读全文…

转载:C/C++ time.h从头学(上)

2010年3月7日 Yarkee 没有评论

网上的东西都是转载来转载去,而且大多都不注明出处。因此我也无从考证这篇文章的原创作者是谁了。我也只好标上“转载”两个字以示清白。这篇文章很好的介绍了C/C++中time.h这一个库的各种函数与变量的用法,基本上可以解决编程序时所遇到的要处理时间的大部分问题。但是原文中的代码我发现有几处小错误,不知是原作者写错的,还是一次又一次的转载过程导致的错误,我尝试把错误的地方改了下,但是我老眼晕花,或许漏了个别错误没有改,请读者自酌。以下内容为转载:

本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。

关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)

1.概念
在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法.

通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:

Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。

Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。

epoch:时间点。时间点在标准C/C++中是一个整数,它用此时的时间和标准时间点相差的秒数(即日历时间)来表示。

clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。

我们可以使用ANSI标准库中的time.h头文件。这个头文件中定义的时间和日期所使用的方法,无论是在结构定义,还是命名,都具有明显的C语言风格。下面,我将说明在C/C++中怎样使用日期的时间功能。


阅读全文…

分类: 编程 标签:

将网站提交给搜索引擎,提升访问量

2010年3月7日 Yarkee 没有评论

将你的网站提交给搜索引擎,搜索引擎会随着搜索数据库的更新,自动抓取您的网站。输入时请注意:
1. 请输入包含“http://”的完整网址,例如 http://www.yarkee.net ;
2. 只需输入网站的首页地址,搜索引擎将从首页进入,抓取您网站的其他页面,并且定期更新;
3.你还可以添加评论或关键字,对你网页的内容进行描述。这些内容会给搜索引擎提供参考。

以下是一些常用搜索引擎的网站提交入口:
谷歌搜索引擎
百度搜索引擎
Bing搜索引擎
雅虎搜索引擎
搜狗搜索引擎
Tom搜索引擎
有道搜索引擎

分类: 网络 标签:

WP SlimStat