使用 rand() 函數,必須 include 它的標頭檔 stdlib.h (stdlib 為 Standard Library, 標準函式庫)
rand() 將會傳回一個介於 0 到 RAND_MAX 之間的一個整數值,RAND_MAX 是 stdlib.h 定義的一個常數,其值在不同的系統有不同的大小
通常我們會搭配使用取餘數符號 % 來做運算,例如我們要取 0-9 的變數,可以寫成 a=rand() % 10
例如:
取 1-10 的亂數 a=(rand() % 10) +1
取 1-100 的亂數 a=(rand() % 100) +1
取 100-1000 的亂數 a=(rand() % 901) +10
我們可以規納出以下的規則: ( rand() % (最大值-最小值+1) ) + 最小值
當程式重複執行數次之後,會發現所得到的亂數是一樣的
這是因為它由上一個數值產生出下一個亂數,而一開始系統都是 0,所以每次產生出來的亂數才會一樣。
因此我們可以用 srand() 函數改變一開始的亂數值( srand() 函數也是定義在 stdlib.h), srand() 需要一個參數做為種子,
以產生一個新的亂數數列,而這個參數我們通常以目前的時間傳入,也就是使用 time() 函數,而 time() 是定義在 time.h 中
最至於是不是每次呼叫 rand() 前就必須使用 srand() 一次,答案是否定的,各位只要在程式的一開頭執行一次 srand() 即可,
之後出來的亂數就會和上次執行的不一樣。
#include
#include
void sortF(int*);
int main(int argc, char *argv[])
{
int n =0,i=0,j=0,array[5][10]={0};
scanf("%d",&n);
srand(time(NULL));
for(i=0;i<n;i++){
for(j=0;j<10;j++){
array[i][j] = (rand()%(198+1)+(-99));
}
for(j=0;j<10;j++){
printf("%3d ",array[i][j]);
}
printf("\n");
sortF(array[i]);
printf("\n\n");
}
system("PAUSE");
return 0;
}
//排序(從小排到大)
void sortF(int* iarray){
int i,j,tmp;
for(i=0;i<10;i++){
for(j=0;j<9;j++){
if(iarray[j] > iarray[j+1]){
tmp = iarray[j];
iarray[j] = iarray[j+1];
iarray[j+1] = tmp;
}
}
}
for(i=0;i<10;i++){
printf("%3d ",iarray[i]);
}
}
#include
#include
#include
int main(int argc, char *argv[])
{
int n =0,i=0,j=0,c=0;
scanf("%d",&n);
srand(time(NULL));
//A~Z的ASCII對應到的十進位為65~90
//a~z的ASCII對應到的十進位為97~122
for(i=0;i<n;i++){
do{
//產生65~122的亂數
// 公式:( rand() % (最大值-最小值+1) ) + 最小值
//所以rand()%(122-65+1)+(65)
c = (rand()%(57+1)+(65));
}while(c >90 && c < 97);
//91~96並不是英文字
//所以當產生出來的亂數是大於90且小於97
//也就是91~96,那就得重新產生一個亂數
printf("%c ",c);
}
system("PAUSE");
return 0;
}
題目:
要求使用者輸入數值n,其中1<=n<=5 ,電腦會隨機輸出n個質數,
其中質數的範圍為300~1000並依照小至大排列
測試範例:
3
631 839 911
#include
#include
int is_prime(int);
int main(int argc, char *argv[])
{
int n=0,i=0,array[6],radom,j,tmp=0;
scanf("%d",&n);
srand(time(NULL));
for(i=0;i<n;i++){
while(1){
radom=(rand() %(1000-300+1) )+300;
if(is_prime(radom)){
array[i]=radom;
break;
}
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(array[i]<array[j]){
tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
}
for(i=0;i<n;i++){
printf("%d ",array[i]);
}
system("PAUSE");
return 0;
}
int is_prime(int num){
int i;
for(i=2;i<num;i++){
if(num%i==0){
return 0;
}
}
return 1;
}

以個果都人就年隻車來時太明家人我而理才為到 Gossiping and lying go together. 八﹌卦與~謊言形~影﹂不☉離〇。﹎*☆ Thomas Fuller 湯◎瑪斯‧§傅勒 75國﹍語◇言♀翻﹉譯公司 天成﹂翻☉譯◎社◎ 提﹋供瓦○龍語♂翻﹉譯等服務 TEL: 02-◎7726-☉0932 LINE-〇ID: 0989000581 翻﹎譯﹋社|○ksuseo.tw66.com.tw/