今天 小編我 用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篇) 上一篇:隨機數程式設計