Tarjeta de referencia ANSI C Constantes Control de flujo
largo (sufijo) L o l finalizador de instrucción ;
Estructura de programa/funciones real de precisión simple (sufijo) F o f delimitadores de bloque { } tipo func(tipo 1 ,. . . ) declaración de funciones notación cientı́fica E o e salir de switch, while, do, for break tipo nombre declaración de variables globales octal (prefijo cero) 0 siguiente iteración de while, do, for continue main() { función principal hexadecimal (prefijo cero-equis) 0x o 0X ir a goto etiqueta declaraciones declaración de variables locales carácter constante (char, octal, hex.) 'a', '\ooo', '\xhh' etiqueta etiqueta: instrucciones nueva lı́nea, ret. de carro, tab., borrado \n, \r, \t, \b valor de retorno de función return expr } caracteres especiales \\, \?, \', \" Construcciones de flujo tipo func(arg 1 ,. . . ) { definición de función cadena constante (termina con '\0') "abc. . . de" instrucción if if (expr ) instrucción declaraciones declaración de variables locales else if (expr ) instrucción instrucciones Punteros, vectores y estructuras else instrucción return valor ; declarar un puntero a tipo tipo *nombre instrucción while while (expr ) } decl. una func. que dev. un punt. a tipo tipo *f() instrucción /* */ comentarios decl. un punt. a func. que devuelve tipo tipo (*pf)() instrucción for for (expr 1 ; expr 2 ; expr 3 ) puntero genérico void * instrucción main(int argc, char *argv[]) programa con argumentos instrucción do do instrucción valor de puntero a nulo NULL while(expr ); Preprocesador de C objeto apuntado por puntero *puntero instrucción switch switch (expr ) { incluir fichero de cabeceras #include <fichero> dirección del objeto nombre &nombre case const 1 : instrucción 1 break; incluir fichero de usuario #include "fichero" vector nombre[dim] case const 2 : instrucción 2 break; sustitución de texto #define nombre texto vector multidimensional nombre[dim 1 ][dim 2 ]. . . default: instrucción Estructuras } macro con argumentos #define nombre(var ) texto Ejemplo. #define max(A,B) ((A)>(B) ? (A) : (B)) struct etiqueta { plantilla de estructura Bibliotecas ANSI estándar anular definición #undef nombre declaraciones declaración de campos <assert.h> <ctype.h> <errno.h> <float.h> <limits.h> }; <locale.h> <math.h> <setjmp.h> <signal.h> <stdarg.h> entrecomillar al reemplazar # <stddef.h> <stdio.h> <stdlib.h> <string.h> <time.h> concatenar argumentos y reescanear ## crear estructura struct etiqueta nombre compilación condicional #if, #else, #elif, #endif campo de estructura nombre.campo Consulta de tipos de carácter <ctype.h> ¿nombre definido, no definido? #ifdef, #ifndef campo de estructura a través de puntero puntero->campo c es un carácter ¿nombre definido? defined(nombre ) Ejemplo. (*p).x y p->x son lo mismo ¿alfanumérico? isalnum(c) carácter de continuación de lı́nea \ estructura múltiple, valor único union ¿alfabético? isalpha(c) campo de bits con b bits campo : b ¿carácter de control? iscntrl(c) Tipos de datos. Declaraciones ¿dı́gito decimal? isdigit(c) carácter (1 byte) char Operadores (según precedencia) ¿carácter imprimible (excluı́do espacio)? isgraph(c) entero int acceso a campo de estructura nombre.campo ¿letra minúscula? islower(c) real (precisión simple) float acceso por puntero puntero->campo ¿carácter imprimible (incl. espacio)? isprint(c) real (precisión doble) double acceso a elemento de vector nombre[ı́ndice] ¿car. impr. excepto espacio, letra, dı́gito? ispunct(c) corto (entero de 16 bits ) short incremento, decremento ++, -- ¿separador? isspace(c) largo (entero de 32 bits) long más, menos, no lógico, negación bit a bit +, -, !, ~ ¿letra mayúscula? isupper(c) positivo y negativo signed acceso por puntero, direcc. de objeto *puntero, &nombre ¿dı́gito hexadecimal? isxdigit(c) sólo positivo unsigned convertir tipo de expresión (tipo)expr convertir a minúscula tolower(c) puntero a int, float,. . . *int, *float,. . . tamaño de un objeto sizeof convertir a mayúscula toupper(c) enumeración enum valor constante (inalterable) const producto, división, módulo (resto) *, /, % Operaciones con cadenas <string.h> suma, resta +, - s,t son cadenas, cs,ct son cadenas constantes declaración de variable externa extern variable registro register desplazamiento a izda., dcha. (bit a bit) <<, >> longitud de s strlen(s) variable estática static comparaciones >, >=, <, <= copiar ct en s strcpy(s,ct) sin tipo void comparaciones ==, != ...hasta n caracteres strncpy(s,ct,n) estructura struct “Y” bit a bit & concatenar ct tras s strcat(s,ct) crear un tipo de datos typedef tipo nombre “O exclusiva” bit a bit ^ ...hasta n caracteres strncat(s,ct,n) talla de un objeto (devuelve un size_t) sizeof objeto “O” bit a bit | comparar cs con ct strcmp(cs,ct) talla de un tipo de datos (dev. un size_t) sizeof(tipo ) “Y” lógico && ...sólo los primeros n caracteres strncmp(cs,ct,n) “O” lógico || puntero al primer c en cs strchr(cs,c) Inicialización puntero al último c en cs strrchr(cs,c) expresión condicional expr 1 ? expr 2 : expr 3 Inicializar variable tipo nombre=valor copiar n caracteres de ct en s memcpy(s,ct,n) operadores de asignación =, +=, -=, *=, ... copiar n cars. de ct en s (sobreescribe) memmove(s,ct,n) Inicializar vector tipo nombre[]={valor 1 ,. . . } Inicializar cadena char nombre[]="cadena " separador de evaluación de expresiones , comparar n caracteres de cs con ct memcmp(cs,ct,n) Los operadores unarios, expresión condicional y operadores de asig- punt. al 1er c en los n 1os cars. de cs memchr(cs,c,n) c 2002 Joseph H. Silverman Permisos en el reverso. v1.3s
nación se agrupan de dcha. a izda.; todos los demás de izda. a dcha. poner c en los n primeros cars. de cs memset(s,c,n) Tarjeta de referencia ANSI C Funciones útiles <stdlib.h> Funciones matemáticas <math.h> valor absoluto del entero n abs(n) los argumentos y valores devueltos son double Entrada/Salida <stdio.h> valor absoluto del largo n labs(n) funciones trigonométricas sin(x), cos(x), tan(x) E/S estándar cociente y resto de enteros n,d div(n,d) funciones trig. inversas asin(x), acos(x), atan(x) flujo de entrada estándar stdin devuelve una estructura con div_t.quot y div_t.rem arctg(y/x) atan2(y,x) flujo de salida estándar stdout cociente y resto de largos n,d ldiv(n,d) funciones trig. hiperbólicas sinh(x), cosh(x), tanh(x) flujo de error estándar stderr devuelve una estructura con ldiv_t.quot y ldiv_t.rem exponenciales y logaritmos exp(x), log(x), log10(x) final de fichero EOF entero pseudo-aleatorio en [0,RAND_MAX] rand() exps. y logs. (base 2) ldexp(x,n), frexp(x,*e) obtener un carácter getchar() fijar la semilla aleatoria a n srand(n) división y resto modf(x,*ip), fmod(x,y) imprimir un carácter putchar(car ) finalizar ejecución del programa exit(estado) potencia y raı́z pow(x,y), sqrt(x) imprimir con formato printf("formato ",arg 1 ,. . . ) ejecutar cadena s en el sistema system(s) redondeo ceil(x), floor(x), fabs(x) imprimir en cadena s sprintf(s,"formato ",arg 1 ,. . . ) Conversiones convertir cadena s a double atof(s) Lı́mites del tipo entero <limits.h> leer con formato scanf("formato ",&nombre 1 ,. . . ) convertir cadena s a int atoi(s) lı́mites tı́picos para un sistema Unix de 32 bits leer de cadena s sscanf(s,"formato ",&nombre 1 ,. . . ) convertir cadena s a long atol(s) CHAR_BIT bits en char (8) leer lı́nea en cadena s gets(s) convertir prefijo de s a double strtod(s,finp) CHAR_MAX máximo valor de char (127 o 255) imprimir cadena s puts(s) convertir prefijo de s (base b) a long strtol(s,finp,b) CHAR_MIN mı́nimo valor de char (-128 o 0) E/S de ficheros igual, pero unsigned long strtoul(s,finp,b) INT_MAX máximo valor de int (+32767) declarar puntero a fichero FILE *fp Reserva de memoria INT_MIN mı́nimo valor de int (-32768) obtener puntero a fichero fopen("nombre ","mode ") reserva memoria malloc(talla), calloc(nobj,talla) LONG_MAX máximo valor de long (+2147483647) modos: r (leer), w (escribir), a (añadir) cambiar tamaño de la reserva realloc(pts,talla) LONG_MIN mı́nimo valor de long (-2147483648) obtener un carácter getc(fp) liberar memoria free(ptr) SCHAR_MAX máximo valor de signed char (+127) escribir un carácter putc(car ,fp) Funciones de vectores SCHAR_MIN mı́nimo valor de signed char (-128) escribir en fichero fprintf(fp,"formato",arg 1 ,. . . ) buscar clave en vect bsearch(clave,vect,n,talla,cmp()) SHRT_MAX máximo valor de short (+32767) leer de fichero fscanf(fp,"formato",arg 1 ,. . . ) ordenar vect ascendentemente qsort(vect,n,talla,cmp()) SHRT_MIN mı́nimo valor de short (-32768) cerrar fichero fclose(fp) UCHAR_MAX máximo valor de unsigned char (255) distinto de cero si error ferror(fp) distinto de cero si EOF feof(fp) Funciones de hora y fecha <time.h> UINT_MAX máximo valor de unsigned int (65535) ULONG_MAX máximo valor de unsigned long (4294967295) leer lı́nea en cadena s (< max cars.) fgets(s,max,fp ) tiempo de proc. usado por el programa clock() USHRT_MAX máximo valor de unsigned short (65536) escribir cadena s fputs(s,fp ) Ejemplo. clock()/CLOCKS_PER_SEC da el tiempo en segundos Códigos de E/S con formato: "%-+ 0w.pmc" segundos desde 1/1/1.970 (hora de ref.) time() Lı́mites del tipo real <float.h> - alineación a izquierda tpo2 -tpo1 en segs. (double) difftime(tpo2 ,tpo1 ) FLT_RADIX dı́gitos del exponente (2) + imprimir con signo tipos numéricos para representar horas clock_t,time_t FLT_ROUNDS modo de redondeo space imprimir espacio si no hay signo estructura estándar usada para fecha y hora tm FLT_DIG precisión (dı́gitos decimales) (6) 0 rellenar por delante con ceros tm_sec segundos en el minuto FLT_EPSILON menor x tal que 1.0 + x 6= 1.0 (10−5 ) w anchura mı́nima del campo tm_min minutos en la hora FLT_MANT_DIG dı́gitos de la mantisa p precisión tm_hour horas desde medianoche FLT_MAX máximo número en coma flotante (1037 ) m carácter de conversión: tm_mday dı́a del mes FLT_MAX_EXP exponente máximo h short, l long, L long double tm_mon meses desde enero FLT_MIN mı́nimo número en coma flotante (10−37 ) c carácter de conversión: tm_year años desde 1.900 FLT_MIN_EXP mı́nimo exponente d,i entero u sin signo tm_wday dı́as desde el domingo DBL_DIG precisión de double (dı́g. decimales) (10) c carácter s cadena de caracteres tm_yday dı́as desde el 1 de enero DBL_EPSILON menor x t.q. 1.0 + x 6= 1.0 (double) (10−9 ) f doble e,E exponencial tm_isdst indicador del cambio de horario (verano/invierno) DBL_MANT_DIG dı́g. de la mantisa (double) o octal x,X hexadecimal convertir hora local a hora de ref. mktime(tp) DBL_MAX máx. núm. en coma flot.(double) (1037 ) p puntero n número de caracteres escritos convertir hora en tp a cadena asctime(tp) DBL_MAX_EXP máximo exponente (double) g,G como f o e,E según cuál sea el exponente convertir hora de ref. en tp a cadena ctime(tp) DBL_MIN mı́n. núm. en coma flot.(double) (10−37 ) convertir hora de ref. a GMT gmtime(tp) DBL_MIN_EXP mı́nimo exponente (double) Lista variable de argumentos <stdarg.h> convertir hora de ref. a hora local localtime(tp) declarar puntero a argumentos va_list nombre; formatear fecha y hora strftime(s,smax,"formato ",tp) inicializar puntero a args. va_start(nombre ,ultarg ) c 2002 Joseph H. Silverman Octubre 2002 v1.3s. Copyright
tp es un puntero a una estructura de tipo tm ultarg es el último parámetro con nombre de la función La copia y distribución de esta tarjeta están permitidas siempre que el copy- right y este permiso se mantengan en todas las copias. siguiente arg. sin nom., actualizar punt. va_arg(nombre ,tipo) invocar antes de salir de la función va_end(nombre ) Puede enviar comentarios y correcciones a J.H. Silverman, Math. Dept., Brown Univ., Providence, RI 02912 USA. hjhs@math.brown.edui Traducido por F. Abad, C.D. Martı́nez, D. Picó, J.A. Sánchez