Está en la página 1de 21

Tema 3

Arrays y Funciones
Curso de Iniciación al lenguaje C
José García Doblado
Arrays
• Un array es un vector, una tabla, una matriz o una cadena de caracteres
• Se pueden formar arrays con cualquier tipo de dato.
• Todos los elementos tienen el mismo nombre
• Se accede mediante un índice  zero-based-indexing  El primero elemento es el
índice 0
• Ocupan posiciones de memoria contiguas

• Existen dos tipos de arrays:


• De datos: float, double, int, char
• Cadena de caracteres: char
Arrays de Datos
• Declaracion:
• Tipo nombre[Tamaño];  int vector[10];

Dirección de memoria

vector[9] 90 + 10 * 4 bytes/datos
vector[8]

vector[2]
vector[1]
vector[0] 90
Arrays de Datos
• Declaracion:
• Tipo nombre[Tamaño];  int vector[10];

Dirección de memoria

vector[9] 90 + 10 * 4 bytes/datos
vector[8]

vector[2]
vector[1]
vector[0] 90  &vector[0] scanf
Arrays de Datos
• Asignación:

• Valor inicial
Tipo nombre[Tamaño]={valor0, valor1,…valor9};
char numeros[5]={1,2,3,4,5};

• En tiempo de ejecución  Elemento a elemento


nombre[indice]=valor;
numeros[2]=9;
Ejercicios 1

• Hacer programa que pida al usuario 4 números, los memorice


(utilizando una tabla), calcule su media aritmética y después
muestre en pantalla la media

• Un programa que almacene en una tabla el número de días que


tiene cada mes (supondremos que es un año no bisiesto), pida al
usuario que le indique un mes (1=enero, 12=diciembre) y muestre
en pantalla el número de días que tiene ese mes
Cadenas de caracteres
• Son arrays de caracteres
• Es necesario reservar un carácter más para el carácter nulo
(/0)  Necesario para usar librerias de string.h

char saludo[5]=“Hola”;

• Modificador para printf y scanf  %s

printf("Introduce tu nombre: ");


scanf("%s", texto); Sin &
printf("Hola, %s\n", texto);
Cadena de caracteres
• Asignación:

• Valor inicial
char nombre[Tamaño]=“Cadena”; Tamaño >= longitud(Cadena)+1
char saludo[5]=“Hola”;

• En tiempo de ejecución
• Elemento a elemento  saludo[0]=‘H’; saludo[1]=‘o’;….
• Scanf  scanf("%s", saludo);
• Funciones string.h  strcat, strcpy, etc
Cadena de caracteres
• Librería string.h  include <string.h>

• strlen  Devuelve la longitud de una cadena de caracteres

printf("Has tecleado %d letras", strlen(texto));

• strcmp  Compara dos cadenas y devuelve un 0 si son iguales

if (strcmp(cadena1,cadena2) == 0){
printf(“%s y %s son iguales”,cadena1,cadena2);
}
Ejercicios 2

• Crea un programa que pida al usuario su contraseña. Deberá


terminar cuando introduzca como contraseña la palabra "clave",
pero volvérsela a pedir tantas veces como sea necesario.
Arrays bidimensionales
• Declaracion:
• Tipo nombre[Nfilas] [Ncolumnas];  int matriz[2][3];

• Asignación inicial lineal


• int matriz[2][3]={1, 2, 3, 4, 5, 6}

1 2 3
4 5 6

• Asignación en tiempo de ejecución  elemento a elemento

for (j=0;j<N_FILAS<j++){
for (k=0;k<N_COLUMNAS<k++){
matriz[j][k]=valor
}
}
Funciones
• Permiten hacer un programa modular
• Descomposición modular
• Fácil comprensión de un programa

mostrarMenu();
opcion=pedirOpcion();
switch( opcion ) {
case 1:
buscarDatos();
break;
case 2:
modificarDatos();
break;
case 3:
anadirDatos();
break;
...
Funciones
• Sintaxis:
• Tipo_devuelto Nombre (arg1,arg2,etc) 
float cuadrado(float n)
Funciones
• Sintaxis:
• Tipo_devuelto Nombre (arg1,arg2,etc) 
float cuadrado(float n)
Tipo de valor Argumento de
devuelto entrada
Funciones
• Sintaxis:
• Tipo_devuelto Nombre (arg1,arg2,etc) 
float cuadrado(float n)
Tipo de valor Argumento de
devuelto entrada

• Definición de la función
float cuadrado(float n){
float valor;
valor=n*n;
return valor;
}
Funciones
• Sintaxis:
• Tipo_devuelto Nombre (arg1,arg2,etc) 
float cuadrado(float n)
Tipo de valor Argumento de
devuelto entrada

• Definición de la función • Llamada de la función


float cuadrado(float n){ float valor;
float valor; float numero;
valor=n*n; valor = cuadrado(numero);
return valor;
Si la función no tiene argumentos de
} entrada se usan paréntesis vacíos

saluda();
Funciones
• Variables:
• Las variables definidas dentro de una función y los propios
argumentos de entrada son locales a la función  Sólo existen
dentro de la función, aunque tengan el mismo nombre

float cuadrado(float n){


float resultado; n=n*n;
float n=5; return n;
resultado=cuadrado(n); }
printf (“%f”,n);
Funciones
• Variables:
• Las variables definidas dentro de una función y los propios
argumentos de entrada son locales a la función  Sólo existen
dentro de la función, aunque tengan el mismo nombre

float cuadrado(float n){


float resultado; n=n*n;
float n=5; return n;
resultado=cuadrado(n); }
printf (“%f”,n);

n sigue valiendo 5 n (local) es igual a 25

No son la misma variable


Funciones
• Prototipo
• La función tiene que estar declarada previo al uso

#include <stdio.h>

int main (){

float resultado;
float n=5;

resultado=cuadrado(n); El compilador no sabe que es “cuadrado”


printf (“%f”,n);
return 0;
}

float cuadrado(float n){


n=n*n;
return n;
}
Funciones
• Prototipo
• La función tiene que estar declarada previo al uso

#include <stdio.h>

float cuadrado(float);

int main (){

float resultado;
float n=5;

resultado=cuadrado(n);
printf (“%f”,n);
return 0;
}

float cuadrado(float n){


n=n*n;
return n;
}
Ejercicios 3

• Compilar el ejercicio del ejemplo con y sin el prototipo

También podría gustarte