C語言程式設計練習2(視窗服務指示系統3 5 )

2021-07-15 09:57:45 字數 1422 閱讀 6665

上次做完第乙個程式小練習,今天我們在之前的基礎上再提高一下難度。

視窗服務指示系統2:

繼續上述情景,假如每個客戶業務的處理時間為隨機(1-3秒,業務生成時確定任務處理時間),同時需要對排隊客戶進行服務(同一視窗,不同使用者有重複的業務請求),當視窗全滿時,停止接受新客戶的業務,待視窗空置數超過一半時恢復業務請求,統計哪項業務最受歡迎,及其平均處理時間(每十單統計)

分析:我們可以使用乙個32位的整型資料來存放資料,一到四個位元組分別用來存放當前處理完的任務、排隊且生成1秒業務時間的任務、排隊且生成1秒業務時間的任務、排隊且生成1秒業務時間的任務,而每個位元組上的八位來存放視窗號,即

//  3s       2s        1s      0s

00000000 00000000 00000000 00000000

每確定乙個業務時間都移到相應的位元組上,比如定義unsigned int wait,在4號視窗生成2秒的業務,則

wait|= 0x01<<(4-1)<<2*8,處理完一秒後再往右移動八位wait>>8。

**:#include

#include

int main(int argc,char *argv)

else}}

wstate  &=  ~(processstate&0xff);//將當前服務到期的任務指示位清零,processstate最低位元組指示當前秒需要完成任務的視窗

wstate  |= wait;                 //判斷當前是否有等待使用者,先處理原等待使用者,將正在等待的視窗指示位更新到wstate指示位

//因為原客戶受理完畢後,已等待客戶需要優先補位,方可接受新客戶

wait    &=  ~(processstate&0xff);//如果有等待客戶,則先清除原視窗等待指示位,因為等待客戶已經補位進入受理狀態  

printf("clear wait = %x \n",wait);

processstate >>= 8;              //每隔1s,根據最低位元組服務指示進行完成操作,更新當前的處理進度指示位 (最低位元組右移)                                    

sleep(1);                        //每隔1s

if(timeout%2 == 0  && !busy)

else

}/*************************遍歷視窗,更新服務狀態******************************/

for(window = 0; window < 8; window++)

else

if(wait & (1 << window))

printf("\n");

}if(busy)

else

printf("\n");

}return 0;}

C語言程式設計小練習2

c語言程式設計小練習2 2.1輸入一行字元,統計英文本母 數字字元 空格和其他字元個數。此題統計不確定數目的字元,用while迴圈更合適,且以回車鍵結束輸入。1 include 2 3 intmain void 4 21 printf letters d n a 22 printf numbers ...

C語言程式設計(練習2 陣列和指標)

題目 編寫程式,把下面的資料輸入乙個二維陣列中。25 36 78 13 12 26 88 93 75 18 22 32 56 44 36 58 然後執行以下操作 輸出矩陣兩個對角線上的數 分別輸出各行和各列的和 交換第一行和第三行的位置 交換第二列和第四列的位置 輸出處理後的陣列 實現 編寫程式,把...

程式設計入門 C語言 翁愷 第2周程式設計練習

乙個整數,表示bjt的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分 如果小時是0,則沒有百位部分 如果小時不是0而分小於10分,需要保留十位上的0 如果小時是0而分小於10分的,則不需要保留十位上的0。乙個整數,表示utc的時和分。整數的個位和十位表示分,百位...