Vous êtes sur la page 1sur 44

UNIDAD III

2. Fundamentos del Lenguaje


Competencia especfica a desarrollar:

Actividades de aprendizaje:

BIBLIOGRAFIA: 1. Luis Joyanes Aguilar. Fundamentos de Programacin. Algoritmos, Estructura de Datos y Objetos. McGRAW HILL. Espaa 2003. 2. Jos Vasconcelos Santilln. Introduccin a la computacin. Publicaciones Cultural. Mxico 2000. 3. Guillermo Levine Gutierrez. Introduccin a la computacin y a la Programacin Estructurada. McGRAW-HILL. Mxico 1984. 4. Patricia Quiroga. Arquitectura de Computadoras. Alfaomega. Buenos Aires 2010. 5. Jaime Martnez Garza, Jorge Agustin Olvera Rodrguez. Organizacin Arquitectura de Computadoras. Prentice Hall. Mxico 2000. 6. Notas de Internet

3.1 Desarrollo histrico del lenguaje estructurado 3.2 Estructura general de un programa 3.3 Palabras reservadas 3.4 Representacin de datos bsicos 3.5 Declaracin de variables, Constantes, Procedimientos y Funciones 3.6 Operaciones aritmticas, lgicas y relacionales. 3.7 Diseo, Edicin, Compilacin y Ejecucin de programas
1.1 1.2

Desarrollo histrico del lenguaje estructurado Estructura general de un programa

Un programa en C se compone de una o mas funciones. Una de las funciones debe ser obligatoriamente main. Una funcin en C es un grupo de instrucciones que realizan una o mas acciones. Asimismo, un programa contendr una serie de directivas #include que permitir incluir en el mismo

archivos de cabecera que a su vez constar de funciones y datos predefinidos en ellos.

La estructura tpica completa de un programa en C: #include <stdio.h> stdio.h int main ( ) funcin { . } #include preprocesador #define procesador declaraciones globales Prototipos de funciones Variables Funcin principal main main ( ) { declaraciones locales sentencias } definiciones de otras funciones tipo1 func1 () { .. } De un modo ms explcito, un programa C puede incluir: Directivas de preprocesador Directivas del Macros del Nombre de la funcin Cabecera de Archivo de cabecera

Declaraciones globales La funcin main ( ) Funciones definidas por el usuario Comentarios del programa (utilizados en su totalidad).

Un ejemplo de un programa sencillo en C. /* Listado DEMO_UNO.C. Programa de saludo*/ #include <stdio.h> /*Este programa imprime: Bienvenido a la Programacin en C*/ int main( ) { printf(Bienvenido a la Programacin en C/n); getch (); return 0; } La directiva #include de la primera lnea es necesaria para que el programa tenga salida. Se refiere a un archivo externo denominado stdio.h en el que se proporciona la informacin relativa a la funcin printf( ). Los signos < y > no son parte del nombre del archivo; se utilizan para indicar que el archivo es un archivo de biblioteca estndar C. La segunda lnea es comentario, identificado por los caracteres /* y */. Los comentarios se incluyen en los programas para proporcionar explicaciones a los usuarios. Este tipo de lnea es ignorada por el compilador. La tercera lnea contiene la cabecera de la funcin main( ), obligatoria en cada programa de C. Indica el comienzo del programa y requieren los parntesis ( ) a continuacin de main ( ). La cuarta y la sptima lnea slo contiene las llaves { y } que encierran el cuerpo de la funcin main ( ) y son necesarias en todos los programas C. La quinta lnea contiene la sentencia printf (bienvenidos.................); que indica al sistema que escriba el mensaje Bienvenidos a la programacin en C\n. Printf( ) es la funcin ms utilizada para dar salida de datos por el dispositivo estndar, la pantalla. La salida ser: Bienvenido a la programacin en C

El smbolo \n es el smbolo de nueva lnea. Poniendo este smbolo al final de la cadena entre comillas, indica al sistema que comience una nueva lnea despus de imprimir los caracteres precedentes, terminando, por consiguiente, la lnea actual.

La sexta lnea contiene la sentencia return 0. esta sentencia termina la ejecucin del programa y devuelve el control al sistema operativo de la computadora. El nmero 0 se utiliza para sealar que el programa ha terminado correctamente (con xito). El punto y coma (;) al final de la quinta y sexta lnea significa que C requiere que cada sentencia termine con un punto y coma. No es necesario que este al final de una lnea . Se pueden poner varias sentencias en la misma lnea y se puede hacer que una sentencia se extienda sobre varias lneas. DIRECTIVAS DEL PREPROCESADOR Preprocesador: en un programa en C se puede considerar como un editor de texto inteligente que consta de directivas (instrucciones al compilador antes de que se compile el programa principal). Las dos directivas mas usuales son #include y #define. Todas las directivas del preprocesador empiezan con el signo #. Las directivas son instrucciones al compilador. Esto quiere decir que son instrucciones que se dan al compilador antes de que el programa se compile. Su uso mas frecuente en C es la inclusin de archivos de cabecera. Existen archivos de cabecera que se utilizan ampliamente, tales como STDIO.H, STDLIB.H, MATH.H, STRING.H y se utilizarn otros archivos de cabecera definidos por el usuario, denominados archivos de cabecera o archivos de inclusin. Los archivos de cabecera (archivos con extensin .h contienen cdigo fuente C) se sitan en un programa C mediante la directiva del preprocesador #include con una instruccin que tiene el siguiente formato: #include <nombrearch.h> o bien #include nombrearch.h nombrearch debe ser un archivo de texto ASCII (su archivo fuente) que reside en su disco. En realidad la directiva del preprocesador mezcla un archivo de disco en su programa fuente. El archivo de cabecera ms frecuente es STDIO.H . este archivo proporciona al compilador C la informacin necesaria sobre las funciones de biblioteca que realizan operaciones de entrada y salida . Como casi todos los programas que escriba imprimirn informacin en pantalla y leern datos de teclado, necesitar incluir scanf() y printf() en los mismos. Para ello ser preciso que cada programa contenga la lnea siguiente: #include <stdio.h> De igual modo es muy frecuente el uso de funciones de cadena, especialmente strcpy (); por la razn de que se requiere el uso del archivo de cabecera

denominado string.h. por consiguiente, ser muy usual que deba incluir en sus programas las lneas: #include <stdio.h> #include <string.h> El orden no importa con tal de que se incluyan antes de que se utilicen las funciones correspondientes. La directiva #include puede adoptar uno de los siguientes formatos: #include <nombre del archivo> #include nombre del archivo #define. Esta directiva indica al preprocesador que defina un item de datos u operacin para el programa C. Por ejemplo:, la directiva #define TAM_LINEA 65 Sustituir TAM_LINEA por el valor de 65 cada vez que aparezca en el programa. DECLARACIONES GLOBALES Las declaraciones globales indican al compilador que las funciones por el usuario o variables as declaradas son comunes a todas las funciones de su programa. Las declaraciones globales se sitan antes de la funcin main(). Si se declara global una variable Grado_Clase del tipo int Grado_Clase; Cualquier funcin de su programa, incluyendo main(), puede acceder a la variable Grado_Clase. La zona de declaraciones globales de un programa puede incluir declaraciones de variables adems de declaraciones de funcin. Las declaraciones de funcin se denominan prototipos int media (int a, int b); Ejemplo de estructura de un programa C que incluye declaraciones globales: /* Programa demo.C */ #include <stdio.h> /* Definicin de macros */ #define MICONST1 0.50 #define MINCONS2 0.75 /* Declaraciones globales */ int Calificaciones;

main() { ............. }

Funcin MAIN () Cada programa C tiene una funcin main() que es el punto de entrada al programa. Su estructura es: Main() { ........... } Las sentencias includas entre las llaves (.......) se denominan bloque. Un programa debe tener una funcin main(). Adems de la funcin main() un programa C consta de una coleccin de funciones. Una funcin C es un subprograma que devuelve un nico valor , un conjunto de valores o realiza una tarea especfica tal como E/S. Las variables y constante globales se declaran y definen fuera de la definicin de las funciones, generalmente en la cabecera del programa, antes de main(), mientras que las variables y constantes locales se declaran y definen en la cabecera del cuerpo o bloque de la funcin principal, o en la cabecera de cualquier bloque. Las sentencias situadas en el interior del cuerpo de la funcin principal, o en la cabecera de cualquier bloque. Las sentencias situadas en el interior del cuerpo de la funcin main(), o cualquier otra funcin, deben terminar en punto y coma. CREACION DE UN PROGRAMA Los pasos para crear un programa en C seran: 1. Utilizar un editor de texto para escribir el programa y grabarlo en un archivo. Este archivo constituye el cdigo fuente de un programa. 2. Compilar el cdigo fuente. Se traduce el cdigo fuente en un cdigo objeto (extensin .obj). Un archivo objeto contiene instrucciones de lenguaje mquina que se pueden ejecutar por una computadora. Los archivos estndar C y los de cabecera definidos por el usuario son incluidos (#include) en su cdigo fuente por el preprocesador. Los archivos de cabecera contienen informacin necesaria para la bloque de sentencias

compilacin como es el caso del stdio.h que contiene informacin de scanf() y de printf(). 3. Enlazar el cdigo objeto con las bibliotecas correspondientes. Una biblioteca C contiene cdigo objeto de una coleccin de rutinas o funciones que realizan tareas, como visualizar informacin en la pantalla o calcular la raz cuadrada de un nmero. El enlace del cdigo objeto del programa con el objeto de las funciones utilizadas y cualquier otro cdigo empleado en el enlace, producir un cdigo ejecutable. Un programa C consta de un nmero diferente de archivos objeto y archivos de biblioteca. Para crear un programa se utilizan las siguientes etapas: 1. 2. 3. 4. 5. 6. 7. 8. definir su programa definir directivas del preprocesador definicin de declaraciones globales crear main() Crear el cuerpo del programa Crear sus propias funciones definidas por el usuario Compilar, enlazar, ejecutar y comprobar el programa utilizar comentarios

Proceso de creacin de un ejecutable. Para crear un programa ejecutable, es necesario nicamente cambiar el destino de compilacin, en lugar de que sea a memoria, se genere a disco, y por consiguiente, se genera un archivo .EXE.

3.3 Palabras reservadas 3.4 Representacin de datos bsicos 3.5 Declaracin de variables, Constantes, Procedimientos y Funciones 3.6 Operaciones aritmticas, lgicas y relacionales. 3.7 Diseo, Edicin, Compilacin y Ejecucin de programas

VARIABLES, OPERADORES, TIPOS DE DATOS Y EXPRESIONES


VARIABLES (IDENTIFICADORES) Un identificador es un conjunto de caracteres alfanumricos de cualquier longitud que sirve para identificar las entidades del programa (clases, funciones, variables,

tipos compuestos, Etc.) Los identificadores pueden ser combinaciones de letras y nmeros. Cada lenguaje tiene sus propias reglas que definen como pueden estar construidos. En el caso de C++, son las que se indican a continuacin. Cuando un identificador se asocia a una entidad concreta, entonces es el "nombre" de dicha entidad, y en adelante la representa en el programa. Por supuesto puede ocurrir que varios identificadores se refieran a una misma entidad.
Los identificadores C++ pueden contener las letras a a z y A a Z, el guin bajo "_" ("Underscore") y los dgitos 0 a 9. El primer carcter debe ser una letra o el guin bajo. El Estndar establece que los identificadores comenzando con guin bajo y mayscula no deben ser utilizados. Este tipo de nombres se reserva para los compiladores y las Libreras Estndar. Tampoco se permite la utilizacin de nombres que contengan dos guiones bajos seguidos.

El estndar ANSI establece que como mnimo sern significativos los 31 primeros caracteres, aunque pueden ser ms, segn la implementacin Es decir, para que un compilador se adhiera al estndar ANSI, debe considerar como significativos, al menos, los 31 primeros caracteres.

Los identificadores distinguen maysculas y minsculas, as que Sum, sum y suM son distintos para el compilador.

Aunque los nombres de los identificadores pueden ser arbitrarios (dentro de las reglas sealadas), se produce un error si se utiliza el mismo identificador dentro del mismo mbito compartiendo el mismo espacio de nombres. Los nombres duplicados son legales en diferentes espacios de nombres con independencia de las reglas de mbito. Un identificador no puede coincidir con una palabra clave o con el de ninguna funcin de biblioteca.
Los identificadores pueden ser ms largos; de hecho en C++ pueden ser de cualquier longitud, pero el compilador solo considera los n primeros; es decir: considera iguales aquellos identificadores cuyos n primeros caracteres coinciden. C++Builder establece por defecto que son significativos los primeros 250 caracteres, pero este valor puede ser modificado utilizando la opcin -in, donde n es un nmero entre 8 y 250; adems el 0 significa el valor mximo.

Los programas de computadora contienen ciertos valores que no deben cambiar durante la ejecucin del programa. Tales valores se llaman constantes. De igual forma, existen otros valores que cambiarn durante la ejecucin del programa, a estos valores se les llama variables. CONSTANTES
Una constante es una partida de datos (objetos) que permanecen sin cambios durante el desarrollo del algoritmo o durante la ejecucin del programa Constantes reales vlidas Constantes reales no vlidas

1,752.63 (comas no permitidas) - 0.1436 82 (normalmente contiene punto decimal, aunque existen lenguajes que lo admiten sin punto) Una constante de tipo carcter o constante de caracteres consiste en un carcter vlido encerrado dentro de apstrofos; por ejemplo: B + 4 ;

Si se desea incluir el apstrofo en la cadena, entonces debe aparecer como un par de apstrofos, encerrados dentro de simples comillas: Una secuencia de caracteres se denomina normalmente una cadena y una constante tipo cadena es una cadena encerrada entre apstrofos. Por consiguiente: Juan Jimnez y Pepe Luis Garca son constantes de cadena vlidas. Nuevamente, si un apstrofo es uno de los caracteres en una constante de cadena, debe aparecer como un par de apstrofos: Juans Constantes lgicas (boolean) Slo existen dos constantes lgicas o boolean: Verdadero Falso

La mayora de los lenguajes de programacin permiten diferentes tipos de constantes: enteras, reales, caracteres y boolean o lgicas, y representan datos de esos tipos.

VARIABLES
Una variable es un objeto o partida de datos cuyo valor puede cambiar durante el desarrollo del algoritmo o ejecucin del programa. Dependiendo del lenguaje, hay diferentes tipos de variables, tales como enteras, reales, carcter, lgicas y de cadena. Una variable que es de un cierto tipo puede tomar nicamente valores de ese tipo. Una variable de carcter, por ejemplo, puede tomar como valor slo caracteres, mientras que una variable entera puede tomar slo valores enteros. Si se intenta asignar un valor de un tipo a una variable de otro tipo se producir un error de tipo.

Una variable se identifica por los siguientes atributos: nombre que lo asigna y tipo que describe el uso de la variable.

Los nombres de las variables, a veces conocidos como identificadores, suelen constar de varios caracteres alfanumricos, de los cuales el primero normalmente es letra. No se deben utilizar aunque lo permita el lenguaje como nombres de identificadores palabras reservadas del lenguaje de programacin. Nombres vlidos de variables: A510 NOMBRES NOTAS NOMRE_APELLIDOS (Algunos lenguajes de programacin admiten como vlido el carcter subrayado o guin bajo en los identificadores. Los nombres de las variables elegidas para el algoritmo o el programa deben ser significativos y tener relacin con el objeto que representan, como pueden ser los casos siguientes: NOMBRE PRECIOS NOTAS para representar nombres de personas para representar los precios de diferentes artculos para representar las notas de una clase.

Existen lenguajes C en los que es posible darles nombre a determinadas constantes tpicas utilizadas en clculos matemticos, financieros, etc. Por ejemplo, las constantes PI = 3.141592... y e = 2.7182818 (base de los logaritmos naturales) se les pueden dar los nombres PI y E.

Dentro de las variables nos encontramos con dos tipos que son muy usados dentro de los algoritmos: ACUMULADORES El acumulador es una variable, que se incrementa en una cantidad variable. Es una estructura que permite introducir, a una variable, un nuevo valor, tomando en consideracin el valor que ya estaba dentro de ella. CONTADORES Un contador es una variable que se incrementa en una cantidad variable. Es una estructura para llevar una cuenta. La variable utilizada se le suma o se le resta una cantidad constante, que normalmente es +1 o 1.
Ejemplos: Var Contador : integer;

Acumulador, Precio: real; Esta_lloviendo: boolean; Opcion : char; nombre : string [15]; a,b,c :integer;

TIPOS DE DATOS FUNDAMENTALES (Modificadores de datos) En la siguiente tablea se muestran los principales tipos de datos bsicos o simples, sus tamaos en bytes y el rango de valores que puede almacenar. TIPO char short int unsigned int Long Float Double Long double EJEMPLO C -15 1024 42325 262144 10.5 0.00045 Le-8 TAMAO EN BYTES 1 2 2 2 4 4 8 8 RANGO MNIMO..MXIMO 0..255 -128..127 -3276832767 0..65535 -2147483648..2147483637 3.4 *(10-38)..3.4 * (1038) 1.7 * (10-308)..1.7 * (10308) Igual que double

Los tipos de datos fundamentales en C son:


enteros: (nmeros completos y sus negativos), de tipo int. variantes de enteros: tipos short, long y unsigned. reales: nmeros decimales, tipos float, double o long double. caracteres: letras, dgitos, smbolos y signos de puntuacin, tipo char.

char, int, float y double son palabras reservadas, o ms especficamente, especificadores de tipos. Cada tipo de dato tiene su propia lista de atributos que definen las caractersticas del tipo y pueden variar de una mquina a otra. Los tipos char, int y double tienen variaciones o modificadores de tipos de datos, tales como short, long, signed y unsigned, para permitir un uso ms eficiente de los tipos de datos. Existe el tipo adicional enum (constante de enumeracin ). En C++, sin embargo, cada tipo enumerado es su propio tipo independiente. Esto significa que C++ no permite que un valor int se convierta automticamente a un valor enum. Sin embargo, un valor enumerado se puede utilizar en lugar de un int.
Ejemplo: enum lugar int lugar juan=1; //incorrecto pepe=primero; vencedor=pepe; lugar{primero,segundo,tercero}; //correcto //correcto

ENTEROS (int)

Probablemente el tipo de dato ms familiar es el entero, o tipo int. Los enteros son adecuados para aplicaciones que trabajen con datos numricos. Los tipos enteros se almacenan internamente en 2 bytes (o 16 bits) de memoria. La Tabla siguiente resume los tres tipos enteros bsicos, junto con el rango de valores y el tamao en bytes usual, dependiendo de cada mquina. TIPO C int Unsigned int Short int RANGO DE VALORES -32.768.. +32.767 0..65.535 -128..+127 USO RECOMENDADO Aritmtica de enteros, bucles, for, conteo Conteo bucles for, ndices Aritmtica de enteros, bucles for, conteo.

Operadores, operandos y expresiones. Los programas C constan de datos, sentencias de programas y expresiones. Una expresin es, normalmente, una ecuacin matemtica, tal como 3 +5. En esta expresin, el smbolo ms (+) es el operador de suma, y los nmeros 3 y 5 se llaman operandos. En sntesis, una expresin es una secuencia de operaciones y operandos que especifica un clculo. Cuando se utiliza el + entre nmeros (o variables) se denomina operador binario, debido a que el operador + suma dos nmeros. Otro tipo de operador de C es el operador unitario (<unario), que acta sobre un nico valor. Si la variable x contiene el valor 5, -x es el valor -5. El signo menos (-) es el operador unitario menos. C soporta un conjunto potente de operadores unarios, binarios y de otros tipos. Sintaxis Variable Expresin valor Variable= expresin identificador vlido C declarado como variable. una constante, otra variable a la que se ha asignado previamente un o una frmula que se ha evaluado y cuyo tipo es el de variable. Una expresin es un elemento de un programa que toma un valor. En algunos casos puede tambin realizar una operacin. Las expresiones pueden ser valores constantes o variables simples, tales como 25 o 'Z; pueden ser valores o variables combinadas con operadores(a++,m==n, etc.); o bien pueden ser valores combinados con funciones tales como toupper (b). OPERADOR DE ASIGNACiN

El operador = asigna el valor de la expresin derecha a la variable situada a su izquierda. codigo = 3467; fahrenheit = 123.456; coordX = 525; coordY = 725; Este operador es asociativo por la derecha, eso permite realizar asignaciones mltiples. As, a = b = c = 45; equivale a a=(b=(c=45)); o dicho de otro modo, a las variables a, by c se asigna el valor 45. Esta propiedad permite inicializar varias variables con una sola sentencia int a, b, c; a = b = c = 5; /* se asigna 5 a las variables a, by c */

Adems del operador de asignacin =, C proporciona cinco operadores de asignacin adicionales. En la Tabla siguiente aparecen los seis operadores de asignacin. Estos operadores de asignacin actan como una notacin abreviada para expresiones utilizadas con frecuencia. As, por ejemplo, si se desea multiplicar 10 por i, se puede escribir i = i * 10; OPERADORES DE ASIGNACIN DE C SMBOLO = *= /= variable a. USO a=b a *= b
variable a.

DESCRIPCIN
Asigna el valor de b a a. Multiplica a por b y asigna el resultado a la

a/=b

Divide a entre b y asigna el resultado a la

%= += -=
variable a.

a %= b a += b a-=b

Fija a al resto de a/b Suma b y a y lo asigna a la variable a. Resta b de a y asigna el resultado a la

C proporciona un operador abreviado de asignacin (* = ) , que realiza una asignacin equivalente i *= 10; equivale a i = i * 10;

EQUIVALENCIA DE OPERADORES DE ASIGNACIN Operador += -= *= /= %= Sentencia abreviada m += n m -= n m *= n m /= n m %= n Sentencia no abreviada m = m + n; m = m n; m = m * n; m = m / n; m = m % n;

Estos operadores de asignacin no siempre se utilizan, aunque algunos programadores C se acostumbran a su empleo por el ahorro de escritura que suponen. OPERADORES ARITMTICOS Los operadores aritmticos sirven para realizar operaciones aritmticas bsicas. Los operadores aritmticos C siguen las reglas algebraicas tpicas de jerarqua o prioridad. Estas reglas especifica la precedencia de las operaciones aritmticas. Considere la expresin 3+5*2 Cul es el valor correcto, 16 ( 8 * 2) o 13 (3 + 1 O ) ? De acuerdo a las citadas reglas, la multiplicacin se realiza antes que la suma. Por consiguiente, la expresin anterior equivale a: 3 + (5 * 2) En C las expresiones interiores a parntesis se evalan primero; a continuacin, se realiza los operadores unitarios, seguidos por los operadores de multiplicacin, divisin, resto, suma y resta.

OPERADORES ARITMTICOS Operador * / + % Tipos enteros Producto Divisin entera: cociente Suma Resta Divisin entera: resto Tipos reales Producto Ejemplo x*y

Divisin en coma flotante b / 5 Suma Resta x+y b-c b %. 5

Prioridad de operadores, evaluacin de expresiones. PRECEDENCIA DE OPERADORES MATEMTICOS BSICOS. Operador +, *, /, % Operacin +25, -6.745 5*5 es 25/5 es 25%6 es 2+3 2-3 es es 25 5 1 5 -1 Nivel de precedencia 1 2

+, Ejemplo

Cul es el resultado de la expresin: 7 * 10-5 % 3 * 4 + 9? Existen tres operadores de prioridad ms alta (*, % Y *) 70 - 5 % 3 * 4 + 9 La asociatividad es de izquierda a derecha, por consiguiente se ejecuta a continuacin % 70 - 2 * 4 + 9 y la segunda multiplicacin se realiza a continuacin, produciendo 70 - 8 + 9 Las dos operaciones restantes son de igual prioridad y como la asociatividad es a izquierda, se realizar la resta primero y se obtiene el resultado 62 + 9 y, por ltimo, se realiza la suma y se obtiene el resultado final de 71

Los parntesis se pueden utilizar para cambiar el orden usual de evaluacin de una expresin determinada por su prioridad y asociatividad. Las subexpresiones entre parntesis se evalan en primer lugar segn el modo estndar y los resultados se combinan para evaluar la expresin completa. Si los parntesis estn anidados -es decir, un conjunto de parntesis contenido en otro- se ejecutan en primer lugar los parntesis ms internos. Por ejemplo, considrese la expresin (7 * (10 - 5) % 3)* 4 + 9 La subexpresin (10 - 5) se evala primero, produciendo -~ (7 * 5 % 3) * 4 + 9 A continuacin se evala de izquierda a derecha la subexpresin (7 * 5 % 3) (35 % 3) * 4 + 9 seguida de 2*4+9 Se realiza a continuacin la multiplicacin, obteniendo 8+9 y la suma produce el resultado final 17 Bibliotecas estndares de C
El lenguaje C es muy simple. Carece de tipos y servicios que forman parte de otros lenguajes. No tiene tipo booleano, ni manejo de cadenas, ni manejo de memoria dinmica. No obstante, el estndar de C define un conjunto de bibliotecas de funciones, que necesariamente vienen con todo entorno de compilacin de C y que satisfacen estos servicios elementales. Las interfaces de estos servicios vienen definidas en unos ficheros cabeceras ( header files ). El nombre de estos ficheros suele terminar en .h Algunos de los servicios proporcionados por las bibliotecas estndares son: entrada y salida de datos (stdio.h) manejo de cadenas (string.h) memoria dinmica (stdlib.h) rutinas matemticas (math.h) CONSTRUCCIN DE EXPRESIONES Los datos se manipulan mediante expresiones, que sirven para calcular valores.

Una expresin combina varias operaciones y devuelve un valor. Los operadores *, / y % tienen precedencia sobre la suma y la resta. Se pueden utilizar parntesis para agrupar subexpresiones.

I.1. Ejemplos de expresiones:


1 2+2 4 + 6/2 (4+6) / 2 ( 3*5 + 12 ) % 7 Ejemplo 1. Cul es el resultado de la expresin: 6 + 2 * 3 - 4/2? 6 + 2 * 3 - 4/2 6 + 6 - 4/2 6+6 - 2 12 - 2 10 2. Cules el resultado de la expresin: 5 *5(5+(6-2)+1)? 5 * (5 + (6-2) + 1) 5 * (5 + 4 + 1) 5 * 10 50
ACTIVIDAD
Suponiendo los siguientes valores para las variables: X=2; y=6; z=9; r=100; s=10; a=15; b=3; Cuales son los valores correctos de cada expresin? Usar expresiones para las siguientes, usando operadores mixtos. Evaluar las siguientes expresiones. Siendo: x = 10; y = 20; z = 30;

a) x += 10; o 12 o 10 o 11 b) o o o c) o o o
s *= b; 9 13 30 r /= 0; infinito 1 error

a)

x = 10 + x y; o x += 10 y o x -= y + 10 o x += 10 + y

a) z = x y, t = z o o o
y; z =- 10, t=-30 t = 10 z = 30, t=-30

b) o o o

r = 100* r; r *= 100* r r *= 100 r += 100 = y/ (10+x); y /= 10*x y /= 10 + y/x y/= 10+x

b) (x < 10) && (y o o


> 15) true false

c) y o o o

c) (x <= z) | | (z o o
<= y) true false

d) o o o e) o o o

y += x + 10; 8 12 18 z -= a*b; -36 -18 36

d) o o o

z = 3 * x + 6; z +=6 z *=3 no es posible

d) (x+y < z) o true o false e) (x+y != z) && (1/ (z-x-y) !=


1)

o o o

true false error

Los siguientes identificadores estn reservados para utilizarlos como palabras reservadas, y no se deben emplear para otros propsitos. asm 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

COMENTARIOS Ya se ha expuesto antes que los comentarios en C tienen el formato: /*. . . */ Los comentarios se encierran entre / * y * / pueden extenderse a lo largo de varias lneas. /* Titulo: Demo_uno por Mr. Martinez */ Otra forma, el comentario en dos lneas: /* Cabecera del programa text_uno Autor: J.R. Mazinger */ SIGNOS DE PUNTUACIN Y SEPARADORES | Todas las sentencias deben terminar con un punto y coma. Otros signos de puntuacin son:

! % [ ]

^ \

& ;

* '

( :<

) >

+ ,

= .

{ } ? / "

Los separadores son espacios en blanco, tabulaciones, retornos de carro y avances de lnea. Este ejemplo muestra cmo una variable puede ser declarada al inicio de cualquier bloque, programa C. #include <stdio.h> /* Diferentes declaraciones */ int main () { int X, y1; funcion main*/ x = 75; y1 = 89; if (x > 10) { int y2 = 50; el y1 = y1+y2; } printf("x = %d, y1 = %d\n",x,y1)" return 0; }

/* declarar a las variables x e y1 en la

/* declarar e inicializa a la variable y2 en bloque if */

INICIALIZACIN DE VARIABLES

En algunos programas anteriores, se ha proporcionado un valor denominado valor inicial, a una variable cuando se declara. El formato general de una declaracin de inicializacin es: Tipo nombre_variable = expresin Expresin es cualquier expresin vlida cuyo valor es del mismo tipo que tipo. Nota. Esta sentencia declara y proporciona un valor inicial a una variable. Las variables se pueden inicializar a la vez que se declaran, o bien, inicializarse despus declaracin. El primer mtodo es probablemente el mejor en la

mayora de los casos, ya que combinan la definicin de la variable con la asignacin de su valor inicial. char respuesta; 'S'; int contador = 1; float peso = 156.45; int anyo = 1993; Estas acciones crean variables respuesta, contador, peso y anyo, que almacenan en memoria los valores respectivos situados a su derecha. El segundo mtodo consiste en utilizar sentencias de asignacin diferentes despus de definir la variable, como en el siguiente caso: char barra; barra = '/'; DECLARACIN O DEFINICIN La diferencia entre declaracin y definicin es sutil. Una declaracin introduce un nombre de una variable y asocia un tipo con la variable. Una definicin es una declaracin que asigna simultneamente memoria a la variable. double x; double */ char c_var; int i; int i = 0; /* declara el nombre de la variable x de tipo /* declara c_var de tipo char */ /* definido pero no inicializado */ /* definido e inicializado a cero.*/

DURACiN DE UNA VARIABLE Dependiendo del lugar donde se definan las variables de C, stas se pueden utilizar en la totalidad el programa, dentro de una funcin o pueden existir slo temporalmente dentro de un bloque de una funcin. La zona de un programa en la que una variable est activa se denomina, normalmente, mbito o alcance <scope ). El mbito (alcance) de una variable se extiende hasta los lmites de la definicin de su bloque. Los tipos bsicos de variables en C son:

variables locales; variables globales; variables dinmicas.

VARIABLES LOCALES Las variables locales son aqullas definidas en el interior de una funcin y son visibles slo en esa funcin especfica. Las reglas por las que se rigen las variables locales son:
1. En el interior de una funcin, una variable local no puede ser modificada

por ninguna sentencia externa a la funcin.

2. Los nombres de las variables locales no han de ser nicos. Dos, tres o

ms funciones pueden definir variables de nombre Interrupto/: Cada variable es distinta y pertenece a la funcin en que est declarada. 3. Las variables locales de las funciones no existen en memoria hasta que se ejecuta la funcin. Esta propiedad permite ahorrar memoria, ya que permite que varias funciones compartan la misma memoria para sus variables locales (pero no a la vez).

Por la razn dada en el punto 3, las variables locales se llaman tambin automticas o auto, ya que dichas variables se crean automticamente en la entrada a la funcin y se liberan tambin automticamente cuando se termina la ejecucin de la funcin. include <stdio.h> int main() { int a, b, c, suma, numero; locales */ printf("Cuantos nmeros a sumar:"); scanf("%d",&numero); suma = a + b + C; return 0; } VARIABLES GLOBALES Las variables globales son variables que se declaran fuera de la funcin y por defecto (omisin) son visibles a cualquier funcin, incluyendo main ( ) . #include <stdio.h>

/*variables

int a, b, C; /* declaracin de variables globales */ int main() { int valor; /* declaracin de variable local */ printf("Tres valores: ); scanf("%d %d %d",&a,&b,&c); /* a,b,c variables globales */ valor = a+b+c; ...... } Todas las variables locales desaparecen cuando termina su bloque. Una variable globales. Una variable global r visible desde el punto en que se define hasta el final del programa (archivo fuente). La memoria asignada a una variable global permanece asignada a travs de la ejecucin del programa, tomando espacio vlido segn se utilice. Por esta razn, se debe evitar utilizar muchas variables globales dentro de un programa. Otro problema que surge con variables globales es que una funcin puede asignar un valor especfico a una variable global. Posteriormente, en otra funcin, y por olvido, se pueden hacer cambios en la misma variable. Estos cambios dificultarn la localizacin de errores. VARIABLES DINMICAS Las variables dinmicas tienen caractersticas que en algunos casos son similares tanto a variables locales como a globales. Al igual que una variable local, una variable dinmica se crea y libera durante la ejecucin del programa. La diferencia entre una variable local y una variable dinmica es que la variable dinmica se crea tras su peticin (en vez de automticamente, como las variables locales) es decir, a su voluntad, y se libera cuando ya no se necesita. Al igual que una variable global, se pueden crear variables dinmicas que son accesibles desde mltiples funciones. En el segmento de cdigo C siguiente, Q es una variable global por estar definida fuera de las funciones y es accesible desde todas las sentencias. Sin embargo, las definiciones dentro de main, como A, son locales a main. Por consiguiente, slo las sentencias interiores a main pueden utilizar A. #include <stdio.h> int Q; Q; int main() { int A;

Alcance o mbito global variable global Local a main

A, variable local A = 124; Q = 1; { int B; B = 124; A = 457; Q = 2; { int c; C = 124; B = 457; A = 788; Q = 3; } } } Subnivel ms interno de main C, variable local Primer subnivel en main B, variable local

CODIFICALO A LENGUAJE C LOS SIGUIENTES EJERCICIOS 1. Escribir un algoritmo que sume dos nmeros:
a=4 b=3

2. Escribir un algoritmo que sume, reste, multiplique y divida dos nmeros:


x = 10 y=2

3. Escribir un algoritmo que calcule el rea de un rectngulo:


lado1 = 3 lado2 = 4 rea del rectngulo=lado1 * lado2

4. Escribir un algoritmo que calcule el rea de un tringulo:


base = 7 altura = 4 rea del tringulo = (base * altura)/2

5. Escribir un algoritmo que calcule la longitud y el rea de una circunferencia:


radio = 4 longitud de la circunferencia = 2 * PI * radio rea de la circunferencia = PI * radio2

6. Escribir un algoritmo que calcule la velocidad de un proyectil que recorre 2 Km


en 5 minutos. Expresar el resultado en metros y segundo.

Velocidad = espacio/tiempo

7. Escribir un algoritmo que calcule el volumen de una esfera:


radio = 3 volumen de la esfera = 4/3 * PI * radio3

8. Escribir un algoritmo que evale la siguiente expresin:


(a+7*c)/(b+2-a)+2*b a = 3,b = 6,c = 4

9. Escribir un algoritmo que evale la siguiente expresin:


(a+5) * 3 / 2 * b - b a = 3,b = 6

10. Escribir un algoritmo que evale la siguiente expresin:


(-b + razcuadrada(b2-4*a*c)/(2*a) (es la solucin positiva de una ecuacin de 2 grado)

11. Escribir un algoritmo que calcule el rea y el volumen de un cilindro:


A = (2 * (PI * r2)) + ((2 * PI * r) * h) V = (PI * r2) * h

12. Escribir un algoritmo que calcule el rea y el volumen de un hexaedro


A = (l*l) * 6 V = l3

13. Escribir un algoritmo que calcule el rea y el volumen de un prisma


A = (2 *(l1 * l2)) + (2 * (l1 * l3)) + (2*(l2 * l3)) V = l1 * l2 * l3

14. Escribir un algoritmo que calcule el rea y el volumen de un tetraedro


A = a2 * razcuadrada(3) V = (a3/12) * razcuadrada (2)

15. Escribir un algoritmo que calcule el rea y el volumen de un octaedro


A = 2 * a2 * razcuadrada(3) V=(a3/3) * razcuadrada(2)

16. Escribir un algoritmo que calcule el rea y el volumen de un cono


A = (PI * r * l)+ (PI * r2) V = (PI * r2 * h)/3

17. Escribir un algoritmo que calcule el volumen e un elipsoide


V = (4/3) * PI * a * b *c

18. Escribir un algoritmo que calcule una ecuacin de 2 grado

19. Escribir un algoritmo que calcule el rea y el volumen de un cilindro:


radio = 3 altura = 4

20. Escribir un algoritmo que calcule la hipotenusa de un tringulo rectngulo


cateto 1 = 5 cateto 2 = 5

21. Escribir un algoritmo que calcula el equivalente en grados Fahrenheit o Celsius


de las siguientes temperaturas. Temperatura 1 = 32 Fahrenheit Temperatura 2 = 10 Celsius {Regla de 3: Celsius / 5 = (Fahrenheit 32) 9}

22. Escribir un algoritmo que calcule el nmero de horas, minutos y segundos que
hay en 3700 segundos.

23. Escribir un algoritmo que calcule el capital producido por un capital de


1.000.000 de pesetas, al cabo de un ao depositado a un inters del 2%.

24. Escribir un algoritmo que calcula la siguiente expresin trigonomtrica para un


valor angulas de 90 (sen x * cos x)/(tan x)

25. Escribir un algoritmo que calcule el equivalente en pies de una longitud de 10


metros. 1 metro ------------- 12 pulgadas -------- coordenadas: x1 = 10 y1 = 10 x2 = 20 y2 = 20 39.27 pulgadas 1 pie

26. Escribir un algoritmo que calcule el rea de un rectngulo a partir de sus

27. Un coche se mueve, partiendo del reposo, con una aceleracin constante de 8
m/s2. Escribir un algoritmo que calcule:

a) b)

La velocidad instantnea al cabo de5 segundos. La velocidad media durante los primeros 5 segundos del recorrido.

velocidad instantnea = velocidad inicial + aceleracin * tiempo velocidad media = (velocidad inicial + velocidad final)/2

28. Un cohete se lanza verticalmente con una velocidad de 500 m7s calcular la
velocidad al cabo de 40 segundos mediante un algoritmo

velocidad instantnea = (velocidad inicial) (aceleracin de la gravedad * tiempo) Realizar los siguientes ejercicios conforme a lo que se te solicita

1. Cul es la salida del siguiente programa? #include <stdio.h> int main() { char pax [] = Juan Sin Miedo; printf(%s %s/n, pax, &pax [4] ); puts (pax); puts (&pax [4] ); return 0; } 2.- Escribir y ejecutar un programa que imprima su nombre y direccin 3.- Escribir y ejecutar un programa que imprima una pgina de texto con no ms de 40 caracteres por lnea 4.- Depurar el programa siguiente: #include <sodio.h> void main() { printf(el lenguaje de programacin C) 5.- Escribir un programa que imprima la letra B con asteriscos ***** * * * * * * ***** * * * * * * *****

Entrada y salida
Los programas interactan con el exterior, a travs de datos de entrada o datos de salida. La biblioteca C proporciona facilidades para entrada y salida, para lo que todo programa deber tener el archivo de cabecera stdio.h. En C la entrada y salida se lee y escribe de los dispositivos estndar de entrada y salida, se denominan stdin y stdout respectivamente. La salida, normalmente, es a pantalla de la computadora, la entrada se capta del teclado.

En el archivo stdio. h estn definidas macros, constantes, variables y funciones que permiten intercambiar datos con el exterior. A continuacin se muestran las ms habituales y fciles de utilizar. SALIDA La salida de datos de un programa se puede dirigir a diversos dispositivos, pantalla, impresora, archivos. La salida que se trata a continuacin va a ser a pantalla, adems ser formateada. La funcin printf( ) visualiza en la pantalla datos del programa, transforma los datos, que estn en representacin binaria, a ASCII segn los cdigos transmitidos. As, por ejemplo, suma = o; suma = suma+10; printf("%s %d","Suma = ",suma); visualiza Suma = 10 El nmero de argumentos de printf() es indefinido, por lo que se pueden trasmitir cuantos datos se desee. As, suponiendo que: i=5 = 40.791512 la sentencia printf("%d %d %c %f",i,j,c,n); visualizar en pantalla 5 12 A 40.791512 j = 12 c = 'A' n

La forma general que tiene la funcin printf () printf (cadena_de_control, dato1, dato2, ...) cadena_de_control forma de mostrarlos. datol, dat02 ... contiene los tipos de los datos y variables, constantes, datos de salida.

printf() convierte, da forma de salida a los datos y los escribe en pantalla. La cadena de control contiene cdigos de formato que se asocian uno a uno con los datos. Cada cdigo comienza con el carcter %, a continuacin puede especificarse el ancho mnimo del dato y termina con el carcter de conversin. As, suponiendo que i = 11 40.791512 j = 12 c = 'A' n =

printf("%x %3d %c %.3f",i,j,c,n); visualizar en pantalla B 12 A 40.792 El primer dato es 11 en hexadecimal (%x), el segundo es el nmero entero 12 en un ancho le sigue el carcter A y, por ltimo, el nmero real n redondeado a 3 cifras decimales (%. 3 f). Un signo menos a continuacin de % indica que el dato se ajuste a la izquierda en vez del ajuste a la derecha por defecto. printf("%15s","HOLA LUCAS"); printf("%-15s","HOLA LUCAS"); visualizar en pantalla HOLA LUCAS HOLA LUCAS Los cdigos de formato ms utilizados y su significado: %d %0 %x %u %c El dato se convierte a entero decimal. El dato entero se convierte a octal. El dato entero se convierte a hexadecimal. El dato entero se convierte a entero sin signo. El dato se considera de tipo carcter. "

%e El dato se considera de tipo float. Se convierte a notacin cientfica, de la forma {-} n.mmmmmmE{ +|-}dd. El dato se considera de tipo float. Se convierte a notacin decimal, con parte entera los dgitos de precisin. El dato se considera de tipo float. Se convierte segn el cdigo %e o %f dependiendo de cual sea la representacin ms corta. El dato ha de ser una cadena de caracteres. El dato se considera de tipo double.

%f %g %s %1f

C utiliza secuencias de escape para visualizar caracteres que no estn representados por smbolos tradicionales, tales como \ a, \b, etc. Las secuencias de escape clsicas se muestran en la Tabla siguiente. Las secuencias de escape proporcionan flexibilidad en las aplicaciones mediante efectos especiales.

printf("\n Error - Pulsar una tecla para continuar \n"); printf("\n"); /* salta a una nueva lnea */ printf("Yo estoy preocupado\n no por el \n sino por ti.\n") ; la ltima sentencia visualiza Yo estoy preocupado no por el sino por ti. debido a que la secuencia de escape' \n' significa nueva lnea o salto de lnea. Otros ejemplos: printf("\n Tabla de nmeros \n"); nueva lnea */ printf("\nNuml\t Num2\t Num3\n"); tabulaciones */ printf("%c", '\a'); sonora */ /* uso de \n para /* uso de \t para /* uso de \a para alarma

en los que se utilizan los caracteres de secuencias de escape de nueva lnea (\n) , tabulacin (\ t) alarma (\a). TABLA CARACTERES SECUENCIAS DE ESCAPE. SENTENCIAS DE ESCAPE \A \B \F \N \R \T \V \\ \? \ \000 \XHH \0 Ejemplo El listado SECESC. C utiliza secuencias de escape, tales como emitir sonidos (pitidos) en el terminal dos veces y a continuacin presentar dos retrocesos de espacios en blanco. /* Programa:SECESC.C Propsito: Mostrar funcionamiento de secuencias de escape */ SIGNIFICADO ALARMA RETROCESO DE ESPACIO AVANCE DE PGINA RETORNO DE CARRO Y AVANCE DE LNEA RETORNO DE CARRO TABULACIN TABULACION VERTICAL BARRA INCLINADA SIGNO DE INTERROGACIN DOBLES COMILLAS NUMERO OCTAL NUMERO HEXADECIMAL CERO, NULO (ASCII 0)

#include <stdio.h > int main ( ) { char sonidos='\a'; /* secuencia de escape alarma en sonidos */ char bs='\b'; /* almacena secuencia escape retroceso en bs printf("%c%c",sonidos,sonidos); /* emite el sonido dos veces */ printf("ZZ"); /* imprime dos caractres */ printf("%c%c",bs,bs); /* mueve el cursar al primer carcter 'Z' */ return 0; } ENTRADA La entrada de datos a un programa puede tener diversas fuentes, teclado, archivos en disco. La entrada que consideramos ahora es a travs del teclado, asociado al archivo estndar de entrada stdin. La funcin mas utilizada, por su versatilidad, para entrada formateada es scanf() . El archivo de cabecera s t di o . h de la biblioteca C proporciona la definicin (el prototipo) de scanf (), as como de otras funciones de entrada o de salida. La forma general que tiene la funcin scanf(). scanf(cadena_de_control, var1, var2, var3,...) cadena_de_control se desea su anchura. Var1, var2 ... control. contiene los tipos de los datos y si variables del tipo de los cdigos de

Los cdigos de formato ms comunes son los ya indicados en la salida. Se pueden aadir, como sufijo del cdigo, ciertos modificadores como 1 o L. El significado es largo, aplicado a flota (%1f) indica tipo double, aplicado a int (%1d) indica entero largo. int n ; double x ; scanf("%d %1f",&n,&x) ; La entrada tiene que ser de la forma 134 -1.4E-4

En este caso la funcin scanf () devuelve n=134 x=-1.4E-4 (en doble precisin). Los argumentos varl, var2 ... de la funcin scanf () se pasan por direccin o referencia a ser modificados por la funcin para devolver los datos. Por ello necesitan el operador de direccin, el prefijo &. Un error frecuente se produce al escribir, por ejemplo,

double x ; scanf("%1f",x) ; en vez de scanf("%1f",&x); Las variables que se pasan a scanf () se transmiten por referencia para poder ser modficadas y transmtr los datos de entrada, para ello se hacen preceder de &. Un ejemplo tpico es el siguiente: printf("Introduzca v1 y v2:"); scanf("%d %f",&vl,&v2); v2 */ printf("precio de venta al pblico"); scanf("%f",&Precio_venta); printf{"Base y altura: ); scanf("%f %f",&b,&h); La funcin scanf () termina cuando ha captado tantos datos como cdigos de control se han especficado, o cuando un dato no coincide con el cdigo de control especificado. Ejemplo Cul es la salida del siguiente programa, si se introducen por teclado las letras LJ? #include <stdio.h> int main() { char primero, ultimo; printf("Introduzca su primera y ltima inicial:"); scanf(n%c %cn,&primero,&ultimo); printf(nHola, %c . %c .\n",primero,ultimo); return 0 } SALIDA DE CADENAS DE CARACTERES Con la funcin printf () se puede dar salida a cualquier dato, asocindolo el cdigo que le corresponde. En partcular, para dar salda a una cadena de caracteres se utiliza el cdigo %s. As, /*lectura valores v1 y

char arbol [] = "Acebo"; printf("%s\n",arbol); Para salida de cadenas, la bblioteca C proporcona la funcn especfica puts ( ) . llene un solo argumento, que es una cadena de caracteres. Escribe la cadena en la salida estndar (pantalla) y aade el fin de lnea. As, puts(arbol); muestra en pantalla lo mismo que Ejemplo Cul es la salida del siguiente programa? #include <stdio.h> #define T "Tambor de hojalata." int main() { char st[21]="Todo puede hacerse." puts (T); puts("Permiso para salir en la foto."); puts(st); puts (&st [8] ); return 0; } ENTRADA DE CADENAS DE CARACTERES La entrada de una cadena de caracteres se hace con la funcin ms general scanf () y el cdigo %s. As, por ejemplo, char nombre[51] printf("Nombre del atleta: "); scanf("%s",nombre); printf("Nombre introducido: %s",nombre); La entrada del nombre podra ser Junipero Serra La salida Nombre introducido: Junipero scanf () con el cdigo %s capta palabras, el criterio de terminacin es el encontrarse un blanco, o bien fin de lnea. printf ("%s\n", arbol) ;

Tambin comentar que nombre no tiene que ir precedido del operador de direccin &. En C el identificador de un array, nombre lo es, tiene la direccin del array, por lo que en scanf () se transmite la direccin del array nombre. La biblioteca de C tiene una funcin especfica para captar una cadena de caracteres, la funcin gets ( ) . Capta del dispositivo estndar de entrada una cadena de caracteres, termina la captacin con un retorno de carro. El siguiente ejemplo muestra cmo captar una lnea de como mximo 80 caracteres. char linea[81], puts("Nombre y direccin"); gets(linea); La funcin gets () tiene un solo argumento, una variable tipo cadena. Capta la cadena de entrada y la devuelve en la variable pasada como argumento. gets(variable_cadena); Tanto con scanf () como con gets ( ), el programa inserta al final de la cadena el carcter que indica fin de cadena, el carcter nulo, \0. Siempre hay que definir las cadenas con un espacio ms del previsto como mxima longitud para el carcter fin de cadena. OTRAS FUNCIONES DE ENTRADA Y SALIDA La biblioteca de C++ proporciona facilidades para entrada y salida que son ms convenientes qwue las funciones de biblioteca clsica. En C++ la entrada y salida se lee y escribe en flujos (stream). Cuando iostream.h se incluye en un programa, diferentes flujos estndar son definidos automticamente. El flujo cin, se utiliza para entrada, que normalmente se lee de teclado. El flujo cout se utiliza para salida y, normalmente, se enva a la pantalla del usuario. SALIDA (cout) El operador de insercin, <<, inserta los datos en el flujo cout que los visualiza en la pantalla de su equipo. Ejemplo: cout << Esto es una cadena; Se visualiza Esto es una cadena Es posible utilizr una serie de operaciones << en cascada, As, cout << 500 << 600 << 700; visualiza

500

600

700

Las sentencias de escape que se utilizan en esta dormto de salida son los mismos vistos en el cuadro anterior. ENTRADAS (cin) El archivo de cabecera iostream.h de la biblioteca C++ proporciona un flujo de entrada estndar cin y un operador de extraccin, >>, para extraer valores del flujo y almacenarlos en variables. Si no se redirige explcitamente cin, la entrada procede del teclado. Int n; cin >> n; double x; cin >> x;

Los operadores de extraccin e insercin, << y >>, apuntan en la direccin del flujo de datos, cout << introduzca v1 y v2:; cin >> v1>>v2; cout <<Precio de venta al pblico; cin >> Precio_venta;

RESOLVER LOS SIGUIENTES PSEUDOCODIGO Y LENGUAJE C.

PROBLEMAS

EN

1. Escribir un algoritmo que sume cuatro nmeros introducidos por teclado 2. Escribir un algoritmo que sume, reste, multiplique y divida dos nmeros
introducidos por teclado

3. Escribir un algoritmo que calcule el rea de un rectngulo introduciendo los


valores por teclado: Formula: rea del rectngulo = lado1 * lado2

4. Escribir un algoritmo que lea un nmero y escriba su cuadrado 5. Escribir un algoritmo que sume, reste, multiplique y divida dos nmeros
introducidos por teclado

6. Escribir un algoritmo que calcule y escriba la suma del cuadrado de 3 numeros 7. Escribir un algoritmo que lea un nmero y escriba su cuadrado 8. Escribir un algoritmo que lea desde teclado el importe bruto de una factura y
determine el importe neto segn los siguientes criterios. Importe bruto menor de 20.000 -> sin descuento

Importe bruto mayor de 20.000 ->

15% de descuento

UNIDAD IV
3. Estructuras de Decisin y Control
Competencia especfica a desarrollar:

Actividades de aprendizaje:

BIBLIOGRAFIA: 7. Luis Joyanes Aguilar. Fundamentos de Programacin. Algoritmos, Estructura de Datos y Objetos. McGRAW HILL. Espaa 2003. 8. Jos Vasconcelos Santilln. Introduccin a la computacin. Publicaciones Cultural. Mxico 2000. 9. Guillermo Levine Gutierrez. Introduccin a la computacin y a la Programacin Estructurada. McGRAW-HILL. Mxico 1984. 10.Patricia Quiroga. Arquitectura de Computadoras. Alfaomega. Buenos Aires 2010. 11.Jaime Martnez Garza, Jorge Agustin Olvera Rodrguez. Organizacin Arquitectura de Computadoras. Prentice Hall. Mxico 2000. 12.Notas de Internet

4.1 Estructura secuencial 4.2 Estructuras de Transferencia Incondicionales 4.3 Estructuras de Transferencia Condicionales 4.4 Estructuras Repetitivas (Bucles)
CONTROL SECUENCIAL Las estructuras de control secuencial son las que se dan las instrucciones seguidas una a una sin tener un birfucacin ni una toma de decisin. (Este tema se vi en la unidad anterior). ESTRUCTURAS SELECTIVAS. PROPOSICION IF - ELSE

Esta proposicin sirve para ejecutar ciertas sentencias de programa , si una expresin resulta CIERTA otro grupo de sentencias, si aquella resulta FALSA. Su interpretacin literal sera : SI es CIERTA tal cosa , haga tal otra , si no lo es saltela El caso ms sencillo sera : if(expresin) sentencia ; if(expresin) sentencia ; Cuando la sentencia que sigue al IF es nica, las dos formas de escritura expresadas arriba son equivalentes . La sentencia slo se ejecutar si el resultado de "expresin" es distinto de cero (CIERTO) , en caso contrario el programa saltear dicha sentencia , realizando la siguiente en su flujo. Veamos unos ejemplos de las distintas formas que puede adoptar la "expresin" dentro de un IF : if( a > b ) if( (a > b) != 0 ) las dos expresiones son idnticas, aunque a veces resulta ms claro expresarla de la segunda manera, sobre todo en los primeros contactos con el lenguaje. Las dos superiores son idnticas entre s , al igual que las dos inferiores Obsrvese que (! a) dar un valor CIERTO slo cuando a sea FALSO. (ver operador NEGACION en el captulo anterior ) La primera es una expresin correcta , el IF se realizar slo si a es igual a b. En cambio la segunda es un error , ya que no se est comparando a con b , sino ASIGNANDO el valor de esta a aquella . Sin embargo, a veces puede usarse como un truco (un poco sucio) de programacin , ya que primero se realiza la asignacin y luego se evala el resultado de esta para realizar el IF , es entonces equivalente a escribir : a=b; con el ahorro de una lnea de programa ( a costa de la legibilidad del mismo ).

if(a) if(!a)

if(a != 0) if(a == 0 )

if( a == b ) if( a = b )

/* Error */

if(a)

....................

En casos ms complejos que los anteriores , la proposicin IF puede estar seguida por un bloque de sentencias : if(expresin) if(expresin) { { sentencia 1 ; sentencia 1 ; sentencia 2 ; sentencia 2 ; ............... ............. } }

Las dos maneras son equivalentes , por lo que la posicin de la llave de apertura del bloque queda librada al gusto del programador . El indentado de las sentencias (sangra) es tambin optativo , pero sumamente recomendable ,sobre todo para permitir la lectura de proposiciones muy complejas anidadas , como se ver luego. El bloque se ejecutar en su conjunto si la expresin resulta CIERTA. El uso del ELSE es optativo , y su aplicacin resulta en la ejecucin de una , una serie de sentencias en el caso de que la expresin del IF resulta FALSA. Su aplicacin puede verse en el ejemplo siguiente : if(expresin) if(expresin) { { sentencia 1 ; sentencia 1 ; sentencia 2 ; sentencia 2 ; } } sentencia 3 ; else sentencia 4 ; { sentencia 5 ; sentencia 3 ; sentencia 4 ; } sentencia 5 ; En el ejemplo de la izquierda no se usa el ELSE y por lo tanto las sentencias 3 , 4 y 5 se ejecutan siempre . En el segundo caso , las sentencias 1 y 2 se ejecutan solo si la expresin es CIERTA , en ese caso las 3 y 4 NO se ejecutarn para saltarse directamente a la 5 , en el caso de que la expresin resulte FALSA se realizarn las 3 y 4 en lugar de las dos primeras y finalmente la 5 La proposicin ELSE queda siempre asociada al IF ms cercano , arriba de l. Es comn tambin , en caso de decisiones mltiples , el uso de anidamientos ELSE-IF de la forma indicada abajo: if(exp.1) if(exp.1) sentencia1 ; sentencia1 ; else if(exp.2) else if(exp.2) sentencia2 ; sentencia2 ; else if(exp.3) else if(exp.3) sentencia3 ; sentencia3 ; else else sentencia5 ; sentencia5 ; Si bien se suele escribir segn la modalidad de la izquierda , a la derecha hemos expresado las asociaciones entre los distintos ELSE IF por medio del indentado del texto. PROPOSICION SWITCH El SWITCH es una forma sencilla de evitar largos , tediosos y confusos anidamientos de ELSE-IF Supongamos que estamos implementando un Men , con varias elecciones posibles . El esqueleto de una posible solucin al problema usando if-else podra ser el siguiente : #include <<stdio.h>> main() { int c ; printf("\nMENU :") ; printf("\n A = ADICIONAR A LA LISTA ") ; printf("\n B = BORRAR DE LA LISTA ") ;

printf("\n O = ORDENAR LA LISTA ") ; printf("\n I = IMPRIMIR LA LISTA ") ; printf("\n\nESCRIBA SU SELECCION , Y LUEGO <<ENTER>> : ") ; if( (c = getchar()) != '\n' ) { if( c == 'A') printf("\nUD. SELECCIONO AGREGAR") ; else if( c == 'B') printf("\nUD. SELECCIONO BORRAR") ; else if( c == 'O' ) printf("\nUD. SELECCIONO ORDENAR") ; else if( c == 'I' ) printf("\nUD. SELECCIONO IMPRIMIR") ; else printf("\n\a\aUD. APRETO UN CARACTER ILEGAL" ) ; } else printf("\n UD. NO HA SELECCIONADO NADA !" ) ; } Como es fcil de ver , cuando las opciones son muchas, el texto comienza a hacerse difcil de entender y engorroso de escribir El mismo programa, utilizando un SWITCH , quedara mucho ms claro de leer, y sencillo de escribir, como se aprecia en el EJEMPLO siguiente. #include <stdio.h> #include <conio.h> main() { int c ; printf("\nMENU :") ; printf("\n A = ADICIONAR A LA LISTA ") ; printf("\n B = BORRAR DE LA LISTA ") ; printf("\n O = ORDENAR LA LISTA ") ; printf("\n I = IMPRIMIR LA LISTA ") ; printf("\n\nESCRIBA SU SELECCION , Y LUEGO <<ENTER>> : ") ; c = getchar() ; switch (c) { case 'A' : printf("\nUD. SELECCIONO AGREGAR") ; break ; case 'B' : printf("\nUD. SELECCIONO BORRAR") ; break ; case 'O' : printf("\nUD. SELECCIONO ORDENAR") ; break ;

case 'I' : printf("\nUD. SELECCIONO IMPRIMIR") ; break ; case '\n': printf("\n UD. NO HA SELECCIONADO NADA !" ) ; break ; default : printf("\n\a\aUD. APRETO UN CARACTER ILEGAL" ) ; break ; } } El SWITCH empieza con la sentencia : switch (expresin) . La expresin contenida por los parntesis debe ser ENTERA , en nuestro caso un carcter ; luego mediante una llave abre el bloque de las sentencias de comparacin . Cada una de ellas se representa por la palabra clave "case" seguida por el valor de comparacin y terminada por dos puntos . Seguidamente se ubican las sentencias que se quieren ejecutar , en el caso que la comparacin resulte CIERTA . En el caso de resultar FALSA , se realizar la siguiente comparacin , y as sucesivamente Prestemos atencin tambin a la sentencia BREAK con la que se termina cada CASE. Una caracterstica poco obvia del SWITCH , es que si se eliminan los BREAK del programa anterior , al resultar CIERTA una sentencia de comparacin, se ejecutarn las sentencias de ese CASE particular pero TAMBIEN la de todos los CASE por debajo del que ha resultado verdadero. Quizs se aclare esto diciendo que , las sentencias propias de un CASE se ejecutarn si su comparacin otra comparacin ANTERIOR resulta CIERTA . La razn para este poco "juicioso" comportamiento del SWITCH es que as se permite que varias comparaciones compartan las mismas sentencias de programa , por ejemplo : ................. case 'X' : case 'Y' : case 'Z' : printf(" UD. ESCRIBIO X , Y , Z ") ; break ; .................. La forma de interrumpir la ejecucin luego de haber encontrado un CASE cierto es por medio del BREAK , el que da por terminado el SWITCH Al final del bloque de sentencias del SWITCH , aparece una optativa llamada DEFAULT , que implica : si no se ha cumplido ningn CASE , ejecute lo que sigue. Es algo superfluo poner el BREAK en este caso , ya que no hay ms sentencias despus del DEFAULT , sin embargo , como el orden en que aparecen las comparaciones no tiene importancia para la ejecucin de la instruccin, puede suceder que en futuras correcciones del programa se agregue algn nuevo CASE luego del DEFAULT , por lo que es conveniente preverlo , agregando el BREAK , para evitar errores de laboriosa ubicacin.

I.

ESCTRUCTURAS DE CONTROL SELECTIVAS RESOLVER LOS SIGUIENTE ENUNCIADOS EN PSEUDOCDIGO Y CODIFICARLOS A LENGUAJE C.

1. 2.

Escribir un programa que introduzca el nmero de un mes (1 a 12) y el ao y visualice el nmero de das del mes. Cuatro enteros entre 0 y 100 presentan las puntuaciones de un estudiante de un curso de informtica. Escribir un programa para encontrar la media de estas puntuaciones y visualizar una tabla de notas de acuerdo al siguiente cuadro: Media 90-100 80-90 70-80 60-70 0-60 Puntuacin A B C D E

3. 4. 5. 6. 7. 8. 9.

Escribir un programa que lea dos nmeros enteros y visualice el menor de los dos. Escribir un programa que resuelva la ecuacin cuadrtica (ax2 + bx + c = 0). Escribir un programa que lea tres enteros y emita un mensaje que indique si estn o no en orden numrico. Escribir y ejecutar un programa que simule un calculador simple. Lee dos enteros y un carcter. Si el carcter es un +, se visualiza la suma; si es un -, se visualiza la diferencia; si es un * se visualiza el producto; si es un /, se visualiza el cociente; si es un % se imprime el resto. Construir un programa que indique si el nmero introducido por teclado es positivo, igual a cero o negativo. Se desea leer las edades de 3 hijos de un matrimonio y escribir la edad mayor, la menor y la media de las 3 edades. Escribir un programa que acepte fechas escritas de modo usual y las visualice como 3 nmeros. Por ejemplo, la entrada 15, de febrero 1989 producir la salida 15 02 1989.

II.

EJERCICIOS DE ESTRUCTURAS DE CONTROL SELECCIN MLTIPLE RESOLVER LOS SIGUIENTE ENUNCIADOS EN PSEUDOCDIGO Y CODIFICARLOS A LENGUAJE C.

10. 1. 2. 3. 4. 5.

Escribir un programa que visualice un men con las siguientes opciones : Crculo (radio) Cuadrado (lado) Rectngulo (base y altura) Tringulo equiltero (lado)

Salir Leer nicamente los datos que se te indican en cada opcin y para todos calcular el permetro y rea. El men no debe aceptar otras opciones que no sean del 1 al 5 y debe regresar al mismo men despus de ejecutar cada opcin exceptuando la de salir.

11. 1. 2. 3. 4. 5. 6.

Escribir un programa que visualice un men con las siguientes opciones : Leer 2 nmeros Sumarlos Restarlos Multiplicarlos Dividirlos Intercambiarlos

ESTRUCTURAS DE REPETICIN.
Repetir mientras Selectiva simple (si).
LA ITERACION WHILE (MIENTRAS) El WHILE es una de las tres iteraciones posibles en C . Su sintaxis podra expresarse de la siguiente forma : while(expresion) while(expresin) { proposicin 1 ; proposicin 1 ; proposicin 2 ; ............... proposicin n ; } Esta sintaxis expresada en palabras significara: mientras (expresin) d un resultado CIERTO ejectese la proposicin 1 , en el caso de la izquierda ejectese el bloque de sentencias , en el caso de la derecha Por lo general , dentro de la proposicin del bloque de ellas , se modifican trminos de la expresin condicional , para controlar la duracin de la iteracin .

Repetir hasta.
LA ITERACION DO WHILE (REPETIR HASTA) Su sintaxis ser :
do { proposicin 1 ; proposicin 2 ; ............... } while (expresin) ;

Expresado en palabras , esto significa : ejecute las proposiciones , luego repita la ejecucin mientras la expresin d un resultado CIERTO . La diferencia fundamental entre esta iteracin y la anterior es que el DO-WHILE se ejecuta siempre AL MENOS una vez , sea cual sea el resultado de expresin.

Repetir desde.
ITERACION FOR (REPETIR DESDE) El FOR es simplemente una manera abreviada de expresar un WHILE , veamos su sintaxis :
for ( expresin1 ; expresin2 ; expresion3 ) { proposicin1 ; proposicin2 ; .............. } Esto es equivalente a : expresin1 ; while ( expresin2 ) { proposicin1 ; proposicin2 ; .............. expresion3 ; }

La expresin1 es una asignacin de una ms variables , (equivale a una inicializacin de las mismas ) , la expresin2 es una relacin de algun tipo que , mientras d un valor

CIERTO , permite la iteracin de la ejecucin y expresin3 es otra asignacin , que comnmente vara alguna de las variables contenida en expresin2 Todas estas expresiones , contenidas en el parntesis del FOR deben estar separadas por PUNTO Y COMA y NO por comas simples. No es imprescindible que existan TODAS las expresiones dentro del parntesis del FOR , pudindose dejar en blanco algunas de ellas , por ejemplo :
for ( ; exp2 ; exp3) for (exp1 ; ; ) for ( ; ; )

Estas dos ltimas expresiones son interesantes desde el punto de vista de su falta de trmino relacional , lo que implica que el programador deber haber previsto alguna manera alternativa de salir del lazo ( probablemente mediante BREAK RETURN como veremos ms adelante ) ya que sino , la ejecucin del mismo es infinita ( tan larga como se mantenga encendida la computadora ) . LA SENTENCIA BREAK El BREAK , ya brevemente descrito con el SWITCH , sirve tambin para terminar loops producidos por WHILE , DO-WHILE y FOR antes que se cumpla la condicin normal de terminacin . En el EJEMPLO siguiente vemos su uso para terminar un WHILE indeterminado.
#include <stdio.h> #include <conio.h> main() { char c ; printf("ESTE ES UN LOOP INDEFINIDO ") ; while(1) { printf( "DENTRO DEL LOOP INDEFINIDO (apriete una tecla):" ) ; if( (c = getch()) == 'Q' ) break ; printf( "\nNO FUE LA TECLA CORRECTA PARA ABANDONAR EL LOOP ") ; } printf("\nTECLA CORRECTA : FIN DEL WHILE ") ; }

Obsrvese que la expresin while(1) SIEMPRE es cierta , por lo que el programa correr imparable hasta que el operador oprima la tecla "secreta" Q . Esto se consigue en el IF , ya que cuando c es igual al ASCII Q se ejecuta la instruccin BREAK ,dando por finalizado el WHILE El mismo criterio podra aplicarse con el DO-WHILE con FOR , por ejemplo haciendo
for (;;) { /* loop indefinido */ ............ if( expresin ) break ; /* ruptura del loop cuando expresin sea verdadera */ }

LA SENTENCIA CONTINUE La sentencia CONTINUE es similar al BREAK con la diferencia que en vez de terminar violentamente un loop , termina con la realizacin de una iteracin particular y permitiendo al programa continuar con la siguiente.

II.

ESTRUCTURAS DE CONTROL REPETITIVAS RESOLVER LOS ENUNCIADOS EN PSEUDOCDIGO Y CODIFICARLOS A LENGUAJE C.

SIGUIENTE

1. Escriba un programa que calcule y visualice 1+2+3+.+(n-1)+n, en donde n es un valor de un dato 2.


positivo. Escribir un programa que visualice la siguiente salida: 1 2 1 2 3 1 2 3 4 1 2 3 2 1 Disear e implementar u n programa que lea un total de 10 nmeros y cuente el nmero de sus entradas que son positivos. Disear e implementar un programa que solicite al usuario un valor no negativo n y visualice la siguiente salida (ejemplo n=6): 23456 12345 234 123 2 1 Escribir un programa que lea un lmite mximo entero positivo y visualice todas las potencias de la base, menores que el valor especificado lmite mximo. Disear un programa que sume los m=30 primero nmeros pares.

3. 4.

5. 6.

Vous aimerez peut-être aussi