改错题
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)”。