Нахождение наибольшего и минимального числа в массиве с функциями - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь написать программу на C, которая вычисляет минимальное и максимальное значение из введенных чисел. Мне удалось найти минимальное и максимальное значение, но по какой-то причине я не могу распечатать значения вне функции. Это мой код:

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

void find_largest_smallest(int a[], int n, int *largest, int *smallest)
{
    largest=smallest=a[0];
    int i;
    for(i=0; i<n; i++)
    {
        if (largest<a[i])
            largest=a[i];
    }


    for(i=0; i<n; i++)
    {
        //printf("%d\n", a[i]);
        if (smallest>a[i])
            smallest=a[i];
    }
    printf("Largest is %d\n", largest);
    printf("smallest is %d\n", smallest);
}

int main()
{
    int elem;
    int i;
    int *x;
    int *y;

    printf("How many elements you want to store ?:");
    scanf("%d", &elem);
    int store[elem];
    for(i=0; i<elem; i++)
    {
        printf("Enter a value to be stored:");
        scanf("%d", &store[i]);
    }

    find_largest_smallest(store, elem, &x, &y);

    printf("Largest value stored is %d and the smallest is %d.", *x, y);

    return 0;
}

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Это:

largest=smallest=a[0];

Неверно. Вы назначаете целое на указатель. Вместо этого вы должны сделать следующее:

*largest = a[0];
*smallest = a[0];

То же самое относится и к другим назначениям и читает:

if (*largest < a[i])
    *largest = a[i];

/* ... */

if (*smallest > a[i])
    *smallest = a[i];

/* ... */

printf("Largest is %d\n", *largest);
printf("smallest is %d\n", *smallest);

Объявление x и y в main должно быть просто int (не int *):

int x, y;

Вызов printf в main также неверен:

printf("Largest value stored is %d and the smallest is %d.", x, y);
//                         no asterisk needed here ----------^
1 голос
/ 30 сентября 2019

Параметры самого большого и самого маленького типа имеют указатели

void find_largest_smallest(int a[], int n, int *largest, int *smallest)
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^  

Таким образом, внутри функции вам нужно разыменовать указатели для доступа к указанным объектам.

Например

void find_largest_smallest(int a[], int n, int *largest, int *smallest)
{
    *largest = *smallest = a[0];
    int i;
    for ( i = 1; i<n; i++ )
    {
        if ( *largest<a[i] )
            *largest=a[i];
    }


    for ( i = 1; i<n; i++ )
    {
        //printf("%d\n", a[i]);
        if ( *smallest>a[i] )
            *smallest=a[i];
    }
    printf("Largest is %d\n", *largest);
    printf("smallest is %d\n", *smallest);
}

Обратите внимание, что вы можете найти самые большие и самые маленькие элементы, используя только одну петлю. Помимо этого функция должна вычислять указатели на самые большие и самые маленькие элементы вместо их значений, поскольку в общем случае пользователь может передать размер массива, равный 0. В этом случае функция будет иметь неопределенное поведение.

Такжевнутри main переменные x и y должны иметь тип int. Это

int x;
int y;

//...

printf("Largest value stored is %d and the smallest is %d.", x, y );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...