问答题 .下面是关于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;
    }
问答题 1.  【问题1】
    在程序中,使用关键字const修饰输入参数profit,请将这样修饰的作用写到第一个空处。
    如果程序中bonus数组也使用const修饰,是否正确,并给出解释,请将答案写到第二个空处。
【正确答案】限定变量,不允许被修改。
   不正确。因为该数组需要被修改。
【答案解析】
问答题 2.  【问题2】
    分析程序中的计算年度总利润的代码,指出错误的一行代码,将错误代码写到第一个空处;然后用一条语句实现正确代码,将正确代码写到第二个空处。
【正确答案】sum_profit+=profit[++i];
   sum_profit+=profit[i++];
【答案解析】
问答题 3.  【问题3】
    根据题意分析程序,完成程序中的第一到第六个空,每个空行只能写一行代码,即用一条语句来描述,将答案写到相应的位置。
【正确答案】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;
   }