Sie sind auf Seite 1von 45

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 Desarrollo histrico del lenguaje estructurado
1.2 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>

Archivo de cabecera

stdio.h

int main ( )

Cabecera de funcin

Nombre de la funcin
.
}

#include

Directivas del

#define

Macros del procesador

preprocesador

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

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()
{
}

...........

bloque de sentencias

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 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

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

EJEMPLO

char
short
int
unsigned int
Long
Float
Double
Long double

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

RANGO DE VALORES
-32.768.. +32.767

Unsigned int
Short int

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

USO

DESCRIPCIN

a=b

Asigna el valor de b a a.

*=

a *= b

Multiplica a por b y asigna el resultado a la

variable a.

/=

a/=b

Divide a entre b y asigna el resultado a la

%=

a %= b

Fija a al resto de a/b

+=

a += b

Suma b y a y lo asigna a la variable a.

-=

a-=b

Resta b de a y asigna el resultado a la

variable a.

variable a.

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

Tipos reales
Producto

Ejemplo
x*y

Divisin entera: cociente

Divisin en coma flotante b / 5

Suma

Suma

x+y

Resta

Resta

b-c

Divisin entera: resto

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

25
5
1

+, -

2+3
2-3

5
-1

es
es

Nivel de precedencia
1

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?
a)

x += 10;
o 12
o 10

Usar expresiones para las


siguientes, usando operadores
mixtos.
a)

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

Evaluar
las
siguientes
expresiones. Siendo:
x = 10; y = 20; z = 30;
a)
o

z = x y, t = z
y;
z =- 10, t=-30

11

b)
o
o
o

s b;
9
13
30

c)
o
o
o

x += 10 + y

b)
o
o
o

r = 100* r;
r *= 100* r
r *= 100
r += 100

c)

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

*=

r /= 0;
infinito
1
error

d)
o
o
o

y += x + 10;
8
12
18

e)
o
o
o

z -= a*b;
-36
-18
36

o
o
o
d)
o
o
o

o
o

t = 10
z = 30, t=-30

b)

(x < 10) && (y


> 15)
true
false

o
o
c)

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

o
o

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

d)
o
o

(x+y < z)
true
false

(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;
main*/
x = 75;
y1 = 89;
if (x > 10)
{
int y2 = 50;
y1 = y1+y2;

}
printf("x = %d, y1 = %d\n",x,y1)"
return 0;
}

INICIALIZACIN DE VARIABLES

/* declarar a las variables x e y1 en la funcion

/* declarar e inicializa a la variable y2 en el


bloque if */

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;
char c_var;
int i;
int i = 0;

DURACiN DE UNA VARIABLE

/*
/*
/*
/*

declara el nombre de la variable x de tipo double */


declara c_var de tipo char */
definido pero no inicializado */
definido e inicializado a cero.*/

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;
printf("Cuantos nmeros a sumar:");
scanf("%d",&numero);
suma = a + b + C;

/*variables locales */

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>
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;
A = 124;
Q = 1;
{

Alcance o mbito global


variable global
Local a main
A, variable local

int B;
B = 124;
A = 457;
Q = 2;
{

Primer subnivel en main


B, variable local

int c;

C = 124;
B = 457;
A = 788;
Q = 3;

Subnivel ms interno de main


C, 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 * radio 3

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 --------

39.27 pulgadas
1 pie

26. Escribir un algoritmo que calcule el rea de un rectngulo a partir de sus coordenadas:
x1 = 10
y1 = 10

x2 = 20
y2 = 20

27. Un coche se mueve, partiendo del reposo, con una aceleracin constante de 8 m/s 2.
Escribir un algoritmo que calcule:
a) La velocidad instantnea al cabo de5 segundos.
b) 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:
la sentencia

i=5

visualizar en pantalla

j = 12

c = 'A'

n = 40.791512

printf("%d %d %c %f",i,j,c,n);
5 12

40.791512

La forma general que tiene la funcin printf ()


printf (cadena_de_control, dato1, dato2, ...)
cadena_de_control
mostrarlos.

contiene los tipos de los datos y forma de

datol, dat02 ...

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

j = 12

c = 'A'

n = 40.791512

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

El dato se convierte a entero decimal.

%0

El dato entero se convierte a octal.

%x

El dato entero se convierte a hexadecimal.

%u

El dato entero se convierte a entero sin signo.

%c

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.
%f

El dato se considera de tipo float. Se convierte a notacin decimal, con


parte entera los dgitos de precisin.

%g

El dato se considera de tipo float. Se convierte segn el cdigo %e o %f


dependiendo de cual sea la representacin ms corta.

%s

El dato ha de ser una cadena de caracteres.

%1f

El dato se considera de tipo double.

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");

/* uso de \n para nueva lnea

printf("\nNuml\t Num2\t Num3\n");

/* uso de \t para tabulaciones

printf("%c", '\a');
sonora */

/* 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

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)

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
*/
#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
anchura.
Var1, var2 ...

contiene los tipos de los datos y si se desea su


variables del tipo de los cdigos de control.

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);

/*lectura valores v1 y 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,
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

printf ("%s\n", arbol) ;

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.
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;

double x;

cin >> n;

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 PROBLEMAS EN PSEUDOCODIGO


Y LENGUAJE C.
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 ->
Importe bruto mayor de 20.000 ->

sin descuento
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 )

if(a)
if(!a)

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

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

/* Error */

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

if(a)

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

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 ).

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

if(expresin) {
sentencia 1 ;
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)
{
sentencia 1 ;
sentencia 2 ;
}
sentencia 3 ;
sentencia 4 ;
sentencia 5 ;

if(expresin)
{
sentencia 1 ;
sentencia 2 ;
}
else
{
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)
sentencia1 ;
else if(exp.2)
sentencia2 ;
else if(exp.3)
sentencia3 ;
else
sentencia5 ;

if(exp.1)
sentencia1 ;
else if(exp.2)
sentencia2 ;
else if(exp.3)
sentencia3 ;
else
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


PSEUDOCDIGO Y CODIFICARLOS A LENGUAJE C.
1.
2.

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

LOS

SIGUIENTE

ENUNCIADOS

EN

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

Puntuacin
A

80-90

70-80

60-70

0-60

Escribir un programa que lea dos nmeros enteros y visualice el menor de los dos.
2
Escribir un programa que resuelva la ecuacin cuadrtica (ax + 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. Escribir un programa que visualice un men con las siguientes opciones :
1. Crculo (radio)
2. Cuadrado (lado)
3. Rectngulo (base y altura)
4. Tringulo equiltero (lado)
5. 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. Escribir un programa que visualice un men con las siguientes opciones :
1. Leer 2 nmeros
2. Sumarlos
3. Restarlos
4. Multiplicarlos
5. Dividirlos
6. Intercambiarlos
7. Salir
Si no se elige la opcin 1 primero que las dems, al ejecutarse las otras se desplegaran resultados

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)
proposicin 1 ;

while(expresin) {
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 SIGUIENTE ENUNCIADOS EN


PSEUDOCDIGO Y CODIFICARLOS A LENGUAJE C.

1.
2.

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


positivo.
Escribir un programa que visualice la siguiente salida:
1
2
1
1
1

2
2
2

3
3
3

2
1
3.

Disear e implementar u n programa que lea un total de 10 nmeros y cuente el nmero de sus entradas
que son positivos.

4.

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

5.
6.

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.

Das könnte Ihnen auch gefallen