2017-01-14 8 views
-2

Мне нужно найти минимальное и максимальное значения в моем массиве вместе с их позициями; мой массив - это рандомизированные значения от 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; 
} 
+2

Это код из ада. – Inline

+0

Почему вы начинаете свой массив ** после ** искать max и min ??? – Stargateur

+0

Еще более любопытно записывать индекс max/min как 'location1 = j + 1;'. Лучше не путать подсчет людей с машинной индексацией - перевести это в точке ввода/вывода. –

ответ

1
  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; 
} 
0

У вас есть много выпуска:

  1. Вы делаете сумму своего массива рекурсивным, но это не хвост.
  2. Вам не проверить, если inputNum больше, чем SIZE
  3. используется ==, но это тест одинаково оператор не назначить оператору
  4. Вы инициализировать массив после использовать ...
  5. Вы надеваете» t используйте код 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); 
} 
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; 
} 
Смежные вопросы