Introducción a C
Grupo de Sistemas y Comunicaciones
[email protected]
Febrero 2008
C
1
C
Características:
Programación imperativa estructurada.
Relativamente de “bajo nivel”.
Lenguaje simple, la funcionalidad está en las bibliotecas.
Utilización natural de las funciones primitivas del sistema.
Básicamente maneja números, caracteres y direcciones de memo-
ria.
No tiene tipado fuerte.
c2008 GSyC
Introducción a C
Elprogramamássencillo
2
El programa más sencillo
/* Esto es un comentario */
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[]) {
printf("Hello, world!\n");
exit(EXIT_SUCCESS);
}
c2008 GSyC
Introducción a C
Elprogramamássencillo(cont.)
3
Compilación de un programa en C
Compilador más habitual: gcc
Uso: gcc [opciones] fichero-fuente
-c
Solo compila (no enlaza)
Nombre del fichero de salida
-o fichero
-Wall -Wshadow Activa avisos
-g
Activa información de depuración
$ gcc -g -Wall -c hello.c
$ gcc -o hello hello.o
$ ./hello
Hello, world!
$ _
c2008 GSyC
Introducción a C
Elprogramamássencillo(cont.)
4
Compilación de un programa con módulos
En general, un programa se compone de varios ficheros fuente:
• entrada.c
• calculo.c
• salida.c
Primero hay que compilar primero cada uno de los ficheros:
$ gcc -g -Wall -c entrada.c
$ gcc -g -Wall -c calculo.c
$ gcc -g -Wall -c salida.c
Y luego enlazarlos para generar el ejecutable:
$ gcc -o programa entrada.o calculo.o salida.o
Si todo ha ido bien, podemos ejecutarlo:
$ ./programa
c2008 GSyC
Introducción a C
Elprogramamássencillo(cont.)
5
Directivas de preprocesador
#include <stdio.h>
#include <stdlib.h>
Necesarias para utilizar funciones en el programa, como printf()
y exit().
Hay que mirar la página de manual de cada función que vayamos
a usar, para saber qué líneas “#include <...>” tenemos
que poner.
Las más habituales son: “<stdio.h>”, “<stdlib.h>”, “<string.h>”,
“<unistd.h>”, “<fcntl.h>”. . .
c2008 GSyC
Introducción a C
Elprogramamássencillo(cont.)
6
Uso del manual
Para buscar una función en el manual:
$ man N título
Busca “título” en la sección “N” del manual.
Hay varias secciones distintas; las que nos interesan aquí son:
• 1. Comandos de usuario
• 2. Llamadas al sistema
• 3. Funciones de librería
Para obtener información acerca de una sección en concreto:
$ man N intro
Para buscar páginas de manual que traten de una palabra en
concreto:
$ apropos palabra
c2008 GSyC
Introducción a C
Elprogramamássencillo(cont.)
7
Punto de entrada en el programa
int
main(int argc, char *argv[]) {
Función con un nombre especial, “main”,
Esta función devuelve un valor de tipo entero, y recibe dos
parámetros.
Siempre se declara de esa manera.
Estas líneas forman la cabecera; el cuerpo (contenido) es lo
que hay entre las llaves { ... }
c2008 GSyC
Introducción a C
Elprogramamássencillo(cont.)
8
Sentencias
Una sentencia es típicamente una expresión o una llamada a una
función, terminada por el carácter “;”.
printf("Hello, world!\n");
Llamada a la función “printf()”, que imprime un texto por
pantalla, con un parámetro, “"Hello, world!\n"”
exit(EXIT_SUCCESS);
Llamada a la función “exit()”, que termina el programa, con
el parámetro “EXIT_SUCCESS”
c2008 GSyC
Introducción a C
Tiposdedatosfundamentales
9
Tipos de datos fundamentales
Nombre Descripción
Ejemplo
Tipos enteros
char
int
Carácter
Entero
97, ’a’
32769
Tipos reales
float
Precisión simple
3.1416
double
Precisión doble
3.141592653589
Otros
void
Conjunto vacío
c2008 GSyC
Introducción a C
Declaracióndeunavariable
10
Declaración de una variable
tipo indentificador[, identificador]... ;
int contador;
int
main(int argc, char *argv[]){
int dia, mes;
char c, d;
/* ... */
}
c2008 GSyC
Introducción a C
Declaracióndeunavariable(cont.)
11
Uso de una variable
int contador = 1;
int
main(int argc, char *argv[]){
int dia = 27, mes = 2;
char c, d;
c = 97;
d = ’Z’;
/* ... */
printf("Estamos en el dia %d\n", dia);
}
c2008 GSyC
Introducción a C
Declaracióndeunavariable(cont.)
12
Tamaños de variables y tipos de datos
C no define tamaños de tipos concretos
Se debe usar siempre “sizeof”
“sizeof(tipo)” me da el tamaño de un tipo
“sizeof variable” me da el tamaño de una variable
Si meto un tipo más grande en uno más pequeño, hay proble-
mas.
c2008 GSyC
Introducción a C
Declaracióndeunavariable(cont.)
13
printf()
#include <stdio.h>
printf(formato, arg, arg. . . );
formato es una cadena de caracteres "como esta", que puede
contener:
\n
Fin de línea
%d El siguiente parámetro (lo muestra como un número decimal)
%c El siguiente parámetro (lo muestra como un carácter)
. . .
. . .
Ejemplos:
printf("decimal = %d, caracter = %c\n", 100, 120);
printf("decimal = %d, caracter = %c\n", ’a’, ’z’);
c2008 GSyC
Introducción a C
Funciones
14
Funciones
Definición y declaración
tipo-resultado
nombre-función([parámetros]) {
declaraciones de variables locales;
sentencias;
[return [expresión]];
}
c2008 GSyC
Introducción a C
Funciones(cont.)
15
Paso de parámetros
#include <stdio.h>
void
calcula(int x, int y) {
printf("resultado = %d\n", x * y);
}
int
main(int argc, char *argv[]) {
calcula(35, 47);
return 0;
}
c2008 GSyC
Introducción a C
Operadores
16
Operadores
Operadores aritméticos
+
-
*
/
%
Suma.
Resta.
Multiplicación.
División.
Módulo (resto de la división entera).
( ... ) Agrupación de expresiones.
Las operaciones con enteros dan siempre un resultado entero
c2008 GSyC
Introducción a C
Operadores(cont.)
17
Operadores aritméticos
int
main(int argc, char *argv[]) {
int c, a = 10, b = 3;
c = (a / b) * b; /* 9 */
printf("(%d / %d) * %d = %d\n", a, b, b, c);
exit(EXIT_SUCCESS);
}
c2008 GSyC
Introducción a C
Operadores(cont.)
18
Operadores de asignación
++
Incremento
-- Decremento
=
Asignación simple
+= Suma y asignación
-= Resta y asignación
*= Multiplicación y asignación
/= División y asignación
%= Módulo y asignación
c2008 GSyC
Introducción a C
Operadores(cont.)
19
Operadores de asignación
int
main(int argc, char *argv[]) {
int x = 10, n = 0, i = 0;
/* Incrementa x en 1 */
/* Incrementa x en 1 */
x++;
++x;
printf("%d\n", --n); /* Decrementa y luego asigna */
printf("%d\n", n--); /* Asigna y luego decrementa */
i += 2;
return 0;
/* i = i + 2 */
}
c2008 GSyC
Introducción a C
Operadores(cont.)
20
Operadores de relación
a < b
a > b
“a” menor que “b”
“a” mayor que “b”
a <= b
“a” menor o igual que “b”
a >= b
“a” mayor o igual que “b”
a != b
“a” distinto de “b”
a == b
“a” igual a “b”
Operadores lógicos
a && b AND. Cierto si “a” y “b” son ciertos
a || b OR. Cierto si “a” o “b” son ciertos
!a
NOT. Cierto si “a” es falso, falso si es cierto
c2008 GSyC
Introducción a C
Operadores(cont.)
21
Operadores de relación, operadores lógicos
En C no existe el tipo “booleano”, todas las comparaciones devuelven
un número entero (int);
Falso, un valor igual a 0
Verdadero, cualquier otro valor
Por lo tanto, estos operadores devuelven 0 o un valor distinto de 0
(normalmente 1), dependiendo de si se cumple o no la condición.
printf("Resultado=%d\n", (5>3 && 7<=10));
Esta línea imprime un 1.
c2008 GSyC
Introducción a C
Operadores(cont.)
22
Otros Operadores
&
*
&
(unario) Dirección-de. Da la dirección de su operando
(unario) Indirección. Acceso a un valor, teniendo su dirección
AND de bits
| OR de bits
^
~
XOR de bits
NOT de bits
<< Desplazamiento binario a la izquierda
>> Desplazamiento binario a la derecha
?: Operador ternario
c2008 GSyC
Introducción a C
Operadores(cont.)
23
Precedencia de operadores
() [] -> .
izquierda a derecha
! ++ -- * & ~ (unarios)
derecha a izquierda
* / %
+ -
< <= > >=
== !=
& ^ |
&&
||
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
= += -= *= /= %= &= . . .
derecha a izquierda
,
izquierda a derecha
c2008 GSyC
Introducción a C
Sentenciasdecontrol:if
24
Sentencias de control: if
if (expresión)
sentencia;
if (expresión) {
sentencia1;
sentencia2;
...
}
Si “expresión” se evalúa como verdadera (esto es, distinta de 0),
se ejecuta la sentencia (o sentencias, en el caso de un bloque
encerrado entre llaves).
c2008 GSyC
Introducción a C
Sentenciasdecontrol:else
25
Sentencias de control: else
Solo se puede usar justo a continuación de un “if”:
if (expresión)
sentencia1;
else
sentencia2;
if (expresión) {
sentencia1;
...
} else {
sentencia2;
...
}
Si “expresión” es verdadera, se ejecuta “sentencia1”. En otro caso,
se ejecuta “sentencia2”.
c2008 GSyC
Introducción a C
Sentenciasdecontrol:else(cont.)
26
else if
int a = 10, b = 20, c = 0, menor;
if (a < b) {
if (a < c) {
menor = a;
}
else {
menor = c;
}
} else if (b < c) {
menor = b;
} else {
menor = c;
}
printf("Menor = %d", menor);
c2008 GSyC
Introducción a C
Sentenciasdecontrol:else(cont.)
27
while
while (expresión) {
sentencias;
}
1. Se evalúa la “expresión”. Si es verdadera (distinta de 0):
Se ejecutan las “sentencias”.
Vuelve al punto 1.
Resumiendo, un “while” es un bucle que se repite siempre que la
condición siga siendo verdadera.
Un bucle infinito se puede conseguir con “while (1)”.
Se puede usar la orden “break” en cualquier momento para salir
del bucle.
c2008 GSyC
Introducción a C
Sentenciasdecontrol:else(cont.)
28
for
for ( inicialización ; condición ; actualización ) {
sentencias;
}
1. Se ejecuta la “inicialización”
2. Se evalúa la “condición”; si es verdadera:
Se ejecutan las “sentencias”
Se ejecuta la “actualización”
Vuelve al punto 2.
Un ejemplo de un bucle que se repite 10 veces, usando la variable
“i” (desde i=0 hasta i=9) sería:
Comentarios de: Introducción a C (0)
No hay comentarios