操作系統課程設計進程_銀行家_頁面調度_第1頁
操作系統課程設計進程_銀行家_頁面調度_第2頁
操作系統課程設計進程_銀行家_頁面調度_第3頁
操作系統課程設計進程_銀行家_頁面調度_第4頁
操作系統課程設計進程_銀行家_頁面調度_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、設計題目操作系統課程設計學生姓名李飛吾學號 20106637 專業班級信息計10-2班指導教師 2012年 12 月 22 日設計題目共3題如下描述成績課程設計主要內容首先感謝老師和同學的指導1、設計目的:操作系統原理課程設計是信息計算科學專業實踐性環節之一,是對學習完操 作系統原理 課程后進行的一次較全面的綜合訓練。 其目的在于加深對操作系統 的理論、 方法和基礎知識的理解, 掌握操作系統結構、 實現機理和各種典型算法, 系統地了解操作系統的設計和實現思路,培養學系統設計能力, 并了解操作 系

2、統的發展動向和趨勢。對以后工作或者進一步研究都有促進作用。2、設計題目:進程調度算法銀行家算法-頁面調度算法3、設計總結:a、知識總結有效性一直是操作系統所追求的目標之一。操作系統的有效性包含以下兩個方面:1、提高資源利用率;2、提高系統吞吐率。引入進程管理,處理機調度,存儲器管理,設備管理,文件管理等等機制,都是為了實現該特性的。而實現各種機制卻有著不同算法,算法的優劣就顯得尤為重要了。b、實踐感悟由于時間倉促,此次課程設計并未投入大量時間,依然存在許多不足。但是通過對算法的進一步理解,加以程序實現,讓我對本專業的學習興趣更加濃厚了。課程設計時,遇到了一些問題,通過與老師及同學的交流,和網上

3、查閱資料,學到了更多的知識。在此對老師和同學表示感謝。指導老師評語建議:從學生的工作態度、工作量、設計(論文的)創造性、學術性、使用性及書面表達能力等方面給出評價。簽名: 20 年月日目錄一、 算法設計概述1、設計背景-12、運行環境-1二、進程調度算法1、進程并發執行-12、算法原理及設計-23、代碼設計-3三、銀行家算法1、進程死鎖狀態-132、算法原理及設計-133、代碼設計-16四、頁面調度算法1、頁式虛擬存儲-202、算法原理及設計-203、代碼設計-21五、課程設計總結 1、知識總結-26 2、實踐感悟-26一、 算法設計概述1、設計背景操作系統是管理計算機硬件資源,控制其他程序運

4、行并為用戶提供交互操作界面的系統軟件的集合。操作系統是計算機系統的關鍵組成部分,負責管理與配置內存、決定系統資源供需的優先次序、控制輸入與輸出設備、操作網絡與管理文件系統等基本任務。操作系統作為系統與用戶之間的接口,極大方便了用戶使用操作系統,同時也推動了計算機科學的發展。操作系統原理課程設計是信息計算科學專業實踐性環節之一,是對學習完操 作系統原理 課程后進行的一次較全面的綜合訓練。 其目的在于加深對操作系統 的理論、 方法和基礎知識的理解, 掌握操作系統結構、 實現機理和各種典型算法, 系統地了解操作系統的設計

5、和實現思路,培養學系統設計能力, 并了解操作 系統的發展動向和趨勢。對以后工作或者進一步研究都有促進作用。2、設計環境開發環境:Visual C+ 6.0運行環境:Windows 7/ XP二、 進程調度算法1、進程的并發執行并發性是操作系統的重要特征在多道程序環境下,并發性是指在一段時間內宏觀上有多個程序在同時運行,但在單處理機系統中,每一時刻卻只能有一道程序執行,故在微觀上這些程序只能是分時地交替運行。倘若在計算機系統有多個處理機,則這些可以并發執行的程序便可以被分配到多個處理機上,實現執行,即利用每個處理機來處理一個可以并發執行的程序,這樣,多個程序便可同時執行。程序

6、是靜態實體,進程是動態的,通過對進程調度實現,實現程序運行。調度的實質是系統按照某種特定的分配策略來分配資源。進程調度的目的是分配CPU資源。由于進程調度程序執行的頻率很高,因此調度算法的好壞將直接影響到操作系統的性能。本實驗的目的是模擬實現幾種常見的進程調度算法,通過對幾組進程分別使用不同的調度算法,計算進程的平均周轉時間和平均帶權周轉時間,比較各種算法的性能優劣。2、算法原理及設計(1)進程調度算法進程調度算法包括先來先服務調度算法、優先數調度算法、時間片論轉算法和分級調度算法等4種。本實驗包括3種算法,有興趣的讀者可以在完成這些算法的基礎上實現第四種算法。下面對前3種算法作一一簡單介紹。

7、<1> 先來先服務(FCFS)調度算法本算法在進行調度時,總是選擇一個最先進入進程就緒隊列的進程,把處理器分配給它,使之開始運行。該進程一直運行到完成或發生阻塞事件時,才放棄處理器。<2> 優先數調度算法對每個進程確定一個優先數,進程調度總是讓具有最高優先數的進程先使用處理器。如果就緒隊列中出現優先數相同的進程,則對這些有相同優先數的進程采用先來先服務算法進行調度。對于占用處理器的進程,系統可以使用“搶占式”或“非搶占式”的策略?!胺菗屨际健敝高M程一旦占用處理器,除非自己愿意,否則操作系統不能將處理器強行奪走,即使該進程的優先數已經小于就緒隊列中的某個進程?!皳屨际健眲t

8、相反,一旦就緒隊列中的某個進程優先數大于正在執行的進程,立刻進行進程切換。進程的優先數可以發生變化。本實驗的基本要求是實現固定優先數的調度算法,讀者可以在這個基礎上添加動態優先數功能。<3> 時間片輪轉調度算法在需要保證響應時間的場合通常采用時間片輪轉算法來分配處理器。本算法將所有的就緒進程按先來先服務的原則排成一個隊列,每次調度時把CPU分配給隊首進程,令其執行一個時間片。時間片用完,調度程序自動停止該進程的執行,將它放到進程就緒隊列的末尾,等待下一次執行,然后將CPU分配給就緒隊列中新的隊首進程,也讓它執行一個時間片。重復這個過程,直到所有的進程執行完畢。(2)衡量算法性能的參

9、數下面引入兩個衡量調度算法性能的參數。平均周轉時間:平均帶權周轉時間:其中:n為進程數目Ti為第i個進程的周轉時間,即進程從開始運行到結束的時間Tsi為第i個進程要求執行的時間,即需要在CPU上的執行時間。3、代碼設計(1)建立進程控制塊進程控制塊至少應該包括:進程名稱進程需要執行時間進入就緒隊列時間進程執行結束時間進程控制塊代碼typedef struct node char sNum4; /進程編號int ArriveTime;/進程到達時間int RunTime; /進程要求執行的時間int Privilege; /進程的優先數int Finished; /標志進程是否執行完成int T

10、ime; /進程等待時間的借助變量int WaitTime; /進程的等待時間int TurnoverTime; /進程的周轉時間float WeighTurnTime; /進程帶權周轉時間pcb; 進程號到達時間要求執行時間00411352210335469572169357112381242913110147112051223313242214253115261(2)就緒進程序列如上右表所示3、代碼設計#include<stdio.h> #include<string.h> #include<iostream.h> const int timeslice

11、=5; /定義時間片的長度const int MAXPCB=100; /定義最大進程數/定義進程結構體typedef struct node char sNum4; /進程編號int ArriveTime; /進程到達時間int RunTime; /進程要求執行的時間int Privilege; /進程的優先數int Finished; /標志進程是否執行完成int Time; /求進程的等待時間的借助變量int WaitTime; /進程的等待時間int TurnoverTime; /進程的周轉時間float WeighTurnTime; /進程的帶權周轉時間pcb; pcb pcbsMAX

12、PCB; int PCBNum; /進程數 /PCB初始化函數void initPCB() int i; for(i=0;i<MAXPCB;i+) strcpy(pcbsi.sNum,""); pcbsi.ArriveTime=0; pcbsi.RunTime=0; pcbsi.Privilege=0; pcbsi.Finished=0;pcbsi.Time=0; pcbsi.WaitTime=0; pcbsi.TurnoverTime=0; pcbsi.WeighTurnTime=0; /for(i=0;i<MAXPCB;i+)PCBNum=0; /void

13、initPCB() /讀進程流文件數據函數int readData() FILE *fp; char sFile20; int i; cout<<"請輸入進程流文件名(注意:包括后綴名): " cin>>sFile; if(fp=fopen(sFile,"r")=NULL) cout<<"錯誤,文件打不開,請檢查文件名"<<endl; else while(!feof(fp) fscanf(fp,"%s %d %d %d",pcbsPCBNum.sNum,&p

14、cbsPCBNum.ArriveTime,&pcbsPCBNum.RunTime,&pcbsPCBNum.Privilege); PCBNum+; /while(!feof(fp)/輸出所讀入的數據cout<<endl<<"輸出所讀入的數據:"<<endl<<endl; cout<<"進程編號進程到達時間要求執行時間優先數"<<endl; for(i=0;i<PCBNum-1;i+) cout<<" "<<pcbsi.

15、sNum<<" "<<pcbsi.ArriveTime<<" "<<pcbsi.RunTime<<" "<<pcbsi.Privilege<<endl; return(1); /if(fp=fopen(sFile,"r")=NULL)return(0); / int readData()/重置PCB數據,以供另一個算法使用void reInitPCB() int i; for(i=0;i<MAXPCB;i+) pcbsi.Fi

16、nished=0; pcbsi.Time=0;pcbsi.WaitTime=0;pcbsi.TurnoverTime=0;pcbsi.WeighTurnTime=0; /void reInitPCB()/先來先服務調度算法void FCFS() int i; int Total1; float Total2;reInitPCB();/重置PCB數據,以供另一個算法使用/輸出先來先服務調度算法執行流cout<<endl<<"-"<<endl; cout<<"先來先服務調度算法執行流:"<<endl

17、; cout<<"進程編號到達時間等待時間運行時間周轉時間帶權周轉時間"<<endl; pcbs0.TurnoverTime=pcbs0.RunTime+pcbs0.ArriveTime; pcbs0.WeighTurnTime=(float)pcbs0.TurnoverTime/pcbs0.RunTime;for(i=0;i<PCBNum-1;i+) cout<<" "<<pcbsi.sNum<<" "<<pcbsi.ArriveTime<<&

18、quot; "<<pcbsi.WaitTime <<" "<<pcbsi.RunTime<<" "<<pcbsi.TurnoverTime<<" "<<pcbsi.WeighTurnTime<<endl; pcbsi+1.Time=pcbsi.Time+pcbsi.RunTime;pcbsi+1.WaitTime=pcbsi+1.Time-pcbsi+1.ArriveTime; pcbsi+1.TurnoverTime=pcbsi

19、+1.WaitTime+pcbsi+1.RunTime; pcbsi+1.WeighTurnTime=(float) pcbsi+1.TurnoverTime/pcbsi+1.RunTime; Total1 = 0;Total2 = 0.0;for(i=0;i<PCBNum-1;i+)Total1+=pcbsi.TurnoverTime; Total2+=(float) pcbsi.TurnoverTime/pcbsi.RunTime; cout<<" 總周轉時間:"<<Total1<<" 平均周轉時間:"<

20、;<Total1/PCBNum<<endl<<" 總帶權周轉時間:"<<Total2<<" 平均帶權周轉時間:"<<Total2/(PCBNum-1)<<endl; cout<<endl<<"-"<<endl; /void FCFS()/優先數調度算法void privilege() int i,j,CurMin; int Time=0; int Total1;float Total2;int QueueMAXPCB; i

21、nt CurPriority=1000; reInitPCB();/重置PCB數據,以供另一個算法使用for(i=0;i<PCBNum-1;i+) /按優先數遞增排序PCB CurPriority=1000; for(j=0;j<PCBNum-1;j+)if(pcbsj.Finished=0)&&(pcbsj.Privilege<CurPriority) CurMin=j; CurPriority=pcbsj.Privilege; /for(j=0;j<PCBNum;j+)Queuei=CurMin; pcbsCurMin.Finished=1; pcb

22、sCurMin.TurnoverTime=pcbsCurMin.RunTime+Time;pcbsCurMin.WeighTurnTime=(float)pcbsCurMin.TurnoverTime/pcbsCurMin.RunTime;Time+=pcbsCurMin.RunTime; /for(i=0;i<PCBNum;i+) /輸出優先數調度執行流cout<<endl<<"-"<<endl; cout<<"優先數調度執行流:"<<endl; cout<<"進程

23、編號優先數運行時間周轉時間帶權周轉時間"<<endl; for(i=0;i<PCBNum-1;i+) cout<<" "<<pcbsQueuei.sNum<<" "<<pcbsQueuei.Privilege<<" "<<pcbsQueuei.RunTime<<" "<<pcbsQueuei.TurnoverTime<<" "<<pcbsQueuei

24、.WeighTurnTime<<endl; Total1=0; Total2=0.0; for(i=0;i<PCBNum-1;i+)Total1+=pcbsi.TurnoverTime; Total2+=(float) pcbsi.TurnoverTime/pcbsi.RunTime; cout<<"總周轉時間:"<<Total1<<" 平均周轉時間:"<<Total1/PCBNum<<endl<<" 總帶權周轉時間:"<<Total

25、2<<" 平均帶權周轉時間:"<<Total2/(PCBNum-1)<<endl; cout<<endl<<"-"<<endl; /void privilege()/時間片輪轉調度算法void timer() int i,Num,Flag=1; int Round=0; /輪轉周期數int Total=0; /總時間片數reInitPCB(); /重置PCB數據,以供另一個算法使用cout<<endl<<"-"<<endl; c

26、out<<"時間片輪轉調度執行流(時間片的長度為5秒):"<<endl; while(Flag=1)Flag=0; Num=0; for(i=0;i<PCBNum-1;i+)/統計末執行完的進程數Numif(pcbsi.Finished=0) Num+; /if(pcbsi.Finished=0) /for(i=0;i<PCBNum;i+)if(Num>0)Round+;cout<<endl<<""<<Round<<"輪:"for(i=0;i&l

27、t;PCBNum-1;i+) if(pcbsi.Finished=0) Flag=1;cout<<pcbsi.sNum<<" "Total+; if(pcbsi.RunTime<=timeslice*(Round) pcbsi.Finished=1; /if(pcbsi.RunTime<=block_time*(Round+1)/if(pcbsi.Finished=0) /for(i=0;i<PCBNum;i+) /if(Num>0) /while(Flag=1)cout<<endl<<"輪轉

28、周期數:"<<Round<<"總時間片數:"<<Total<<endl;cout<<endl<<"-"<<endl; /void timer() void SPF() /短進程優先調度算法 reInitPCB();cout<<endl<<"-"<<endl; cout<<"短進程優先調度算法執行流:"<<endl; cout<<"進程編號到達

29、時間等待時間運行時間周轉時間帶權周轉時間"<<endl; int i,j;for(i=1;i<PCBNum-1;i+)for(j=0;j<PCBNum-i-1;j+) if(pcbsj.RunTime>pcbsj+1.RunTime) pcb temp; strcpy(temp.sNum,pcbsj+1.sNum); temp.ArriveTime=pcbsj+1.ArriveTime; temp.RunTime=pcbsj+1.RunTime; temp.Privilege=pcbsj+1.Privilege; strcpy(pcbsj+1.sNum,

30、pcbsj.sNum); pcbsj+1.ArriveTime=pcbsj.ArriveTime; pcbsj+1.RunTime=pcbsj.RunTime; pcbsj+1.Privilege=pcbsj.Privilege; strcpy(pcbsj+1.sNum,temp.sNum); pcbsj.ArriveTime=temp.ArriveTime; pcbsj.RunTime=temp.RunTime; pcbsj.Privilege=temp.Privilege; pcbs0.Finished=1; pcbs0.WaitTime=0; pcbs0.TurnoverTime=pcb

31、s0.RunTime+pcbs0.ArriveTime; pcbs0.WeighTurnTime=(float)(pcbs0.TurnoverTime)/(pcbs0.RunTime); int Total1= pcbs0.WaitTime; float Total2= 0.0; cout<<" "<<pcbs0.sNum<<" "<<pcbs0.ArriveTime<<" "<<pcbs0.WaitTime <<" "<&l

32、t;pcbs0.RunTime<<" "<<pcbsi.TurnoverTime<<" "<<pcbsi.WeighTurnTime<<endl;for(i=1;i<PCBNum-1;i+) pcbsi.Time+=pcbsi-1.Time+pcbsi-1.RunTime; pcbsi.WaitTime=pcbsi.Time-pcbsi.ArriveTime; pcbsi.TurnoverTime=pcbsi.WaitTime+pcbsi.RunTime; Total1+=pcbsi.Tu

33、rnoverTime; Total2+=pcbsi.TurnoverTime/pcbsi.RunTime; pcbsi.Finished=1;cout<<" "<<pcbsi.sNum<<" "<<pcbsi.ArriveTime<<" "<<pcbsi.WaitTime <<" "<<pcbsi.RunTime<<" "<<pcbsi.TurnoverTime<<

34、" "<<pcbsi.WeighTurnTime<<endl;cout<<"總周轉時間:"<<Total1<<" 平均周轉時間:"<<Total1/(PCBNum-1)<<"總帶權周轉時間:"<<Total2<<" 平均帶權周轉時間:"<<Total2/(PCBNum-1)<<endl; cout<<endl<<"-"&l

35、t;<endl; /void SPF() void interface()/顯示界面信息 cout<<endl<<endl; cout<<" "<<endl;cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl;cout<<" "<

36、<endl; cout<<"歡迎進入進程調度模擬系統 "<<endl;cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl;cout<<" "<<endl; cout<<"實驗一:進程調度算法 "<<end

37、l; cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl;cout<<" "<<endl;cout<<endl<<endl; /void interface()/主函數void main() int Input; bool bGoOn;char sGoOn1; interface(); /顯示界面信息initPCB(); /PCB初始化函數bGoOn

38、= true;strcpy(sGoOn," ");if(readData()=1) /標志讀進程流文件數據函數執行是否正確while (bGoOn)cout<<endl<<"請選擇進程調度功能,輸入(1 or 2 or 3 or 4)"<<endl<<endl;cout<<"1 先來先服務(FCFS)算法"<<endl<<"2 優先數(privilege)調度算法"<<endl<<"3 時間片輪轉(

39、HRN)調度算法"<<endl<<"4 短進程優先(SPF)調度算法"<<endl;cin>>Input;switch(Input)case 1:FCFS(); /先來先服務算法break;case 2:privilege();/優先數調度算法break;case 3:timer();/時間片輪轉調度算法break;case 4:SPF(); /短進程優先調度算法break;default:printf("n輸入的算法編號錯誤!n");break;/switch(Input)bGoOn= fals

40、e;strcpy(sGoOn," ");cout<<endl;cout<<"要繼續進行進程調度算法模擬嗎?(Y/N)"cin>>sGoOn;bGoOn=(sGoOn0='y'|sGoOn0='Y');/while bGoOn /if(readData()=1)/void main()e、運行截圖三、 銀行家算法1、進程死鎖狀態在多道程序系統中,雖然可借助于多個進程的并發執行來改善系統的資源利用率,提高系統的吞吐量,但可能發生一種危險死鎖。所謂死鎖(Deadlock),是指多個進程在運行過

41、程中因爭奪資源而造成的一種僵局(DeadlyEmbrace),當進程處于這種僵持狀態時,若無外力作用,他們都將無法向前推進。具有代表性的避免死鎖的算法,是Djikstra的銀行家算法,這是由于該算法能用于系統現金貸款的發放而得名的。2、算法原理及設計(1)銀行家算法思想:對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態調用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態,拒絕申請。(2)銀行家算法數據結構:可利用資源向量int Availablej j為資源的種類最大需求矩陣int Maxij

42、 i為進程的數量分配矩陣int Allocationij需求矩陣int needij= Maxij- Allocationij申請各類資源數量int Request ij i進程申請j資源的數量工作向量int Workx int Finishy(3)銀行家算法進程i發出請求申請k個j資源,Request ij=k a、檢查申請量是否不大于需求量:Request ij<=needi,j,若條件不符重新輸入,不允許申請大于需求量。b、檢查申請量是否小于系統中的可利用資源數量:Request ij<=availablei,j,若條件不符就申請失敗,阻塞該進程,用goto語句跳轉到重新申請

43、資源。c、若以上兩個條件都滿足,則系統試探著將資源分配給申請的進程,并修改下面數據結構中的數值:Availablei,j= Availablei,j- Request ij;Allocationij= Allocationij+ Request ij;needij= needij- Request ij;d、試分配后,執行安全性檢查,調用safe()函數檢查此次資源分配后系統是否處于安全狀態。若安全,才正式將資源分配給進程;否則本次試探分配作廢,恢復原來的資源分配狀態,讓該進程等待。e、用dowhile 循環語句實現輸入字符y/n判斷是否繼續進行資源申請。(4)安全性檢查算法a、設置兩個向量:

44、工作向量Work,它表示系統可提供給進程繼續運行所需的各類資源數目,在執行安全性算法開始時,Work= Available。Finish,它表示系統是否有足夠的資源分配給進程,使之運行完成。開始時先做Finishi=0;當有足夠的資源分配給進程時,再令Finishi=1。b、在進程中查找符合以下條件的進程:條件1:Finishi=0;條件2:needij<=Workj若找到,則執行步驟(3)否則,執行步驟(4)c、當進程獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行:Workj= Workj+ Allocationij;Finishi=1;goto step 2;d、

45、如果所有的Finishi=1都滿足,則表示系統處于安全狀態,否則,處于不安全狀態。初始化函數chushihua()開始(5)操作系統銀行家算法流程圖:輸入各進程當前已分配的資源數輸入各進程對各類資源的最大需求輸出提示:輸入有誤,請重新輸入初始化函數chushihua()結束,銀行家函數Bank()提出請求REQUESTiError;REQUESTi<=NEEDi輸出提示:你的請求被拒!REQUESTi<=AVAILABLEiError;Safe();AVAILABLEi-=REQUESTi;ALLOCATIONi-=REQUESTi;NEEDi+=REQUESTi;輸出提示:同意分

46、配請求是否進行再次分配退出程序,銀行家算法Bank()結束;Work=AVAILABLE;FINISH=false;安全性算法Safe()開始輸出提示:系統是不安全的NEEDi<=Work&&FINISHi=false;Work+=ALLOCATIONi;FINISHi=ture;安全算法safe()結束安全,輸出安全序列Return ture;3、代碼設計#include <iostream.h>#include <vector> #include <iomanip>#include <stdlib.h>using nam

47、espace std; #define TRUE 1 /定義 TRUE =1#define FALSE 0 /定義 FLASE=0void bank(vector<int>,vector<vector<int> >,vector<vector<int> >,int ,int ); /聲明bank(應行家算法)int safe(vector<int> Available,vector<vector<int> > Need,vector<vector<int> > Allocat

48、ion,int n,int m);/聲明safe()安全性算法void init();/*主函數main()*/void main()init();int safe(vector<int> Available,vector<vector<int> > Need,vector<vector<int> > Allocation,int n,int m);/*初始化函數init()*/void init()int m; /m資源類數int n; /進程數system("color 0B");cout<<end

49、l<<endl; cout<<" "<<endl;cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl;cout<<" "<<endl; cout<<"歡迎進入銀行家算法調度系統 "<<endl;co

50、ut<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl;cout<<" "<<endl; cout<<"實驗二:銀行家算法 "<<endl; cout<<"作者:學習 "<<endl; cout<<&quo

51、t; 2012.12.16 "<<endl; cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl; cout<<" "<<endl;cout<<" "<<endl;cout<<endl<<endl; cout<<"輸入資源類數"<<endl;

52、cin>>m;vector<int> Available(m); /動態申請數組Available可用資源向量cout<<"輸入各類資源總數:"<<endl;/*/ /* 下面的被剛掉的為在DOS下輸入資源向量*/ /*未被剛掉的是從Available.txt文件中讀入數據*/*/*/for (int i=0;i<m;i+)cout<<"輸入R"<<i<<"類資源總數:"cin>>Availablei;/*/FILE *fp;fp=fopen("Available.txt","r+");cout<<"從Available.txt文件中讀入數據,并輸出"<<endl;for(int i=0;i<m;i+)fscanf(fp,"%d",&Availab

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論