Se guardan en archivos con extencion c y los cabezales con extension h Tipos de Variables: Tipo Tamaño(bytes) Limite inferior Limite superior char 1 -- -- unsigned char 1 0 255 short int 2-32768 +32767 unsigned short int 2 0 65536 (long) int 4-2^{31} +2^{31}-1 float 4-3.2 x 10^38 +3.2 x 10^38 double 8-1.7 x 10^308 +1.7 x 10^308 Declaracion de variables: se pueden declarar en cualquier lado del programa, la forma es: tipo nombre y opcionalmente se pueden inicializar. Ejemplos: int tmp; float f = 1.0; Operadores: Asignacion : = igualdad : == diferencia :!= negacion :! comparacion: <, >, <=, >= and : && or : inclemento : ++ decremento : -- modulo :% Los siguientes equivalen a x = x? y, donde? puede ser +, -, *, /, % += -= *= /= %= es decir x += 3; es lo mismo que x = x + 3; El operador ternario condicional? es mas eficiente que la sentencia if. El operador? tiene el siguiente formato: expresion1? expresion 2 : expresion3; Que es equivalente a la siguiente expresion: if (expresion1) then expresion2 else expresion3;
Por ejemplo, para asignar el maximo de a y b a la variable z, usando?, tendriamos: z = (a > b)? a : b; que es lo mismo que: if (a > b) { z = a; } else { z = b; } // if /* Comentario multilinea */ // comentario de una linea While: while (condicion) { } // while Do-while: do { } while (condicion); for: for (inicio; condicion de fin; incremento) { } // for Ejemplo: for (int i = 0; i < N; i++) { x += i; } // for El alcance de la variable i es solo el for If: if (condicion) { } else { } // if
if (condicion) { } else if (condicion2) { } else { } // if if (condicion) { } // if Switch: switch (variable) { case constante1: break; case constante2: break; case constante3: break;... default: } // switch Las limitaciones que tiene la sentencia switch... case respecto a la estructura if son: * Solo se tiene posibilidad de revisar una sola variable. * Con switch solo se puede comprobar por igualdad, mientras que con if puede ser con cualquier operador relacional. * No se puede probar mas de una constante por case. Struct: typedef struct nombre { lista de variables; }; // nombre sea nombre pp; se accede a sus componentes usando el. (= que los record de pascal) array: tipo nombrea[tamaño]; Los indices van siempre de 0 a tamaño - 1, si es multidimensional se define como tipo nombreb[tamaño1][tamaño2]; Se accede como nombrea[x] o nombreb[x, y]
Union: typedef union nombre { tipo1 nombre1; tipo2 nombre2;... }; // nombre Es un tipo de variable que puede contener distintos tipos de variables, pero solo una a la vez, el programador debe controlar cual es la ultima que ingreso Ejemplo: typedef union pp { int a; char b; }; // pp pp variable; variable.a = 0; // aca el campo b no esta definido y no se puede leer cariable.b = 'a' // aca el campo a deja de estar definido Enumeraciones: Una enumeracion es un conjunto de constantes enteras con nombre y especifica todos los valores legales que puede tener una variable del tipo enum. enum nombre_enum { lista_de_enumeracion } lista_de_variables; Es opcional nombre_enum y lista_de_variables. La primera se usa para declarar las variables de su tipo. El siguiente fragmento define una enumeracion llamada disco que declara almacenamiento para ser de ese tipo. enum almacenamiento { diskette, dd, cd, dvd, cinta }; enum almacenamiento disco; Con la siguiente definicion y declaracion son validas las siguientes sentencias: disco = cd; if ( disco == diskette ) printf("es de 1440 Kb\n"); Se inicializa el primer simbolo de enumeracion a cero, el valor del segundo simbolo a 1 y asi sucesivamente, a menos que se inicialice de otra manera. Por tanto,
printf("%d %d\n", dd, cinta) muestra 1 4 en la pantalla. Se puede especificar el valor de uno o mas simbolos usando un inicializador. Para hacerlo, poner un signo igual y un valor entero despues del simbolo. Por ejemplo, lo siguiente asigna el valor 250 a cd enum disco { diskette, duro, cd=250, dvd, cinta }; Por lo tanto los valores de los simbolos son los siguientes: diskette 0 duro 1 cd 250 dvd 251 cinta 252 Include: Se usa para incluir librerias como la sentencia IMPORT de Modula 2 o la uses de Pascal #include <libreria.h> // busca libreria.h en el directorio de // librerias del compilador #include "libreria.h" // busca libreria.h en el directorio donde // esta el archivo que contiene dicha linea Macros del preprocesador: Un macro es una pequeña operacion definida usando la sentencia #define del preprocesador. por ejemplo en vez de programar una funcion que tome dos enteros y devuelva el maximo se puede poner: #define MAX((A), (B)) ((A) > (B))? (A) : (B) son importantes los parentesis, ya que en algunos casos como por ejemplo: #define PRODUCTO(A, B) A * B si se llama con A = 1 + 2 y B = 3 + 4 el resultado sera: 1 + 2 * 3 + 4 = 1 + 6 + 4 y no 3 * 12 Constantes: #define NOMBRE valor por convencion NOMBRE va todo en mayusculas Funcion main: Todo programa en C/C++ contiene una funcion main, esta funcion es la que se ejecuta y es equivalente al begin - end principal de pascal
Funciones: tipo nombre (parametros) { return algo; // algo es de tipo tipo } //nombre Funciones void: void nombre (parametros) { } // nombre Pueden verse como los procedimientos de pascal Pasaje de parametros: por referencia: van precedidos de un &, los array siempre son pasados por referencia aunque no se ponga el &, que de hecho esta mal ponerlo por valor: es = que en pascal Prototipos: Se usan para romper dependencias ciclicas y para mejorar la claridad del codigo Por ejemplo: si tenemos la funcion A que usa a la B, y la B que usa la A, surge el problema de en que orden escribirlas, para eso se usan los prototipos Sea la funcion: int f (int n) {... } // f Su prototipo es: int f (int); no se pone el nombre de los parametros, solo el tipo Conversion de tipos (casts) int numeroentero; float numeroflotante = 9.87; numeroentero = (int) numeroflotante; con lo cual se asigna 9 a la variable numeroentero y la fraccion es desechada. Entrada Salida: Printf: El prototipo de la funcion esta definido como: int printf( const char *formato, lista arg...); que muestra en stdout la lista de argumentos de acuerdo al formato
especificado. La funcion devuelve el número de caracteres impresos. La cadena de formateo tiene dos tipos de objetos: * caracteres ordinarios -- estos son copiados a la salida. * especificadores de conversion -- precedidos por % y listados en la tabla Caracteres de format printf/scanf Especificador (%) Tipo Resultado c char un solo caracter i,d int número base diez o int número base ocho x,x int número base dieciseis u int entero sin signo s char * impresion de cadena f double/float formato -m.ddd... e,e " Notacion Cientifica g,g " e o f la que sea Entre el % y el caracter de formato se puede poner: * - signo menos para justificar a la izquierda. * número entero para el ancho del campo. * m.d en donde m es el ancho del campo, y d es la precision de digitos despues del punto decimal o el número de caracteres de una cadena. Por lo tanto: printf("%-2.3f\n",17.23478); la salida en pantalla sera: 17.235 y printf("vat=17.5%%\n"); genera la siguiente salida: VAT=17.5%
Scanf: La funcion esta definida como sigue: int scanf( const char *formato, lista arg...); Lee de la entrada estandar (stdin) y coloca la entrada en la direccion de las variables indicadas en lista args. Regresa el número de caracteres leidos. La cadena de control de formateo es similar a la de printf. Importante: se requiere la direccion de la variable o un apuntador con scanf. Por ejemplo: scanf("%d", &i); Para el caso de un arreglo o cadena solo se requiere el nombre del mismo para poder usar scanf ya que corresponde al inicio de la direccion de la cadena. char cadena[80]; scanf("%s",cadena);