Professional Documents
Culture Documents
• Compilador cruzado
O1... .obj
main () { 01....1
compilador enlazador
} O1... .o
Revisión de lenguaje C
• Tipos Básicos
char (8 bits) int (16 bits) long (32 bits) float(32 bits)
• Tipo unsigned (muy útil en programación de micros.)
• Tipo bit (µP 51)
• Conversiones:
Hexadecimal (x) Agrupaciones de 4 bits ==> 0x
Octal (o) Agrupaciones de 3 bits ==> 0o
Decimal (--)
• Operadores + , - , * , % , / , ++ , --
• Precedencia ++ , -- , * , / , % , + , -
• Comentarios /* esto es un comentario */
• Formato numérico %d imprime como decimal entero
%6d decimal de 6 caracteres
%f imprime como punto flotante (real)
%f6.2 real de 6 caracteres y 2 decimales
Tema 1 1
Revisión de lenguaje C
• Enteros de 8 bits (tipo char)
Rango : 0 ----> 255 (unsigned)
00---> 0xFF Hexadecimal
Rango : 0 ---> 127, -128 ---> -1 (signed)
00 --> 0x7F, 80 ----> 0xFF Hexadecimal
• Complemento a dos (C2):
Positivos: 0 ---> 2 n-1 - 1 (127 con 8 bits)
Negativos: -1 ---> - 2 n-1 1 (-128 con 8 bits)
main() {
char c;
c = 127;
c += 3;
printf (“%c”,c); -------------->(-126) !!
}
Revisión de lenguaje C
• Enteros de 16 bits (tipo int)
Rango : 0 ----> 64K (65535unsigned)
00---> 0xFFFF Hexadecimal
Rango : 0 ---> 32767, -32768 ---> -1 (signed)
00 --> 0x7FFF, 0x8000 ----> 0xFFFF Hexadecimal
• Complemento a dos (C2). Igual que con 8 bits
Positivos: 0 ---> 2 n-1 - 1 (32767 con 16 bits)
Negativos: -1 ---> - 2 n-1 1 (-32768 con 16 bits)
Tema 1 2
Revisión de lenguaje C
• Dimensionado :
– sizeof (char) = 1
– sizeof (int) = 2 (4 en Windows95/Linux)
• Reales :
– float
– double
– long double
Revisión de lenguaje C
• Estructuras de Control de Flujo:
while (e) {
}
Tema 1 3
Revisión de lenguaje C
• Cadenas de caracteres (string):
– Sirven para almacenar texto.
– Por cada carácter se necesitan 8 bits.
– Codificación estándar en caracteres tipo ASCII, alfanúmericos y de control.
– Letras : ‘A’ -----> ‘Z’ Números : ‘0’ ---> ‘9’
0x41 -----> 0x30 ---> 0x39
– Restantes : caracteres no alfanúmericos --> ‘:’ , ‘[‘, ‘>’. ....
– Y de control ^S, .. ^Q.... (algunos no son representables en pantalla).
Revisión de lenguaje C
• Ejemplo: Sumar los caracteres de una cadena.
# define MAXCAD 80
main() {
int total,i;
char cadena[MAXCAD];
cadena = gets (cadena);
total=0;
for(i=0; cadena[i]!=‘\0’ ; i++)
total += cadena[i];
}
Notas: gets:
– no reserva espacio para la cadena => lo hacemos con char cadena[MAXCAD]
– devuelve un char *. Prototipo char *gets(char *)
– rellena hasta ‘\n’ y pone ‘/0’ al final.
– devuelve lo mismo que recibe. Usar NULL si hay problemas:
if ((ps = gets(cadena)) == NULL) {
print(“error”);
exit(1) 8
Tema 1 4
Revisión de lenguaje C
• Ejemplo: Copia de una cadena.
{
char *strcpy (char to[ ], char from [ ])
int i; }
i = 0;
while ((to[i] = from[i]) != ‘\0’)
i++;
return to;
}
Notas:
– Se copia el ‘\0’ ? ==> Si se hace antes de !=
Revisión de lenguaje C
Operadores
• booleanos =0 ==0
• lógicos && || !
• relacionales > < >= <= == !=
• aritméticos * / % + -
• desplazamiento << >>
• bit & ^ |
• de asignación = += -= *= /= %=
&= |= <<= >>=
10
Tema 1 5
Revisión de lenguaje C
11
Revisión de lenguaje C
• Ejemplo: #define MAXLINEA 80
main () {
char c,cadena[MAXLINEA], *ps;
int digito,blanco,otro;
if((ps=gets(cadena))==NULL) {
printf(“error”);
exit(1);
}
digito = 0; blanco = 0; otro =0;
for(i=0; c=cadena[i]; i++)
if( c>= ‘0’ && c<= ‘9) {
digito++;
}
else if( c== ‘ ‘ || c==‘\n’ || c==‘\t’) {
blanco++;
}
else {
otro++
}
}
}
¡ gets no incuuye el ‘\n’ del final | 12
Tema 1 6
Revisión de lenguaje C
• FUNCION strtok
char *strok(s,ct) secuencia de ejecución:
1o- llamada: p= strtok(s,” “);
devuelve puntero al 1er token
2o- llamada p==strtok (NULL,” “);
resto de llamadas igual
• Ejemplo #define MAXLINEA 100
main () {
char s[MAXLINEA], * ps;
printf(“Introduce linea ”);
if((ps=gets(s))==NULL) {
printf(“error”);
exit(1);
}
ps=strtok(s,” “);
while (ps != NULL) {
printf(“%d”, atoi(ps));
ps=strtok(NULL,” “);
}
printf(“\n”);
13
}
Revisión de lenguaje C
• FUNCIONES atoi, itoa <==> Cadena a entero y viceversa.
Tema 1 7
Revisión de lenguaje C
:
milib.h
ejemplo.c milib.c
15
Revisión de lenguaje C
milib.h
ejemplo.c milib.c
Tema 1 8
Revisión de lenguaje C
• FUNCIONES
– DISMINUIR LA COMPLEJIDAD DE LOS PROGRAMAS.
– DIVISION DE TAREAS (Entre programadores por ejemplo).
– DESARROLLO Y REUTILIZACIÓN POR MÓDULOS .
– AYUDA A UNA MEJOR DEPURACIÓN.
– CREACIÓN DE BIBLIOTECAS.
• ESTRUCTURA
– ARGUMENTOS, CUERPO Y SALIDA
– Ejemplo:
double Cuad(double x)
{
return x*x;
}
17
Revisión de lenguaje C
– return expresión
– Funciones que no devuelven nada
void
return;
– Funciones sin argumentos:
int getchar (void);
– Funciones con vectores, cadenas y matrices
tipo_devuelto NombreFunción(tipo nombre_vector[])
18
Tema 1 9
Revisión de lenguaje C
• PUNTEROS
– Los punteros almacenan direcciones de memoria y son parte de la potencia del lenguaje C.
– Entre otras cosas, permiten trabajar con vectores y matrices de tamaño variable, es decir, se
pueden ajustar su tamaño dinámicamente
– Se pueden definir estructuras de datos complejas.
– Permiten trabajar con funciones que devuelvan más de un valor.
– DECLARACIÓN:
19
Revisión de lenguaje C
• PUNTEROS. Operadores sobre punteros
– Los punteros almacenan en su inicio un valor desconocido -> apuntan a una dirección
aleatoria.
– OPERADOR UNARIO & (obtiene la dirección de memoria de una variable)
int x; /* variable entera */
int *pti; /* `puntero a entero */
x=128; /* inicialización de x */
pti=&x; /* pti apunta a la dirección donde se localiza x, es decir, obtiene
la dirección de memoria y es un entero, puesto que x es entero*/
20
Tema 1 10
Revisión de lenguaje C
• PUNTEROS. Operaciones con punteros
– Los punteros permiten hacer operaciones de suma y diferencia.
– Existen dos tipos de operación diferenciados:
*pti+=8; /* suma 8 al entero que apunta a pti, el puntero sigue apuntando al mismo sitio */
pti+=8; /* suma 8 posiciones de memoria a la dirección que apunta pti */
– Punteros y funciones
void cambio(int *a, int*b) /*la función recibe las direcciones de 2 variables*/
21
Tema 1 11