如果只包含一個運派碰算符你可以直接隨機數,首先給運算符編號:如:+1,-2,*3,÷4然后表達式:a=隨機函數算出的100以內整數b=隨機函數算出的100以內整數c=隨機運算符的編號塵早談然后casecc=1//即加法的時候計算a+bc=2//即減法的時候計算a-b(此時需要判斷a和b的大小,如果ab,應該需要重新隨機a和b)c=3//即乘法的時候計算a*bc=4//即除法的睜知時候計算a/b(需要判斷b是否為0,為0則需要重新隨機b,當a!=a/b*b時即a無法整除b的時候也需要重新隨機b)
成都創(chuàng)新互聯(lián)成都企業(yè)網站建設服務,提供網站設計制作、做網站網站開發(fā),網站定制,建網站,網站搭建,網站設計,響應式網站建設,網頁設計師打造企業(yè)風格網站,提供周到的售前咨詢和貼心的售后服務。歡迎咨詢做網站需要多少錢:18982081108
1. 基本函數
在C語言中取隨機數所需要的函數是:
int rand(void); void srand (unsigned int n);
rand()函數和srand()函數被聲明在頭文件stdlib.h中,所以要使用這兩個函數必須包含該頭文件:
#include stdlib.h
2. 使用方亂雀法
rand()函數返回0到RAND_MAX之間的偽隨機數(pseudorandom)。RAND_MAX常量被定義在stdlib.h頭文件中。其值等于32767,或者更大。
srand()函數使用自變量n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然后調用rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函數的種子,就可以避免重復的發(fā)生。如果,調用rand()之前沒有先調用srand(),就和事先調用srand(1)所產生的結果一樣。
舉個例子,假設我們要取得0~10之間的隨機整數(不含10本身):
/* 例1:不指定種子的值 */
for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:1 7 4 0 9 4 8 8 2 4
/* 例2:指定種子的值為1 */
srand(1); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:1 7 4 0 9 4 8 8 2 4
例2的輸出結果與例1是完全一樣的。
/* 例3:指定種子的值為8 */嘩塵早 srand(8); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
每次運行都將輸出:4 0 1 3 5 3 7 7 1 5
該程序取得的隨機值也是在[0,10)之間,與srand(1)所取得的值不同,但是每次運行程序的結果都相同。
/* 例4:指定種子值為現(xiàn)在的時間 */ srand((unsigned)time(NULL)); for (int i=0; i10; i++) { printf("%d ", rand()%10); }
該程序每次運行結果都不一兄廳樣,因為每次啟動程序的時間都不同。另外需要注意的是,使用time()函數前必須包含頭文件time.h。
3. 注意事項
求一定范圍內的隨機數。
如要取[0,10)之間的隨機整數,需將rand()的返回值與10求模。
randnumber = rand() % 10;
那么,如果取的值不是從0開始呢?你只需要記住一個通用的公式。
要取[a,b)之間的隨機整數(包括a,但不包括b),使用:
(rand() % (b - a)) + a
偽隨機浮點數。
要取得0~1之間的浮點數,可以用:
rand() / (double)(RAND_MAX)
如果想取更大范圍的隨機浮點數,比如0~100,可以采用如下方法:
rand() /((double)(RAND_MAX)/100) 其他情況,以此類推,這里不作詳細說明。
檢查的時候發(fā)現(xiàn)之前的代碼完成1~10的整除
沒有0的,
可以在初始化的地方補上:(那么就是38個)
for (int i=0; i饑空11; i++)
{
char temp[20];
sprintf(temp," 請運算 0÷%d = ",i);
strcpy(atc[i+27].equation,temp);
atc[i+27].cque = '0';
}
如果要把10的運算拿掉,那么是34個,修改就不做了,方法已經告肢和很明顯了
==========================================
此題如果想到生成1-9隨機數,然后 .... 那么你就入套了
愛好思考的同志,誰能想到最好的算法么,我能想到的只是如下了
你有更好的更簡潔的,記得告訴我下,交流交流嘛
/********************************************\
* c語言編寫產生十道十以內的除法,
* 數字隨機產生且必須整除,
* 并且每題正確得十分,錯誤零分,統(tǒng)計得分
*
* 說明
* 1 均要求整數,而且在10以襪盯內,所以先把情況窮舉
* 2 一共有27種個運算式
* 2 隨即數rand()%27來選擇算式,達到均勻
* 2 否則出現(xiàn)的 1÷1 情況概率最大
\********************************************/
#includestdlib.h
#includestdio.h
#includestring.h
#includeconio.h
struct Formula
{
char equation[20]; //存儲算式
char cque; //算式結果
};
void initialization(Formula *);
void main()
{
int j=0; //27個隨即號
char tmp=0; //輸入暫存器
int score=0; //統(tǒng)計成績
struct Formula atc[28];
initialization(atc); //初始化,看不懂么?
printf("請您認真練習除法運算 (由于用getch簡單,結果10直接輸入0)\n\n");
for (int i=0;i10;i++)
{
//取得隨即算式
j=rand()%27;
printf("%s",atc[j].equation);
tmp=getch();
//我這里用getch后回顯,并用0代替10,是為了提高調試效率
if ( tmp == '0' )
{
printf("10");
}
else
{
printf("%c",tmp);
}
//檢查運算
if ( tmp == atc[j].cque )
{
score+=10;
printf("\t正確\n");
}
else
{
printf("\t錯誤\n");
}
}
//輸出成績
printf("\n");
printf("\n您的成績:%d\n",score);
}
//如果用產生1~9隨即數的辦法,你看27種情況里面,
//1÷1出現(xiàn)的概率將是最多的,而且還要編寫驗證結果是整數的函數
void initialization(Formula * atc)
{
strcpy(atc[0].equation," 請運算 10÷10 = ");
atc[0].cque = '1';
strcpy(atc[1].equation," 請運算 10÷5 = ");
atc[1].cque = '2';
strcpy(atc[2].equation," 請運算 10÷2 = ");
atc[2].cque = '5';
strcpy(atc[3].equation," 請運算 10÷1 = ");
atc[3].cque = '0';
strcpy(atc[4].equation," 請運算 9÷9 = ");
atc[4].cque = '1';
strcpy(atc[5].equation," 請運算 9÷3 = ");
atc[5].cque = '3';
strcpy(atc[6].equation," 請運算 9÷1 = ");
atc[6].cque = '9';
strcpy(atc[7].equation," 請運算 8÷8 = ");
atc[7].cque = '1';
strcpy(atc[8].equation," 請運算 8÷4 = ");
atc[8].cque = '2';
strcpy(atc[9].equation," 請運算 8÷2 = ");
atc[9].cque = '4';
strcpy(atc[10].equation," 請運算 8÷1 = ");
atc[10].cque = '8';
strcpy(atc[11].equation," 請運算 7÷7 = ");
atc[11].cque = '1';
strcpy(atc[12].equation," 請運算 7÷1 = ");
atc[12].cque = '7';
strcpy(atc[13].equation," 請運算 6÷6 = ");
atc[13].cque = '1';
strcpy(atc[14].equation," 請運算 6÷3 = ");
atc[14].cque = '2';
strcpy(atc[15].equation," 請運算 6÷2 = ");
atc[15].cque = '3';
strcpy(atc[16].equation," 請運算 6÷1 = ");
atc[16].cque = '6';
strcpy(atc[17].equation," 請運算 5÷5 = ");
atc[17].cque = '1';
strcpy(atc[18].equation," 請運算 5÷1 = ");
atc[18].cque = '5';
strcpy(atc[19].equation," 請運算 4÷4 = ");
atc[19].cque = '1';
strcpy(atc[20].equation," 請運算 4÷2 = ");
atc[20].cque = '2';
strcpy(atc[21].equation," 請運算 4÷1 = ");
atc[21].cque = '4';
strcpy(atc[22].equation," 請運算 3÷3 = ");
atc[22].cque = '1';
strcpy(atc[23].equation," 請運算 3÷1 = ");
atc[23].cque = '3';
strcpy(atc[24].equation," 請運算 2÷2 = ");
atc[24].cque = '1';
strcpy(atc[25].equation," 請運算 2÷1 = ");
atc[25].cque = '2';
strcpy(atc[26].equation," 請運算 1÷1 = ");
atc[26].cque = '1';
}