问题 填空题

下列给定程序中,函数fun()的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数, j的值代表白球数,k的值代表黑球数。 请改正程序中的错误,使它能得出正确的结果。 注童:不要改动main 函数,不得增行或删行,也不得更改程序的蛄构。 试题程序: #include <stdio. h> int fun () {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; } main () { int sum; sum=fun (); printf ("sum=%4d\n\n ", sum); }

答案

参考答案:错误:for(i=0;i<=3;i++) 正确:for(i=1;<3;i++)

解析:(2)错误:if(k>1&&k<=6) 正确:if(k>1&&k<=6)&&(i!=0)&&(j!=0)||(k==0))该题是一道教材习题的变体,如果单纯从数学的排列组合角度来分析,实在简单不过,那怎么才能用C语言实现题目中的要求呢这就需要我们有一个清晰的编程思想。红球数i的总数为3,但最小值为1,循环条件中,i的值是从0开始的,所以不应该是for(i=O;i<=3;i++,而是for(i=1;i<=3;i++),另外,在if(k>1&&k<=6)中,程序旨在说明题干中的“在每组中,可以没有黑球,但必须要有红球和白球”信息,一一满足后,正确的条件应该是 if((k>1&&k<=6)&&(i!=0)&&(j!=0)||(k==0))。

单项选择题
单项选择题 A3/A4型题