2013-11-01 71 views
0

问题是: 在一个26名学生的班级中,给出了一个包含10个问题的测试。学生们通过掷硬币来回答问题。我必须找出有多少学生有两个或更少的答案是正确的。这是我编写的程序,但我不确定它...是好的吗?如何计算数量?

correct=0; 
students=0; 
for i=1:26 
    for j=1:10 
     answ=ceil(rand); 
     if answ==1 
      correct=correct+1; 
      if correct==2 
       students=students+1; 
      end 
     end 
    end 
end 
disp(students) 
+0

它对您有用吗? – chappjc

+0

为了记录,这实际上是一个预定义的函数。 Y ='binocdf(10,26,0.5)'http://www.mathworks.com/help/stats/binocdf.html – PearsonArtPhoto

回答

0

轻微的mod ification到您的代码:

correct=0; 
students=0; 
for i=1:26 
    for j=1:10 
     answ=round(rand); % Use round instead of ceil 
     if (answ==1) 
      correct=correct+1; 
      if correct==2 
       students=students+1; 
       break; 
      end 
     end 
    end 
    correct=0; % Was missing in original code 
end 
disp(students) 

附加说明:因为这对于正确答5

  1. 尝试测试代码将有变化的更多机会的结果,因为随机数的均匀分布。大多数学生在假设等概率的情况下会得到至少2个正确的答案,这不是实际情况。

  2. 尝试保持适当的压痕习惯。它将更具可读性并且不易出错。

+0

感谢很多帮助;) –

+0

@TudorPlugaru不客气! – jkshah

0

就像这样:(你必须重新设置正确的计数器为每个学生,有的end是不是在正确的地方)

correct = 0; 
students = 0; 

for i = 1:26 
    for j = 1:10 
    answ = ceil(rand); 
    if(answ==1) 
     correct = correct + 1; 
    end 
    end 

    if(correct < 2) 
    students = students + 1; 
    end 

    correct= 0; 
end 

编辑

对不起,我没有看到你的声音越少,所以我改变><

5

它更简洁,更快速地运行,如果你这样做矢量更具可读性:

answers = round(rand(10,26)); % 10x26 matrix of 0/1 values 
correct = sum(answers); % sum along each column 
students = sum(correct<=2) % how many values of correct are 2 or less 

顺便说一句,从您的代码看起来你想知道学生有多少2或更多正确答案(而不是2或为你的国家)。在这种情况下,将最后一行更改为

students = sum(correct>=2) % how many values of correct are 2 or more