题库 题库

【简答题】

试题四(共15分)
  阅读以下说明和C语言函数,将应填入__(n)__处的字句写在答题纸的对应栏内。
[说明]
  某工厂A负责为某大型企业B加工零件,A每天必须为B提供一定数量的零件。由于某种客观原因,A每天生产的零件的单价都不相同。若A某天生产的零件数多于B需要的数目,则多余的零件可以放到第二天及以后再使用,但需要收取每个零件的保管费 (产品单价之外附加的费用),每个零件在不同日期收取的保管费也不相同。
  例如,在5天的生产中,B要求的零件需求量及A核算出的零件单价和保管费用如表1所示:
    
A可以制订多种生产计划,但费用可能不同。例如,表2所示为生产计划及其费用。
    
  注:(1)计划1的总费用:25*20+15*30+30*32+35*25+30*35=3835(元)
    (2)计划2的总费用:40*20+15*4.5+30*32+50*25+15*5.5+15*35=3685(元)
    (3)计划3的总费用:70*20+45*4.5+30*8+65*25+30*5.5=3632.5(元)
    (4)计划4不可行,虽然第一天和第二天生产的零件总数比需求量多5个,但加上第三天生产的20个零件(共25个),仍不能满足B第三天的需求量(30个)。
  函数finla_plan(FILE*in)的功能是:从文件中读入若干个生产计划,从可行的计划中选出费用最小者,记录该生产计划并返回该最小费用。
  全局结构体数组data[]用于保存表1所示的数据(data[0]不用),说明如下:
   data[i].Qty_req:int型,表示第i天的零件需求量。
   data[i].Price:double型,表示第i天生产的零件单价(元)。
   data[i].Keeping_fee:double型,表示第i天保管单个零件的费用(元)。
[C语言函数]
  int B_s[DAYS+1];    /*扫记录成本最小的生产计划,ls[0]不用,DAYS定义为天数*/
  double find_a_plan(FILE *inf)
  { int P num[DAYS+1],acc_req[DAYS+1]:
   int i,tag=0,acc_qty=0;
   double mincost=1.0e20,costProduce,cost_Keep;
   for (i=1;i<=DAYS;i++){   /*到第i天时的累计零件需求量存入acc_req[i]*/
    accjty += data[i].Qty_req;
    acc_req[i] = acc_qty;
    }
   while (!feof(inf)){
    for(i=1;i<=DAYS;i**)  /*读入一个生产计划,第i天的产量存入P_num[i]*/
    if (!feof(inf))
     fscanf(inf,*"%d",&P_num[i]);
    tag=0; cost_Produce=0; cost_Keep=0:
    for(i=1,___(1)___;i<=DAYS;i++){   /*考察当前的生产计划*/
     acc_qty += P_num[i]);      /*acc_qty计录到第i天时的累计零件生产量*/
     if (acc_qty < acc_req[i]) {  /*当前生产计划不能满足需求*/
      tag=1; break;
     }/*if*/
    cost_Produce += ___(2)___;/*计算当前生成计划的总零件价格*/
    /*计算当前生成计划下的零件保管费*/
    cost_Keep += (___(3)___) * data[i].Keeping_fee;
    }/*for*/
   if(___(4)___)     /*若当前生产计划不可行,则继续读取下一计划*/
    continue;
   if(___(5)___){    /*记录成本更小的生产计划*/
    mincost=cost_Produce+cost_Keep;
    for(i=1;i<=DAYS;i++)
     B_s[i]=P_num[i];
     }/*if*/
    }/*while*/
   return mincost;
   }

参考答案

 (1) acc_qty = 0
 (2) P_num[i] * data[i].Price
 (3) acc_qty - acc_req[i]
 (4) tag
 (5) cost_Produce + cost_Keep < mincost

相关试题