C語言程式設計 隨機函數的使用-隨機點名做習題

來源:互聯網
上載者:User

/* ---------------------------------------
  隨機點名 做習題
  Author: emanlee
  Date: 2008-04-24
  --------------------------------------- */

#include "stdio.h"
#include "conio.h"
#include "time.h"

void main()
{
  int count=4;
  int i=0,k=0;
  int randnumber;
  int seed;
  char ex_id[4][10]={"1.1","1.2","1.3","1.4"} ;  /* 習題編號*/

  while(i<count)
  {
    k++;
    srand(time(0)+k*k);
    randnumber =rand()%432;
    if(randnumber<=131 && randnumber>=101  )
    {
      printf("學號為 %d 的同學做習題 %s\n\n",randnumber,ex_id[i]);
      i++; continue;
    }
    if(randnumber<=231 && randnumber>=201  )
    {
      printf("學號為 %d 的同學做習題 %s\n\n",randnumber,ex_id[i]);
      i++;continue;
    }
    if(randnumber<=331 && randnumber>=301  )
    {
      printf("學號為 %d 的同學做習題 %s\n\n",randnumber,ex_id[i]);
      i++;continue;
    }
    if(randnumber<=431 && randnumber>=401  )
    {
      printf("學號為 %d 的同學做習題 %s\n\n",randnumber,ex_id[i]);
      i++; continue;
    }
  }
  getch();
}

 /* --------------------------------------*/

標準C庫中函數rand()可以產生0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統有關。
rand()函數沒有輸入參數,直接通過運算式rand()來引用;例如可以用下面的語句來列印兩個隨機數:
printf("Random numbers are: %i %i\n",rand(),rand());
因為rand()函數是按指定的順序來產生整數,因此每次執行上面的語句都列印相同的兩個值,所以說C語言的隨即並不是正真意義上的隨機。
為了時程式在每次執行時都能產生一個新序列的隨機值,我們通常通過為隨機數產生器提供一粒新的隨機種子。函數srand()(來自stdlib.h)可以為隨機數產生器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數產生器的初始化器。
常式:
檔案名稱: rand_srand.c

/* This program generates and prints ten random integers between 1 and RAND_MAX*/
#include <stdio.h>
#includ <stdlib.h>
int main()
{
        usigned int seed;        /*申明初始化器的種子,注意時usigned int 型的*/
        int k;
        pringt("Enter a positive integer seed value: \n");
        scanf("%u",&seed);
        srand(seed);
        printf("Random Numbers are:\n");
        for(k = 1; k <= 10; k++)
        printf("%i",rand());
        printf("\n");
        return 0;
}
你會發現,當你提供的種子相同時,隨機數序列也時相同的。而且當種子為1時,與不使用srand()函數時一樣的,也就是說rand()函數預設情況下初始化種子值為1;
在stdlib.h 中這兩個函數的原型是:
int rand();
void srand (unsigned int);
擴充:
        x = rand()%11; /*產生1~10之間的隨機整數*/
        y = rand()%51 - 25; /*產生-25 ~ 25之間的隨機整數*/
        z = ((double)rand()/RAND_MAX)*(b-a) + a;/*產生區間[a,b]上的隨機數*/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.