Compartir entrada

lunes, 27 de mayo de 2013

25 ejercicios resueltos de arrays y registros en C

Durante el sexto capítulo del curso básico de C vimos la teoría de los arrays y los registros. Hace unos días dejé una tanda de 25 ejercicios para practicar.


25 ejercicios resueltos de arrays y registros en C
Foto tomada de freedigitalphotos.net
Pues como viene siendo habitual os dejo la solución de los mismos.

Realice un programa en C:

1. Que rellene un array con los 100 primeros números enteros y los muestre en pantalla en orden ascendente.

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

int main(void)
{
            int x,tabla[100];
           
            for (x=1;x<=100;x++)
            {
        tabla[x]=x;
    }
           
            for (x=1;x<=100;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

2. Que rellene un array con los 100 primeros números enteros y los muestre en pantalla en orden descendente.

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

int main(void)
{
            int x,tabla[100];
           
            for (x=1;x<=100;x++)
            {
        tabla[x]=x;
    }
           
            for (x=100;x>=1;x--)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

3. Que rellene un array con los números primos comprendidos entre 1 y 100 y los muestre en pantalla en orden ascendente.

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

int main(void)
{
            int x,cont,z,i,tabla[100];
           
            i=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        for (z=1;z<=x;z++)
        {
            if (x%z==0)
            {
               cont++;
            }
        }
       
        if (cont==2 || z==1 || z==0)
        {
         tabla[i]=x;
         i++;
        }
       
    }
           
            for (x=0;x<i;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

4. Que rellene un array con los números pares comprendidos entre 1 y 100 y los muestre en pantalla en orden ascendente.

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

int main(void)
{
            int x,cont,z,i,tabla[100];
           
            i=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        if (x%2==0)
        {
           tabla[i]=x;
           i++;
        }
    }
           
            for (x=0;x<i;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

5. Que rellene un array con los números impares comprendidos entre 1 y 100 y los muestre en pantalla en orden ascendente.

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

int main(void)
{
            int x,cont,z,i,tabla[100];
           
            i=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        if (x%2==1)
        {
           tabla[i]=x;
           i++;
        }
    }
           
            for (x=0;x<i;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

6. Que lea 10 números por teclado, los almacene en un array y muestre la suma, resta, multiplicación y división de todos.

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

int main(void)
{
            int x,tabla[10];
            int sum,res,mul,div;
           
            for (x=0;x<10;x++)
            {
        printf("Introduzca número\n");
        scanf("%d",&tabla[x]);
    }
           
            sum=tabla[0];
    res=tabla[0];
    mul=tabla[0];
    div=tabla[0];
           
            for (x=1;x<10;x++)
            {
        sum=sum+tabla[x];
        res=res-tabla[x];
        mul=mul*tabla[x];
        div=div/tabla[x];
    }
           
            printf("Suma: %d\n",sum);
            printf("Resta: %d\n",res);
            printf("Multiplicación: %d\n",mul);
            printf("División: %d\n",div);
           
    system("PAUSE");     
    return 0;
}

7. Que lea 10 números por teclado, los almacene en un array y los ordene de forma ascendente.

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

int main()
{
  float aux, numeros[10];
  int i,j,n=10;

  for (i=0;i<n;i++){
                    printf("Escriba un número");
                    scanf("%f",&numeros[i]);
      }

  for(i=0;i<n-1;i++)
  {
   for(j=i+1;j<n;j++)
   {
       if(numeros[i]<numeros[j])
       {
           aux=numeros[i];
           numeros[i]=numeros[j];
           numeros[j]=aux;
       }
   }
  }
 
  for (i=n-1;i>=0;i--){
      printf("%f\n",numeros[i]);
  }
     
  system("PAUSE");     
  return 0;
}

8. Que lea 10 números por teclado, 5 para un array y 5 para otro array distinto. Mostrar los 10 números en pantalla mediante un solo array.

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

int main()
{
  int aux, numeros1[5],numeros2[5],numeros3[10];
  int i,j;

  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros1[i]);
      }
     
  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros2[i]);
      }
 
 
  for(i=0;i<5;i++)
  {
   numeros3[i]=numeros1[i];
  }
 
  for(i=0;i<5;i++)
  {
   numeros3[5+i]=numeros2[i];
  }
 
  for (i=0;i<10;i++){
      printf("%d\n",numeros3[i]);
  }
     
  system("PAUSE");     
  return 0;
}

9. Que lea 5 números por teclado, los copie a otro array multiplicados por 2 y muestre el segundo array.

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

int main()
{
  int aux, numeros1[5],numeros2[5];
  int i,j;

  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros1[i]);
      }
     
  for(i=0;i<5;i++)
  {
   numeros2[i]=numeros1[i]*2;
  }
 
  for (i=0;i<5;i++){
      printf("%d\n",numeros2[i]);
  }
     
  system("PAUSE");     
  return 0;
}

10. Que lea 5 números por teclado, los copie a otro array multiplicados por 2 y los muestre todos ordenados usando un tercer array.

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

int main()
{
  int aux, numeros1[5],numeros2[5],numeros3[10];
  int i,j;

  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros1[i]);
      }
     
  for(i=0;i<5;i++)
  {
   numeros2[i]=numeros1[i]*2;
  }
 
  for(i=0;i<5;i++)
  {
   numeros3[i]=numeros1[i];
  }
 
  for(i=0;i<5;i++)
  {
   numeros3[5+i]=numeros2[i];
  }
 
  for (i=0;i<10;i++){
      printf("%d\n",numeros3[i]);
  }
     
  system("PAUSE");     
  return 0;
}

11. Que rellene un array con los 100 primeros números pares y muestre su suma.

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

int main(void)
{
            int x,cont,sum,i,tabla[100];
           
            i=0;
            sum=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        if (x%2==0)
        {
           tabla[i]=x;
           i++;
        }
    }
           
            for (x=0;x<i;x++)
            {
        sum=sum+tabla[x];
    }
   
    printf("%d\n",sum);
           
    system("PAUSE");     
    return 0;
}

12. Que lea 10 números por teclado, los almacene en un array y muestre la media.

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

int main()
{
  float sum, numeros1[10];
  int i;

  sum=0;
  for (i=0;i<10;i++){
                    printf("Escriba un número");
                    scanf("%f",&numeros1[i]);
      }
     
  for(i=0;i<10;i++)
  {
   sum=sum+numeros1[i];
  }
 
  printf("%f\n",sum/10);
     
  system("PAUSE");     
  return 0;
}

13. Que mediante un array almacene números tanto positivos como negativos y los muestre ordenados.

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

int main()
{
  float aux, numeros[10];
  int i,j,n=10;

  for (i=0;i<n;i++){
                    printf("Escriba un número");
                    scanf("%f",&numeros[i]);
      }

  for(i=0;i<n-1;i++)
  {
   for(j=i+1;j<n;j++)
   {
       if(numeros[i]<numeros[j])
       {
           aux=numeros[i];
           numeros[i]=numeros[j];
           numeros[j]=aux;
       }
   }
  }
 
  for (i=n-1;i>=0;i--){
      printf("%f\n",numeros[i]);
  }
     
  system("PAUSE");     
  return 0;
}

14. Que rellene un array con 20 números y luego busque un número concreto.

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

int main(int argc, char *argv[])
{

    int  i,x=0,vector[20], n=20, dato, centro,inf=0,sup=n-1;
  
    for (i=0;i<20;i++){
        printf("Escriba un número");
        scanf("%d",&vector[i]);
    }
  
    printf("Escriba el número a buscar");
    scanf("%d",&dato);
  
    while(inf<=sup)
    {
     centro=(sup+inf)/2;
     if (vector[centro]==dato)
     {
        printf("Existe\n");
        x=1;
        break;
     } 
     else if(dato < vector [centro] )
     {
        sup=centro-1;
     }
     else
     {
       inf=centro+1;
     }
    }
   
    if (x==0)
    {
       printf("No existe\n");     
    }
  
    system("PAUSE");     
    return 0;

}

15. Que pinte un tablero de ajedrez, los peones con la letra P, las torres con T, los caballos con C, los alfiles con A, el rey con R y la reina con M.

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

int main(int argc, char *argv[])
{

    int x,y;
   
    for (x=0;x<8;x++)
    {
        for (y=0;y<8;y++)
        {
            //peones
            if (x==1 || x==6)
            {
             printf("P");
            }
            //torres
            else if ((x==0 && y==0) ||
                    (x==7 && y==0) ||
                    (x==0 && y==7) ||
                    (x==7 && y==7)
                    )
            {
             printf("T");
            }
            //caballos
            else if ((x==0 && y==1) ||
                    (x==7 && y==1) ||
                    (x==0 && y==6) ||
                    (x==7 && y==6)
                    )
            {
             printf("C");
            }
            //alfiles
            else if ((x==0 && y==2) ||
                    (x==7 && y==2) ||
                    (x==0 && y==5) ||
                    (x==7 && y==5)
                    )
            {
             printf("A");
            }
            //reina
            else if ((x==0 && y==3) ||
                    (x==7 && y==3)
                    )
            {
             printf("M");
            }
            //rey
            else if ((x==0 && y==4) ||
                    (x==7 && y==4)
                    )
            {
             printf("R");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
   
    system("PAUSE");     
    return 0;

}

16. Que muestre los primeros 100 números de izquierda a derecha usando un array de dos dimensiones.

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

int main(int argc, char *argv[])
{

    int x,y, numeros[10][10];
   
    for (x=0;x<10;x++)
    {
        for (y=0;y<10;y++)
        {
            numeros[x][y]=(x*10)+1+y;
        }
       
    }
   
    for (x=0;x<10;x++)
    {
        for (y=0;y<10;y++)
        {
            printf("%d ",numeros[x][y]);
        }
        printf("\n");
    }
   
    system("PAUSE");     
    return 0;

}

17. Que muestre los primeros 100 números de izquierda a derecha usando un array de dos dimensiones, la última fila a mostrará la suma de sus respectivas columnas.

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

int main(int argc, char *argv[])
{

    int x,y,sum, numeros[11][10];
   
    for (y=0;y<10;y++)
    {
        sum=0;
        for (x=0;x<10;x++)
        {
            numeros[x][y]=(x*10)+1+y;
            sum=sum+numeros[x][y];
        }
        numeros[10][y]=sum;
    }
   
    for (x=0;x<11;x++)
    {
        for (y=0;y<10;y++)
        {
            printf("%d ",numeros[x][y]);
        }
        printf("\n");
    }
   
    system("PAUSE");     
    return 0;
}

18. Que rellene un array de dos dimensiones con números pares, lo pinte y después que pida una posición X,Y y mostrar el número correspondiente.

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

int main(int argc, char *argv[])
{

    int x,y,num=2, numeros[3][3];
   
    for (x=0;x<3;x++)
    {
        for (y=0;y<3;y++)
        {
            numeros[x][y]=num;
            num=num*2;
        }
    }
   
    printf("Introduzca coordenada x: ");
    scanf("%d",&x);
    printf("Introduzca coordenada y: ");
    scanf("%d",&y);
   
    printf("El número es: %d\n",numeros[x][y]);
   
    system("PAUSE");     
    return 0;
}

19. Que rellene una matriz de 3x3 y muestre su traspuesta (la traspuesta se consigue intercambiando filas por columnas y viceversa).

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

int main(int argc, char *argv[])
{

    int x,y,num=0, numeros[4][4];
   
    for (x=0;x<3;x++)
    {
        for (y=0;y<3;y++)
        {
            numeros[x][y]=num;
            num++;
        }
    }
   
    printf("El array original es: \n\n\n");
   
    for(x = 0;x < 3;x++)
    {
      for(y = 0;y < 3;y++)
      {
          printf("    %d     ", numeros[x][y]);
      }
      printf("\n\n\n");
    }
   
    printf("La traspuesta es: \n\n\n");
   
    for(x = 0;x < 3;x++)
    {
      for(y = 0;y < 3;y++)
      {
          printf("    %d     ", numeros[y][x]);
      }
      printf("\n\n\n");
    }
   
    system("PAUSE");     
    return 0;
}

20. Que lea una cadena y la muestre al revés.

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

int main(int argc, char *argv[])
{

    int indice,x;
    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0;x < 50;x++)
    {
      if (frase[x]=='\0')
      {
       indice=x;
       break;
      }
    }
   
    printf("La frase al reves es: \n\n");
   
    for(x = indice-1;x >=0;x--)
    {
      printf("%c",frase[x]);
    }
   
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

21. Que lea una cadena y diga cuantas vocales hay.

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

int main(int argc, char *argv[])
{

    int sum=0,x;
    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0;x < 50;x++)
    {
      switch (frase[x])
      {
           case 'a':
                sum++;
                break;
           case 'e':
                sum++;
                break;
           case 'i':
                sum++;
                break;
           case 'o':
                sum++;
                break;
           case 'u':
                sum++;
                break;            
           default:
                break;
      }
     
    }
   
    printf("\n\nEn la frase hay %d vocales\n\n",sum);
   
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

22. Que lea una cadena y diga cuantas mayúsculas hay.

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

int main(int argc, char *argv[])
{
    int sum=0,x;
    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0;x < 50;x++)
    {
      if (frase[x]>=65 && frase[x]<=90)
      {
       sum++;
      }
    }
   
    printf("\n\nEn la frase hay %d mayúsculas\n\n",sum);
   
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

23. Que lea una cadena y la encripte sumando 3 al código ASCII de cada carácter. Mostrar por pantalla.

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

int main(int argc, char *argv[])
{
    int sum=0,x;
    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0; x < 50;x++)
    {
      if (frase[x]!='\0')
      {
       frase[x]=frase[x]+3;
      }
    }
   
    printf("\n\nLa nueva frase es:\n\n",sum);
    printf("\n\n%s\n\n",frase);
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

24. Que gestione los datos de stock de una tienda de comestibles, la información a recoger será: nombre del producto, precio, cantidad en stock. La tienda dispone de 10 productos distintos. El programa debe ser capaz de:

    1. Dar de alta un producto nuevo.
    2. Buscar un producto por su nombre.
    3. Modificar el stock y precio de un producto dado.

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

struct producto {
    char nombre[50];
    float precio;
    int cantidad;
};

int main(int argc, char *argv[])
{
    struct producto prod,productos[10];
   
    int x,opcion=1;
   
    for (x=0;x<10;x++)
        {
            strcpy(productos[x].nombre,"X");
            productos[x].precio=0;
            productos[x].cantidad=0;
        }
   
    while ((opcion==1 || opcion==2 || opcion==3) && (opcion!=4))
    {
   
        printf("1- Alta de producto\n");
        printf("2- Buscar por nombre\n");
        printf("3- Modificar stock y precio\n");
        printf("4- Salir\n");
        printf("Introduzca una opción: ");
        scanf("%d",&opcion);
               
        if (opcion==1)
        {
           printf("Introduzca un nombre: ");
           gets(prod.nombre);
           gets(prod.nombre);
           printf("Introduzca un precio: ");
           scanf("%f",&prod.precio);
           printf("Introduzca un stock: ");
           scanf("%d",&prod.cantidad);
          
           for(x = 9; x >=0; x--)
           {
            if (x!=0)
            {
                strcpy(productos[x].nombre,productos[x-1].nombre);
                productos[x].precio=productos[x-1].precio;
                productos[x].cantidad=productos[x-1].cantidad;
            }
            else
            {
               strcpy(productos[x].nombre,prod.nombre);
               productos[x].precio=prod.precio;
               productos[x].cantidad=prod.cantidad;
            }
           }
           printf("\nProducto creado. \n\n");
        }
        else if (opcion==2)
        {
           printf("Introduzca un nombre: ");
           gets(prod.nombre);
           gets(prod.nombre);

           for(x = 0; x < 10;x++)
           {
                
             if (strcmp(productos[x].nombre,prod.nombre)==0)
             {
               printf("\nNombre: %s\n",productos[x].nombre);
               printf("Precio: %f\n",productos[x].precio);
               printf("Cantidad en Stock: %d\n",productos[x].cantidad);
             }
           }
           printf("\n\n");
        }
        else if (opcion==3)
        {
           printf("Introduzca un nombre: ");
           gets(prod.nombre);
           gets(prod.nombre);

           for(x = 0; x < 10;x++)
           {
             if (strcmp(productos[x].nombre,prod.nombre)==0)
             {
               printf("Introduzca un precio: ");
               scanf("%f",&productos[x].precio);
               printf("Introduzca un stock: ");
               scanf("%d",&productos[x].cantidad);
               printf("\nProducto modificado.");
             }
           }
           printf("\n\n");
        }
    }
       
   
    system("PAUSE");     
    return 0;
}

25. Que gestiona las notas de una clase de 20 alumnos de los cuales sabemos el nombre y la nota. El programa debe ser capaz de:

    1. Buscar un alumno.
    2. Modificar su nota.
    3. Realizar la media de todas las notas.
    4. Realizar la media de las notas menores de 5.
    5. Mostrar el alumno que mejores notas ha sacado.
    6. Mostrar el alumno que peores notas ha sacado.

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

struct alumno {
    char nombre[50];
    float nota;
};

int main(int argc, char *argv[])
{
    struct alumno alum,alumnos[5];
   
    int x,opcion=1;
    float sum=0,cont=0,mejor,peor;
   
   
    for (x=0;x<5;x++)
    {
        printf("Introduzca nombre alumno:");
        gets(alumnos[x].nombre);
        gets(alumnos[x].nombre);
        printf("Introduzca nota:");
        scanf("%f",&alumnos[x].nota);
    }
   
    while ((opcion==1 || opcion==2 ||
            opcion==3 || opcion==4 ||
            opcion==5 || opcion==6) && (opcion!=7))
    {
   
        printf("1- Buscar un alumno\n");
        printf("2- Modificar nota\n");
        printf("3- Media de todas las notas\n");
        printf("4- Media de todas las notas inferiores a 5\n");
        printf("5- Alumno con mejores notas\n");
        printf("6- Alumno con peores notas\n");
        printf("7- Salir\n");
        printf("Introduzca una opción: ");
        scanf("%d",&opcion);
               
        if (opcion==1)
        {
           printf("Introduzca un nombre: ");
           gets(alum.nombre);
           gets(alum.nombre);
          
           for(x = 0; x < 5;x++)
           {
             if (strcmp(alumnos[x].nombre,alum.nombre)==0)
             {
               printf("\nNombre: %s\n",alumnos[x].nombre);
               printf("Nota: %f\n",alumnos[x].nota);
             }
           }
           printf("\n\n");
        }
        else if (opcion==2)
        {
           printf("Introduzca un nombre: ");
           gets(alum.nombre);
           gets(alum.nombre);

           for(x = 0; x < 5;x++)
           {
             if (strcmp(alumnos[x].nombre,alum.nombre)==0)
             {
               printf("Introduzca una nota: ");
               scanf("%f",&alumnos[x].nota);
               printf("\nNota modificada.");
             }
           }
           printf("\n\n");
        }
        else if (opcion==3)
        {
          sum=0;
          for(x = 0; x < 5;x++)
          {
             sum=sum+alumnos[x].nota;
          }
          printf("\nLa media de las notas es de: %f \n",(sum/5));
        }
        else if (opcion==4)
        {
          sum=0;
          cont=0;
          for(x = 0; x < 5;x++)
          {
             if (alumnos[x].nota<5)
             {
              sum=sum+alumnos[x].nota;
              cont++;
             }
          }
          printf("\nLa media de las notas inferiores a 5 es: %f \n",sum/cont);
        }
        else if (opcion==5)
        {
          mejor=0;
          for(x = 0; x < 5;x++)
          {
             if (alumnos[x].nota>mejor)
             {
              mejor=alumnos[x].nota;
              alum.nota=alumnos[x].nota;
              strcpy(alum.nombre,alumnos[x].nombre);
             }
          }
          printf("\nEl alumno con mejores notas es: %s \n",alum.nombre);
        }
        else if (opcion==6)
        {
          peor=10;
          for(x = 0; x < 5;x++)
          {
             if (alumnos[x].nota<peor)
             {
              peor=alumnos[x].nota;
              alum.nota=alumnos[x].nota;
              strcpy(alum.nombre,alumnos[x].nombre);
             }
          }
          printf("\nEl alumno con peores notas es: %s \n",alum.nombre);
        }
    }
       
   
    system("PAUSE");     
    return 0;
}

¿Qué os parecen los ejercicios?

 
Google+