Chuleta
Chuleta
Chuleta
1 Estructura de un programa C
/* Programa de Ejemplo Fecha: Autor: */ #include .... #define .... typedef .... Prototipos] void main(void) { variables /* descripcion */] instrucciones] }
5 Operadores Aritmeticos
int: +, -, *, /(division +, -, *, / ++, --, +=, -=, *=, /=
entera) , %(resto)
double:
Otros operadores:
2 Caracteres especiales
'\n' '\r' '\0' '\t' '\f' '\'' '\"' '\\' cambio de l nea (newline) retorno de carro (return) caracter 0 (NULL) TAB cambio de pagina (form feed) comilla simple comilla doble la barra \
3 Formatos de printf,
formato %d %hd %ld %u %hu %lu %f %lf %c %s tipo de variable int short long unsigned int unsigned short unsigned long float, double double (solo scanf) char cadena de caracteres
scanf
instruccion 1 instruccion 2
...
instruccion n
instruccion 1 instruccion 2
...
}while(condicion)
instruccion n
instruccion 1 1
break ... case constante ...
9 Sintaxis del if
if (condicion)
instruccion 1 n1 n: instruccion n 1
...
break default:
} else
instruccion 1.n
else-if
14 Vectores y matrices
double vector 10] char cadena 256] char matriz 10] 20] vector 2] = 3 scanf("%lf", &vector 5])
instruccion 1.m else if (condicion) instruccion 2.1 instruccion 2.2 instruccion 2.n instruccion 3.1 instruccion 3.2 instruccion 3.p
... { ...
15 Instruccion #define
#define TAM_VECTOR 10
... } else
16 Cadenas de caracteres
char cadena N]
12 Sintaxis de la construccion
switch-case
switch(expresion){ case constante 1:
gets(cadena) /* lee una frase hasta final de linea */ scanf("%s",cadena) /* lee una palabra */ printf("%s",cadena) /* escribe una cadena (frase o palabra)
24 Funciones y punteros
tipo devuelto NombreFuncion(tipo 1 argumento 1,. . . ,tipo n Para que una funcion modi que variables pertenecientes a argumento n) quien la llama, esta tiene que trabajar con punteros a dichas { variables. Para ello el prototipo de la funcion ha de ser por instruccion 1 ejemplo: instruccion 2 instruccion n return expresion devuelta
} ... void cambio(int *pa, int *pb) /* Si tipo_devuelto no es void*/
Y la funcion ha de usar el operador * para acceder al contenido de las posiciones de memoria a las que apuntan los tipo devuelto NombreFuncion(tipo 1 argumento 1,. . . ,tipo n punteros que tiene como argumentos: argumento n) void cambio(int *pa, int *pb)
{
21 Declaracion de punteros
tipo *nombre puntero
La funcion calloc() devuelve NULL si no hay memoria su ciente. Para liberar la memoria cuando ya no sea necesario usarla mas:
free(pent)
22 Operador &
pvar = &juan
Devuelve la direccion del objeto sobre el que se aplica. Por ejemplo: Para abrir un archivo en modo lectura y escritura: asigna al puntero pvar la direccion de la variable juan.
FILE *pfich ... pfich = fopen("pepe", "r") ...
26 Archivos
23 Operador *
La funcion fopen() devuelve NULL si no puede abrir el archiSi se precede un puntero del operador * se accede a la direc- vo. cion a la que apunta el puntero. Por ejemplo: En la tabla 1 se muestran los modos de apertura. Para cerrar un archivo: *pvar = pepe Escribe el valor de pepe en la direccion a la que apunta pvar. 3
fclose(pfich)
Modo
r r+
w w+
Abre el archivo para leer. El archivo ha de existir. Se posiciona al principio del archivo. Abre el archivo para leer y escribir. El archivo ha de existir. Se posiciona al principio del archivo. Abre el archivo para escribir. Si el archivo existe borra su contenido y si no existe crea uno nuevo. Abre el archivo para escribir y leer. Si el archivo existe borra su contenido y si no existe crea uno nuevo. Abre el archivo para a~adir. Si el archivo no n existe crea uno nuevo, pero si existe no borra su contenido. Se posiciona al nal del archivo de forma que sucesivas escrituras se a~aden al archivo n original. Ha de a~adirse a cualquiera de los modos anterion res si el archivo que se va a abrir contiene datos binarios en lugar de texto ASCII1 . Tabla 1: Modos de apertura de los archivos.
Descripcion
Para leer o escribir una estructura en un archivo binario se usan las funciones:
size_t fread (void *estructura, size_t tamaNo, size_t numero, FILE *archivo) size_t fwrite(void *estructura, size_t tamaNo, size_t numero, FILE *archivo) estructura es la direccion de la estructura, tama~o de la estructura, numero es el numero de n estructuras consecutivas que se leen o se escriben y archivo es el archivo desde el que se lee o en el que se escribe. Ambas funciones devuelven el numero de estructuras escritas o le das del archivo (numero). Si ocurre un error devolvera un numero menor que el que se pretend a escribir o leer (o incluso 0 si no se ha escrito o le do ninguna). tamaNo es el
En donde
27 Estructuras
Normalmente las estructuras se de nen con typedef. Ejemplo:
typedef struct { double real double imag } COMPLEJO
Para declarar una variable de tipo estructura se utiliza el nombre de nido en el typedef
COMPLEJO v1 /* Primer complejo */
vale 1 si se ha le do el dato correctamente, 0 si ha ocurrido un error de formato y EOF si se ha llegado Para acceder individualmente a los campos de la estructura al nal del chero. En estos dos ultimos casos no modi ca la se utiliza el operador punto. variable num Para leer o escribir un caracter o una cadena de caracteres se Los vectores de estructuras se declaran igual que los vectores de cualquier otro tipo. Ejemplo: pueden usar las funciones:
int fgetc(FILE *puntero a archivo) int fputc(int caracter, FILE *puntero a archivo) char *fgets(char *cadena, int tam cad, FILE *puntero a archivo) int fputs(const char *cadena, FILE *puntero a archivo) fgetc y fputc devuelven el caracter le do o escrito o un EOF si se ha producido algun error. fgets devuelve la cadena le da o NULL si se ha producido un error. Por ultimo, fputs COMPLEJO v 100] v 1].real=4.5 /* Vector de 100 complejos */
v1.real=5.6 vi.imag=-3.5
Los punteros de estructuras se declaran igual que los punteros de cualquier otro tipo, pero para acceder a los distintos campos se utiliza el operador -> en lugar de poner el * delante del nombre:
COMPLEJO *pcomp pcomp = &v1 pcomp->real=7.4 /* Puntero a una estructura */