Ejercicios Resueltos de Programación en C: Algoritmos y Estructuras de Datos

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 21,03 KB

Conjunto de Ejercicios 1: Fundamentos de Programación en C

  1. 1. Determinación de Números Pares o Impares

    Determinar si un número entero dado cualquiera es par o impar.

    Procedimiento: void evaluarnumero(int numero)

    void evaluarnumero (int numero)
    {
        if ((numero % 2) == 0)
            printf("\n El número es par");
        else
            printf("\n El número es impar");
    }
    
    int main ()
    {
        int numero;
        printf("Introduzca el número a evaluar: ");
        scanf("%i", &numero);
        evaluarnumero(numero);
        getch();
        return 0;
    }

    Función: float CN(int numero)

    float CN (int numero)
    {
        if ((numero % 2) == 0)
            return 0;
        else
            return 1;
    }
    
    int main ()
    {
        int numero;
        printf("Introduzca el número a evaluar: ");
        scanf("%i", &numero);
        if (CN(numero) == 0)
        {
            printf("El número es par \n ");
        }
        else
        {
            printf("El número es impar");
        }
        system("PAUSE");
        return 0;
    }
  2. 2. Algoritmo de Escrutinio Electoral Estudiantil

    Desarrolle un algoritmo que obtenga el resultado (escrutinio) de las elecciones para elegir el secretario o representante estudiantil a Consejo Directivo. Considerar que hay 3.000 electores (estudiantes), y se han postulado tres (3) candidatos. La abstención del proceso de votación fue de 0%. El algoritmo debe declarar al ganador por mayoría simple.

    Procedimiento: void votacion(int a, int b, int c, int gan, int anapappa)

    void votacion(int a, int b, int c, int gan, int anapappa)
    {
        anapappa = a + b + c;
        if (anapappa != 3000)
        {
            printf("\n Error en el número de votantes");
        }
        else
        {
            if (a > b && a > c)
            {
                printf("\n El ganador es el candidato 1");
            }
            if (c > b && c > a)
            {
                printf("\n El ganador es el candidato 3");
            }
            if (b > a && b > c)
            {
                printf("\n El ganador es el candidato 2");
            }
            if (b == a && b == c)
            {
                printf("\n Hubo un empate");
            }
        }
    }
    
    int main()
    {
        int a, b, c, gan, anapappa;
        printf("Inserte la cantidad de votos que obtuvo el candidato 1: ");
        scanf("%i", &a);
        printf("Inserte la cantidad de votos que obtuvo el candidato 2: ");
        scanf("%i", &b);
        printf("Inserte la cantidad de votos que obtuvo el candidato 3: ");
        scanf("%i", &c);
        votacion(a, b, c, gan, anapappa);
        getch();
        return 0;
    }

    Procedimiento por Referencia: void votacion(float *a, float *b, float *c, float *gan, float *anapappa)

    void votacion(float *a, float *b, float *c, float *gan, float *anapappa)
    {
        anapappa = *a + *b + *c;
        if (anapappa != 3000)
        {
            printf("\n Error en el número de votantes");
        }
        else
        {
            if (*a > *b && *a > *c)
            {
                printf("\n El ganador es el candidato 1");
            }
            if (*c > *b && *c > *a)
            {
                printf("\n El ganador es el candidato 3");
            }
            if (*b > *a && *b > *c)
            {
                printf("\n El ganador es el candidato 2");
            }
            if (*b == *a && *b == *c)
            {
                printf("\n Hubo un empate");
            }
        }
    }
    
    int main()
    {
        float a, b, c, gan, anapappa;
        printf("Inserte la cantidad de votos que obtuvo el candidato 1: ");
        scanf("%i", &a);
        printf("Inserte la cantidad de votos que obtuvo el candidato 2: ");
        scanf("%i", &b);
        printf("Inserte la cantidad de votos que obtuvo el candidato 3: ");
        scanf("%i", &c);
        votacion(&a, &b, &c, &gan, &anapappa);
        getch();
        return 0;
    }

    Función: float votacion(float a, float b, float c, float gan, float anapappa)

    float votacion (float a, float b, float c, float gan, float anapappa)
    {
        anapappa = a + b + c;
        if (anapappa != 3000)
        {
            return 1;
        }
        else
        {
            if (a > b && a > c)
            {
                return 2;
            }
            if (c > b && c > a)
            {
                return 3;
            }
            if (b > a && b > c)
            {
                return 4;
            }
            if (b == a && b == c)
            {
                return 5;
            }
        }
    }
    
    int main()
    {
        int a, b, c, gan, anapappa;
        printf("Inserte la cantidad de votos que obtuvo el candidato 1: ");
        scanf("%i", &a);
        printf("Inserte la cantidad de votos que obtuvo el candidato 2: ");
        scanf("%i", &b);
        printf("Inserte la cantidad de votos que obtuvo el candidato 3: ");
        scanf("%i", &c);
        if (votacion(a, b, c, gan, anapappa) == 1)
        {
            printf("\n Error en el número de votantes");
        }
        if (votacion(a, b, c, gan, anapappa) == 2)
        {
            printf("\n El ganador es el candidato 1");
        }
        if (votacion(a, b, c, gan, anapappa) == 3)
        {
            printf("\n El ganador es el candidato 3");
        }
        if (votacion(a, b, c, gan, anapappa) == 4)
        {
            printf("\n El ganador es el candidato 2");
        }
        if (votacion(a, b, c, gan, anapappa) == 5)
        {
            printf("\n Hubo un empate");
        }
        system("PAUSE");
        return 0;
    }
  3. 3. Cálculo de Salarios con Aumento y Sumatoria Específica

    Escribir un algoritmo que lea el sueldo de Juan, Pedro y José. Luego aplique un aumento del 10, 12 y 15% respectivamente. Por último, despliegue la sumatoria de la mitad del triple de cada salario.

  4. 4. Cálculo del Día del Año para Fecha Dada

    Leer un número de mes y un día de dicho mes para un año no bisiesto. Luego calcular y mostrar el día del año correspondiente en la escala de 1 a 365.

  5. 5. Cálculo de la Media Aritmética de Números Pares

    Algoritmo que lea N números enteros cualesquiera y luego calcule y despliegue la media aritmética (promedio) de todos los números que sean pares.

  6. 6. Conteo de Dígitos de un Número (Usando Do-While)

    Algoritmo que lee un número y cuenta cuántos dígitos tiene. Usar Hacer/Mientras.

    Procedimiento: void M(int num, int contador)

    void M (int num, int contador)
    {
        num, contador = 1;
        while(num / 10 > 0)
        {
            num = num / 10;
            contador++;
        }
        printf("Tiene %i dígitos", contador);
    }
    
    int main()
    {
        int num, contador;
        printf("Escriba un número de varios dígitos: ");
        scanf("%d", &num);
        M(num, contador);
        getch();
        return 0;
    }

    Función: float votacion(float num, float contador)

    float votacion (float num, float contador)
    {
        contador = 1;
        while(num / 10 > 0)
        {
            num = num / 10;
            contador++;
        }
        return 1;
    }
    
    int main()
    {
        int num, contador;
        printf("Escriba un número de varios dígitos: ");
        scanf("%d", &num);
        printf("Tiene %i caracteres", contador);
        getch();
        return 0;
    }
  7. 7. Elevación de un Número a una Potencia

    Algoritmo que eleva un número X a una potencia Y, e imprime el resultado.

    Función: float votacion(float x, float y, float i, float potencia)

    float votacion (float x, float y, float i, float potencia)
    {
        i = 1;
        potencia = 1;
        while (i <= y)
        {
            potencia *= x;
            ++i;
        }
        return 0;
    }
    
    int main()
    {
        int x, y, i, potencia;
        printf ("Por favor, introduzca un número: ");
        scanf("%d", &x);
        printf ("Por favor, introduzca una elevación: ");
        scanf("%d", &y);
        votacion(x, y, i, potencia);
        printf("El resultado es: %d", potencia);
        system("PAUSE");
        return 0;
    }

    Procedimiento: void poten(int x, int y, int i, int potencia)

    void poten(int x, int y, int i, int potencia)
    {
        i = 1;
        potencia = 1;
        while (i <= y)
        {
            potencia *= x;
            ++i;
        }
        printf("El resultado es: %d", potencia);
    }
    
    int main()
    {
        int x, y, i, potencia;
        printf ("Por favor, introduzca un número: ");
        scanf("%d", &x);
        printf ("Por favor, introduzca una elevación: ");
        scanf("%d", &y);
        poten(x, y, i, potencia);
        system("PAUSE");
        return 0;
    }
  8. 8. Cálculo del Factorial de un Número

    Algoritmo que calcula el factorial de un número entero dado e imprime el resultado.

    int main()
    {
        int fac = 0;
        printf("Ingresa número para calcular el factorial: ");
        scanf("%d", &fac);
        int temp = fac - 1;
        int r = fac;
        while (temp >= 1)
        {
            r = r * temp;
            temp--;
        }
        printf("El factorial de %d es: %d ", fac, r);
        getch();
        return 0;
    }

Conjunto de Ejercicios 2: Funciones y Estructuras Avanzadas

  1. 1. Determinación de Números Primos

    Elabore una función que reciba en un parámetro un número entero y devuelva en otro parámetro si este número recibido es primo o no. Recuerde que un número primo es aquel que solamente se divide exactamente entre el mismo y la unidad.

    Función: int Evaluar(int Num)

    int Evaluar(int Num)
    {
        int I, N; N = 1;
        for (I = 2; I < Num; I++)
        {
            if (Num % 2 == 0)
            {
                N = 0;
                break;
            }
        }
        return N;
    }
    
    int main()
    {
        int Num;
        printf("Introduzca número a evaluar: ");
        scanf("%i", &Num);
        if (Evaluar(Num) == 1)
            printf("El número %i es primo", Num);
        else
            printf("El número %i es compuesto", Num);
    }
  2. 2. Generación de Patrones de Números Impares en Filas

    Desarrollar un programa que, utilizando una función, muestre en pantalla N filas de números naturales impares. N es el número de filas, se debe indicar por teclado. Ejemplo: 1, 13, 135.

    Procedimiento: void Filas(int F)

    void Filas (int F)
    {
        int I, Acu, Suma, Num;
        Suma = 0; Acu = 1;
        for(I = 0; I < F * 2; I++)
        {
            if(I % 2 != 0)
            {
                Suma = Suma * Acu;
                Suma = Suma + I;
                printf("\n%i", Suma);
                if(I + 2 < 10)
                    Acu = 10;
                if(I + 2 > Acu)
                    Acu = Acu * 10;
            }
        }
    }
    
    int main()
    {
        int F;
        printf("Introduzca el número de filas de impares deseadas: ");
        scanf("%i", &F);
        Filas(F);
    }
  3. 3. Cálculo del Promedio de N Números Enteros

    Mediante el uso de una función, escribir un programa que calcule el promedio de N números enteros dados cualesquiera. El resultado debe desplegarlo en el bloque del programa principal.

    Función: float Promedio(int N)

    Nota: El código proporcionado mezcla la lógica del cálculo de promedio con la validación de triángulos.

    float Promedio (int N)
    {
        int I, Num, A, B, C;
        float Suma, Media, Cont;
    
        int Analisis(int A, int B, int C)
        {
            if(A + B > C && B + C > A && A + C > B)
            {
                return 0;
            }
            else
            {
                return 1;
            }
        }
    
        printf("Introduzca los 3 lados del triángulo: ");
        scanf("%i %i %i", &A, &B, &C);
    
        if(Analisis(A, B, C) == 1)
        {
            printf("El triángulo planteado no cumple la desigualdad triangular, por lo tanto no existe");
        }
    
        if(Analisis(A, B, C) == 0)
        {
            Suma = 0; Cont = 0;
            for(I = 1; I <= N; I++)
            {
                printf("Introduzca el número a evaluar: ");
                scanf("%i", &Num);
                Suma = Suma + Num;
                Cont++;
            }
            Media = Suma / Cont;
            return Media;
        }
    }
    
    int main()
    {
        int N;
        printf("Introduzca la cantidad de números enteros a evaluar: ");
        scanf("%i", &N);
        printf("El promedio de los %i números introducidos es: %.2f", N, Promedio(N));
    }
  4. 4. Despliegue de Patrones Numéricos en Pirámide

    Mediante una función, desplegar en pantalla N números naturales, en la siguiente forma: 1, 23, 456.

    #include <stdio.h>
    
    int main()
    {
        int n, i, c, a = 1;
        printf("Indique la cantidad de niveles de la pirámide:\n");
        scanf("%d", &n);
        for (i = 1; i <= n; i++)
        {
            for (c = 1; c <= i; c++)
            {
                printf("%d ", a);
                a++;
            }
            printf("\n");
        }
        return 0;
    }
  5. 5. Cálculo del Área de un Triángulo (Fórmula de Herón)

    Elabore una subrutina que calcule el área de un triángulo mediante la fórmula: Área = √(p(p-a)(p-b)(p-c)). Para que el triángulo exista, debe cumplirse que p es el semiperímetro, p=(a+b+c)/2, siendo a, b, c los tres lados que deben ser todos positivos, y además que la suma de dos lados cualesquiera sea mayor que el otro lado.

    Función: float Area(float A, float B, float C)

    float Area (float A, float B, float C)
    {
        int F1, F2, P;
        P = (A + B + C) / 2;
        F1 = P * (P - A) * (P - B) * (P - C);
        F2 = sqrt(F1);
        return F2;
    }
    
    int main()
    {
        float A, B, C;
        printf("Introduzca los lados del triángulo: ");
        scanf("%f %f %f", &A, &B, &C);
        if(A > 0 && B > 0 && C > 0)
        {
            if(A + B > C && A + C > B && C + B > A)
            {
                printf("El área del triángulo es: %.2f", Area(A, B, C));
            }
            else
            {
                printf("El triángulo no cumple desigualdad triangular, por lo tanto no es un triángulo");
            }
        }
        else
        {
            printf("Los lados de un triángulo no pueden ser negativos");
        }
    }
  6. 6. Cálculo del Promedio de Números (Versiones Fija y Variable)

    Diseñar una función que calcule el promedio de varios números introducidos por el teclado. Hacer dos versiones, una para un número fijo de valores y otra para un número cualquiera de valores. El resultado debe desplegarlo en el bloque del programa principal.

  7. 7. Verificación de Números Armstrong (Erróneamente llamados Cubos Perfectos)

    Escriba una función con retorno que determine si un número es un número Armstrong de orden 3 (comúnmente llamado 'cubo perfecto' en este contexto, aunque la definición estándar de cubo perfecto es diferente). Un número Armstrong de orden 3 es aquel que la suma de sus dígitos elevados al cubo reproduce el mismo número. Ejemplo: 1³ + 5³ + 3³ = 153. En caso de serlo, retorne 1 o 0 si no lo es.

    Función: int Verificar(int Num)

    int Verificar(int Num)
    {
        int Suma, Digito, I, H, J; Suma = 0; H = Num;
        while (Num > 0)
        {
            J = 1; Digito = Num % 10;
            for(I = 1; I <= 3; I++)
            {
                J = J * Digito;
            }
            Suma = Suma + J;
            Num = Num / 10;
        }
        if (Suma == H)
            return 1;
        else
            return 0;
    }
    
    int main()
    {
        int Num;
        printf("Introduzca el número que se desea evaluar: ");
        scanf("%i", &Num);
        if(Verificar(Num) == 0)
            printf("El número no es cubo perfecto");
        else if(Verificar(Num) == 1)
            printf("El número es cubo perfecto");
    }
  8. 8. Suma de los N Primeros Números Primos

    Escriba una función VOID que obtenga la suma de los N primeros números primos. El resultado debe desplegarlo en el bloque del programa principal.

    Procedimiento: void procedimiento(int Cant, int *Total)

    void procedimiento(int Cant, int *Total)
    {
        int I, F, Cont = 0, J, H;
        F = 2;
        for(I = 1; I <= F; I++)
        {
            H = 0;
            for(J = 2; J < I; J++)
            {
                if(I % J == 0)
                {
                    H = 1;
                }
            }
            if(H == 0)
            {
                *Total = *Total + I;
                Cont++;
            }
            if(Cont == Cant)
            {
                break;
            }
            F++;
        }
    }
    
    int main()
    {
        int Cant = 0, Total = 0;
        printf("Introduzca la cantidad de primos que desea sumar: ");
        scanf("%i", &Cant);
        procedimiento(Cant, &Total);
        printf("El total es: %i", Total);
    }
  9. 9. Determinación de Números Capicúa

    Leer un número entero y determinar si el mismo es un número capicúa. Emplear una función con retorno (1 si es capicúa, 0 si no lo es).

    int Capicua(int Num)
    {
        int Cont, Y, digito, num, suma, J, I;
        suma = 0; Cont = 0; Y = Num;
        while(Y > 0)
        {
            Y = Y / 10;
            Cont = Cont + 1;
        }
        Y = Num;
        while (Y > 0)
        {
            digito = Y % 10;
            Y = Y / 10;
            for(J = 1; J < Cont; J++)
            {
                digito = digito * 10;
            }
            suma = suma + digito;
            Cont = Cont - 1;
        }
        if(suma == Num)
            return 1;
        else
            return 0;
    }
    
    int main()
    {
        int Num;
        printf("Introduzca el número a evaluar: ");
        scanf("%i", &Num);
        if (Capicua(Num) == 1)
            printf("El número es capicúa");
        else
            printf("El número no es capicúa");
    }
  10. 10. Clasificación de Triángulos por Lados

    Escribir una función con retorno para determinar si 3 números leídos desde el teclado forman un triángulo (retornar 1 si así lo fueran y 0 de no ser así), luego mediante una segunda función con retorno determinar si forman un triángulo equilátero (1), isósceles (2) o escaleno (3). Los valores que aparecen entre paréntesis son los valores a retornar.

    int triangulo(int A, int B, int C)
    {
        if(A == B && B == C)
        {
            return 1;
        }
        else if(((A == B && A != C)) || ((B == C && C != A)) || ((A == C && B != C)))
        {
            return 2;
        }
        else if(A != B && B != C && A != C)
        {
            return 3;
        }
    }
    
    int Evalua(int A, int B, int C)
    {
        if(A + B > C && A + C > B && B + C > A)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    int main()
    {
        int A, B, C;
        printf("Introduzca los lados del triángulo: ");
        scanf("%i %i %i", &A, &B, &C);
        if (Evalua(A, B, C) == 1)
        {
            if(triangulo(A, B, C) == 1)
                printf("El triángulo es equilátero.");
            else if(triangulo(A, B, C) == 2)
                printf("El triángulo es isósceles.");
            else if(triangulo(A, B, C) == 3)
                printf("El triángulo es escaleno.");
        }
        else if (Evalua(A, B, C) == 0)
        {
            printf("El triángulo no cumple desigualdad triangular, por lo tanto no existe.");
        }
    }

Ejercicios Adicionales

Cálculo de Promedios de Curso y Estudiantes

void calcula_curso(int e)
{
    float promedioc, sumac;
    int i, n;

    void calcula_estudiante(int n)
    {
        float sumae, promedioe, nota;
        int j;
        sumae = 0;
        for (j = 1; j <= n; j++)
        {
            printf("\nIntroduzca la nota: ");
            scanf("%f", &nota);
            sumae = sumae + nota;
        }
        promedioe = sumae / n;
        sumac = sumac + promedioe;
        printf("El promedio del estudiante es: %.1f ", promedioe);
    }

    sumac = 0;
    printf("Introduzca la cantidad de notas dadas: ");
    scanf("%i", &n);
    for (i = 1; i <= e; i++)
    {
        calcula_estudiante(n);
    }
    promedioc = sumac / e;
    printf("\nEl promedio del curso es: %f", promedioc);
}

int main()
{
    int e;
    printf("Introduzca el número de estudiantes en el curso: ");
    scanf("%i", &e);
    calcula_curso(e);
    getch();
    return 0;
}

Generación de una Lista de Números Primos

#include <stdio.h>

int main()
{
    int primos_por_mostrar, n, d;
    int es_primo;
    printf("Cuántos primos desea mostrar: ");
    scanf("%d", &primos_por_mostrar);
    n = 2;
    while (primos_por_mostrar > 0)
    {
        es_primo = 1;
        for (d = 2; d < n; ++d)
        {
            if (n % d == 0)
            {
                es_primo = 0;
                break;
            }
        }
        if (es_primo)
        {
            printf("%d ", n);
            primos_por_mostrar--;
        }
        n++;
    }
    printf("\n");
    return 0;
}

Ordenamiento de Cadenas (Números y Letras)

#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>

int main()
{
    char cad[10];
    char aux;
    int i, j;
    printf("Introduzca una cadena de números o letras: ");
    scanf("%s", &cad);
    for(i = 0; i < (strlen(cad) - 1); i++)
    {
        for(j = i + 1; j < strlen(cad); j++)
        {
            if(cad[j] < cad[i])
            {
                aux = cad[i];
                cad[i] = cad[j];
                cad[j] = aux;
            }
        }
    }
    printf("La cadena transformada queda: %s", cad);
    getch();
    return 0;
}

Entradas relacionadas: