阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。
[说明]
这是一个模拟渡口管理的算法。某汽车轮渡口,过江渡船每次能载10辆车过江。过江车辆分为客车类和火车类,上船有如下规定:同类车先到先上船,客车先于货车上渡船,且每上4辆客车,才允许上一辆货车;若等待客车不足4辆,则以货车代替,若无货车等待则允许客车都上船。
程序中用到的函数有enqueue(queue*sq,elemtype*x)在队列sq中入队一个元素x;outqueue(queue*sq,elemtype*x)在队列sq中出队一个元素,并将其值赋给x;empty(queue*sq)判断队列sq是否为空队,若为空,返回1;否则返回0。
[C程序]
#include<stdio.h>
void pass()
queue bus,truct; /*bus表示客车队列,truck表示货车队列*/
char ch;
int n,tag; /* ]n为车号,tag为标志,tag=0表示客车,tag=1表示货车*/
intcount=0,countbus=0,counttruck=0; /*分别表示上渡船汽车数、客车数、货车数*/
while(1)
printf("输入命令: \n");
Scanf("%c",&ch);
switch(ch)
case’e’:
case’E’: printf("车号: \n");
Scanf("%d",&n);
printf("客车\货车(0\1): \n");
scanf("%d",&tag);
if( (1) )
enqueue(&bus,n);
else
enqueue(&truck,n);
break;
case’i’:
case’I’: while(count<10)
if( (2) && empty(&bus)==0) /*客车出队*/
outqueue(&bus,&n);
printf("上船的车号为: \n");
count++;
(3) ;
eise if( (4) ) /*货车出队*/
countbus=0;
outqueue(&truck,&n);
printf("上船的车号为: \n");
count++;
counttruck++;
else if(empty(&bus)==0)
(5) ;
outqueue(&truck,&n);
printf("没有10辆车排队轮渡\n");
count++;
countbus++;
else
printf("没有10辆车排队轮渡\n");
retUrn;
break;
case’q’:
case’Q’:break;
if(ch==’q’ || ch==’Q’)
break;
参考答案:tag==O (2) count<4 (3) countbus++ (4)empty(&truck)==0 (5) counttruck=0
解析:
命令E(e)表示有汽车来等船渡江,按客车、货车分类进入相应的队列排队。所以空(1)填“tag==0”,表示客车来渡船。命令I(i)表示渡船到渡口,在count小于10时环形:①若count<4,客车队列又非空,将客车队列的队头汽车出队上渡船。count和countbus增1;否则转②。所以空(2)填“count<4”,空(3)填“countbus++”。②若count>=4,或客车队列为空队且货车队列非空,将货车队列的队头汽车出队上渡船。count和counttruck增1,否则转③。即空(4)填“empty(&tmck)==0”。③若货车队列为空队且客车队非空,将客车队列的队头汽车出队上渡船。count和countbus增1,否则转④。因此(5)填“counttruck=0”。④提示相应错误信息并退出程序运行。