C語言程式演算法:[2]PV操作,售票員與乘客?

今天 小編我 用c語言寫了個關於linux系統pv操作的小程式,供大家學習下

#include

#include

#include

#define MAX 20//廳內最大能容納的人數

int spys=1;//售票員的私有訊號量

int spy;//選擇售票員的人數,最多隻能有兩個

int ck=0;//廳內購票者私有訊號量

int n=MAX;

int x;//每次進入售票廳內的人數

int P1();//定義P操作函式,一個售票員執行的過程

int P2();//定義p操作,兩個售票員執行該過程

int j=0;//人多時,減少的人數

int V1();//V操作函式,一個售票視窗時購買者執行的過程

int V2();//V操作函式,兩個售票視窗時購買者執行的過程

void Hello();//輸出客套語句

void Introduce();//本客運站人員介紹

int main()

{

Introduce();

printf("請輸入今天上班的售票員人數:(最多2位):\n");

scanf("%d",&spy);

switch(spy){

case 0:{printf("sorry!由於今天假日,所以售票員不上班,請各位乘客改乘其他交通工具!\n");break;}

case 1:{ printf("今天就一個視窗售票哦!請乘客們排成一隊!謝謝合作!\n");P1();break;}

case 2:{printf("今天有兩個售票視窗啦!請乘客們按順序排成兩隊!謝謝合作\n");P2();break;}

default:{printf("本站員工有限,沒有多餘員工哦!");break;}

}

return 0;

}

int P1() //一個售票視窗時執行的過程

{

spys--;//p操作

if(spys==0)

{

Sleep(2000);

printf("20B506客運站歡迎各位乘客來乘坐本公司的汽車!祝你旅途愉快!\n");

Sleep(2000);

n--;

Hello();

Sleep(3000);

printf("當前購買者完成購票,請下一位購票者就緒\n");

Sleep(2000);

printf("當前售票廳內人數為%d\n",n);

ck++;//v操作

}

else

spys++;

V1();

return 0;

}

int V1()//顧客的執行過程

{

ck--;//相當於p操作

if(ck==0)

{

printf("請廳外的購票者排按順序進入購票廳內(最多能進入人數為:%d):\n",MAX-n);

scanf("%d",&x);

n=n+x;

printf("售票廳內人數為%d",n);

if(n>MAX){

printf("人數太多了,站不住腳呀!請出去一些人到售票廳外等候吧!\n");

printf("請輸入出去的人數:\n");

scanf("%d",&j);

while(j>n-MAX){

printf("還可以再進來些人哦!!");

printf("請在廳外等候的乘客進入售票廳內吧:\n");

scanf("%d",&j);

}

n=n-j;

printf("售票廳內人數為%d",n);

}

if(n==0) {

printf("可以下班了,售票員們,你們辛苦了\n");

return 0;

}

}

//printf("\n廳內排隊人數為%d,請廳外購票者們耐心等候,謝謝合作\n",n-1);

if(n>=20)

printf("已經達到最大人數,請廳外的乘客耐心等候!謝謝合作\n");

else

printf(",本售票廳內可容納最多20人數!,還可再進入%d人。\n",MAX-n);

Sleep(2000);

spys++;//執行v操作

P1();

return 0;

}

int P2() //一個售票視窗時執行的過程

{

spys--;//p操作

if(spys==0)

{

Sleep(2000);

printf("20B506客運站歡迎各位乘客來乘坐本公司的汽車!祝你旅途愉快!\n");

Sleep(2000);

n=n-2;

Hello();

Sleep(3000);

printf("當前購買者完成購票,請下一位購票者就緒\n");

Sleep(2000);

printf("當前售票廳內人數為%d\n",n);

ck++;//v操作

}

else

spys++;

V2();

return 0;

}

int V2()//顧客的執行過程

{

ck--;//相當於p操作

if(ck==0)

{

printf("請廳外的購票者排按順序進入購票廳內(最多能進入人數為:%d):\n",MAX-n);

scanf("%d",&x);

n=n+x;

printf("售票廳內人數為%d",n);

if(n>MAX){

printf("人數太多了,站不住腳呀!請出去一些人到售票廳外等候吧!\n");

printf("請輸入出去的人數:\n");

scanf("%d",&j);

while(j>n-MAX){

printf("還可以再進來些人哦!!");

printf("請在廳外等候的乘客進入售票廳內吧:\n");

scanf("%d",&j);

}

n=n-j;

printf("售票廳內人數為%d",n);

}

if(n==0) {

printf("可以下班了,售票員們,你們辛苦了\n");

return 0;

}

}

//printf("\n廳內排隊人數為%d,請廳外購票者們耐心等候,謝謝合作\n",n-1);

if(n>=20)

printf("已經達到最大人數,請廳外的乘客耐心等候!謝謝合作\n");

else

printf(",本售票廳內可容納最多20人數!,還可再進入%d人。\n",MAX-n);

Sleep(2000);

spys++;//執行v操作

P2();

return 0;

}

void Hello()//say hello

{

printf("售票廳內能容納最多的人數為20人,請乘客們按順序在廳外等候!謝謝合作!\n");

}

void Introduce()

{

system("color 4e");

printf("------------------------------歡迎來到20B506客運站-----------\n");

printf("-----站長:雅布珊-----\n");

printf("----------副站長:vivien----\n");

printf("--------------售票員甲:胖哥------\n");

printf("-------------------售票員乙:忠爺-----\n");

printf("----------------------------------我們的服務就是最好的承諾!\n");

printf("\n");

printf("\n");

printf("\n");

printf("\n");

printf("\n");

}

C語言程式演算法 (共2篇) 上一篇:隨機數程式設計

語言, 程式, 演算法, 乘客, 售票員,
相關問題答案