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

Minumum and Maximum values aren't numbers in the array

我需要找到数组中的最小值和最大值及其位置;我的数组是从 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;
}
  1. 你语言不通,==不是赋值运算符
  2. 你不知道如何编写可读代码
  3. 你没有初始化一些变量
  4. 您在完成作业后使用 rand() 初始化了数据。
  5. 您的部分代码没有逻辑
  6. 索引从0开始

部分固定的代码,可以工作,但最好从头开始编写:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <limits.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 = 0;
    int arr1[SIZE];
    memset(&arr1, 0, sizeof(arr1));
    int sum = 0;
    int avg = 0;
    int min = INT_MAX;
    int max = INT_MIN;
    int location1 = 0,location2 = 0;
    srand(time(NULL));

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

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

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


    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 (size_t i = 0; i < inputNum; ++i)
    {
        printf("%zu   |%d\n", i,arr1[i]);
    }
    return 0;
}

你有很多问题:

  1. 你用递归对你的数组求和,但它不是尾部。
  2. 您不检查 inputNum 是否大于 SIZE
  3. 您使用 == 但它是一个测试 equally operator not assign operator
  4. 您初始化数组使用它...
  5. 您没有使用 corect size_t 类型作为索引。
  6. 你忘记初始化了max
  7. 等等

我建议您使用 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);
}

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

#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;
 }