亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

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

        中圖分類號:TP312文獻(xiàn)標(biāo)識碼:A文章編號: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(),它會根據(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à)值,比如彩票選號,隨機(jī)排列等。下面以為隨機(jī)為10個(gè)學(xué)生分配1-10十個(gè)座號為例說明。

        3 算法分析

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

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

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

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

        第二種算法是先判斷后生成。思路為先生成一個(gè)放置座號的數(shù)組,然后從中隨機(jī)抽取,抽取后為防止重復(fù),立即歸零。與第一種算法相比,每次生成座號,只需判斷是否為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é)生的初始座號均為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)生座號*/

        }}

        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;初始座號均為0。

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

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

        4) 防止座號重復(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; /*存放座號*/

        srand(time(0));

        for(i=0;i<10;)

        {

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

        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ù)組來存放座號,然后才能隨機(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)容請以PDF格式閱讀原文

        暖暖 免费 高清 日本 在线| 亚洲欧美变态另类综合| 亚洲av有码精品天堂| 国产精品久色婷婷不卡| 国产自拍伦理在线观看| 亚洲男人综合久久综合天堂 | 久久视频在线| 国产美女网站视频| 国产农村三片免费网站| AV无码系列一区二区三区| 免费人成黄页网站在线一区二区| 国产又黄又硬又粗| 日韩精品中文字幕无码一区| 午夜福利不卡无码视频| 久久九九av久精品日产一区免费 | 日韩AV不卡一区二区三区无码| 亚洲红杏AV无码专区首页| 国产av熟女一区二区三区密桃| 熟女人妇 成熟妇女系列视频| 中国熟妇人妻xxxxx| 亚洲VA中文字幕欧美VA丝袜| 精品人妻av区二区三区| 亚洲精品国产成人久久av| 无码av一区二区大桥久未 | 亚洲精品国产综合久久一线| 亚洲精品一区二区网站| 免费超爽大片黄| 日韩毛片基地一区二区三区| 日韩人妻系列在线视频| 亚洲天堂av黄色在线观看| 门卫又粗又大又长好爽| 又爽又黄无遮挡高潮视频网站| 久久精品国产一区二区涩涩| 男女边摸边吃奶边做视频韩国| 狠狠人妻久久久久久综合蜜桃| 婷婷综合久久中文字幕蜜桃三电影| 亚洲一区二区观看网站| 手机在线免费观看av不卡网站| 国产在线精品一区二区中文| 日韩国产一区| 一区二区特别黄色大片|