Publicado el 11 de Junio del 2019
1.305 visualizaciones desde el 11 de Junio del 2019
379,2 KB
54 paginas
Creado hace 16a (26/03/2009)
Arrays
Programación en C
1
Índice
• Definición.
• Asignación.
• Arrays multidimensionales.
• Cadenas de caracteres - Strings.
• Funciones para el manejo de caracteres.
• Funciones para el manejo de strings.
Programación en C
2
Arrays - definición
• Un array es una estructura de datos que representa un
conjunto de variables del mismo tipo declaradas como una
sóla entidad.
• Un array tiene un tipo y tamaño:
– El tipo especifica el tipo de valor almacenado en cada elemento del
array.
– El tamaño o dimensión especifica cuántos elementos se almacenan
en el array. Los índices de un array en C empiezan en 0.
• Sintaxis de definición de arrays:
tipo_dato nombre_array[expresión_entera]; /*unidimensional*/
tipo_dato nomb_array[exp1] [exp2]...[expn]; /*multidimensional*/
Programación en C
3
Ejemplos de definición de arrays
int a[100]; /* Vector de 100 enteros */
char texto[80]; /* Cadena de 80 caracteres */
float vel_x[30]; /* Vector de 30 reales */
float vx[4][4]; /* Matriz de 4x4 reales */
int pto3d_t[10][10][10][10]; /* Matriz de
4 dimensiones (10 c/dim)de reales */
• Es habitual y recomendable la siguiente construcción:
#define DIMENSION 100
…
float vel_x[DIMENSION]; /* Vector de reales */
Programación en C
4
Arrays
• Cuando se define un array, el compilador separa un conjunto
de posiciones contiguas de memoria.
• El contenido inicial de un array es indefinido (valores basura).
• Ejm: int a[10];
elemento
dirección
contenido
a[0]
a[1]
a[2]
…..
a[9]
0F00
0F02
0F04
…..
0F12
Programación en C
5
Arrays - asignación
• Se pueden asignar valores a los elementos individuales del
array accediendo a cada elemento mediante el índice del
array.
• Ejm: int a[10];
elemento
dirección
contenido
a[0] = 1;
a[1] = 5;
a[2] = 120;
....
a[0]
a[1]
a[2]
…..
a[9] = a[2] + a[1];
a[9]
0F00
0F02
0F04
…..
0F12
1
5
120
121
Programación en C
6
Arrays – definición e inicialización
• Los arrays pueden inicializarse en el momento de su
definición.
• Ejm:
dimensión = 10
int a[ ] = { 1, 2, 5, 3, 4, 10, 8, 9, 7, 10 };
float x[ 6 ] = { 0, 0.32, 1.414, 2.7172, 3.1415, 5.4 };
char color[ 4 ] = { ‘R’, ‘O’, ‘J’, ‘O’ };
• Es un error colocar más elementos que los de la dimensión
del array. Si se colocan menos elementos, los demás
elementos se inicializan a cero.
• Si un array no se dimensiona y se inicializa durante su
definición, el compilador le asigna una dimensión según el
número de elementos iniciales.
Programación en C
7
Arrays multidimensionales
• Un array multidimensional se define con corchetes
consecutivos. La forma general de su definición es:
tipo_dato nombre_array[dim1][dim2]. . .[dimN];
• Un array multidimensional se almacena como una
secuencia de elementos unidimensionales. Se
considera como un array de arrays.
• Si asignan valores en la definición ésta se realiza
variando el último índice más rapidamente.
• Ejm:
int matriz[ 2 ][ 3 ] = { { 0, 1, 2}, { 3, 4, 5} };
Programación en C
8
Ejemplo 1: frecuencia de ocurrencia dígitos
/************************************************************************\
* Programa: frec_ocurr_digitos.c
*
* Descripción: Prog. que cuenta la frecuencia de ocurrencia de digitos *
* Autor: Pedro Corcuera
*
* Revisión: 1.0 2/02/2008 *
\************************************************************************/
#include <stdio.h>
main()
{
int c,i;
int ndigit[10] = { 0}; /* Inicializacion express del array */
printf ("Escribe numeros y pulsa Enter. Para terminar Ctrl-Z Enter\n");
while ((c=getchar())!=EOF)
if (c>='0' && c<='9') /* Si c es un digito */
++ndigit[c-'0']; /* incrementa el contador del digito c-’0’ */
printf("Frecuencia de ocurrencia de digitos \n");
for (i=0; i<10 ; ++i)
printf(" %d = %d\n", i, ndigit[i]);
return 0;
}
Programación en C
9
Ejemplo 2: adivina números
/************************************************************************\
* Programa: busq_binaria.c
*
* Descripción: Prog. que genera N numeros random y permite que el *
* usuario adivine si esta un numero. Ordena por burbuja *
* y usa busqueda binaria
\************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
*
#define N 10
main()
{
int lista[N], num, encontrado;
int i, j, t;
int izq, der, mitad;
/* Crea lista de valores random entre 0 y 100.
rand() devuelve un numero random entre 0 y RAND_MAX */
srand( (unsigned)time( NULL ) ); /* semilla para random */
for( i = 0; i < N;i++ )
lista[i] = (float)rand()/RAND_MAX*100;
Programación en C
10
Ejemplo 2: adivina números
/* Ordenacion por metodo de burbuja para aplicar busqueda binaria */
for(i = N-1; i > 0 ; i--)
for(j = 0 ; j < i ; j++)
if (lista[j] > lista[j+1])
{ t = lista[j]; lista[j] = lista[j+1]; lista[j+1] = t; }
printf("He generado una lista de 10 numeros enteros entre 0 y 100.\n \
Adivina los numeros de la lista (Para terminar pulsar tecla no digito)\n");
while (scanf(" %d", &num)==1)
{
izq = 0; der = N-1; encontrado = 0;
while (izq <= der)
{
mitad = (izq + der)/2;
if (num < lista[mitad]) der = mitad - 1;
else if (num > lista[mitad]) izq = mitad + 1;
else {
encontrado = 1; printf(" %d si esta\n", num); /* elem. en lista */
break;
}
}
if (encontrado == 0) printf(" %d no esta\n", num); /* no encontrado */
}
return 0;
}
Programación en C
11
Cadenas de caracteres - Strings
• Un string es un tipo especial de array donde cada uno
de los elementos es un carácter.
• Ejm: /* declar. de un string de 10 caracteres */
char cadena[10];
• Cuando se asigna una cadena de caracteres a un
string se usa el caracter nulo '\0' para indicar el final
de la cadena.
• Toda cadena debe usar un elemento de su dimensión
para almacenar el caracter nulo, por tanto la
dimensión efectiva se reduce en uno.
Programación en C
12
Strings – Definición e inicialización
• Para inicializar un string durante su definición se usan
constantes de tipo cadena.
• Ejm:
char cad[6] = {'P','e','p','e',' ','\0'};
char cad[6] = “Pepe ”; /* con dimensión */
char cad[ ] = “Pepe ”; /* dimensión autom */
char n[] = “Chema”;
n
C
h
e
m
a
\0
n[0] n[1] n[2] n[3] n[4] n[5] Carácter
Programación en C
nulo
13
Asignación de Strings
• Los strings no pueden asignarse. Por tanto, la
asignación de strings por medio del operador (=) sólo
es posible en la definición e inicialización del string .
• Ejemplo:
char n[50]=“Chema”; /* Correcto */
n=“Otro nombre”; /* Error: no es posible */
• C dispone de una serie de funciones para manipular
strings, que se encuentran en la librería <string.h>
Programación en C
14
Lectura de Strings
• Mediante scanf() y gets(). Con sscanf() se lee desde un string.
• Ej:
#define MAX_STRING 128
…
char cadena[MAX_STRING];
float x; int n;
…
scanf(“%s”, cadena);
…
gets(cadena);
…
sscanf(cadena, “%f %d”, &x, &n); /* lee desde string */
Programación en C
15
Funciones para el manejo de caracteres
• Las funciones para el manejo de caracteres se encuentran en la librería
<ctype.h>
Función
Descripción*
Función
Descripción*
isalnum(c)
(A-Z o a-z) o (0-9)
isprint(c)
Imprimibles incluido ' '
isalpha(c)
(A - Z o a - z)
ispunct(c)
Signos de puntuación
isascii(c)
0 - 127 (0x00-0x7F)
isspace(c)
espacios, (0x09-0x0D,0x20).
iscntrl(c)
(0x7F o 0x00-0x1F)
isupper(c)
(A-Z)
isdigit(c)
(0 - 9)
isxdigit(c)
(0 to 9, A to F, a to f).
isgraph(c)
Imprimibles menos ' '
tolower(c)
convierte c a minúscula
islower(c)
(a - z)
toupper(c)
convierte c a mayúscula
* Las funciones que empiezan por is.. devuelven 1 si c está en el rango especificado
Programación en C
16
Funciones para el manejo de strings
• Las funciones para el manejo de cadenas de
caracteres se encuentran en la librería <string.h>
Función
Descripción
strcpy( s1, s2)
copia la cadena s2 en la cadena s1
strcat( s1, s2)
strcmp(s1, s2)
.
strlen(s)
strcoll(s1, s2)
añade la cadena s2 al final de s1
compara s1 y s2. dev: 0 si s1=s2, num.pos. si s1>s2,
num.neg si s1<s2.
devuelve número de caracteres en la cadena s.
idéntico a strcmp numero positivo.
strxfrm( s1, s2, n)
guarda en s1 los n caracteres comparados con s2
strncpy( s1, s2, n)
copia n caracteres de s2 en la cadena s1
Programación en C
17
Funciones para el manejo de strings
Función
Descripción
strncat( s1, s2, n)
añade n caracteres de s2 al final de s1
strncmp(s1, s2, n)
igual que strcmp pero con n caracteres de s2
strchr(s, c)
strrchr(s, c)
strstr(s1, s2)
busca el primer elemento de s igual a c
busca el último elemento de s igual a c
busca la secuencia s2 en s1
strspn(s1, s2)
busca el primer elemento de s1diferente de s2
strcspn(s1, s2)
busca el 1er elem. en s1 igual a alguno de s2
strpbrk(s1, s2)
busca el 1er elem. en s1 igual a alguno de s2
strtok( s1, s2)
similar a strpbrk, se usa para partir cadenas
strerror( errcode)
devuelve un puntero al mensaje con código errcode
Programación en C
18
Ejemplo1: frecuencia de ocurrencia letras
/************************************************************************\
* Programa: frecuencia_letras.c
*
* Descripción: Prog. que cuenta la frecuencia de ocurrencia de letras *
\************************************************************************/
#include <stdio.h>
#include <ctype.h>
#define N_LETRAS 27 /* incluye la ñ */
main()
{
int c,i, nletras[N_LETRAS] = { 0};
printf ("Introduce texto y pulsa Enter. Para terminar Ctrl-Z Enter\n");
while ((c=getchar())!=EOF)
if (isalpha(c)) {
if (isupper(c)) c = tolower(c);
++nletras[c-'a'];
}
else if (c == 164 || c == 165) ++nletras[26]; /* para la ñ */
printf("Frecue
Comentarios de: Arrays - Programación en C (0)
No hay comentarios