改错题 1.  下列给定程序中,函数proc()的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。
    请修改程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<stdio.h>
    int proc()
    {
    int i,j,k,sum=0;
    printf("\nThe result:\n\n");
    //****found****
    for(i=0;i<=3;i++)
    {
    for(j=1;j<=5;j++)
    {
    k=8-i-j;
    //****found****
    if(k>=1&&k<=6)
    {
    sum=sum+1:
    printf("red:%4d white:%4d
    black:%4d\n",i,j,k);
    }
    }
    }
    return sum;
    }
    void main()
    {
    int sum;
    sum=proc();
    printf("sum=%4d\n\n",sum);
    }
【正确答案】(1)错误:for(i=0;i<=3;i++)
   正确:for(i=1;i<=3;i++)
   (2)错误:if(k>=1&&k<=6)
   正确:if(k>=0&&k<=6)
【答案解析】 变量i,j,k分别表示红球、白球、黑球,按照题目的要求必须有红球或白球,因此变量i和j的最小值为1,因此,“for(i=0;i<=3;i++)”应改为“for(i=l;i<=3;i++)”;可以没有黑球,因此,“if(k>=1&&k<=6)”应改为“if(k>=0&&k<=6)”。