1 UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICOFACULTAD DE INGENIERIA DIVISIÓN DE INGENIERÍA ELÉCTRICA COMPUTACIÓN PARA INGENIEROS PROF. M.I. JAIME ALFONSO REYES CORTÉS
2 El compilador de C errores de sintaxis y semántica bibliotecas Códigofuente con adecuaciones Código fuente Preprocesador Compilador Código objeto datos Código máquina ligador resultados errores de memoria y de ejecución bibliotecas
3 Guía de referencia rápida de lenguaje CIdentificadores Un identificador es una palabra o secuencia de caracteres que forman el nombre de un objeto del programa Deben empezar con letra, excepto ñ o Ñ, o guión bajo y estar seguidos de cero o más letras, números o guiones bajos No se permiten símbolos como $ ¡ ! ¿ ? ° | & - % , . ‘ “ / \ o espacios en blanco ni tabuladores
4 Guía de referencia rápida de lenguaje CPalabras reservadas en C C posee un conjunto de palabras que no pueden ser utilizadas como nombres de identificadores ni de funciones. Son las siguientes: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while
5 Guía de referencia rápida de lenguaje CPalabras reservadas en C++ Además de las palabras reservadas de C, C++ también posee un conjunto de palabras que se deben de considerar cuando se programe en C con compiladores de C++. Son las siguientes: asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum,explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static. static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, while
6 Guía de referencia rápida de lenguaje CConstante: Un valor declarado u objeto que no cambia durante la ejecución y que se especifica mediante la directiva de sustitución o macro #define, por ejemplo: #define LMAX 21 #define PI Variable: Un objeto declarado que toma un valor que se puede modificar durante la ejecución del programa y que se especifica en la parte de declaración de variables. Las variables se representan por identificadores válidos y se les antepone el tipo de dato que representan. Por ejemplo: int a; float b; Se le denomina ámbito al alcance o utilización que pueden tener las variables en C. De acuerdo a esto existen variables globales y variables locales
7 Guía de referencia rápida de lenguaje CVariable global: Aquella variable que puede ser modificada y utilizada en cualquier parte del programa, es decir su ámbito o alcance no está restringido Variable local: Aquella variable que sólo puede ser modificada y utilizada solamente en la parte del programa donde fue definida, como en el caso de las variables que se declaran dentro de las funciones. En otras palabras el ámbito de una variable local se encuentra restringido a la función donde fue declarada
8 Guía de referencia rápida de lenguaje CTipos de datos en C Los tipos básicos en C son int (entero) float (real de precisión sencilla) double (real de precisión doble) char (carácter) char nombre[TAMAÑO] (cadenas) Los booleanos no existen en C. En su lugar se toman int con valor 0 para falso y diferente de 0 como verdadero C cuenta con otros tipos de datos. Para ello hace uso de modificadores. Véase el artículo Tipos de datos en C.
9 Guía de referencia rápida de lenguaje CEstructura general de un programa en C La forma más sencilla de elaborar un programa en C es: #include
10 Guía de referencia rápida de lenguaje CEstructura general de un programa en C En realidad existen dos estructuras formales que se pueden usar al elaborar un programa en C. Estructura 1 #include
11 Guía de referencia rápida de lenguaje Cint main() /*función principal*/ { /*Declaración de variables locales*/ /*Asignación de variables*/ /*Cuerpo de la función principal*/ return 0; /*Devuelve el control al S.O. indicando que todo terminó bien*/ } /*funciones definidas por el usuario*/ tipo1 funcion1(lista de parámetrosA) /*función1 que devuelve un valor de tipo1*/ /*Cuerpo de la función1*/ return valor_de_tipo1; /*Devuelve el valor a la función que la invocó*/
12 Guía de referencia rápida de lenguaje Ctipo2 funcion2(lista de parámetrosB) /*función2 que devuelve un valor de tipo1*/ { /*Declaración de variables locales*/ /*Asignación de variables*/ /*Cuerpo de la función2*/ return valor_de_tipo1; /*Devuelve el valor a la que la invocó*/ } …
13 Guía de referencia rápida de lenguaje CEstructura general de un programa en C Estructura 2 #include
14 Guía de referencia rápida de lenguaje Ctipo1 funcion1(lista de parámetrosA) /*función1 que devuelve un valor de tipo1*/ { /*Declaración de variables locales*/ /*Asignación de variables*/ /*Cuerpo de la función1*/ return valor_de_tipo1; /*Devuelve el valor a la función que la invocó*/ }; tipo2 funcion2(lista de parámetrosB) /*función2 que devuelve un valor de tipo1*/ /*Cuerpo de la función2*/ return valor_de_tipo1; /*Devuelve el valor a la función que la invocó*/
15 Guía de referencia rápida de lenguaje C… int main() /*función principal*/ { /*Declaración de variables locales*/ /*Asignación de variables*/ /*Cuerpo de la función principal*/ return 0; /*Devuelve el control al S.O indicando que todo terminó bien*/ }
16 Guía de referencia rápida de lenguaje COperador de asignación = Operadores aritméticos Precedencia - (operador monario) *, / (división), % (residuo de división entera) +, -
17 Guía de referencia rápida de lenguaje COperadores relacionales Precedencia >, < >=, <= == (igualdad) != (desigualdad)
18 Guía de referencia rápida de lenguaje COperadores lógicos Precedencia ! not (negado) && (AND) || (OR ) Nota: En C un valor falso se toma como 0 y un valor verdadero se toma como cualquier valor diferente de cero A ! 1 A B && || 1
19 Guía de referencia rápida de lenguaje COperador sizeof Este es un operador muy útil. Nos permite conocer el tamaño en bytes de una variable. De esta manera no tenemos que preocuparnos en recordar o calcular cuanto ocupa en memoria. Además el tamaño de una variable cambia de un compilador a otro, es la mejor forma de asegurarse. Se usa poniendo el nombre de la variable después de sizeof y separado de un espacio: #include
20 Guía de referencia rápida de lenguaje COperador (++) : Incremento Este operador equivale a sumar uno a la variable a++ (postincremento) ++a (preincremento) Operador (--) : Decremento Este operador equivale a restar uno a la variable a-- (postdecremento) --a (predecremento) NOTA: Existen otros operadores que no se tratan en este texto pero que se pueden consultar en los manuales de referencia de C
21 Guía de referencia rápida de lenguaje CSentencias de asignación int a = 5, b; b = 12; Expresiones aritméticas 5*A/2%4-5 Expresiones lógicas o booleanas (a < 5) && (b > 4) (x <= 0.23) || (x > 0.25) ((a != b) && !c) || (c == d)
22 Guía de referencia rápida de lenguaje CNotación abreviada. Se usa cuando una variable opera consigo misma y con una constante o una expresión int a = 5, b = 12; a += 7; /* a = a + 7; */ b *= 2; /* b = b * 2; */ a/=2; /*a = a / 2; */ suma*=x/fact; /*suma = suma*x/fact */
23 Guía de referencia rápida de lenguaje CFunciones predefinidas. Existen varias funciones predefinidas en C que se pueden usar al momento de programar. Necesitan de su respectiva Biblioteca para poder ser utilizadas. De hecho C agrupa a las funciones en Bibliotecas de acuerdo a las tareas que realizan. Las más comunes son: Biblioteca Descripción Funciones stdio.h Funciones de entrada/salida estándar printf, scanf, gets, puts, fflush, etc. math.h Funciones matemáticas y trigonométricas sin, cos, tan, asin, acos, atan,etc. exp, sqrt, log, log10, pow, etc. string.h Funciones que manipulan cadenas strlen, strcpy, strcat, strcmp, etc. ctype.h Funciones que manipulan y clasifican caracteres toupper, tolower, isalpha, isalnum, isdigit, etc. stdlib.h Funciones usadas comúnmente: rutinas de conversión, búsqueda/ordenamiento y miscelaneas abs, atoi, atof, max, min, random, randomize, etc
24 Guía de referencia rápida de lenguaje COperaciones de entrada/salida Entrada (leer valores por vía teclado) scanf(“%cf_tipo1%cf_tipo2…”, &var_tipo1, &var_tipo2,…); Salida Mostrar en pantalla una cadena con formato y/o una lista de variables printf(“texto %cf_tipo1 %cf_tipo2…”,var_tipo1, var_tipo2,…); *cf = código de formato ¡Ojo! Los códigos de formato van dentro de “” Por cada variable que se quiera leer o escribir debe existir su correspondiente código de formato. En scanf cada variable lleva &, excepto las variables de tipo cadena. En printf las variables no llevan &.
25 Guía de referencia rápida de lenguaje CEstructuras de control Un algoritmo simple presenta flujo secuencial, sin embargo, no todos los algoritmos son así ya que es necesario realizar procedimientos más complejos que involucren ya sea elegir una o varias alternativas o realizar el mismo procedimiento varias veces El control de flujo de un lenguaje especifica el orden en el que se ejecuta cada sentencia o instrucción Tenemos entonces tres tipos principales de estructuras de control: Estructura secuencial, estructuras de decisiónes o selecciones y los ciclos o estructuras de repetición
26 Guía de referencia rápida de lenguaje CEstructuras de control Estructura secuencial
27 Guía de referencia rápida de lenguaje CEstructuras de control Decisión Simple Doble Anidada Múltiple Expresión condicional
28 Guía de referencia rápida de lenguaje CDecisiones simples ¡Ojo! Una sola instrucción no lleva llaves. Dos o más instrucciones sí.
29 Guía de referencia rápida de lenguaje CDecisiones dobles ¡Ojo! Una sola instrucción no lleva llaves. Dos o más instrucciones sí.
30 Guía de referencia rápida de lenguaje CDecisiones anidadas if (condición1) { /*bloque1*/} else if(condición2) { /*bloque2*/} else if(condición3) {…} else if(condiciónN) {/*bloqueN*/} else {/*bloqueN+1*/} ¡Ojo! Una sola instrucción no lleva llaves. Dos o más instrucciones sí.
31 Guía de referencia rápida de lenguaje CDecisión múltiple ¡Ojo! Cada caso se separa por break. Si se omite break se ejecuta el bloque de instrucciones siguiente.
32 Guía de referencia rápida de lenguaje CExpresión condicional Se usa para simplificar una decisión doble que afecta a una única variable. var = condición ? expresión1: expresión2; Por ejemplo: Se puede abreviar como ¡Ojo! expresión1 se asigna cuando la condición evaluada es verdadera y expresión2 se asigna cuando la condición evaluada es falsa if(condición) a = 5.7; else a = sqrt(10.0); a = condición ? 5.7 : sqrt(10.0);
33 Guía de referencia rápida de lenguaje CEstructuras de control Estructuras de repetición (ciclos, loops, lazos o bucles) Ciclos simples while do-while for anidados
34 Guía de referencia rápida de lenguaje CEstructuras de control Ciclo while ¡Ojo! Una sola instrucción no lleva llaves. Dos o más instrucciones sí. Este ciclo no lleva “;” después de la condición.
35 Guía de referencia rápida de lenguaje CEstructuras de control Ciclo do-while ¡Ojo! Este ciclo siempre lleva llaves aún cuando sea una sola instrucción. Es el único ciclo que lleva “;” después de la condición.
36 Guía de referencia rápida de lenguaje CEstructuras de control ¡Ojo! Una sola instrucción no lleva llaves. Dos o más instrucciones sí. En este ciclo “;” se usa para separar cada parámetro del ciclo por eso se encuentran dentro de “(“ y “)”, no después del que cierra.
37 Guía de referencia rápida de lenguaje CArreglos Un arreglo es un conjunto ordenado de variables del mismo tipo que se encuentran reunidas bajo un mismo nombre La forma de declarar un arreglo en C es tipo nombredelarreglo[tamaño]; La forma de acceder a cada elemento del arreglo es por medio de un índice, p. ej. arrentero[4] = 18; ¡Ojo! Todos los arreglos en C empiezan en el índice 0 y terminan hasta el índice tamaño-1 1 2 3 4 5 6 10 7 14 18 2 -10
38 Cadenas en C En C las cadenas no se definen en forma explícita, se definen como arreglos de caracteres: char nombre_cadena[tamaño] char cadena[7]; scanf(“%s”,cadena); /*suponiendo que se tecleo hola*/ 1 2 3 4 5 6 ‘h’ ‘o’ ‘l’ ‘a’ ‘\0’
39 Cadenas en C Se considera que toda cadena lleva al final de ella un “fin de cadena” o “terminador nulo”, el cuál permite delimitar a la cadena. Se debe considerar el fin de cadena cuando se trabaje con ellas, así al definir el tamaño de la cadena siempre se debe de tener en cuenta su terminador nulo y reservar siempre un espacio adicional para el tamaño que se quiera asignar a la cadena.
40 Funciones que manipulan cadenasNombre Descripción gets Lee cadenas con espacios en blanco puts Muestra una cadena en pantalla strcpy Copia el contenido de una cadena en otra strcat Concatena 2 cadenas strcmp Compara 2 cadenas strlen Longitud de una cadena Están definidas en la biblioteca string.h
41 Apuntadores en C