《C primerplus》第12章練習題

2022-07-23 07:51:09 字數 3162 閱讀 4982

做一下倒數兩題,都是在佇列模擬的程式基礎上做點修改測試。

5.找出平均等候時間為1分鐘時,每小時到達的客戶數為多少(試驗時間不少於100小時)。

指定隊伍最大長度10人,模擬100小時。粗略估計答案在10到20之間,所以我在開始輸入的時候為其生成10到20之間的隨機數,通過迴圈不斷去試,直到模擬完的平均等待時間等於1分鐘為止。

//

bank.cpp -- using class

#include

"queue.h

"#include

#include

//for time()

const

int min_per_hr = 60

;bool newcustomer(double

x);int

main()

}/*wait_time是每位顧客服務時間的計數器,可以這麼想象:

*//*

每有一位顧客到達了隊首,就開始掐表倒計時(1-3分鐘隨機)

*//*

時間一到0,表示服務完畢,下乙個人補上,重新倒計時,如此重複

*/if(wait_time <=0 && !line.isempty()) //

上一位服務完畢且隊伍裡還有人

if(wait_time>0

) wait_time--; //

上一位服務未完畢,保持當前狀態,時間-1

sum_line += line.queuecount(); //

數一下現在隊伍有多少人,把每一分鐘的結果都累加起來

}

//報告結果

if(customers > 0

)

else

cout

<

no customers!\n";

cout

<

done!\n";

if((double)line_wait/served == 1

)

//cout<

//cin>>flag;

//輸入0以終止迴圈

}

return0;

}/*判斷顧客是否到達的函式

*//*

rand_max是能夠生成的最大隨機數,rand()會生成[0,rand_max)之間的隨機數

*//*

因此rand()/rand_max會生成[0,1)之間的隨機數,再乘以x就是[0,x)之間的隨機數

*//*

加上小於1的判斷,生成的數會有1/x的概率小於1,而小於1就表示這一分鐘內有顧客到了

*/bool newcustomer(double

x)

此種情況下,最後計算的結果為18人。

6.再開一台atm,新來的顧客會根據人數拍隊,模擬新的情況,再次找出平均等待時間為1分鐘,每小時到達的客戶數應為多少。

設定每隊最大能容納5人,模擬200小時。平均每小時到達人數從50開始乙個個試。

如果某一隊人比另一隊少的話,新來的顧客就會去那一隊。如果兩隊人一樣多,就隨便選乙個(隨機數)。

//

bank.cpp -- using class

#include

"queue.h

"#include

#include

//for time()

const

int min_per_hr = 60

;bool newcustomer(double

x);int

main()

else

if(line.queuecount() >line2.queuecount())

else

else}}

}/*wait_time是每位顧客服務時間的計數器,可以這麼想象:

*//*

每有一位顧客到達了隊首,就開始掐表倒計時(1-3分鐘隨機)

*//*

時間一到0,表示服務完畢,下乙個人補上,重新倒計時,如此重複

*/if(wait_time_1 <=0 && !line.isempty()) //

上一位服務完畢且隊伍裡還有人

if(wait_time_2 <=0 && !line2.isempty())

if(wait_time_1>0

) wait_time_1--; //

上一位服務未完畢,保持當前狀態,時間-1

if(wait_time_2>0

) wait_time_2--;

sum_line_1 += line.queuecount(); //

數一下現在隊伍有多少人,把每一分鐘的結果都累加起來

sum_line_2 +=line2.queuecount();

}//報告結果

if(customers > 0

)

else

cout

<

no customers!\n";

cout

<

done!\n";

cout

<

enter 1 to simulate again,0 to quit: ";

cin>>flag; //

輸入0以終止迴圈

}

return0;

}/*判斷顧客是否到達的函式

*//*

rand_max是能夠生成的最大隨機數,rand()會生成[0,rand_max)之間的隨機數

*//*

因此rand()/rand_max會生成[0,1)之間的隨機數,再乘以x就是[0,x)之間的隨機數

*//*

加上小於1的判斷,生成的數會有1/x的概率小於1,而小於1就表示這一分鐘內有顧客到了

*/bool newcustomer(double

x)

模擬結果:

可以看出大約平均每小時到達51或52個顧客,等待時間會保持在1分鐘。但是,我翻來覆去地看**,也不知道為什麼平均等待時間會算出負數來,總覺得**有問題。

C Primer Plus 第11章 筆記

1 如果字串字面量之間沒有間隔,或者用空白字元分隔,c會將其視為串聯起來的字串字面量。2 用標準的陣列初始化模式給字串初始化時,末尾一定要加上 0 不然就不是乙個字串,而是乙個字元陣列。讓編譯器計算陣列的大小只能用在初始化時。4 const char ar1 something is pointin...

C primer plus 第4章 復合型別

1.陣列初始化 2.字串 兩種方式 c 風格字串 以 0結尾 string類庫 單引號表示字元常量 a 是字串編碼的簡寫,char a a 是正確的。但是 a 表示的是兩個字元a和 0組成的字串,實際上 a 表示的是字串所在的記憶體位址,因此char a a 是非法的 1 cin.getline a...

c primer plus 第8章 函式探幽

c 擴 展 了 c 語 言 的 函 數 功 能 通 過 將 inline 關鍵 字 用 於 函 數 定 義 並 在 首 次 調 用 該 函 數 前 提 供 其 函 數 定 義 可 以 使 得c 艹 編 譯 器 將 該 函 數 視 為 內 聯 函 數 也 就 是 說 編 譯 器 不 是 讓 程 序 跳...