Arrays en C
Arrays en C
Arrays en C
TIPOS DE DATOS
COMPUESTOS
ESTTICOS EN C
Ing. Karina Esquivel Alvarado
INTRODUCCIN:
En
la
prctica
es
frecuente
que
enfrentemos problemas cuya solucin
sera
muy
difcil
de
hallar
si
utilizramos tipos simples de datos
para resolverlos. Es decir, datos que
ocupan una sola casilla de memoria.
DEFINICIN DE ARRAY:
Siendo:
tipo: El tipo de los elementos que conformarn el array.
nombreArray: El nombre de nuestro array .
numerodeElementos: Un nmero entero mayor que cero que indica el
tamao del array.
Ejemplos de declaracin
int datos[45];
enteros */
char caracteres[15];
float valores[20];
coma flotante*/
de arrays:
/* Declara
un
array
de
45
elementos
en
SUBNDICES DE UN ARRAY:
a
a
a
a
numeros[0]
numeros[1]
numeros[2]
numeros[3]
[0]
[1]
[2]
[3]
\0
INICIALIZACIN DE UN ARRAY
Pueden asignarse valores a un array utilizando un bucle for,
while o do-while y ste suele ser el sistema ms empleado
normalmente.
Ejemplo #3: Programa en C que, al recibir como dato un arreglo
unidimensional de tipo entero de N elementos, determina si el
arreglo es palndrome.
#include<stdio.h>
int main()
{
int numd=0,alto=0,d,ndatos,longarray;
printf("Cuantos datos?");
scanf("%d",&ndatos);
int palindro[ndatos];
for(d=0;d<ndatos;d++)
scanf("%d",&palindro[d]);
longarray=ndatos-1;
while((numd<ndatos) && !alto)
{
if(palindro[numd] != palindro[longarray])
alto=1;
numd++;
longarray--;
}
if(!alto)
printf("El array es PALINDROMO\n");
else
printf("El array NO es PALINDROMO\n");
return 0;
}
Ejemplo #4: Programa en C que lea en un arreglo las marcas
obtenidas por N corredores en una carrera e imprimir cuntos tienen
una marca mayor y cuntos tienen una marca menor que el promedio.
Solucin en Pseudocdigo:
Proceso marca
Dimension marcascorredor[10];
m<-0;
menorprom <-0;
mayorprom <- 0;
sumamarc <- 0;
que
el
que
el
Programa en C:
#include <stdio.h>
int main(int argc, char *argv[])
{
int marcascorredor[10],mc=0,menorprom=0,mayorprom=0;
int sumamarc =0,promediomarc,m=0;
while(m<10)
{
printf("Marca del corredor[%d]:",m+1);
scanf("%d",&marcascorredor[m]);
sumamarc = sumamarc + marcascorredor[m];
m++;
}
promediomarc = sumamarc/m;
for(mc=0;mc<=9;mc++)
{
if (marcascorredor[mc]>promediomarc)
mayorprom++;
if (marcascorredor[mc]<promediomarc)
menorprom = menorprom +1;
}
printf("Hay %d corredores con marca MAYOR que el PROMEDIO =
%d\n",mayorprom,promediomarc);
printf("Hay %d corredores con marca MENOR que el PROMEDIO =
%d\n",menorprom,promediomarc);
return 0;
}
10
11
12
ARRAYS MULTIDIMENSIONALES
13
Ejemplos:
int tabla [2] [3] = {51, 52, 53, 54, 55, 56};
O bien:
int tabla [2] [3] = {{51, 52, 53},
int tabla [2] [3] =
{
{51, 52, 53},
{54, 55, 56}
};
14
para
asignacin
directa
de
valores
los
Insercin de elementos:
<Nombre array> [ndice fila] [ndice columna] = valor elemento;
Extraccin de elementos:
<Variable> = <nombre array> [ndice fila] [ndice columna];
15
16
17
Programa en C:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int f,c,fil,col,indice;
printf("NUMERO DE FILAS: ");
scanf("%d",&fil);
printf("NUMERO DE COLUMNAS: ");
scanf("%d",&col);
int matriz[fil][col];
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
indice=f+c;
if(indice%2 == 0)
matriz[f][c]=0;
if(indice%2 != 0)
matriz[f][c]=1;
printf("%d ",matriz[f][c]);
}
printf("\n");
}
return 0;
}
Ejemplo #5: Programa en C que lee una matriz de n filas por m
columnas y calcula e imprime el producto de la diagonal principal y
la suma de la diagonal secundaria.
#include<stdio.h>
int main()
{
int f,c,fil,col,suma_ds=0,prod_dp=1;
printf("NUMERO DE FILAS: ");
scanf("%d",&fil);
col=fil;
int diagonales[fil][col];
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
printf("Elemento[%d][%d]: ",f,c);
scanf("%d",&diagonales[f][c]);
18
//Diagonal Principal
if((f+c)==(fil-1))
suma_ds+= diagonales[f][c];
//Diagonal Secundaria
if(f==c)
prod_dp *= diagonales[f][c];
}
}
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
printf("%d ",diagonales[f][c]);
}
printf("\n");
}
printf("\nEl producto de la DIAGONAL PRINCIPAL es: %d\n",prod_dp);
printf("\nLa suma de la DIAGONAL SECUNDARIA es: %d\n",suma_ds);
return 0;
}
Ejemplo #6: Pseudocdigo y programa en C que lee una matriz de N
filas y M columnas de valores enteros. A continuacin, debe pedir
el nmero de una fila (Recuerde validar dicho dato). El programa
devuelve el mayor elemento de esa fila.
Proceso ElementoMayorFila
Definir matriz_ejemplo,fila,columna,fil,col,may,posfil,c
entero;
Escribir "Filas: ";
Leer fil;
Escribir "Columnas: ";
Leer col;
Escribir fil,col;
como
Dimension matriz_ejemplo[fil,col];
Para
19
20
for(c=0;c<col;c++)
{
if(matriz_ejemplo[posfil][c]>may)
may=matriz_ejemplo[posfil][c];
}
printf("El
mayor
elemento
de
la
%d\n",posfil,may);
fila
#%d
es:
}
else
printf("Numero de fila invalido\n");
return 0;
}
P
r
o
g
r
a
m
a
c
i
o
n
Array de Caracteres
Cadena[0]
Cadena[1]
Cadena[2]
Cadena[3]
Cadena[4]
Cadena[5]
Cadena[6]
Cadena[7]
Cadena[8]
Cadena[9]
Cadena[10]
Cadena[11]
P
r
o
g
r
a
m
a
c
i
o
n
Carcter
Cadena[12] \0 Nulo
Cadena
21
Cadena
La asignacin de
siguiente:
Cadena[0]= P'
Cadena[1]= r'
Cadena[2]= o'
Cadena[3]= g'
Cadena[4]= r'
Cadena[5]= a'
Cadena[6]= m'
Cadena[7]= a'
Cadena[8]= c'
Cadena[9]= i'
Cadena[10]= o'
Cadena[11]= n'
Cadena[12]= \0'
valores
Cadena
n \0
se
puede
hacer
del
modo
22
23
24
%d
letras
<stdio.h>
<string.h>
<stdlib.h>
<ctype.h>
25
int main(void)
{
char cad[10],r;
int i=0;
float sum=0.0;
printf("\nDesea ingresar una cadena de caracteres?");
r=getchar();
while(toupper(r) =='S')
{
printf ("\nIntroduce una cadena de caracteres: ");
fflush(stdin);
gets(cad);
i++;
sum += atof(cad);
printf("\nDesea ingresar otra cadena de caracteres(S/N)?
");
r = getchar();
}
printf("\nSuma = %.2f\n",sum);
printf("\nPromedio = %.2f\n",(sum/i));
return 0;
}
Ejemplo de Salida:
26
char cadena[MAXLON+1];
int i, longitud,contmin=0,contmay=0;
printf ("Introduce una cadena (max. %d caracteres.): ",
MAXLON);
gets(cadena);
longitud = strlen(cadena);
for (i = 0; i < longitud ; i++)
{
if (cadena[i] =='a' || cadena[i] == 'e' || cadena[i] ==
'i' || cadena[i] == 'o' || cadena[i] == 'u')
contmin++;
if (cadena[i] =='A' || cadena[i] == 'E' || cadena[i] ==
'I' || cadena[i] == 'O' || cadena[i] == 'U')
contmay++;
}
printf ("***Hay %d Vocales Minusculas***\n", contmin);
printf ("***Hay %d Vocales Mayusculas***\n", contmay);
return 0;
}
Ejemplo #6: Programa para leer una lista de cadenas de caracteres,
y encuentra la cadena de mayor longitud sin utilizar la funcin
strlen e imprime la cadena y el nmero de caracteres de la misma.
#include <stdio.h>
#include <string.h>
int main()
{
int i, n,cadmay=-1,posmay=0,ncar=0;
char cad[50],frase[20][50];
printf("Cuantas cadenas desea leer? ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Cadena[%d]: ",i+1);
fflush(stdin);
gets(frase[i]);
}
for(i=0;i<n;i++)
{
ncar=0;
strcpy(cad,frase[i]);
while(cad[ncar]!='\0')
{
ncar++;
}
27
if(ncar>cadmay)
{
cadmay=ncar;
posmay=i;
}
}
printf("\nLa cadena No.%d: %s es la que tiene mayor longitud
con %d caracteres\n",posmay+1,frase[posmay],cadmay);
return 0;
}
Ejemplo de Salida:
28
EJERCICIOS PROPUESTOS:
1. Realice un programa en C que declare y lea un arreglo de N
elementos, imprimir la suma de los nmeros pares y el producto
de los nmeros impares del arreglo.
2. Escriba un programa que lee dos vectores A y B de 20 elementos
cada uno y multiplica el primer elemento de A por el ltimo de
B y as sucesivamente hasta llegar al ltimo elemento de A por
el primero elemento de B. El resultado de la multiplicacin
se almacena en un vector C.
3. Realice un programa en C que lea un arreglo de N datos
asigne a sus elementos los valores 1, 4, 9, 16........etc
12, 22, 32...).
y
(
29
BIBLIOGRAFA BSICA:
30