Encontrar el mayor número de un vector/array en C

Esto es lo que tengo del vector, никакой se Комо мэр encontrar el número.

#include <stdio.h>
int main(int argc, char *argv[]) {
    int n;
    scanf("%i",&n);
    int vector[n];
    for(int i=0;i<n;i++){
            printf("vector[%i]\n\n\f ",i);
            scanf("%i",vector);
    }
return 0;
}
0
задан 12.11.2019, 13:37
1 ответ

Находить самого большего nГєmero vector/array в C

Прежде всего, у твоей программы есть недостаток в этой lГ-nea:

scanf("%i",vector);

то, что estГЎs посылая, та direcciГіn основание договоренности, а именно, в ningГєn момент estarГЎs наполняя вектор (в excepciГіn первого элемента).

Правильная форма serГ - в, таким образом:

scanf("%i",&vector[i]);

Таким образом, в каждом iteraciГіn, envГ-эксперте она direcciГіn памяти каждого элемента вектора и поэтому, вектора llenarГЎ правильно.

Относительно как находить самую большую стоимость вектора, алгоритм serГ - в:

  • Мы Объявляем две переменные, первую (его может быть int mayor) для того, чтобы он сохранял самую большую стоимость и вторую (его может быть int posMayor) для того, чтобы он хранил ее posiciГіn/Г-ndice самого большего элемента.

  • Потом, мы понимаем, что первый элемент вектора - самый больший (этот serГЎ стандартная настройка int mayor).

  • Мы Выполняем цикл, где в каждый iteraciГіn мы проверяем, algГєn становится ли элемент вектора превосходящим переменную int mayor, если выполняется ее condiciГіn, обновляем переменную, где мы сохраняем самую большую стоимость и tambiГ©n она posiciГіn.

cГіdigo quedarГ - в, таким образом:

#include<stdio.h>

int main(int argc, char *argv[]) 
{
    int mayor;
    int posMayor = 0;

    int n;
    scanf("%i",&n);
    int vector[n];

    for(int i=0;i<n;i++){
            printf("vector[%i]\n\n\f ",i);
            scanf("%i",&vector[i]);
    }

    mayor = vector[0];
    for(int i = 1; i < n; ++i)
    {
        if(vector[i] > mayor)
        {
            mayor = vector[i];
            posMayor = i;
        }
    }

    printf("El numero mayor fue: %d (indice: %d)\n", mayor, posMayor);
    return 0;
}

TambiГ©n я должен подчеркивать, что VLA (Переменная Ленгт Арраис) не являются рекомендуемым, должным, что, не возможно обнаруживать, если она asignaciГіn памяти sucediГі с Г©xito или нет. Поэтому razГіn, рекомендует использовать память dinГЎmica.

Используя ее funciГіn malloc мы можем создавать договоренность X элементов безопасной формы:

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

int main(int argc, char *argv[]) 
{
    int mayor;
    int posMayor = 0;
    int* vector;
    //Pedimos el tamaño del vector
    int n;
    scanf("%i",&n);
    //Reservamos memoria para crear el arreglo dinámico 
    vector = malloc(n * sizeof(int));
    if(vector == NULL)
    {
        printf("Error: Hubo una fallo al momento de asignar memoria!");
        return 1;
    }

    for(int i=0;i<n;i++){
            printf("vector[%i]\n\n\f ",i);
            scanf("%i",&vector[i]);
    }

    mayor = vector[0];
    for(int i = 1; i < n; ++i)
    {
        if(vector[i] > mayor)
        {
            mayor = vector[i];
            posMayor = i;
        }
    }

    printf("El numero mayor fue: %d (indice: %d)\n", mayor, posMayor);

    //Liberamos la memoria.
    free(vector);
    return 0;
}
3
ответ дан 01.12.2019, 12:10

Теги

Похожие вопросы