【问题标题】:Generate random numbers in array and count the average, max, min, sum在数组中生成随机数并计算平均值、最大值、最小值、总和
【发布时间】:2017-09-07 14:11:12
【问题描述】:

此代码应该生成 30 个随机数,0-100,并打印平均值、最大值和最小值。但它有逻辑错误,我不禁认为我犯了一个愚蠢的错误。

****代码应该生成0-100之间的30个数字,并显示平均值,最大值和最小值****

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 30

int generateRandom(void); 

int main(void)
{

    int points[SIZE], i, sum, max, min, num; 
    double average; 

    srand(time(NULL));                      /*Seed random number generator*/

    num = generateRandom();                 /*Genrate the random numbers*/

    printf("num = %d\n", num);              /*Print the random numbers*/

    sum = 0; 
    for ( i = 0; i < SIZE; i++)             /*Find the average*/
    {
        sum += points[i]; 
        average = sum / SIZE; 
    }
    printf("Average = %f", average);        /*Print the average*/


    max = points[0];                        /*initialize the max to 0*/
    for ( i = 0; i < SIZE; i++)             /*find the min*/
    {
        if (points[i] > max)
        {
            max = points[i]; 
        }
    }
    printf("Maximum = %d\n", max);          /*print the maximum number*/

    min = points[0];                        /*initialize the min*/
    for ( i = 0; i < SIZE; i++)             /*Find the min*/
    {
        if (points[i] < min)
        {
            min = points[i]; 
        }
    }
    printf("Minimum = %d\n", min);          /*Print the minimum number*/


    return 0; 

}

int generateRandom(void)
{
    int random; 

    random = rand() % 101; 

    return random;
}

【问题讨论】:

  • 来自help center:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及必要的最短代码在问题本身中重现它。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • “如何修复逻辑错误”。第一步是了解错误在哪里。最好的工具是调试器。调试器将允许您跟踪程序的执行并在其运行时检查其状态。

标签: c arrays random numbers generator


【解决方案1】:

您只生成一个随机数,并将其存储在num 中。然后,您的代码的行为就好像它在 points 中存储了 30 个随机数。但它永远不会让这种情况发生。

【讨论】:

    【解决方案2】:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define SIZE 30
    
    int generateRandom(void);
    
    int main(void)
    {
    
        int points[SIZE],i,sum,max,min,num;
        double average;
    
        srand(time(NULL));                             
    
        for(i = 0; i < SIZE; i++){
            points[i] = generateRandom();
        }
    
        sum = 0;
        for(i = 0; i < SIZE; i++)
        {
            sum += points[i];
        }
        average = (sum * 1.0) / SIZE;   /*you need double here*/
        printf("Average = %f\n",average);      
    
    
        max = points[0];                       
        for(i = 1; i < SIZE; i++)            
        {
            if(points[i] > max)
            {
                max = points[i];
            }
        }
        printf("Maximum = %d\n",max);     
    
        min = points[0];                     
        for(i = 1; i < SIZE; i++)            
        {
            if(points[i] < min)
            {
                min = points[i];
            }
        }
        printf("Minimum = %d\n",min); 
    
        return 0;
    }
    
    int generateRandom(void)
    {
        int random;
    
        random = rand() % 101;
    
        return random;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多