999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言中互不相同隨機(jī)數(shù)的應(yīng)用研究

2008-12-31 00:00:00張志峰
電腦知識(shí)與技術(shù) 2008年30期

摘要:文章對(duì)隨機(jī)數(shù)的應(yīng)用問題進(jìn)行了詳細(xì)的分析, 給出了一種實(shí)現(xiàn)的算法, 并用C語言實(shí)現(xiàn)。通過該問題的C實(shí)現(xiàn), 可使學(xué)習(xí)者清晰地觀測(cè)到解決該問題的全過程。

關(guān)鍵詞:隨機(jī)數(shù); 算法; 隨機(jī)排序

中圖分類號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)30-0654-02

Applied Study on Different Random Numbers in C Language

ZHANG Zhi-feng, LV Ying

(Department of Computer Science, Laiwu Vocational Technology College, Laiwu 271100, China)

Abstract: The paper makes a detailed analysis of the random numbers' application issue, and provides an algorithm for their application in C. Through this application, the learners can observe clearly the whole process of solving the problem.

Key words: random numbers; algorithm; random ordering

1 隨機(jī)數(shù)產(chǎn)生的方法

在編程過程中,隨機(jī)數(shù)有其廣泛的應(yīng)用價(jià)值。在C語言中,可以利用C語言中的種子函數(shù)srand()和偽隨機(jī)函數(shù)rand()來實(shí)現(xiàn)。生成步驟如下:

1) 首先給srand()提供一個(gè)種子,它是一個(gè)unsigned int類型,其取值范圍從0~65535;

2) 然后調(diào)用rand(),它會(huì)根據(jù)提供給srand()的種子值返回一個(gè)隨機(jī)數(shù)(在0到32767之間);

3) 根據(jù)需要多次調(diào)用rand(),從而不間斷地得到新的隨機(jī)數(shù);

4) 無論什么時(shí)候,都可以給srand()提供一個(gè)新的種子,從而進(jìn)一步“隨機(jī)化”rand()的輸出結(jié)果。

范例源程序如下:

#include

void main()

{

int i;

srand((unsigned)time(NULL));

i = rand();

Printf(\"%d\",i);

}

2 實(shí)際應(yīng)用

在c語言中,隨機(jī)數(shù)的產(chǎn)生大致可以分為以下三種情況:1) n個(gè)任意的隨機(jī)數(shù)的產(chǎn)生;2) 從n至n+m的m+1個(gè)隨機(jī)數(shù)的產(chǎn)生;3) 從n至n+m互不相同的m+1個(gè)隨機(jī)數(shù)產(chǎn)生。前兩種實(shí)現(xiàn)比較簡單,在現(xiàn)實(shí)生活中應(yīng)用較少。第三種實(shí)現(xiàn)較為復(fù)雜,較有實(shí)用價(jià)值,比如彩票選號(hào),隨機(jī)排列等。下面以為隨機(jī)為10個(gè)學(xué)生分配1-10十個(gè)座號(hào)為例說明。

3 算法分析

程序中學(xué)生對(duì)象必須有姓名和座號(hào)兩個(gè)屬性,不妨利用結(jié)構(gòu)體來實(shí)現(xiàn)。生成座號(hào)方法有兩種。

先說第一種。實(shí)現(xiàn)步驟如下:第一步:在結(jié)構(gòu)體初始化時(shí)直接指定學(xué)生姓名,座號(hào)可暫定為0。第二步:利用隨機(jī)函數(shù)生成學(xué)生座號(hào),但生成的數(shù)值可能有重復(fù)。第三步:利用循環(huán)語句生成新的座號(hào),每生成一個(gè)新的座號(hào),均需和以前的座號(hào)比較,若有重復(fù),則重新生成,直到生成數(shù)值和前面所有數(shù)值均不相同。

這個(gè)算法在座號(hào)先生成后判斷。生成后立刻作比較,如重復(fù)則重新生成。因此,在逐個(gè)生成之后即達(dá)到了預(yù)期目標(biāo)。這種事算法比較符合人們的邏輯,但需要重復(fù)比較,效率較低。

下面說第二種。實(shí)現(xiàn)步驟如下:第一步:在結(jié)構(gòu)體初始化時(shí)直接指定學(xué)生姓名、座號(hào),座號(hào)可暫定為0。第二步:定義一個(gè)一維數(shù)組a[10]存放1-10十個(gè)座號(hào),且令a[i]=i+1。第三步:利用循環(huán)語句隨機(jī)生成a數(shù)組的第某個(gè)元素,如果該元素不等于0,則成為學(xué)生的座號(hào)。第四步:a數(shù)組的第某個(gè)元素歸零,重新利用循環(huán)和判斷生成下一個(gè)座號(hào)。

第二種算法是先判斷后生成。思路為先生成一個(gè)放置座號(hào)的數(shù)組,然后從中隨機(jī)抽取,抽取后為防止重復(fù),立即歸零。與第一種算法相比,每次生成座號(hào),只需判斷是否為0即可,大大提高了程序執(zhí)行的效率。

4 C語言實(shí)現(xiàn)

4.1 先生成后判斷的程序?qū)崿F(xiàn)

4.1.1 說明

1) 10個(gè)學(xué)生姓名分別為:A,B,C,D,E,F(xiàn),G,H,I,J。

2) 10個(gè)學(xué)生的初始座號(hào)均為0。

3) 利用strand()函數(shù)和rand()函數(shù)產(chǎn)生隨機(jī)數(shù)。

4.1.2編程

#include

struct student

{

char name[10];

int num;

}

stu[10]={\"A\",0,\"B\",0,\"C\",0,\"D\",0,\"E\",0,\"F\",0,\"G\",0,\"H\",0,\"I\",0,\"J\",0};/*初始化學(xué)生信息*/

main()

{

int i,j;

srand(time(0));

for(i=0;i<10;i++)

{

stu[i].num=rand()%10+1;

for(j=0;j

{if(i!=0stu[i].num==stu[j].num)

{stu[i].num=rand()%10+1;

j=-1;

}/*重新產(chǎn)生座號(hào)*/

}}

for(i=0;i<10;i++)

printf(\"\%s:%d\\",stu[i].name,stu[i].num);/*輸出結(jié)果*/

}

4.2 先判斷后生成的程序?qū)崿F(xiàn)

4.2.1 說明

1) 10個(gè)學(xué)生姓名分別為:A,B,C,D,E,F(xiàn),G,H,I,J;初始座號(hào)均為0。

2) a數(shù)組中存放座號(hào)。

3) 利用strand()函數(shù)和rand()函數(shù)隨機(jī)抽取a數(shù)組的第index個(gè)元素。

4) 防止座號(hào)重復(fù),a數(shù)組的第index個(gè)元素用完后立刻歸零。

4.2.2 編程

#include

struct student {

char name[10];

int num;

}

stu[10]={\"A\",0,\"B\",0,\"C\",0,\"D\",0,\"E\",0,\"F\",0,\"G\",0,\"H\",0,\"I\",0,\"J\",0};

main()

{

int a[10],i,index,x=0;

for(i=0;i<10;i++)

a[i]=i+1; /*存放座號(hào)*/

srand(time(0));

for(i=0;i<10;)

{

index=rand()%10; /*隨機(jī)抽取座號(hào)*/

if(a[index]!=0)

{

stu[i].num=a[index];

a[index]=0;

++i;

}}

for(i=0;i<10;i++)

printf(\"\%s:%d\\",stu[i].name,stu[i].num);

}

5 總結(jié)

C語言產(chǎn)生互不相同的隨機(jī)數(shù),主要有兩種方式,一種是先生成再判斷,一種是先判斷再生成。需要注意的是:前者要在判斷過程中要逐一比較,不可遺漏。程序中的j=-1和循環(huán)中的j++相結(jié)合,正好從stu[0].num開始比較。后者要先建立一個(gè)數(shù)組來存放座號(hào),然后才能隨機(jī)抽取。

參考文獻(xiàn):

[1] 譚浩強(qiáng). C語言程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2006.

[2] 嚴(yán)蔚敏. 數(shù)據(jù)結(jié)構(gòu)(C語言版)[M]. 北京:清華大學(xué)出版社.2007.

[3] 方風(fēng)波. C語言程序設(shè)計(jì)[M]. 北京:地質(zhì)出版社,2006.

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文

主站蜘蛛池模板: 在线精品视频成人网| 午夜丁香婷婷| 蝌蚪国产精品视频第一页| 亚洲AV人人澡人人双人| 性色生活片在线观看| 国产精品女熟高潮视频| 成人福利在线免费观看| 久久夜夜视频| 欧美中文字幕在线视频| 国产高清免费午夜在线视频| 色哟哟精品无码网站在线播放视频| 午夜高清国产拍精品| 毛片基地美国正在播放亚洲| 亚洲一级毛片在线观| 日韩欧美中文字幕在线精品| 国产成人精品在线| 亚洲一级毛片免费观看| 久久久受www免费人成| 美女被操91视频| 人人91人人澡人人妻人人爽| 亚洲人成色77777在线观看| 在线综合亚洲欧美网站| 亚洲中文精品人人永久免费| 67194在线午夜亚洲| 精品一区二区久久久久网站| 欧洲亚洲欧美国产日本高清| 视频二区亚洲精品| 国产人妖视频一区在线观看| 精品无码视频在线观看| 东京热av无码电影一区二区| 一级毛片无毒不卡直接观看| 欧美综合区自拍亚洲综合天堂| 欧美日韩国产在线人成app| 亚洲日韩AV无码一区二区三区人| 国产精品无码作爱| 好久久免费视频高清| 99re66精品视频在线观看| 色综合狠狠操| 精品伊人久久久香线蕉| 伊在人亚洲香蕉精品播放| 好吊色妇女免费视频免费| 国产成人亚洲精品蜜芽影院| 亚洲精品中文字幕无乱码| 国产手机在线小视频免费观看| 亚洲天堂视频网站| 波多野结衣一二三| 亚洲经典在线中文字幕| 国产日韩精品欧美一区喷| 欧美另类精品一区二区三区| 亚洲三级网站| 国产美女在线观看| 3344在线观看无码| 无码av免费不卡在线观看| 国产一级妓女av网站| 成年看免费观看视频拍拍| 国内自拍久第一页| 国内丰满少妇猛烈精品播| 毛片网站在线看| 特级欧美视频aaaaaa| 国产成人久视频免费| 久久久久夜色精品波多野结衣| 精品无码一区二区三区电影| 456亚洲人成高清在线| 全午夜免费一级毛片| 久久精品66| 亚洲色精品国产一区二区三区| 久久青草热| 国产在线观看一区精品| 久久综合九色综合97婷婷| 99一级毛片| 国产国产人在线成免费视频狼人色| 亚洲天堂日韩av电影| 国产福利一区二区在线观看| 狠狠ⅴ日韩v欧美v天堂| 伊人久久精品无码麻豆精品| 好久久免费视频高清| 国产97视频在线观看| 国产综合在线观看视频| 亚洲日本韩在线观看| 青青青伊人色综合久久| 国产人在线成免费视频| 国产精品久久精品|