Unidad 2 Descripción de un Programa 1
El Lenguaje C (1) El lenguaje C fue creado en 1972 por Ken L. Thompson y Dennis M. Ritchie en los Laboratorios Bell. Es evolución de un lenguaje más antiguo: B (a su vez basado en BCPL). A su vez, hay otros lenguajes populares que derivan de él (como el C++) o se inspiran en él (como el JAVA). Aunque no fue estandarizado hasta 1989 (ANSI C) y en 1990 fue ratificado como estándar ISO. 2
El Lenguaje C (2) Es uno de los lenguajes de programación más utilizados. Inicialmente muy utilizado para desarrollar sistemas operativos. Por ejemplo, Linux está desarrollado en C. Se ha usado de manera intensiva también en entornos científicos. Junto con el FORTRAN ha sido posiblemente el lenguaje de programación más popular. Existen multitud de librerías científicas con las funciones más interesantes ya codificadas. 3
El Lenguaje C (3) Es un lenguaje imperativo estructurado que posee estructuras de alto nivel, pero que también permite programación de bajo nivel. Algunos de sus detalles son: Case sensitive: No son iguales mayúsculas que minúsculas No hay diferencias entre espacios en blanco y saltos de línea. Las instrucciones se separan con un punto y coma (;). 4
Genealogía del Lenguaje C 5
El Modelo de Compilación de C 6
Estructura General de un Programa Librería para entrada y salida #include <stdio.h> main() { printf(!hola Mundo!\n ); getch(); } Sentencia de salida Espera una tecla 7
Declaración de Variables Las variables permiten almacenar valores de diferentes tipos. Sus características son: nombre: un identificador válido tipo: int, float, double, char, etc. valor: el valor almacenado En C es necesario definir todas las variables que se utilicen, con la siguiente sintaxis: tipo var; Por ejemplo: int a, b, c; float r, s; 8
Tipos de Datos Numéricos Tipo Longitud Rango unsigned char 8 bits 0 a 255 char 8 bits -128 a 127 enum 16 bits -32.768 a 32.767 unsigned int 16 bits 0 a 65.535 short int 16 bits -32.768 a 32.767 int 16 bits -32.768 a 32.767 unsigned long 32 bits 0 a 4.294.967,295 long 32 bits -2.147.483.648 a 2.147.483.647 float 32 bits 3,4*(10^-38) a 3,4*(10^+38) double 64 bits 1,7*(10^-308) a 1,7*(10^+308) long double 80 bits 3,4*(10^-4932) a 1,1*(10^+4932) 9
Sensible a mayúsculas/minúsculas Se distingue entre mayúsculas y minúsculas (case sensitive en inglés). Los identificadores Pepito, pepito y PEPITO son diferentes. Todas las palabras reservadas del lenguaje van en minúsculas. 10 10
Comentarios Existen dos formas de introducir comentarios: 1) Comentario de una línea: // Comentario de una línea 2) Comentario en una o más líneas: /* Comentario de más de una línea */ 11 11
Lenguaje de Formato Libre La disposición de los elementos dentro del código es libre. Sentencias: Línea simple de código terminada en ;. x = y + z + w; Bloque de código: Conjunto de sentencias agrupadas entre llaves. { x = x + y; c = c +1; } 12 12
Variables Variables: Zona de memoria cuyos valores van a cambiar durante la ejecución del programa. Declaración: <tipo> <identificador>; ó <tipo> <identificador>, <identificador>; Por ejemplo: int a, b, c; float x,y; 13 13
Constantes Simbólicas Una constante es una zona de memoria cuyos valores no varían durante la ejecución del programa. Las constantes simbólicas favorecen la realización de modificaciones en los programas (Modificabilidad). Declaración: #define <identificador> = <valor>; ó Por ejemplo: #define PI = 3.1416; 14 14
Palabras Reservadas auto break case char continue default do double else enum extern float for goto if imt long register return short sizeof static struct switch typedef union unsigned void while 15
Asignación de Variables Se utiliza el operador de asignación =: <variable> = <expresión>; La parte izquierda siempre debe ser una variable. La parte derecha puede ser un literal, una variable, una función o una combinación de todos. Se puede asignar un valor a una variable en el momento de declararla. Por ejemplo: int s = 0; 16
Operadores (1) Operadores unarios: +, Operadores aritméticos: +,, *, /, % (resto de la división entera) Operadores de asignación: =, +=, *=, /=, %= <var> += <expresión> <var> = <var> + <expresión> Por ejemplo: x += 3; x = x + 3; y *= 5; y = y * 5; 17
Operadores (2) Operadores incrementales: ++, Precediendo a la variable: ++<var>, --<var> Siguiendo a la variable: <var>++, <var>-- Por ejemplo: {i=1;j=i++;} i=1;j=i;i=i+1; i=2,j=1 {i=1;j=++i;} i=1;i=i+1;j=i; i=2,j=2 {x = ((++z ) (w--) % 100 ;} equivale a: {z = z+1; x= (z w) % 100 ; w = w 1;} 18
Operadores (3) Operadores relacionales: == (igual),!= (distinto), > (mayor que), < (menor que), >= (mayor ó igual que), <= (menor ó igual que). Operadores lógicos: && (AND) (OR)! (NOT) & (AND bit a bit) (OR bit a bit) 19
Operadores (4) Operadores condicional: <exp1>? <exp2> : <exp3>; Se evalúa como <exp2> si <exp1> es cierto ó como <exp2> en caso contrario. Por ejemplo: x = (y > 10)? z + 1 : 30; equivale a: si (y > 10) entonces x z + 1 sino x 30 20
Funciones Matemáticas (1) La biblioteca math.h contiene la definición de varias funciones matemáticas útiles. Algunas de ellas son las siguientes: ceil(x): Redondea al entero más pequeño no menor que x. cos(x): Coseno de x. exp(x): e x. fabs(x): Valor absoluto de x. 21
Funciones Matemáticas (2) floor(x): Redondea al entero más grande no mayor que x. log(x): Logaritmo natural de x. log10(x): Logaritmo base 10 de x. pow(x,y): x y. sin(x): Seno de x. sqrt(x): Raíz cuadrada de x. tan(x): Tangente de x. 22
Entrada Estándar (1) La función scanf(), disponible al incluir stdio.h, permite leer datos por teclado. La función scanf se usa de un modo similar a printf: su primer argumento es una cadena cuya marca de formato indica de que tipo es el valor que vamos a leer, y a éste le siguen la dirección de memoria en donde se almacenará el valor leído. La forma general de utilizarla es la siguiente: scanf(cadena_de_formato, &<variable>); 23
Entrada Estándar (2) Observemos que la variable cuyo valor se lee por teclado va obligatoriamente precedida por el operador &: es así como se obtiene la dirección de memoria en la que se almacena el valor de la variable. Por ejemplo, la sentencia de lectura: scanf("%d", &x); Lee un valor entero y lo deposita en la dirección de memoria en donde se encuentra la variable x. 24
Salida Estándar (1) La función printf() (de print = imprimir y f = formato) sirve para escribir datos en el dispositivo de salida estándar (generalmente la pantalla) con un formato determinado por el programador. La forma general de utilizarla es la siguiente: printf(cadena_de_formato, <variables>); El primer argumento especifica el modo en el que se deben mostrar los datos que aparecen a continuación. 25
Salida Estándar (2) Esta cadena se compone de una serie de códigos de formato que indican a C qué tipo de datos son los que se desean imprimir. Todos los códigos están precedidos del símbolo de porcentaje (%). Por ejemplo, el código %d indica a la función que se desea escribir un número de tipo int, y el código %f, que se desea escribir un número real de tipo float. Por ejemplo: printf("%d \t %d \n",a,b); 26
Estructuras de Control Las sentencias de control del flujo de ejecución, permiten tomar decisiones y realizar un proceso repetidas veces. Hay dos tipos principales de sentencias de control de flujo: Condicionales: if, switch Iteración: for, while, do - while Otras sentencias que permiten interrumpir el flujo normal de ejecución son break y continue. 27
La Sentencia if else (1) if (expresion){<sentencias_1;} else {<sentencias_2>;} Por ejemplo: if (x < min) x = min else i = i + 1; 28
La Sentencia if else (2) Por definición, el valor numérico de una expresión de relación o lógica es 1 (uno) si la relación es Verdadera, y 0 (cero) si la relación es Falsa. En un sentido amplio, el lenguaje C considera verdadera una expresión si es distinta de 0 (cero), y falsa en caso contrario. Por ejemplo: if (x--) y = a else y = b; 29
La Sentencia switch (1) switch (<variable>) { case valor1: [<gruposentencias1>;] [break;]... case valorn: [<gruposentenciasn>;] [break;] } [default: <gruposentencias>;] 30
La Sentencia switch (2) Opciones de un menú: 1) Altas 2) Bajas 3) Modificaciones 4) Salir switch (opcion){ case 1: altas(); break; case 2: bajas(); break; case 3: modificaciones(); break; case 4: default: salir(); } 31
La Sentencia for (1) Permite la ejecución repetida un número de veces predeterminado, de un grupo de sentencias. 32
for (<inicializa>;<exprlógica>;actualiza>) { <gruposentencias>; } <inicializa>: Asignación del valor inicial de las variables que intervienen en la expresión. <exprlógica>: Condición lógica (booleana). <actualiza>: Asignación del nuevo valor de las variables. La Sentencia for (2) 33
La Sentencia for (3) En <inicializa> y en <actualiza> pueden ir más de una asignación, separadas por comas. Por ejemplo, el siguiente código: for (i=0, j=10; i < j; i++, j -= 3) printf("%d \t %d \n",i,j); produce la siguiente salida: 0 10 1 7 2 4 34
La Sentencia while El grupo de sentencias se ejecuta mientras se cumpla la expresión booleana. while (<exprbooleana>){ <gruposentencias>; } Por ejemplo: i = 0; while (i < 10){ printf ( %d, i); i += 1; } 35
La Sentencia do-while El grupo de sentencias se ejecuta mientras se cumpla la expresión booleana. do { <gruposentencias>; } while (<exprlógica>) Por ejemplo: i = 0; do { printf ( %d, i); i++; } while (i < 10); 36
Tipos de Datos Simples en C 37
Tipos de Datos Numéricos Tipo Longitud Rango unsigned int 16 bits 0 a 65.535 short int 16 bits -32.768 a 32.767 int 16 bits -32.768 a 32.767 unsigned long 32 bits 0 a 4.294.967,295 long 32 bits -2.147.483.648 a 2.147.483.647 float 32 bits 3,4*(10^-38) a 3,4*(10^+38) double 64 bits 1,7*(10^-308) a 1,7*(10^+308) long double 80 bits 3,4*(10^-4932) a 1,1*(10^+4932) 38
Tipos de Datos Caracter En C un carácter es un valor entero representado por su correspondiente código ASCII, y encerrado entre comillas. Por ejemplo: Para leer un carácter: Para escribir un carácter: char c = A ; getchar(c); putchar(c); 39
Tipos de Datos Enumerados (1) Una enumeración es una lista de nombres que almacenan valores enteros constantes. El primer nombre de la lista tiene el valor 0, el siguiente 1, etc. La declaración adopta la forma siguiente: enum nombre_tipo {lista_de_identificadores}; Una vez hecha una definición como esta, se pueden emplear variables del tipo de esta enumeración, que se se declaran en de la siguiente manera: enum nombre_de_tipo var_1,..., var_n; 40
Tipos de Datos Enumerados (2) Por ejemplo: main(){ enum dias {Lu, Ma, Mi, Ju, Vi}; enum dias x, y, z; } x = Lu; y = Vi; for (z = x; z <= y; z++) printf( z vale %d\n", z); 41