停車(chē)場(chǎng)問(wèn)題 含 完整C程序代碼

上傳人:z**** 文檔編號(hào):122788438 上傳時(shí)間:2022-07-21 格式:DOC 頁(yè)數(shù):7 大?。?5KB
收藏 版權(quán)申訴 舉報(bào) 下載
停車(chē)場(chǎng)問(wèn)題 含 完整C程序代碼_第1頁(yè)
第1頁(yè) / 共7頁(yè)
停車(chē)場(chǎng)問(wèn)題 含 完整C程序代碼_第2頁(yè)
第2頁(yè) / 共7頁(yè)
停車(chē)場(chǎng)問(wèn)題 含 完整C程序代碼_第3頁(yè)
第3頁(yè) / 共7頁(yè)

本資源只提供3頁(yè)預(yù)覽,全部文檔請(qǐng)下載后查看!喜歡就下載吧,查找使用更方便

15 積分

下載資源

資源描述:

《停車(chē)場(chǎng)問(wèn)題 含 完整C程序代碼》由會(huì)員分享,可在線閱讀,更多相關(guān)《停車(chē)場(chǎng)問(wèn)題 含 完整C程序代碼(7頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、停車(chē)場(chǎng)問(wèn)題完整C程序代碼 1) 內(nèi)容: 設(shè)停車(chē)場(chǎng)是一個(gè)可停放 n 輛汽車(chē)的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車(chē)進(jìn)出。 汽車(chē)在停車(chē)場(chǎng)內(nèi)按車(chē)輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門(mén)在最南端,最先到達(dá) 的在最北端),若停車(chē)場(chǎng)內(nèi)已經(jīng)停滿(mǎn)n輛車(chē),那么后來(lái)的車(chē)只能在場(chǎng)外等候,一旦有車(chē)開(kāi)走, 則等候在第一位的車(chē)即可開(kāi)入(這是一個(gè)隊(duì)列設(shè)長(zhǎng)度為m);當(dāng)停車(chē)場(chǎng)內(nèi)某輛車(chē)需要開(kāi)出, 則在它之后的車(chē)輛必須給它讓道,當(dāng)這輛車(chē)駛出停車(chē)場(chǎng)后,其他車(chē)輛按序入棧。每輛車(chē)按時(shí) 間收費(fèi)。 2) 要求: 以棧模擬停車(chē)場(chǎng),以隊(duì)列模擬車(chē)場(chǎng)外的便道,按照從終端讀入數(shù)據(jù)的序列進(jìn)行 模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù):汽車(chē)的“到達(dá)”('A

2、'表示)或"離去”('D'表示) 信息,汽車(chē)標(biāo)識(shí)(牌照號(hào))以及到達(dá)或離去的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行 操作后的輸出信息為:若是車(chē)輛到達(dá),則輸出汽車(chē)在停車(chē)場(chǎng)內(nèi)或者便道上的停 車(chē)位置;若是車(chē)輛離去,則輸出汽車(chē)在停車(chē)場(chǎng)停留的時(shí)間和應(yīng)繳納的費(fèi)用(便 道上不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。 #include #include #define pmax 3 #define price 2 static int flag=0; struct parkcar { long num; int time; struct parkcar*next; }

3、*head,*rear; struct parkcar pc[pmax]; struct parkcar tc[pmax]; 結(jié)構(gòu)體數(shù)組 struct parkcar *inqueue(long carnum,int atime); 候車(chē)區(qū) void arrive(void); void leave(void); void display_P(void); 數(shù) //定義停車(chē)場(chǎng)的最大容車(chē)量為3 //停車(chē)單價(jià)為 2 //全局變量,用來(lái)記錄停車(chē)場(chǎng)車(chē)的數(shù)量 //定義車(chē)輛的結(jié)構(gòu)體 //創(chuàng)建停車(chē)場(chǎng)的結(jié)構(gòu)體數(shù)組 //創(chuàng)建用來(lái)緩存停車(chē)場(chǎng)出來(lái)的車(chē)輛的 //聲明入隊(duì)列函數(shù),讓車(chē)輛進(jìn)入 /

4、/聲明到達(dá)函數(shù) //聲明離開(kāi)函數(shù) //聲明顯示停車(chē)場(chǎng)車(chē)輛信息的函 void display_W(void); //聲明顯示侯車(chē)區(qū)車(chē)輛信息的 函數(shù) int main() { head=NULL; //初始化隊(duì)列頭指 針和尾指針 rear=NULL; int state=0; printf("\t===== =Parkcar Menu======\n"); printf("\t price:2\n"); printf("\tinput state\n"); 后執(zhí)行相應(yīng)函數(shù) printf("\t A arrive\n"); printf("\t D

5、leave\n"); printf("\t P display park_car\n"); printf("\t W display wait_car\n"); printf("\t E quit\n"); do //輸出停車(chē)菜單 //通過(guò)先輸入狀態(tài)(如 A) //通過(guò)先輸入狀 //如果停車(chē)場(chǎng)為空則 //當(dāng)輸入E //如果停 { printf("input:\n"); scanf("%c",&state); fflush(stdin); switch(state) 態(tài)(如A),后執(zhí)行相應(yīng)函數(shù) { cas

6、e 'A':arrive();break; case 'D':if(pc[flag-1].num==NULL) 輸出為空 printf("Park is empty!\n"); else leave();break; case 'P':display_P();break; case 'W':display_W();break; case 'E':break; default:printf("error message,input again!\n"); } }while(state!='E'); 則退出 return 0; } void arrive(void) { lo

7、ng carnum; int atime; printf("please input carnumber and arrive time!\n"); scanf("%ld %d",&carnum,&atime);fflush(stdin); if(flag!=pmax) 車(chē)場(chǎng)未滿(mǎn),則入停車(chē)場(chǎng) { pc[flag].num=carnum; pc[flag].time=atime; ++flag; else { inqueue(carnum,atime); 進(jìn)候車(chē)區(qū) } } struct parkcar *inqueue(long carnum,int atime) 立候車(chē)區(qū)的

8、隊(duì)列鏈表 { struct parkcar*p; p=(struct parkcar*)malloc(sizeof(struct parkcar)); p->num=carnum; p->time=atime; if(head==NULL)head=p; else rear->next=p; //否則 //以尾插法建 rear=p; rear->next =NULL; return head; } void leave(void) { long carnum; int ltime,dtime; //離開(kāi)時(shí)間,停車(chē)時(shí)間 int save=0; int i=1,fl

9、ag0; flag0=flag; 時(shí) flag 的值 struct parkcar*p; printf("please input carnumber and leave time!\n"); scanf("%ld %d",&carnum,<ime);fflush(stdin); while(pc[flag-1].num !=carnum) 輛車(chē) //flag0 用來(lái)存儲(chǔ)剛調(diào)用 離開(kāi)函數(shù) //從棧頂往下找要離開(kāi)的那 { tc[save].num=pc[flag-1].num; tc[save].time =pc[flag-1].time ; tc[save].next =

10、pc[flag-1].next ; if(flag==1&&pc[0].num !=carnum) // 如果找到棧底都沒(méi) 有這輛車(chē),則返回,并將存儲(chǔ)著剛調(diào)用離開(kāi)函數(shù)時(shí)flag的值,即flagO重新 { //賦值給flag,避 免在沒(méi)有車(chē)輛離開(kāi)的情況下對(duì)全局變量flag進(jìn)行修改而導(dǎo)致錯(cuò)誤 printf("This car is not founded!\n"); flag=flagO; return;

11、 //如果候車(chē) //顯示從候車(chē)區(qū)進(jìn) //從棧 //用 flag--;save++; } dtime=ltime-pc[flag-1].time ; //停車(chē)時(shí)間的計(jì)算 if(dtime<0) //如果輸入的離開(kāi)時(shí)間小于到達(dá)時(shí)間則重新輸入離開(kāi)時(shí)間 { printf("The leave time is illegal,please input the leave time again\n"); scanf("%d",<ime);fflush(stdin); dtime=ltime-pc[flag-1].time ; }

12、printf("\tpark time:%d\n",dtime); printf("\tcost: %d\n",dtime*price); //輸出停車(chē)時(shí)間和費(fèi)用 //當(dāng)車(chē)輛離開(kāi)后, while(save!=0) 將緩存棧里的車(chē)回到停車(chē)場(chǎng) { if(i--)flag--; //因?yàn)閳?zhí)行完上一個(gè) while 循環(huán)后 flag 少執(zhí)行了 一次減一操作,通過(guò)控制 i 來(lái)讓 flag 在這個(gè)循環(huán)里只減一次。但 flag- save--; 〃放在while (save!=O)外面,這樣對(duì)某些輸 入會(huì)有bug。也就是只有當(dāng)緩存棧里有車(chē)時(shí)才需要flag做一次減一操作 pc[flag].

13、num =tc[save].num ; pc[flag].time =tc[save].time ; flag++; } if(head!=NULL) 區(qū)不空,則將隊(duì)首第一輛車(chē)進(jìn)入停車(chē)場(chǎng) { p=head; pc[flag].num =p->num; pc[flag].time =ltime; pc[flag].next =p->next ; flag++; printf("\t'%ld'car in park,arrive time:%d\n",p->num ,ltime); 停車(chē)場(chǎng)的車(chē)輛車(chē)牌號(hào)和進(jìn)入時(shí)間 head=head->next; free (p); }

14、 } void display_P(void) 頂往棧底顯示停車(chē)場(chǎng)的車(chē)輛信息 { int flag1; flag1=flag; flagl記錄此時(shí)的flag,避免對(duì)全局變量進(jìn)行操作 printf("\tpark_carnum arrive_time\n");fflush(stdin); while((flag1)!=0) { printf("\t%ld %d\n",pc[flag1-1].num,pc[flag1-1].time); flag1--; } } //從隊(duì)首 void display_W(void) 往隊(duì)尾顯示候車(chē)區(qū)的車(chē)輛信息 { struct parkcar*w; w=head; printf("\twait_carnum arrive_time\n"); while(w!=NULL) { printf("\t%ld %d\n",w->num,w->time); w=w->next; } free(w); } /* 可參考的測(cè)試數(shù)據(jù),含一定健壯性,復(fù)制粘貼可用 101 5 A 102 10 D 103 15 D 101 15 P 103 20 A 104 25 A 105 30 P W D 102 35 P W D 104 20 40 P W E */

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!