最小值和最大值不是数组中的数字

时间:2017-01-14 20:24:02

标签: c arrays max min

我需要找到数组中的最小值和最大值以及它们的位置;我的数组是从0到1000的随机值,用户指定生成的随机数。为什么我得到的数值不是我的最大值,最小值以及它们在阵列中的位置?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000
int arrSum(int arr[SIZE], int b)
{
    if(b < 0)
    {
       return 0;
    } else
    {
        return arr[b] + arrSum(arr, b-1);
    } 
}

int main()
{
    int inputNum;
    int i,q;
    int arr1[SIZE];
    int sum;
    int avg;
    int min;
    int max;
    int location1,location2, j = 1;
    srand(time(0));

    min = arr1[0];

    for(j = 1; j < inputNum; j++)
    {
        if(arr1[j] > max)
        {
            max == arr1[j];
            location1 = j + 1;
        }
        else if (arr1[j] < min)
        {
            min == arr1[j];
            location2 = j + 1;
        }
    } 

    printf("Enter an integer between 0 and 1000: ");
    scanf("%d",&inputNum);

    for(q = 0; q < inputNum; q++)
    {
        arr1[q] = rand() % 1001;
    }

    printf("min: %6d pos:%4d\n",min,location2);
    printf("max: %6d pos:%4d\n",max,location1);

    sum = arrSum(arr1, inputNum);
    printf("sum: %6d\n", sum );

    avg = sum / inputNum;
    printf("avg: %6d\n\n",avg);

    printf(" Pos   |  Val\n");
    printf("-------------\n");

    for (i = 0; i < inputNum; i++)
    {
    printf("%4d   |%4d\n", i,arr1[i]);
    }
    return 0;
}

3 个答案:

答案 0 :(得分:1)

  1. 您不熟悉语言,while (q.size()) { std::cout << q.dequeue() << std::endl; } 不是赋值运算符
  2. 您不知道如何编写可读代码
  3. 您没有初始化某些变量
  4. 您在完成工作后使用==初始化数据。
  5. 代码的某些部分没有逻辑
  6. 索引从0开始
  7. 部分修复的代码会起作用,但最好从头开始写:

    rand()

答案 1 :(得分:0)

你有很多问题:

  1. 使用递归方式对数组求和,但不是尾部。
  2. 您不会检查inputNum是否大于SIZE
  3. 您使用==,但它是一个测试运算符,而不是分配运算符
  4. 在使用
  5. 后初始化阵列
  6. 您不使用核心size_t类型作为索引。
  7. 您忘了初始化max
  8. 我建议你使用malloc更清洁的版本,并提供一些好的做法示例,例如只在你需要或更好的命名时声明变量。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <limits.h>
    
    static int arrSum(int* arr, size_t n, size_t max, int acc)
    {
        if (n < max)
        {
            return arrSum(arr, n + 1, max, acc + arr[n]);
        }
        else
        {
            return acc;
        }
    }
    
    int main()
    {
        srand((unsigned int)time(NULL));
    
        printf("Enter an integer between 0 and 1000: ");
        size_t input_size;
        if (scanf("%zu", &input_size) != 1)
        {
            return 1;
        }
    
        int* input = malloc(input_size * sizeof *input);
        if (input == NULL)
        {
            return 1;
        }
        for (size_t i = 0; i < input_size; i++)
        {
            input[i] = rand() % 1001;
        }
    
        if (input_size < 1)
        {
            free(input);
            return 1;
        }
        size_t index_min = 0;
        size_t index_max = 0;
        int min = input[index_min];
        int max = input[index_max];
    
        for (size_t i = 1; i < input_size; i++)
        {
            if (input[i] > max)
            {
                max = input[i];
                index_max = i;
            }
            else if (input[i] < min)
            {
                min = input[i];
                index_min = i;
            }
        }
    
        printf("min: %6d pos:%4zu\n", min, index_min);
        printf("max: %6d pos:%4zu\n", max, index_max);
    
        int sum = arrSum(input, 0, input_size, 0);
        printf("sum: %6d\n", sum);
    
        if (input_size > INT_MAX)
        {
            free(input);
            return 1;
        }
        int avg = sum / (int)input_size;
        printf("avg: %6d\n\n", avg);
    
        printf(" Pos   |  Val\n");
        printf("-------------\n");
        for (size_t i = 0; i < input_size; i++)
        {
            printf("%4zu   |%4d\n", i, input[i]);
        }
    
        free(input);
    }
    

答案 2 :(得分:0)

您的代码存在语法错误,代码流错误。 试试这个..

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000
 int arrSum(int arr[SIZE], int b)
 {
   if(b < 0)
  {
    return 0;
} else
{
    return arr[b] + arrSum(arr, b-1);
  } 
}
int main()
 {
  int inputNum;
  int i,q;
  int arr1[SIZE];
  int sum;
  int avg;
  int min = 1001;
  int max = 0;
  int location1,location2, j = 1;
  srand(time(0));

  printf("Enter an integer between 0 and 1000: ");
  scanf("%d",&inputNum);

 for(q = 0; q < inputNum; q++)
  {
     arr1[q] = rand() % 1001;
  }

    for(j = 0; j < inputNum; j++)
    {
     if(arr1[j] > max)
    {
        max = arr1[j];
        location1 = j + 1;
    }
    if (arr1[j] < min)
    {
        min = arr1[j];
        location2 = j + 1;
    }
  } 

printf("min: %6d pos:%4d\n",min,location2);
printf("max: %6d pos:%4d\n",max,location1);

sum = arrSum(arr1, inputNum);
printf("sum: %6d\n", sum );

avg = sum / inputNum;
printf("avg: %6d\n\n",avg);

printf(" Pos   |  Val\n");
printf("-------------\n");

for (i = 0; i < inputNum; i++)
{
printf("%4d   |%4d\n", i,arr1[i]);
}
return 0;
 }