【问题标题】:rand() returns no value in my custom functionrand() 在我的自定义函数中不返回任何值
【发布时间】:2013-12-30 18:28:40
【问题描述】:

尽管设置了 srand() 仅一次,正如关于 rand() 的类似 Q/A 所指出的那样
我认为以下 rand 不会为我的自定义随机函数返回值。

无论如何,我的目的是生成一些随机数
并在它们出现后立即在数组中计数 +1(稍后计算它们的频率)

1 代表 freq[] 数组中的 (5x)+1

我已阅读有关 rand()/srand 的文档,但我无法找出错误。

感谢您的耐心等待!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000



int RandomInteger(int low , int high);
main()
{
    int freq[9]={0},i,j,number,div;

    srand((int)time(NULL));
    for(i=0;i<N;i++)
        number=RandomInteger(1,9);
    switch(number){ 
    case 1:
        freq[0]+=1;
        break;
   case 2:
        freq[1]+=1;
        break;
   case 3:
        freq[2]+=1;
        break;
   case 4:
        freq[3]+=1;
        break;
   case 5:
        freq[4]+=1;
        break;
   case 6:
       freq[5]+=1;
       break;
   case 7:
       freq[6]+=1;
       break;
   case 8:
      freq[7]+=1;
      break;
   case 9:
      freq[8]+=1;
      break;
   default:
    ; 
   }
for(i=0;i<9;i++){
   div=freq[i]/5;
   printf("%d|",div);
   for(j=0;j<div;j++) 
       printf("*"); 
   printf("\n"); 
   }

}

int RandomInteger(int low , int high)
{
    int k;
    double d;
    d=(double)rand()/((double)RAND_MAX+1);
    k=(int)(d*(high-low+1));

    return low+k;
}

【问题讨论】:

  • 打开编译器上的警告。您发布的代码甚至无法编译。
  • 为什么你认为它没有返回数字?我可以向你保证确实如此。我认为问题在于您的 for 循环不包含 switch 语句。
  • Turbo c 编译它没有警告
  • 不编译也不运行ideone.com/PCEPPy
  • 你将高设置为 1,低设置为 9,给你一个 -K

标签: c function random frequency-distribution


【解决方案1】:

你的问题是这样的:

for(i=0;i<N;i++)
 number=RandomInteger(1,9);

应该有

for(i=0;i<N;i++) {
 number=RandomInteger(1,9);
..
..
}

否则它会运行 N 次(同一行),但在完成循环之前永远不会转到 switch

【讨论】:

  • 你能给我解释一下d=(double)rand()/((double)RAND_MAX+1); k=(int)(d*(high-low+1));他们是我们教授预先给的吗
  • 确实在循环结束后转到switch
  • rand() 返回一个介于 0 和 RAND_MAX 之间的伪随机整数,因此 d 使用您拥有的代码,生成一个介于 0 和 1 之间的数字(而不是 RAND_MAX),k 生成一个高低之间的数字并使用d,确保其均匀分布
  • @KeithThompson 是的,你知道我的意思,反正解释得更好
  • 不,我真的不明白你的意思。感谢您修复它。
【解决方案2】:

在您的代码中,high 设置为 1,low 设置为 9,这将导致 k 为负数。退货将超出您的案件范围,并将属于违约。

【讨论】:

  • (1,9) (int low,int high)
  • 他的代码在for之后缺少{,所以代码无法运行,这是他的问题,我认为负面的东西只是一个愚蠢的错误
  • @nrathaus 是的,有很多愚蠢的错误,你的也不错
  • 我大约 10 分钟前在int k;编辑了一个令人尴尬的分号:D 的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多