閱讀以下說明和C語言函數(shù),將應(yīng)填入 (n) 處的字旬寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
某工廠A負(fù)責(zé)為某大型企業(yè)B加工零件,A每天必須為B提供一定數(shù)量的零件。由于某種客觀原因,A每天生產(chǎn)的零件的單價(jià)都不相同。若A某天生產(chǎn)的零件數(shù)多于B需要的數(shù)目,則多余的零件可以放到第二天及以后再使用,但需要收取每個(gè)零件的保管費(fèi)(產(chǎn)品單價(jià)之外附加的費(fèi)用),每個(gè)零件在不同日期收取的保管費(fèi)也不相同。
例如,在5天的生產(chǎn)中,B要求的零件需求量及A核算出的零件單價(jià)和保管費(fèi)用如表l所示:表1
A可以制訂多種生產(chǎn)計(jì)劃,但費(fèi)用可能不同。例如,表2所示為生產(chǎn)計(jì)劃及其費(fèi)用。
表2
注:
(1)計(jì)劃1的總費(fèi)用:25*20+15*30+30*32+35*25+30*35=3835(元)
(2)計(jì)劃2的總費(fèi)用:40*20+15*4.5+30*32+50*25+15*5.5+15*35=3685(元)
(3)計(jì)劃3的總費(fèi)用:70*20+45*4.5+30*8+65*25+30*5.5=3632.5(元)
(4)計(jì)劃4不可行,雖然第一天和第二天生產(chǎn)的零件總數(shù)比需求量多5個(gè),但加上第三天生產(chǎn)的20個(gè)零件(共25個(gè)),仍不能滿足B第三天的需求量(30個(gè))。
函數(shù)find_a_plan(FILE *in)的功能是:從文件中讀入若干個(gè)生產(chǎn)計(jì)劃,從可行的計(jì)劃中選出費(fèi)用最小者,記錄該生產(chǎn)計(jì)劃并返回該最小費(fèi)用。
全局結(jié)構(gòu)體數(shù)組data[]用于保存表1所示的數(shù)據(jù)(data[0]不用),說明如下:
data[i].Qty_req: int型,表示第i天的零件需求量。
data[i].Price: double型,表示第i天生產(chǎn)的零件單價(jià)(元)。
data[i].Keeping_fee: double型,表示第i天保管單個(gè)零件的費(fèi)用(元)。
【C語言函數(shù)】
int B_s[DAYS+1];/*記錄成本最小的生產(chǎn)計(jì)劃,B_s[0]不用,DAYS定義為天數(shù)*/
double find_a_plan(FILE *inf)
{int P_num[DAYS+l],acc_req[DAYS+1];
int i,tag = 0,acc_qty = 0;
double mincost = 1.0e20,cost_Produce,cost_Keep;
for(i=l;i<=DAYS;i++){/*到第i天時(shí)的累計(jì)零件需求量存入acc_req[i]*/ acc_qty += data[i].Qty_req;
acc_req[i] = acc_qty;
}
while(!feof(inf)){
for(i=1;i<=DAYS;i++)/*未讀入一個(gè)生產(chǎn)計(jì)劃,第i天的產(chǎn)量存入P_num[i]*/
if(!feof(inf))
fscanf(inf,"%d″,&P_num[i]);
tag = 0; cost_Produce = 0;cost_Keep = 0;
for(i = l, (1) ;i<=DAYS;i++){/*考察當(dāng)前的生產(chǎn)計(jì)劃*/
acc_qty +=P_num[i];/* acc_qty計(jì)錄到第i天時(shí)的累計(jì)零件生產(chǎn)量*/
if(acc_qty<acc_req[i]){/*當(dāng)前生產(chǎn)計(jì)劃不能滿足需求*/
tag = 1; break;
} /*if*/
cost_Produce += (2) ;/*計(jì)算當(dāng)前生成計(jì)劃的總零件價(jià)格*/
/*計(jì)算當(dāng)前生成計(jì)劃下的零件保管費(fèi)*/
cost_Keep += ( (3) ) * data[i].Keeping_fee;
}/*for*/
if( (4) )/*若當(dāng)前生產(chǎn)計(jì)劃不可行,則繼續(xù)讀取下一計(jì)劃*/
continue;
if( (5) )/*記錄成本更小的生產(chǎn)計(jì)劃*/
mincost = cost_Produce + cost_Keep;
for(i = 1; i <= DAYS; i++)
B_s[i] = P_num[i];
}/*if*/
}/*while*/
return mlncost;
}