[C语言函数] intB_s[DAYS+1]; /*记录成本最小的生产计划,B_s[0]不用,DAYS定义为天数*/ double find_a_plan(FILE *int) { iht P_nm[DAYS+1],acc_req[DAYS+1];int i,tag = 0,acc_qty = 0;double mincost = 1.0e20,cost_Produce,cost_Keep;for(i = 1;i <= DAYS; i++) { /*第i天时的累计零件需求量存入acc rcq[i] */ acc_qty += data[i].Qty_req; acc_req[i] = acc qty;}while (!feof(int)) { for(i = 1; i <= DAYS; i++ )/*读入一个生产计划,第i天的产量存入P_num[i]*/ if (!feof(inf)) fseant[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 = costProduce + cost_Keep;for(i = 1; i <=DAYS; i++) B_s[i] = P num[i]; }/*if*/ }/*while*/ return mincost; }
参考答案:
解析:acc_qty=0 (2)P num[i]*data[i].Price,或其等价形式 (3)acc_qty-acc_req[i],或其等价形式 (4)tag,或tag==1,或tag!=0,或其等价形式 (5)cost_Produce+cost_Keep<mincost
[分析]:试题四 本题考查用C程序求解具有实际应用背景的问题。 对这类问题,一般在描述问题的背景时,会详细说明程序应实现的功能,并通过对示例数据的求解给出程序中对数据的处理过程。阅读这类程序时,应准确理解程序中定义的数据类型及其变量的作用,这是完善程序中空缺位置的关键所在。 从题目中可知,结构体数组data[]是全局变量,分别用分量Qty_req、Price和 Keeping_fee保存每天的零件需求量、零件的单价及保管费用,也需要注意数组元素data[0]不使用。 由于每天生产的零件还可以保存起来以后再使用,因此考查零件的生产数量是否满足需求时,需要从累计数量考查。为方便计算,程序中提前计算出累计的零件需求量并按天保存在数组acc_req口中。应注意第i天生产的零件数存在P_num[i]中。 借助于注释可知i是循环控制变量,同时起计算天数时的序号作用。由代码“acc qty +=P_num[i];”及注释可知变量acc_qty保存累计的零件生产量,因此之前必须将acc_qty初始值设为0,因此空(1)处填入“acc qty=0”。由于cost Produce保存的是到第i天时当前生产计划的总零件价格,因此应计算出第i天生产的零件总价格,所以空(2)处填入“P hum[i]。data[i].Price”。显然,到第i天时累计生产的零件数减去累计的需求数就是应保存的零件,所以累计的零件保管费用为“cost_Keep+=(acc_qty-acc_req[i]* data[i].Keeping_fee;”,即空(3)处填入“ace_qty-ace_req[i]”。 另外,从变量tag所起的作用看,它用于标志生产计划是否能满足要求。根据以下代码, if(acc_qty<acc_req[i]){/*当前生产计划不能满足需求*/ tag=1; break; }/*if*/ 可知当前生产计划不能满足需求时,tag等于1。很明显,空(4)处应填入“tag==1。零件的成本包括生产价格和保管费用两部分,所以空(5)处填入“cost Produce+ cost+Keep<mincost”。