下列给定程序中,函数fun()的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数, j的值代表白球数,k的值代表黑球数

admin2010-11-26  7

问题 下列给定程序中,函数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);
   }

选项

答案(1)错误: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))。
转载请注明原文地址:https://jikaoti.com/ti/NnkiFFFM
0

最新回复(0)