Sie sind auf Seite 1von 35

ARREGLOS Y

REGISTROS
A la hora de desarrollar

aplicaciones necesitamos almacenar

una gran cantidad de

informacin,

estructuras que recojan

varios tipos de datos a la vez. C

cuenta

varias

herramientas para poder desarrollar

estas

funcionalidades.

con

todas
veremos

los Arrays

necesitamos

En

ste

tambin

captulo

simples y multidimensionales para

poder almacenar una cantidad determinada de datos de un mismo tipo, acceder a ellos en
cualquier momento y operar, tambin veremos los registros para poder trabajar con conjuntos de
variables.

Arrays
Un array, vector, tabla o arreglo es una cantidad de valores de un determinado tipo colocados
de manera secuencial e indexados, cuya forma de acceder a ellos es especificando la posicin
(o ndice) donde se encuentre dentro del array.
Declaracin.
Para declarar un array hay que seguir la siguiente estructura:
Tipo_dato nombre_variable [longitud_array];
El tipo de datos puede ser cualquier de los vistos anteriormente, por ejemplo, un array de 20
enteros sera as:
int num[20];
La declaracin es exactamente igual que cuando declaramos variables normales, salvo que hay
que aadir la longitud del array en cuestin.
Una cosa importante que hay que tener en cuenta a la hora de trabajar con arrays en C es que la
primera celda del array tiene el ndice 0, por lo que el array anterior tendra las siguientes
posiciones:
num[0], num[1], num[2], num[3], num[4], num[5], num[6] num[19].
En una misma fila de declaracin se pueden declarar tanto varios arrays a la vez como variables
normales.
int num1,num2,num3[10],num4,num5[5];
Tambin es posible declarar arrays prescindiendo del uso de nmeros para definir su tamao,
aunque es necesario que tengamos en cuenta ciertos factores:
1 Para declarar un array usando identificadores slo se podr usar constantes definidas
mediante #define.

#define TAM 50
int main(void)
{
int a[TAM];
}
2 No es correcto definir el tamao de un array con variables.
int main(void)
{
int tam=50;
int a[tam];
}
3 No es correcto definir el tamao de un array con constantes declaradas mediante const.
Esto es debido a que, a efectos del compilador, una constante declarada mediante const es una
variable de slo lectura.
int main(void)
{
const int tam=50;
int a[tam];
}
Asignacin de valores e iniciacin de un array.
Cuando se declara un array las celdas de ste contienen valores completamente aleatorios, es
necesario que le asignemos los valores con los que necesitamos trabajar, para esto hay varias
posibilidades.
Asignacin directa de un valor mediante el operador de asignacin =, hay que especificar
mediante su ndice la celda concreta donde se va a almacenar. En el array anterior sera tal que
as:
a[2] = 1;
Por lo general cuando comenzamos un programa se debe inicializar los valores de todo el array,
es decir, tendremos que asignar valores en todos sus ndices, para ello lo mejor es recorrer el array
completo mediante un bucle.
El bucle for es perfecto para trabajar con arrays puesto que al tener controlados todos los
elementos esenciales de un bucle podemos centrarnos en trabajar con el array directamente.
Un ejemplo de inicializacin de un array es el siguiente:
#include <stdio.h>
#define TAM 20
int main(void)
{
int x, a[TAM];
for (x = 0; x < TAM; x++)

{
a[x]=0;
}
return 0;
}
Tambin es posible inicializar un array en su propia declaracin, para ello debemos seguir la
siguiente estructura:
Tipo_dato nombre_variable [longitud_array] = {valor0, valor1... valor_longitud_array};
Un ejemplo prctico sera el siguiente:
int num[10] = {0,0,0,0,0,0,0,0,0,0}:
as nos aseguramos de que tenemos el array con valores definidos por nosotros desde el
principio del programa.
Recorrer un array.
Como hemos podido comprobar en el anterior apartado, un array se recorre mediante un bucle.
Se toma como primer valor el cero puesto que la primera celda tiene ndice cero, por lo tanto la
condicin para salir del bucle es el tamao menos uno. Si recorremos el array y nos pasamos, o
bien hacemos referencia a una celda fuera del rango del array el programa dar errores.
Veamos un ejemplo donde recorremos un array y mostramos su valor por pantalla:
#include <stdio.h>
#define TAM 5
int main(void)
{
int x,
int a[TAM] = {0,0,0,0,0};
for (x = 0; x < TAM; x++)
{
printf(%d,a[x]);
}
return 0;
}

Cadenas de texto o array de caracteres.


El tipo de dato String o Cadena no existe en C como tal, en lugar de eso lo que tenemos a
nuestra disposicin es el array de caracteres, la forma de tratarlo es exactamente igual que con los
arrays de otros tipos de datos a excepcin de muchas instrucciones, entre ellas printf y scanf.
Consideraciones del array de caracteres

Definir un array de caracteres es sencillo, exactamente igual que con los otros tipos de datos,
pero debemos tener en consideracin el trmino de la cadena.
En las variables de tipo entero todas las celdas del array se rellenan por defecto con valores
aleatorios, en los arrays de caracteres pasa igual. Al introducir o rellenar un array con
caracteres no es necesario que lo rellenos al completo, no obstante hay que indicar cuando
termina la cadena.
Para eso en C disponemos del carcter especial \0, con ste le diremos al programa que tenga en
cuenta dentro del array todos los caracteres hasta llegar al carcter \0.
El \0 cuenta como un carcter ms dentro del array y como tal ocupa una celda, es por eso que
si definimos un array de 50 caracteres en realidad slo podremos rellenar los primeros 49, ya que
siempre el carcter final es el \0.

H
H

O
A

A
Y

\0
\0

El carcter \0 no tenemos por qu introducirlo nosotros, el programa puede encargarse, con


que sepamos qu significa y cmo utilizarlo y controlarlo es suficiente.
Un truco para poder almacenar un nmero de caracteres en un array con el tamao de ese nmero
es definir el array con un tamao igual y sumar una posicin:
#define TAM 5
int main(void)
{
char a[TAM+1};
return 0;
}
Cadenas y printf
Para poder escribir un array de caracteres utilizamos la sentencia printf y la marca de formato
%s
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1] = "hola";
printf ("%s.\n", saludo);
return 0;
}
No es necesario utilizar los bucles y recorrer celda a celda, aunque se puede, resulta trabajoso
ya que a veces los arrays pueden ser bastante grandes.
Cadenas y scanf.

La instruccin scanf cumple con su cometido de leer una palabra, pero se presenta un
problema y es el que acabo de decir, slo lee una palabra, no una frase completa.
Pero a eso le daremos solucin en el siguiente apartado, ahora veamos cmo utilizar la
instruccin scanf:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1];
scanf(%s,saludo);
printf ("%s.\n", saludo);
return 0;
}
Como se puede observar no es necesario de nuevo recorrer el array, la instruccin hace posible
asignar los caracteres directamente en sus celdas.
Tambin si se observa el cdigo, en la instruccin scanf no he puesto un & delante del array,
esto es debido a que hasta ahora hemos usado el scanf con & porque lo que scanf necesita es
una direccin de memoria donde alojar el valor, cosa que hacamos con &, como los arrays son
en si mismos direcciones de memoria indexados no es necesario colocar el &.
Prueba el cdigo introduciendo la siguiente cadena Hola buenos das y observa el resultado.
Cadenas y gets.
Para solucionar el problema del scanf con el array de caracteres tenemos dentro de la librera
stdio.h la instruccin gets
Con gets no es necesario utilizar una marca de formato, tan slo con especificar el array es
suficiente, veamos un ejemplo:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1];
gets(saludo);
printf ("%s.\n", saludo);
return 0;
}
Prueba ahora el cdigo introduciendo de nuevo la cadena Hola buenos das y observa el
resultado.
Copiar cadenas.

El caso de necesitar hacer una copia de cadenas es una cosa que nos podemos encontrar
perfectamente en un programa, hasta ahora todo parece que se puede realizar perfectamente
mediante sentencias, por lo que copiar cadenas no debe ser muy distinto, veamos el siguiente
ejemplo:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1] = "hola";
char despedida[TAM +1];
despedida=saludo;
printf ("%s.\n", despedida);
return 0;
}
Esto es incorrecto, el compilador dar error y el programa no llegar ni a ejecutarse, esto es
debido a que, recordemos, las cadenas son arrays, y los arrays son direcciones de memoria que
una vez declarados no se pueden alterar, por lo que en el programa anterior lo que estaramos
intentando hacer es asignar la direccin de memoria de otra direccin de memoria.
La copia de cadenas debe realizarse carcter a carcter, asignando los valores uno a uno en
todas las posiciones implicadas, veamos el mismo ejemplo pero correctamente:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1] = "hola";
char despedida[TAM +1];
for (x=0;x<TAM;x++)
{
despedida[x]=saludo[x];
}
printf ("%s.\n", despedida);
return 0;
}
Esta es la forma correcta de copiar cadenas, no obstante se puede refinar un poco dado que
tenemos dos cadenas de 50 caracteres y realmente slo tenemos que copiar cuatro, para ello
introduciremos un condicional if para detectar el \0 y salir del bucle, veamos el resultado final:
#include <stdio.h>
#define TAM 50
int main(void)
{

char saludo[TAM +1] = "hola";


char despedida[TAM +1];
for (x=0;x<TAM;x++)
{
despedida[x]=saludo[x];
if (saludo[x]==\0)
{
break;
}
}
printf ("%s.\n", despedida);
return 0;
}
Esto se puede plantear de mltiples formas, podemos refinarlo de diferentes maneras,
controlando en algunos sitios o bien modificando las condiciones del bucle.

Arrays Multidimensionales.
Hasta ahora lo que hemos visto como array es una tabla de una columna y un nmero determinado
de filas, es posible ampliar todo esto bastante ms, para ello se utilizan los arrays
multidimensionales. De esta forma podemos trabajar con una tabla de filas y columnas a
determinar, pero eso no es todo, tambin podemos darle ms dimensiones al array.
Declaracin
Los arrays multidimensionales se declaran de la misma forma que los arrays normales, pero
por cada dimensin que queramos aadir debemos especificar igualmente su longitud.
int numeros [10][2];
int numeros [10][2][5];
Recorrer un array multidimensional.
Un array multidimensional se recorre de la misma forma que un array normal, mediante el bucle
for, pero al igual que en la declaracin debemos agregar tantos bucles como sean necesarios y
anidaarlos entre ellos.
Para los arrays anteriores sera as:
for (x=0;x<10,x++)
{
for (y=0;y<2,y++)
{
}
}
De sta forma recorremos de la siguiente forma: Primera fila, primera columna, segunda
columna, ... , segunda fila, primera columna, segunda columna, ... etc.
for (x=0;x<10,x++)

{
for (y=0;y<2,y++)
{
for (z=0;z<5,z++)
{
}
}
}
Aqu recorremos as: Primera fila, primera columna, primera celda, segunda celda, ... , primera
fila, segunda columna, primera celda, segunda celda, ... etc.
Todo lo que hemos visto en el apartado de arrays es completamente vlido para los arrays
multimensionales, no necesitan de mayores retoques.

Registros.
El ltimo punto de ste captulo es bastante interesante, imaginemos que necesitamos gestionar
los datos de una tienda de discos, sera necesario conocer varios datos como por ejemplo el
nombre del disco, el ao en que se puso a la venta o el gnero al que pertenece. Esto se puede
realizar perfectamente usando variables y arrays, pero hay ocasiones en las que es mejor agrupar
estos datos con el fin de poder acceder a todos ellos de una sola vez.
Imaginemos que queremos gestionar los datos de 100 discos de msica, es sencillo porque
utilizaremos tres arrays, uno para el nombre del disco, otro para el ao de publicacin y otro para el
gnero. Todo perfecto.
Ahora imaginemos que necesitamos buscar un disco en concreto y mostrar la informacin
completa del disco, del que slo sabemos el nombre. Buscamos en el primer array y lo
localizamos, tenemos el nombre, ahora busquemos en el segundo array el ao en que se public,
deberemos saber en qu posicin del array se encuentra, despus busquemos en el siguiente
array el gnero al que pertenece No es un poco engorroso esto?
Ahora un caso perfectamente posible, imaginemos que deseamos eliminar un disco, nos vamos
al array del nombre y lo eliminamos, despus al array de ao y luego al array de gnero,
nuevamente engorroso.
Ahora lo ltimo, imaginemos que nos hemos equivocado al programar y resulta que por un error
al eliminar el nombre del disco no hemos podido eliminar el ao y el gnero. El caos est servido.
En C disponemos de la posibilidad de declarar registros, esto son agrupaciones de datos de
cualquier tipo, accesibles mediante identificadores.
Usando un registro podemos agrupar los tres arrays anteriores en uno slo, y si queremos
realizar cualquier operacin la estaremos haciendo con un solo array, un array de registros.
La representacin de los tres arrays podra ser as:

Disco1
Disco2
Disco3

2000
1997
1999

La representacin de un array de registros podra ser as:

Pop
Rock
Pop

Disco1 2000 Pop


Disco2 1997 Rock
Disco3 1999 Pop
As lo tenemos mucho mejor verdad? La representacin de los datos mediante un array de
registros nos facilita operar con los datos y evitar mantenimientos incmodos y que de resultar
errneos podra ocasionar errores de datos muy graves.
Para definir un registro usaremos el siguiente esquema:
struct NombreRegistro {
variable1;
variable2;
variable3;
...
variableN;
};
Una vez lo hemos definido procedemos a declarar las variables basndonos en la estructura
siguiendo el siguiente esquema:
Struct NombreRegistro nombre_variable;
El registro lo definimos antes del programa principal (main), concretamente despus del
#define, y por consiguiente despus del #include, la declaracin de variables basadas en el
registro la podemos hacer en cualquier momento.
Tanto en las variables de la definicin como en la declaracin podemos usar arrays de cualquier
dimensin.
Veamos el caso del programa para gestionar discos:
#include <stdio.h>
#include <string.h>
#define TAM 100
#define TAMEST 50
struct Discos {
char nombre[TAMEST+1];
int anno;
char genero[TAMEST+1];
};
int main(void)
{
struct Discos misdiscos[TAM];
return 0;
}
Con esto habremos contemplado el caso que plantebamos, ahora tenemos un array de 100
registros donde gestionaremos nuestra coleccin de discos.

Para poder hacer referencia a una variable del registro tan slo debemos indicar su nombre de
la siguiente forma:
Discos.nombre
Discos.anno
Discos.genero
El tratamiento con respecto a los operadores es el mismo que con las variables, podemos
asignar valores, realizar operaciones, comparar, etc.
En el caso que nos ocupa, el de los discos, al tratarse de un array lo recorremos como ya hemos
visto y trabajaremos con las variables as:
Discos[x].nombre
Discos[x].anno
Discos[x].genero
Donde X es el ndice del array.

Ejercicios
resueltos de
arrays y
registros en C

1. Que rellene un array con los 100 primeros nmeros 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 nmeros 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 nmeros 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 nmeros 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 nmeros 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 nmeros por teclado, los almacene en un array y muestre la suma, resta, multiplicacin y
divisin 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 nmero\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("Multiplicacin: %d\n",mul);
printf("Divisin: %d\n",div);
system("PAUSE");
return 0;
}
7. Que lea 10 nmeros 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 nmero");
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 nmeros por teclado, 5 para un array y 5 para otro array distinto. Mostrar los 10 nmeros
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 nmero");
scanf("%d",&numeros1[i]);
}
for (i=0;i<5;i++){
printf("Escriba un nmero");
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 nmeros 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 nmero");
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 nmeros 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 nmero");

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 nmeros 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 nmeros 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 nmero");
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 nmeros 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 nmero");
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 nmeros y luego busque un nmero 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 nmero");
scanf("%d",&vector[i]);
}
printf("Escriba el nmero 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 nmeros 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 nmeros 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 nmeros pares, lo pinte y despus que pida una
posicin X,Y y mostrar el nmero 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 nmero 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

}
printf("\n\n\n");
}
system("PAUSE");

", numeros[y][x]);

return 0;
}
20. Que lea una cadena y la muestre al revs.
#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 maysculas 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 maysculas\n\n",sum);
printf("\n\n");
system("PAUSE");
return 0;
}
23. Que lea una cadena y la encripte sumando 3 al cdigo ASCII de cada carcter. 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 informacin 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 opcin: ");
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 opcin: ");
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;
}

- See more at: http://programavideojuegos.blogspot.com/2013/05/25-ejercicios-resueltos-de-arraysy.html#sthash.lnqRyV1l.dpuf

Das könnte Ihnen auch gefallen