Está en la página 1de 24

Instituto Politcnico

Nacional

Departamento de Ciencias e Ingeniera de la Computacin

Escuela
Superior
Cmputo
Academia
de Ciencias de lade
Computacin
Autor: M. en C. Edgardo Adrin Franco Martnez

Algoritmia y
programacin
estructurada

Unidad IV Arreglos y tipos


estructurados
4.1

Arreglo unidimensional
Estructuras de datos (Prof. Edgardo A. Franco)

Introduccin
Arreglos unidimensionales
Lectura-escritura de elementos en
arreglos unidimensionales
Inicializacin de un arreglo

Tamao de un arreglo
Funcin Sizeof

Cadenas en C
Manejo de cadenas en C <string.h>
Prueba y manejo de caracteres en C
<ctype.h.h>

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Contenido

Un arreglo esttico es una coleccin


finita y constante (que no cambia su
tamao) de elementos del mismo tipo.
Un arreglo tambin es conocido como
vector, matriz o array.
Se
pueden
crear
arreglos
de
cualquier tipo de dato en C, es decir,
tipos de dato simple, estructurado,
archivos e incluso de apuntadores.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Introduccin

Se
conocen
dos
tipos
de
arreglos:
los
unidimensionales y los multidimensionales. Y al
igual que otra variable primero se debe declarar
antes de utilizarse.
Sintaxis para declarar un arreglo unidimensional:
<tipo_de_dato> identificador[tam_arreglo];

Cuando se declara un arreglo unidimensional o


multidimensional, se debe indicar el tamao de dicho
arreglo y este permanecer constante durante el ciclo
de vida del programa o de la funcin, es decir, no
podr cambiar su tamao de manera dinmica.
(Arreglos estticos)

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Arreglos unidimensionales

int arreglo[ 10 ];

Esta declaracin hace que el compilador


le indique al sistema operativo que
reserve
espacio
suficiente
para
almacenar 10 valores enteros.
En estos casos, cuando se declara un
arreglo el S.O. le asigna a dicho arreglo
una porcin consecutiva de memoria que
es mltiplo del tamao del tipo de dato
con el que se declaro el arreglo.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Por ejemplo:

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

int arreglo[ 10 ];

Cada tem del arreglo se le denomina


elemento del arreglo.
Todos los elementos que constituyen un
arreglo se numeran consecutivamente
comenzando en 0 hasta n-1 donde:
0: es el primer elemento del arreglo,
n-1: es el ultimo elemento del arreglo y
n: es el tamao total del arreglo.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Lectura-escritura de elementos
en arreglos unidimensionales

Tamao total del arreglo

Por ejemplo:
int arreglo[30];
int dato;
dato = arreglo[10];
arreglo[25] = 2344;

ndice o subndice
del arreglo
Se obtiene el valor
del elemento (10
+ 1)
Se modifica el valor del
elemento (25 + 1)

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

A los valores de 0 a n-1 se les denomina


ndices o subndices del arreglo, es
decir, un ndice o subndice nos ubica en
una posicin determinada dentro del
arreglo y nos permite tener acceso
directo al elemento de ese ndice, para
obtener su valor o para modificarlo,

Al igual que una variable local, un arreglo puede estar


previamente inicializado antes de usarlo, caso contrario el
arreglo contendr datos basura.
Existen diferentes formas de inicializar un arreglo:
1.
2.
3.
4.

int numeros[6] = { 10,20,30,40,50,60 };


int numeros[] = { 10,20,30 };
char cad[] = {h,o,l,a,\0};
char s[] = hola";

Cada elemento dentro de las llaves corresponde a un


elemento que se almacena en una localidad del arreglo.
Un caso especial es el de las comillas dobles cadenas ,
este tipo de inicializacin aplica solamente para arreglos
de caracteres y tambin significa que se est
inicializando dicho arreglo.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Inicializacin de un arreglo

Inicializar un arreglo de nmeros aleatorios


int i;
for( i = 0, i < 6, i++ )
{
numeros[i] = rand();
}

Inicializar un arreglo de con el abecedario


char i;
int h = 0;
for( i = a, i <= z, i++ )
{
letras[h] = i;
h++;
}

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Ejemplos

10

Para obtener saber el tamao de un


arreglo, se puede utilizar la funcin
sizeof(), esta funcin nos devolver el
numero de bytes reservados para el
arreglo completo.
Por ejemplo:
int arreglo[ 10 ];
int tamanio;
tamanio = sizeof( arreglo );

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Tamao en bytes de un
arreglo

11

sizeof() tambin sirve para darnos el tamao


de un tipo de dato en especifico o el tamao de
un elemento dentro del arreglo.
Por ejemplo:
int tamanio;
double a = 3.1455; float b = 3.084;
char c = e;
tamanio = sizeof( a );
tamanio = sizeof( b );
tamanio = sizeof( c );
tamanio = sizeof( tamanio );
tamanio = sizeof( arreglo[1] );

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Funcin Sizeof ( )

12

A diferencia de otros lenguajes de


programacin que emplean un tipo
denominado
cadena
string
para
manipular un conjunto de smbolos, en C,
se debe simular mediante un arreglo de
caracteres, en donde la terminacin de
la cadena se debe indicar con nulo con
valor 0.
char c [4];
char cad[5];

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Cadenas en C

13

Por ejemplo, si se quiere declarar un


arreglo cadena que guarde una cadena de
diez caracteres, se har como:
char cadena[11];

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Un nulo se especifica como '\0'. Por lo


anterior, cuando se declare un arreglo de
caracteres para ser usado como cadena,
se debe considerar un carcter adicional a
la cadena ms larga que se vaya a
guardar.

14

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Se pueden hacer tambin inicializaciones de


arreglos
de
caracteres
en
donde
automticamente C asigna el carcter nulo al
final de la cadena, de la siguiente forma:
char nombre_arr[ tam ]="cadena";
Por ejemplo, el siguiente fragmento inicializa
cadena con ``hola'':
char cadena[5]="hola";
El cdigo anterior es equivalente a:
char cadena[5]={'h','o','l','a','\0'};

15

operador & en el scanf paras el argumento, ya


que el nombre del arreglo es un apuntador
esttico
al arreglo), de igual forma para
#include
<stdio.h>

mostrarlo en la salida estndar.

int main(void)
{
char nombres[15], apellido[30];

printf("Introduce tu nombre(s): ");


scanf("%[^\n]",nombres); //Leer caracteres hasta fin de lnea
printf("Introduce tu apellido: ");
scanf("%s",apellido);
printf("Usted es %s %s\n",nombres,apellido); //Leer caracteres
hasta el primer espacio
return 0;
}

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Para asignar la entrada estndar a una


cadena se puede usar la funcin scanf
con la opcin %s (cadenas sin espacios)
%[^\n] (cadenas con espacios hasta el fin
de lnea) (observar que no se requiere usar el

16

char a[25];
printf("Ingresa tu nombre: ");
scanf("%24s",a); // 24 caracteres a tomar
printf("Tu nombre es: %s\n",a);
return 0;
}

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

El %s puede delimitar los caracteres a


considerar como mximos a tomar para
almacenar en una cadena. %24s indica
que 24 es la mxima cantidad de
caracteres que esperemos se ingresen
(uno menos que el tamao del
arreglo). Si se intenta ingresar ms de 24
sencillamente no los almacenar. Esta es
una
buena
#include
<stdio.h>costumbre cada vez que se
int main(void)
utiliza
scanf() para capturar cadenas.
{

17

#include <stdio.h>
int main(void)
{
char nombre[40], apellidos[40], completo[80];
nombre="Jos Mara";
// Asignaciones ilegales
apellidos="Morelos y Pavn";
completo="Gral."+ nombre + apellidos; // Operacin Ilegal

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

El lenguaje C no maneja cadenas de


caracteres, como se hace con enteros o
flotantes, por lo que lo siguiente no es
vlido:

return 0;
}

18

string.h es un archivo de la Biblioteca estndar que


contiene la definicin de macros, constantes,
funciones y tipos de utilidad para trabajar con cadenas
de caracteres.
Las funciones declaradas en string.h funcionan en
cualquier plataforma que soporte ANSI C. Sin
embargo, existen algunos problemas de seguridad con
estas funciones, como el desbordamiento de arreglos,
que hacen que algunos programadores prefieran
opciones ms seguras frente a la portabilidad que
estas funciones ofrecen. Adems, las funciones para
cadenas de caracteres slo trabajan con conjuntos de
caracteres ASCII o extensiones ASCII compatibles.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Manejo de cadenas en C
<string.h>

19

Adems, es importante preservar el


carcter de terminacin NULL \0, ya que
con ste es como C define y maneja las
longitudes de las cadenas.
Todas las funciones de la biblioteca
estndar para el manejo de cadenas de C
lo
requieren
para
una
operacin
satisfactoria.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Para poder utilizar las funciones del


manejo de cadenas, es necesario incluir la
biblioteca:
#include <string.h>

20

Las funciones de uso ms comn de


dicho archivo de cabecera son:
Nombre de la
funcin

Descripcin

strcat()

char* strcat (char* destino, const char* fuente)

strlen()

size_t strlen( const char* s )

Aade la cadena fuente al final de la destino.


Devuelve la cadena destino.
Devuelve la longitud de la cadena s

strncpy()

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Funciones para manipulacin de arreglos


de caracteres (Manipulacin de cadenas)

char* strncpy( char* dest, const char* fuente, size_t


n)

Copia n caracteres de la cadena fuente a la


cadena destino
strcpy()

char* strcpy( char* dest, const char* fuente)

Copia la cadena de caracteres de la cadena


fuente a la cadena destino

21

Descripcin

strncat()

char* strncat( char* s1, const char* s2, size_t


n)
Aade los primeros n caracteres de S2 a S1. Devuelve
s1 si n>=strlen(s2), entonces strncat tiene el mismo
efecto que strcat.

strchr()

char* strchr( const char* s1, int ch)


Devuelve un apuntador a la primera ocurrencia de ch en
s1, devuelve NULL si ch no se encuentra en s1.

strcmp()

int strcmp( const char* s1, const char* s2)


Compara alfabeticamente la cadena s1 con s2 y
devuelve un dato de:
cero si s1 == s2
menor que cero si s1 < s2
mayor que cero si s1 > s2

strcspn()

size_t strcspn( const char* s1, const char* s2)


Devuelve la longitud de la subcadena ms larga de s1
que comienza con el carcter s1[0] y no contiene
ninguno de los caracteres de la cadena s2.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Nombre de la
funcin

22
*Consultar las funciones de la librera "string.h" de
ANSI C

Una biblioteca relacionada #include <ctype.h>


la cual contiene muchas funciones tiles para
convertir y probar caracteres individuales.

Las funciones ms comunes para revisar


caracteres tienen los siguientes prototipos:

int isalnum(int c): Verdad si c es alfanumrico.


int isalpha(int c): Verdad si c es una letra.
int isascii(int c): Verdad si c es ASCII.
int iscntrl(int c): Verdad si c es un caracter de
control.
int isdigit(int c): Verdad si c es un dgito decimal.
int isgraph(int c): Verdad si c es un caracter
imprimible, exceptuando el espacio en blanco.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

Prueba y manejo de caracteres en C


<ctype.h>

23

Las funciones para conversin de caracteres son:


int toascii(int c): Convierte c a ASCII o un unsigned
char de 7 bits, borrando los bits altos.
int tolower(int c): Convierte la letra c a minsculas,
si es posible.
int toupper(int c): Convierte la letra c a maysculas,
si es posible.

Algoritmia y programacin estructurada


4.1 Arreglo unidimensional
Autor: M. en C. Edgardo Adrin Franco Martnez

int islower(int c): Verdad si c es una letra minscula.


int isprint(int c): Verdad si c es un caracter
imprimible, incluyendo el espacio en blanco.
int ispunct(int c): Verdad si c es un signo de
puntuacin.
int isspace(int c): Verdad si c es un espacio
int isupper(int c): Verdad si c es una letra
mayscula.
int isxdigit(int c): Verdad si c es un dgito
hexadecimal.

24

También podría gustarte