Professional Documents
Culture Documents
1. Repaso de C:
OBJETIVOS
• Tipos de variables. Será necesario adquirir el hábito de realizar programas que tengan las
• Declaración de variables siguientes características:
• Sentencias de control Rapidez: se deberá tener en cuenta el tiempo necesario para la programación.
• Funciones. Paso de argumentos a una función.
• Punteros, operaciones con punteros, punteros y arrays. Claridad: El programa esté escrito de forma clara. Añadir comentarios que
describen los pasos realizados.
1
Repaso de lenguaje C: Operadores Repaso de lenguaje C: Bifurcaciones
Operador Nombre Descripción
if(expresion) if(expresion1) switch(expresion)
Aritmético Operador Nombre Descripción { { {
Asignación Var. A la izquierda Compara sentencia_1; case 1: sentencia_1;
= toma valor de la ción sentencia;
}
derecha == Igualdad A==B } break;
+ Adición Suma dos
else if(expresion2)
operandos != Desigualdad A!=B { case 2: sentencia_2;
sentencia_2; break;
- Sustracción Resta dos > Mayor que A>B if(expresion)
operandos } …
* Producto Multiplica dos
< Menor que A<B { else if(expresion3)
operandos >= Mayor o igual A>=B case N: sentencia_N;
sentencia_1; {
/ División Divide dos <= Menor o igual A<=B break;
operandos } sentencia_3;
&& AND AND lógico
} default: sentencia;
% Resto Devuelve el resto
|| OR OR lógico
else else break;
de la división
entera { { sentencia_3; }
sentencia_2; }
Informática Aplicada 07-08 5 Informática Aplicada 07-08 6
}
while(expresion) for(inicializacion; expresion_control; actualizacion) Ejercicio 1.- Descubrir errores Ejercicio 2.- Descubrir errores
int i = 0;
{ {
int i = 0; while(i<10)
sentencia; sentencia; {
while(i<100)
} } { if(i=!0)
printf(“%d\n”, i); printf("%d\n", i);
inicializacion; i++; i++;
if(i=50) }
while(expresion_control)
break; printf("Acabado el bucle while");
{ 1 1
}
sentencia; 2 1
printf(“Acabado el bucle while”);
3
actualizacion; 1
4 1
}
Informática Aplicada 07-08 7 Informática Aplicada 07-08
5 ... 1 ... 9
2
Solución errores comunes
2/2
Ejemplo 1.
Dentro del if, ponemos i=50, cuando debemos poner i==50. Qué
pasa cuando ponemos i=50? Se asigna 50 a i, se evalúa i. Cómo i es
mayor que cero, la expresión del if resulta ser cierta, con lo que se
ejecuta break y sale del bucle. Funciones
Ejemplo 2.
Sin funciones
else Las funciones permiten dividir un programa en
printf(“\nEl maximo es y=%d”, y);
módulos, más pequeños y manejables
printf(“\nIntroduzca x”); (subprogramas o funciones que son llamadas por
scanf(“%d”, &x);
printf(“\nIntroduzca y”);
el programa principal.)
scanf(“%d”, &y);
if(x>y)
printf(“\nEl maximo es x=%d”, x);
else
printf(“\nEl maximo es y=%d”, y);
}
Informática Aplicada 07-08 12 Informática Aplicada 07-08 13
3
Repaso de lenguaje C: Funciones Repaso de lenguaje C: Funciones
#include <stdio.h>
Ventajas de las funciones
Calcular el máximo de dos
• Modularidad: void HallarMaximo(void); //Declaración, prototipo
números introducidos por teclado
• A cada función se le asigna una misión concreta. void main(void)
• No debe tener un número de líneas excesivo. {
HallarMaximo(); //Llamada Ejemplo 3:
• Recibe unos parámetros de entrada, realiza una serie de cálculos y ofrece HallarMaximo();
unos resultados. } Con funciones
• Reutilización de código: Cada función puede llamarse muchas veces void HallarMaximo(void) //Definición, implementación
desde un programa. Con lo que se reduce el número de líneas de código {
int x, y;
del programa. Además, se puede reutilizar en diferentes programas. printf(“\nIntroduzca x”);
scanf(“%d”, &x);
printf(“\nIntroduzca y”);
A la hora de escribir un programa en C, deberemos dividir el problema scanf(“%d”, &y);
if(x>y)
general en problemas más pequeños, y programarlos separadamente en printf(“\nEl maximo es x=%d”, x);
funciones. La división de un programa en funciones no es única y depende else
printf(“\nEl maximo es y=%d”, y);
del estilo de cada persona }
4
Punteros: Concepto y utilidad
ReCoRDaR: El valor de cada variable está almacenado en
un lugar de la memoria, caracterizado por una dirección
Punteros
Variable a Æ dirección: 0023:0001
En esa zona de memoria tendremos almacenado un dato. Un puntero puede apuntar a variables ordinarias, arrays, funciones o a
El número de bytes que ocupa una variable en memoria depende de su tipo. otros punteros
ej. un caracter ASCII ocupa un byte. El compilador se encarga de estos detalles.
5
Punteros: Operadores & y * Punteros: Errores de sintaxis de punteros
Errores comunes de sintaxis:
Asignamos también al puntero q la dirección almacenada en p Para resolver el problema: Punteros a void
q=p;
float *p = NULL;
6
Punteros: Aritmética Aritmética de punteros
Aritmética de punteros 1. ip+10;
Produce otro puntero;
Ejemplo 9: Hallar el valor de las variables a, b, c al final
Si ip es un puntero al elemento m[j] de una matriz (dicho de otro
del programa
modo: si *ip == &m[j] ), el nuevo puntero apunta a otro elemento
void main(void){
m[j+10] de la misma matriz, con lo que *(ip+10) == &m[j+10]
int a,b,c;
int *p1,*p2; Resultado final:
a=1
2. y = *ip+10;
p1 = &a;
Añade 10 al objeto *ip (objeto referenciado por ip) y lo asigna a y
*p1 = 1; b=0
p2 = &b; 3. *ip += 1;
c=3
*p2 = 2;
Equivale a: *ip = *ip + 1. Incrementa en 1 el valor (Rvalue) del
p1 = p2;
objeto referenciado por ip.
*p1 = 0;
p2 = &c; 4. ++*ip;
*p2 = 3; Igual que el anterior: incrementa en 1 el valor del objeto
} referenciado por ip
7
Punteros: ejercicio propuesto 1 Punteros: ejercicio propuesto 2
#include <stdio.h>
#include <stdio.h>
void main( void ) Entregar la salida por pantalla void main( void ) Entregar la salida por pantalla
{ asignando el valor de memoria { asignando el valor aleatorio de
int u = 3, v; hex para &u=FF56 y &v=F67A int a=5,b,*pa,*pb; memoria en hex que creamos
oportuno al inicio
int *pu; //puntero a entero printf("La direccion de a= %X\n",&a);
int *pv; //puntero a entero printf("El valor de a= %X\n",a);
pa=&a; // puntero apunta a la direccion de a
pu = &u; printf("La dirección del puntero pa es %X\n",&pa);
v = *pu; printf("El puntero pa apunta a la dirección %X\n",pa);
pv = &v; printf("El valor de la dirección de memoria a la que apunta el
puntero pa es %d\n\n",*pa);
printf(“\nu=%d &u=%X pu=%X *pu = %d”, u, &u, pu, *pu);
pb=pa; // el puntero pb apunta a la direccion del puntero pa
printf(“\nv=%d &v=%X pv=%X *pv = %d”, v, &v, pv, *pv);
printf("La dirección del puntero pb es %X\n",&pb);
}
printf("El puntero pb apunta a la dirección %X\n",pb);
printf("El valor de la dirección de memoria a la que apunta el
Ejercicio propuesto 1. Hoja 1 Ejercicios resueltos puntero pb es %d\n",*pb);
} Ejercicio propuesto 1. Hoja 1 Ejercicios resueltos
Informática Aplicada 07-08 37 Informática Aplicada 07-08 38
8
Arrays Arrays: ejemplo 1
Definición: Ejemplo 1
modo de almacenar una serie de variables de forma consecutiva en
memoria bajo un mismo nombre
012345
Informática Aplicada 07-08 41 Informática Aplicada 07-08 42
PUNTEROS Y ARRAYS
void main(void){
int x[3]; // array de 3 enteros
int *puntero; Ejemplo 11
x[0]=10;
system("pause");
}
9
Arrays : Arrays de caracteres Ejemplo de Arrays
Un array de caracteres se debe entender como un array Ejemplo: Obtener el código ASCII
de elementos de tipo char.
char cade[20]=“hola"; char cade[20]="hola";
h o l a ‘\0’ printf("\n%s", cade);
Para que el array de caracteres sea válido, su último printf("\n%c, %c, %c, %c", cade[0],cade[1], cade[2],
elemento debe ser el carácter nulo ‘\0’, que es el valor 0 cade[3]);
en código ASCII. El compilador hace esto printf("\n%d, %d, %d, %d, %d", cade[0],cade[1], cade[2],
automáticamente. cade[3], cade[4]);
Matrices
Definición:
Son similares a los vectores pero con dos dimensiones (filas y columnas)
en lugar de una
Declaración:
tipo nombre[numero_filas] [numero_columnas]
10