问答题
.下面是关于C语言的基本概念和编程方面的叙述,回答下列问题。
【说明】 企业根据利润提成发放奖金。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成15%;利润在20万到40万之间时,高于20万元的部分,可提成20%;40万到60万之间时高于40万元的部分,可提成25%;60万到100万之间时,高于60万元的部分,可提成30%;高于100万元时,高于100万元的部分可提成35%。已知企业本年度12个月的月利润存储在数组profit中,程序要求根据月利润计算月奖金并存储到数组bonus中,然后计算并返回该企业的年度总利润total_profit。该程序的实现如下:
[程序] int calculate_bonus(const int profit[], int bonus[])
{
int n=12;
int i=0;
int sum_profit=0;
int bonus1, bonus2, bonus4, bonus6, bonus10;
bonus1=100000*0.1;
bonus2=bonus1+100000*0.15;
bonus4=bonus2+200000*0.2;
bonus6=bonus4+200000*0.25;
bonus10=bonus6+400000*0.3;
for (i=0; i<n; i++)
{
if (profit [i] <=100000)
______;
else if (profit[i]<=200000)
______;
else if (profit [i]<=400000)
______;
else if (profit[i]<=600000)
______;
else if (profit [i]<=1000000)
______;
else
______;
}
/*以下代码计算年度总利润*/
i=0;
while (i<n)
sum_profit+=profit[++i];
return sum_profit;
}
【正确答案】bonus[i]=profit[i]*0.1
bonus[i]=bonus1+(profit[i]-100000)*0.15
bonus[i]=bonus2+(profit[i]-200000)*0.20
bonus[i]=bonus4+(profit[i]-400000)*0.25
bonus[i]=bonus6+(profit[i]-600000)*0.30
bonus[i]=bonus10+(profit[i]-1000000)*0.35
【答案解析】 本题考查C语言程序设计能力。
【问题1】
在C语言中,const修饰的数据类型是指常类型,常类型的变量或对象的值不能被更新的。
在本题中bonus数组也使用const修饰,显然是错误的,因为在函数体内bonus数组的值是被改变的,编译器会报错的。
【问题2】
根据题意,1月到12月份的利润分别保存在profit[0]到profit[11]之中。所以年度总利润应该是profit[0]+profit[1]+profit[2]+…+profit[11]。而语句:
sum_profit+=profit[++i];
等价于:
i=i+1;
sum_profit=sum_profit+profit[i];
在计算年度总利润的代码中就等于profit[1]+profit[2]+...+profit[12]。这并不符合题意,是错误的。正确的代码应为:
sum_profit+=profit[i++];
【问题3】
根据题意,企业员工在1月到12月份创造的利润分别保存在profit[0]到profit[11]之中,作为计算每个月奖金的输入,用const修饰,在函数执行期间不能改变。而根据利润计算出每的奖金则做为输出数组保存在bonus[0]到bonus[11]中。
根据说明计算方法,程序calculate_bonus的前半部分为计算1到12月的奖金。
当利润低于或等于10万元时,奖金可提10%,故第一个空应填入bonus[i]=profit[i]*0.1;
当利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成15%;故第二个空应填入bonus[i]=bonus1+(profit[i]-100000)*0.15;
当利润在20万到40万之间时,高于20万元的部分,可提成20%,故第三个空处应填入bonus[i]=bonus2+(profit[1]-200000)*0.20;
当40万到60万之间时高于40万元的部分,可提成25%,故第四个空应填入bonus[i]=bonus4+(profit[i]-400000)*0.25;
当60万到100万之间时,高于60万元的部分,可提成30%,故第五个空处应填入bonus[i]=bonus6+(profit[i]-600000)*0.30;
当高于100万元时,高于100万元的部分可提成35%,故第六个空应填入bonus[i]=bonus10+(profit[i]-1000000)*0.35。
所以,正确且完整的calculate_bonus函数如下:
int calculate_bonus(const int profit[], int bonus[])
{
int n=12;
int i=0;
int sum_profit=0;
int bonus1, bonus2, bonus4, bonus6, bonus10;
bonus1=100000*0.1;
bonus2=bonus1+100000*0.15;
bonus4=bonus2+200000*0.2;
bonus6=bonus4+200000*0.25;
bonus10=bonus6+400000*0.3;
for (i=0; i<n; i++)
{
if (profit [i]<=100000)
bonus [i]=profit [i]*0.1;
else if (profit[i]<=200000)
bonus [i]=bonus1+(profit[i]-100000)*0.15;
else if (profit [i]<=400000)
bonus [i]=bonus2+(profit[i]-200000)*0.20;
else if (profit [i]<=600000)
bonus[i]=bonus4+(profit[i]-400000)*0.25;
else if (profit [i]<=1000000)
bonus[i]=bonus6+(profit[i]-600000)*0.30;
else
bonus [i]=bonus10+(profit [i]-1000000)*0.35;
}
/*以下代码计算年度总利润*/
i=0;
while (i<n)
sum_profit+=profit[i++];
return sum_profit;
}