Está en la página 1de 33

COLECIO DE COMPU1ACIOA DEL IS1MO

DIREC1OR: LIC. ISIDRO LOPEZ RUIZ


C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 1
UNIDAD I.-FUNDAMENTOS DEL LENGUA1E
1.1.- INTRODUCCION A SU LENGUA1E Y A SU ENTORNO DE
DESARROLLO
Antes de hablar de C, es necesario explicar que es un lenguaje de programacion. Un
lenguaje de programacin es un lenguaje escrito utilizado para escribir programas que
se ejecutan en un computador. Existen muchos lenguajes de programacion de entre los
que se destacan los siguientes:
1. C
2. C
3. Basic
4. Ada
5. Java
6. Pascal
7. Python
8. Fortran
9. Smalltalk
Historia de C++
C es un lenguaje de programacion creado por Bjarne Stroustrup en los laboratorios de
At&T en 1983. Stroustrup tomo como base el lenguaje de programacion mas popular en
en aquella epoca el cual era C.
HISTORIA DE C
El C es un derivado del mitico lenguaje C. Este lenguaje aparecio en la decada de los
70 de la mano de Dennis Ritchie para la programacion en sistemas operativos Unix (El
mejor ejemplo actual de un sistema operativo Unix es GNU/Linux), el cual surgio como
un lenguaje generalista recomendado sobre todo para programadores ya expertos, ya
que no llevaba implementadas muchas Iunciones que hacen a un lenguaje mas
comprensible. Sin embargo, aunque esto en un principio puede convertirse en un
problema, en la practica es su mayor virtud, ya que permite al programador un mayor
control sobre lo que esta haciendo. Aos mas tarde, un programador llamado Bjarne
Stroustrup, creo lo que se conoce como C. Necesitaba ciertas Iacilidades de
programacion, incluidas en otros lenguajes pero que C no soportaba, al menos
directamente, como son las llamadas clases y objetos, conceptos muy en boga en la
programacion actual. Para ello rediseo el C, ampliando sus posibilidades pero
manteniendo su mayor cualidad, la de permitir al programador en todo momento tener
controlado lo que esta haciendo, consiguiendo asi una mayor rapidez que no se
conseguiria en otros lenguajes. De clases y objetos baste saber por ahora que consisten
en un sistema que pretende acercar los lenguajes de programacion a una comprension
mas humana basandose en la construccion de objetos, con caracteristicas propias solo de
ellos, agrupados en clases. Es decir por ejemplo, si yo quisiera hacer un programa sobre
animales, crearia una clase llamada animales, en la cual cada animal, por ejemplo un
pato, seria un objeto, de tal manera que se ve el intento de esta Iorma de programar por
ser un Iiel reIlejo a como los humanos (en teoria) manejamos la realidad. Y con esta
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 2
historia del C basta, ahora nos pondremos nuestros guantes para operar sobre el
objeto que ahora nos ocupa: el C.
Que es C++
C es un lenguaje de programacion orientado a objetos que toma la base del lenguaje
C y le agrega la capacidad de abstraer tipos como en Smalltalk.
1.2.- COMENTARIOS
C admite comentarios de una sola linea utilizando dos barras inclinadas ( //) como
seal de comienzo. El comentario empieza en este punto (incluyendo las seales de
comienzo) y continua hasta el proximo caracter de nueva linea.
class X // esto es un comentario
...
};
Comentarios son anotaciones; observaciones, recordatorios, etc. en el programa. Son
para uso exclusivo del programador, y eliminados del codigo Iuente en la Iase de
preprocesado; antes del anlisis sintctico.
Aparte de las consideraciones estrictamente Iormales que se indican en esta seccion, no
debemos perder de vista que los comentarios, aunque voluntarios (no es obligatorio
escribirlos), representan una ayuda inestimable durante la construccion del programa.
Siendo imprescindibles para el programador original, o los que le sucedan en las tareas
de mantenimiento, cuando es necesario haberselas con el codigo un tiempo despues de
que Iue escrito. Ademas de clariIicar ideas, los comentarios son tambien un valioso
instrumento de depuracion, pues permiten eliminar provisionalmente secciones enteras
de codigo.
En C coexisten dos Iormas de comentarios: El de C clasico y el de C++. Ambos son
soportados por CBuilder, que tiene ademas una extension particular sobre el estandar
ANSI, los comentarios anidados (este ultimo tipo solo debe usarse si la compatibilidad
no es importante).
Tambien deben tenerse en cuenta las observaciones que siguen sobre el uso de
separadores (whitespaces) y delimitadores en los comentarios para evitar otros
problemas de compatibilidad.
Comentarios C
Un comentario C es cualquier secuencia de caracteres contenida entre los delimitadores
/* ... */. La totalidad de la secuencia, incluyendo los delimitadores /* y */ son
sustituidos por un simple espacio despues de la expansion de macros (algunas
implementaciones de C pueden eliminar los comentarios sin reemplazarlos por
espacios).
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 3

Ejemplo:
int x 2; /* esto es un comentario que sera eliminado o sustituido por un simple
espacio despues en la Irase de preprocesado. Como puede verse, el comentario puede
ocupar varias lineas de texto en el codigo Iuente.
Se recomienda utilizarlos con proIusion, a veces todas las explicaciones son pocas, ya
que el C es un lenguaje bastante criptico en algunas ocasiones, sobre todo algunas
sentencias muy "elegantes" y comprimidas, pero ininteligibles en una primera lectura */
Ejemplo; la expresion:
int /* declaracion */ i /* contador */;
Es analizada sintacticamente como estos tres tokens: int i y;
Pegado de cadenas
Algunos compiladores C clasicos utilizan el simbolo /**/ para el pegado (concatenado)
de tokens, pero el nuevo Estandar ANSI recomienda que esto se haga con ## (ver
ejemplos).
El pegado de tokens es una tecnica que utiliza las habilidades de preprocesador para
construir nombres nuevos utilizando macros. Por ejemplo:
#deIine VAR (i,j) (i/**/j) // Incorrecto
#deIine VAR (i,j) (i##j) // Correcto
#deIine VAR (i,j) (i ## j) // Correcto

Despues de estas macros, las expresiones que siguen son transIormadas por el
preprocesador como se indica
int VAR(opcion, uno)( ); int opcion uno();
int VAR(opcion, dos)( ); int opcion dos();
int VAR(opcion, tres)( ); int opcion tres();






COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 4
1.3.-Tipos de variables y constantes
Variables
Una variable es un espacio reservado en el ordenador para contener valores que pueden
cambiar durante la ejecucion de un programa. Los tipos determinan como se manipulara
la inIormacion contenida en esas variables. No olvides, si es que ya lo sabias, que la
inIormacion en el interior de la memoria del ordenador es siempre binaria, al menos a
un cierto nivel. El modo en que se interpreta la inIormacion almacenada en la memoria
de un ordenador es siempre arbitraria, es decir, el mismo valor puede usarse para
codiIicar una letra, un numero, una instruccion de programa, etc. El tipo nos dice a
nosotros y al compilador como debe interpretarse y manipularse la inIormacion binaria
almacenada en la memoria de un ordenador.
De momento solo veremos los tipos Iundamentales, que son: void, char, int, Iloat y
double, en C se incluye tambien el tipo bool. Tambien existen ciertos modiIicadores,
que permiten ajustar ligeramente ciertas propiedades de cada tipo; los modiIicadores
pueden ser: short, long, signed y unsigned o combinaciones de ellos. Tambien veremos
en este capitulo los tipos enumerados, enum.
Tipos fundamentales
En C solo existen cinco tipos Iundamentales y los tipos enumerados, C aade un
septimo tipo, el bool, y el resto de los tipos son derivados de ellos. Los veremos uno por
uno, y veremos como les aIectan cada uno de los modiIicadores.
Las deIiniciones de sintaxis de C se escribiran usando el color verde. Los valores
entre || son opcionales, los valores separados con , indican que solo debe escogerse uno
de los valores. Los valores entre ~ indican que debe escribirse obligatoriamente un
texto que se usara como el concepto que se escribe en su interior.
|signed,unsigned| char identiIicador~ signiIica que se puede usar signed o unsigned, o
ninguna de las dos, ya que ambas estan entre ||. Ademas debe escribirse un texto, que
debe ser una unica palabra que actuara como identiIicador o nombre de la variable. Este
identiIicador lo usaremos para reIerirnos a la variable durante el programa.
Para crear un identiIicador hay que tener en cuenta algunas reglas, no es posible usar
cualquier cosa como identiIicador.
Solo se pueden usar letras (mayusculas o minusculas), numeros y ciertos
caracteres no alIanumericos, como el '', pero nunca un punto, coma, guion,
comillas o simbolos matematicos o interrogaciones.
El primer caracter no puede ser un numero.
C y C distinguen entre mayusculas y minusculas, de modo que los
identiIicadores numero y Numero son diIerentes.
Seran validos estos ejemplos:
signed char Cuenta
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 5
unsigned char letras
char caracter
Tipo "char" o carcter:
[signed|unsigned] char <identificador>
Es el tipo basico alIanumerico, es decir que puede contener un caracter, un digito
numerico o un signo de puntuacion. Desde el punto de vista del ordenador, todos esos
valores son caracteres. En C y C este tipo siempre contiene un unico caracter del
codigo ASCII. El tamao de memoria es de 1 byte u octeto. Hay que notar que en C un
carcter es tratado en todo como un nmero, de hecho puede ser declarado con y sin
signo. Y si no se especiIica el modiIicador de signo, se asume que es con signo. Este
tipo de variables es apto para almacenar numeros pequeos, como los dedos que tiene
una persona, o letras, como la inicial de mi nombre de pila.
Tipo "int" o entero:
[signed|unsigned] [short|long|long long] int <identificador>
[signed|unsigned] long long [int] <identificador>
[signed|unsigned] long [int] <identificador>
[signed|unsigned] short [int] <identificador>
Las variables enteras almacenan numeros enteros dentro de los limites de su tamao, a
su vez, ese tamao depende de la plataIorma del compilador, y del numero de bits que
use por palabra de memoria: 8, 16, 32... No hay reglas Iijas para saber el mayor numero
que podemos almacenar en cada tipo: int, long int o short int; depende en gran medida
del compilador y del ordenador. Solo podemos estar seguros de que ese numero en short
int es menor o igual que en int, y este a su vez es menor o igual que en long int y que
long long int es mayor o igual a long int. Veremos como averiguar estos valores cuando
estudiemos los operadores.
A cierto nivel, podemos considerar los tipos "char", "short", "int", "long" y "long long"
como tipos diIerentes, todos enteros. Pero solo se diIerencian en el tamao del valor
maximo que pueden contener.
Este tipo de variables es util para almacenar numeros relativamente grandes, pero sin
decimales, por ejemplo el dinero que tienes en el banco, salvo que seas Bill Gates, o el
numero de lentejas que hay en un kilo de lentejas.
Tipo "float" o coma flotante:
float <identificador>
Las variables de este tipo almacenan numeros en Iormato de coma Ilotante, mantisa y
exponente, para entendernos, son numeros con decimales. Son aptos para variables de
tipo real, como por ejemplo el cambio entre euros y pesetas. O para numeros muy
grandes, como la produccion mundial de trigo, contada en granos. El Iuerte de estos
numeros no es la precision, sino el orden de magnitud, es decir lo grande o pequeo que
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 6
es el numero que contiene. Por ejemplo, la siguiente cadena de operaciones no dara el
resultado correcto:
float a = 12335545621232154;
a = a + 1;
a = a - 12335545621232154;
Finalmente, "a" valdra 0 y no 1, como seria de esperar. Los Iormatos en coma Ilotante
sacriIican precision en Iavor de tamao. Sin embargo el ejemplo si Iuncionaria con
numeros mas pequeos. Esto hace que las variables de tipo Iloat no sean muy adecuadas
para los bucles, como veremos mas adelante.
Puede que te preguntes (alguien me lo ha preguntado), que utilidad tiene algo tan
impreciso. La respuesta es: aquella que tu, como programador, le encuentres. Te
aseguro que Iloat se usa muy a menudo. Por ejemplo, para trabajar con temperaturas, la
precision es suIiciente para el margen de temperaturas que normalmente manejamos y
para almacenar al menos tres decimales. Pero hay cientos de otras situaciones en que
resultan muy utiles.
Tipo "bool" o Booleana:
bool <identificador>
Las variables de este tipo solo pueden tomar dos valores "true" o "Ialse". Sirven para
evaluar expresiones logicas. Este tipo de variables se puede usar para almacenar
respuestas, por ejemplo: Posees carne de conducir?. O para almacenar inIormaciones
que solo pueden tomar dos valores, por ejemplo: que mano usas para escribir. En estos
casos debemos acuar una regla, en este ejemplo, podria ser diestro-~"true", zurdo-
~"Ialse".
bool respuesta;
bool continuar;
Nota: En algunos compiladores antiguos de C no existe el tipo bool. Lo logico seria
no usar esos compiladores, y conseguir uno mas actual. Pero si esto no es posible se
puede simular este tipo a partir de un enumerado.

enum bool {false=0, true};
Tipo "double" o coma flotante de doble precisin:
[long] double <identificador>
Las variables de este tipo almacenan numeros en Iormato de coma Ilotante, mantisa y
exponente, al igual que Iloat, pero usan mayor precision. Son aptos para variables de
tipo real. Usaremos estas variables cuando trabajemos con numeros grandes, pero
tambien necesitemos gran precision. Lo siento, pero no se me ocurre ahora ningun
ejemplo.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 7
Bueno, tambien me han preguntado por que no usar siempre double o long double y
olvidarnos de Iloat. La respuesta es que C siempre ha estado orientado a la economia de
recursos, tanto en cuanto al uso de memoria como al uso de procesador. Si tu problema
no requiere la precision de un double o long double, por que derrochar recursos?. Por
ejemplo, en el compilador Dev-C Iloat requiere 4 bytes, double 8 y long double 12,
por lo tanto, para manejar un numero en Iormato de long double se requiere el triple de
memoria y el triple o mas tiempo de procesador que para manejar un Iloat.
Como programadores estamos en la obligacion de no desperdiciar nuestros recursos, y
mucho mas los recursos de nuestros clientes, para los que haremos nuestros programas.
C y C nos dan un gran control sobre estas caracteristicas, es nuestra responsabilidad
aprender a usarlos como es debido.
Tipo "void" o sin tipo:
void <identificador>
Es un tipo especial que indica la ausencia de tipo. Se usa en Iunciones que no devuelven
ningun valor, tambien en Iunciones que no requieren parametros, aunque este uso solo
es obligatorio en C, y opcional en C, tambien se usara en la declaracion de punteros
genericos, lo veremos mas adelante.
Las Iunciones que no devuelven valores parecen una contradiccion. En lenguajes como
Pascal, estas Iunciones se llaman procedimientos. Simplemente hacen su trabajo, y no
revuelven valores. Por ejemplo, Iunciones como borrar la pantalla, no tienen nada que
devolver, hacen su trabajo y regresan. Lo mismo se aplica a Iunciones sin parametros de
entrada, el mismo ejemplo de la Iuncion para borrar la pantalla, no requiere ninguna
entrada para poder hacer su cometido.
Tipo "enum" o enumerado:
enum [<identificador_de_enum>] {
<nombre> [= <valor>], ...} [lista_de_variables];
Se trata de una sintaxis muy elaborada, pero no te asustes, cuando te acostumbres a ver
este tipo de cosas las comprenderas mejor.
Este tipo nos permite deIinir conjuntos de constantes, normalmente de tipo int, llamados
datos de tipo enumerado. Las variables declaradas de este tipo solo podran tomar
valores entre los deIinidos.
El identiIicador de tipo es opcional, y nos permitira declarar mas variables del tipo
enumerado en otras partes del programa:
[enum] <identificador_de_enum> <lista_de_identificadores>;
La lista de variables tambien es opcional. Sin embargo, al menos uno de los dos
componentes opcionales debe aparecer en la deIinicion del tipo enumerado.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 8
Varios identiIicadores pueden tomar el mismo valor, pero cada identiIicador solo puede
usarse en un tipo enumerado. Por ejemplo:
enum tipohoras { una=1, dos, tres, cuatro, cinco,
seis, siete, ocho, nueve, diez, once,
doce, trece=1, catorce, quince,
dieciseis, diecisiete, dieciocho,
diecinueve, veinte, ventiuna,
ventidos, ventitres, venticuatro = 0};
En este caso, una y trece valen 1, dos y catorce valen 2, etc. Y veinticuatro vale 0.
Como se ve en el ejemplo, una vez se asigna un valor a un elemento de la lista, los
siguientes toman valores correlativos. Si no se asigna ningun valor, el primer elemento
tomara el valor 0.
Los nombres de las constantes pueden utilizarse en el programa, pero no pueden ser
leidos ni escritos. Por ejemplo, si el programa en un momento determinado nos pregunta
la hora, no podremos responder doce y esperar que se almacene su valor
correspondiente. Del mismo modo, si tenemos una variable enumerada con el valor
doce y la mostramos por pantalla, se mostrara 12, no doce. Deben considerarse como
"etiquetas" que sustituyen a enteros, y que hacen mas comprensibles los programas.
Insisto en que internamente, para el compilador, solo son enteros, en el rango de valores
validos deIinidos en cada enum.
Palabras reservadas
Las palabras reservadas son palabras propias del lenguaje de programacion. Estan
reservadas en el sentido de que no podemos usarlas como identiIicadores de variables o
de Iunciones.
char, int, Iloat, double, bool, void, enum, unsigned, signed, long, short, true y Ialse.
3.2.3 Constantes
La palabra constante tiene en C dos connotaciones sutilmente diIerentes aunque
relacionadas, que conviene distinguir:
La primera es el sentido normal de la palabra constante en lenguaje natural; es decir,
datos (de cualquiera de los tipos posible) cuyos valores se han deIinido en el momento
de escribir el codigo del programa, y no pueden ser modiIicados mas tarde en tiempo de
ejecucion (lo que signiIica que sus valores deben ser resueltos en tiempo de
compilacion). Dicho en otras palabras: el compilador sabe cual es el valor de los
objetos declarados como constantes y en base a este conocimiento puede hacer cuantas
suposiciones sean validas para conseguir la mayor eIiciencia en tiempo de ejecucion.
En este sentido, el concepto constante es justamente el opuesto a variable, que
corresponde a aquellos objetos-dato que pueden recibir nuevas asignaciones de valor a
lo largo del programa. Dicho en otras palabras: entidades cuyo valor solo es conocido
en tiempo de ejecucion.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 9
La segunda connotacion es la de tipo de objeto-dato. En este sentido podemos aIirmar
que en C los enteros (variables) Iorman un tipo distinto de los enteros constantes
(constantes enteras), y que los caracteres (variables) Iorman un tipo distinto de las
constantes caracter. Asi pues, distinguimos entre un tipo char y un tipo const
char. Como practicamente todos los tipos de objeto-dato posibles en C puede
declararse constantes, existe un universo de tipos C simetrico al de los tipos de
objetos variables pero de objetos constantes.
Como corolario de lo anterior, tenga en mente que, por ejemplo, un entero y una
constante entera son tipos distintos y que una constante entera C signiIica algo mas
que un entero al que no se le puede cambiar su valor.
Lo que hace el compilador con los objetos declarados inicialmente como constantes
depende de la implementacion. Esto signiIica que no esta garantizado que tales objetos
tengan un L value. Por ejemplo: en const int x 5; no esta garantizado que el
compilador le asigne a x un L value, es decir, un espacio en memoria determinado (que
se permita modiIicar o no su valor es otra cuestion).
Puede ocurrir que, por razones de eIicacia, sea simplemente una especie de "define"
|1|. Una especie de nemonico que hace que el compilador lo sustituya por un 5 en cada
trozo de codigo donde aparezca x. Incluso en sitios donde aparezca asociada a otras
constantes puede estar resuelto el valor en tiempo de compilacion. Por ejemplo, si en
otro sitio del programa aparece: const int z 7; y mas tarde: int w x z y;
puede ocurrir que el compilador establezca directamente: int w 12 y.
Por esta razon no esta garantizado que el operador const_cast Iuncione con objetos
declarados inicialmente como constantes.

Como se ha indicado, en C existen tantos tipos de constantes como tipos de variables,
pero aparte de las ya mencionadas constantes manifiestas), solo nos detendremos en
las que por una u otra razon hay cosas interesantes que puntualizar. Son las siguientes:
Expresiones Constantes
Constantes enteras
Constantes fraccionarias
Constantes carcter de varios subtipos, incluyendo elementos aislados y
cadenas
Enumeraciones
El Estandar C denomina "literales" a lo que el Estandar C denomina "constantes", y
establece que existen 5 tipos de estos "literales":
Constantes enteras ("Integer literal")
Constantes caracter ("Character literal")
Constantes Iraccionarias ("Floating literal")
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 10
Constantes de cadena ("String literal")
Constantes logicas ("Boolean literal").

Por la Iorma en que estan expresadas en el codigo pueden considerarse en dos grupos:
Directas si estan directamente expresadas. Por ejemplo:
const Iloat pi 3.14159;
Expresiones si su valor esta implicito en una expresion. Por ejemplo:
const Iloat k pi * 2;

El tipo de dato correspondiente a una constante es deducido por el compilador en base a
indicios implicitos, como el valor numerico y Iormato usados en el Iuente. En algunos
casos tambien por ciertos caliIicadores explicitos. C tiene una palabra especiIica para
este Iin: const.
Ejemplos:
char c 'X'; // X es una constante tipo char
const int X 10; // X es un tipo int-constante

|1| De hecho, en las primitivas versiones del C de K&R, cuando se queria utilizar una
constante habia que utilizar un define en la Iorma:
# deIine PI 3.13159;
# deIine G 9.80665;
Etc.
1.4.- OB1ETOS QUE PERMITEN ENTRADA Y SALIDA POR CONSOLA
En C se pueden seguir utilizando las mismas sentencias para mostrar inIormacion por
pantalla o pedirla mediante teclado. Pero a estas antiguas se aaden 2 nuevas de la
misma potencia y mayor Iacilidad de uso. La cabecera que utilizan estas dos sentencias
es iostream.h.
Mostrar por pantalla.
cout expresion;
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 11
Pedir por teclado:
cin ~~ variable; La variable pude ser de cualquier tipo.
EJEMPLO:
#include iostream.h~
#include stdio.h~
#include conio.h~
void main()

int i,j;
double d;
clrscr();
i10;
j15;
cout "Introducir valor: ";
cin~~d;
cout "Estos son los valores: ";
cout i " " j " " d;
getch();
}
INDICADORES DE FORMATO: Tres Iunciones miembro (width, precision y Iill)
que Iijan Iormato de anchura, precision y caracter de relleno. Es necesario Iijar la
anchura, precision y caracter de relleno antes de cada sentencia de escritura.
ANCHURA: cout.width(ancho);
DECIMALES: cout.precision(n digitos);
RELLENO: cout.Iill('caracter');
EJEMPLO:
#includeiostream.h~
#includestdio.h~
#includeconio.h~
void main()

double numero123.1234567;
clrscr();
cout "hola" "\n";
cout.width(15);
cout "hola" "\n";
cout.width(15);
cout.Iill('*');
cout "hola""\n";
coutnumero "\n";
cout.precision(4);
coutnumero "\n";
cout.precision(10);
coutnumero;
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 12
getch();
}
MODIFICADORES DE LA CLASE IOS: Estos modiIicadores son pertenecientes a
la clase ios. Cuando se activan su valor se mantiene, es decir hay que desactivarlos para
volver al Iormato de salida original.
Fifar indicador.
cout.setI(ios::identiIicador,ios::identiIicador2);
Anular identificador.
cout.unsetI(ios::identiIicador,ios::identiIicador2);
IDENTIFICADOR DESCRIPCIN
oct Devuelve un entero en octal.
hex Devuelve un entero en hexadecimal.
scientiIic Devuelve un numero en Iormato cientiIico.
showpoint Muestra 6 decimales aunque no sea necesario
showpos Muestra el signo en los valores positivos
leIt Ajusta la salida a la izquierda.
skipws Omite los espacios a la izquierda de la salida.
uppercase Muestra el texto en mayusculas.
EJEMPLO.
#include stdio.h~
#include conio.h~
#include iostream.h~
void main()

Iloat num200.0;
int num1200;
clrscr();
coutnum "\n";
cout.setI(ios::showpos,ios::showpoint);
coutnum "\n";
cout.setI(ios::scientiIic);
coutnum "\n";
cout.unsetI(ios::scientiIic,ios::showpoint,ios::showpos);
coutnum "\n";
cout.setI(ios::hex);
coutnum1 "\n";
getch();
}
1.5.- OPERADORES
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 13
Los operadores son elementos que disparan ciertos calculos cuando son aplicados a
variables o a otros objetos en una expresion.
Existe una division en los operadores atendiendo al numero de operandos que aIectan.
Segun esta clasiIicacion pueden ser unitarios, binarios o ternarios, los primeros aIectan a
un solo operando, los segundos a dos y los ternarios a siete, perdon!, a tres.
Hay varios tipos de operadores, clasiIicados segun el tipo de objetos sobre los que
actuan.
Operadores aritmticos
Son usados para crear expresiones matematicas. Existen dos operadores aritmeticos
unitarios, '' y '-' que tienen la siguiente sintaxis:
expresion~
- expresion~
Asignan valores positivos o negativos a la expresion a la que se aplican.
En cuanto a los operadores binarios existen siete. '', '-', '*' y '/', tienen un
comportamiento analogo, en cuanto a los operandos, ya que admiten enteros y de coma
Ilotante. Sintaxis:
expresion~ expresion~
expresion~ - expresion~
expresion~ * expresion~
expresion~ / expresion~
Evidentemente se trata de las conocidisimas operaciones aritmeticas de suma, resta,
multiplicacion y division, que espero que ya domines a su nivel tradicional, es decir,
sobre el papel. El operador de modulo '', devuelve el resto de la division entera del
primer operando entre el segundo. Por esta razon no puede ser aplicado a operandos en
coma Ilotante.
expresion~ expresion~
Por ultimo otros dos operadores unitarios. Se trata de operadores un tanto especiales, ya
que solo pueden trabajar sobre variables, pues implican una asignacion. Se trata de los
operadores '' y '--'. El primero incrementa el valor del operando y el segundo lo
decrementa, ambos en una unidad. Existen dos modalidades, dependiendo de que se use
el operador en la Iorma de preIijo o de suIijo. Sintaxis:
variable~ (post-incremento)
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 14
variable~ (pre-incremento)
variable~-- (post-decremento)
-- variable~ (pre-decremento)
En su Iorma de preIijo, el operador es aplicado antes de que se evalue el resto de la
expresion; en la Iorma de suIijo, se aplica despues de que se evalue el resto de la
expresion. Veamos un ejemplo, en las siguientes expresiones "a" vale 100 y "b" vale 10:
c = a + ++b;
En este primer ejemplo primero se aplica el pre-incremento, y b valdra 11 a
continuacion se evalua la expresion "ab", que dara como resultado 111, y por ultimo se
asignara este valor a c, que valdra 111.
c a b--;
En este segundo ejemplo primero se avalua la expresion "ab", que dara como resultado
110, y se asignara este valor a c, que valdra 110. Finalmente se aplica en post-
decremento, y b valdra 9. Esto tambien proporciona una explicacion de por que la
version mejorada del lenguaje C se llama C, es simplemente el C mejorado o
incrementado. Y ya que estamos, el lenguaje C se llama asi porque las personas que lo
desarrollaron crearon dos prototipos de lenguajes de programacion con anterioridad a
los que llamaron A y B.
Operadores de asignacin
Existen varios operadores de asignacion, el mas evidente y el mas usado es el "", pero
no es el unico.
Aqui hay una lista: "", "*", "/", "", "", "-", "", "~~", "&", " `" y ",".
Y la sintaxis es:
variable~ operador de asignacion~ expresion~
En general, para todos los operadores mixtos la expresion
E1 op E2
Tiene el mismo eIecto que la expresion
E1 E1 op E2
El Iuncionamiento es siempre el mismo, primero se evalua la expresion de la derecha, se
aplica el operador mixto, si existe y se asigna el valor obtenido a la variable de la
izquierda.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 15
Operador coma
La coma tiene una doble Iuncion, por una parte separa elementos de una lista de
argumentos de una Iuncion. Por otra, puede ser usado como separador en expresiones
"de coma". Ambas Iunciones pueden ser mezcladas, pero hay que aadir parentesis para
resolver las ambigedades. Sintaxis:
E1, E2, ..., En
En una expresion "de coma", cada operando es evaluado como una expresion, pero los
resultados obtenidos anteriormente se tienen en cuenta en las subsiguientes
evaluaciones. Por ejemplo:
Iunc(i, (j 1, j 4), k);
Llamara a la Iuncion con tres argumentos: (i, 5, k). La expresion de coma (j 1, j4), se
evalua de izquierda a derecha, y el resultado se pasara como argumento a la Iuncion.
Operadores de igualdad
Los operadores de igualdad son "", (dos signos seguidos) y "!", que comprueban
la igualdad o desigualdad entre dos valores aritmeticos. Sintaxis:
expresion1~ expresion2~
expresion1~ ! expresion2~
Se trata de operadores de expresiones logicas, es decir, el resultado es "true" o "Ialse".
En el primer caso, si las expresiones 1 y 2 son iguales el resultado es "true", en el
segundo, si las expresiones son diIerentes, el "true".
Nota: Cuando se hacen comparaciones entre una constante y una variable, es
recomendable poner en primer lugar la constante, por ejemplo:
if(123 == a) ...
if(a == 123) ...
Si nos equivocamos al escribir estas expresiones, y ponemos solo un signo '', en el
primer caso obtendremos un error del compilador, ya que estaremos intentando cambiar
el valor de una constante, lo cual no es posible. En el segundo caso, el valor de la
variable cambia, y ademas el resultado de evaluar la expresion no dependera de una
comparacion, sino de una asignacion, y siempre sera "true", salvo que el valor asignado
sea 0.
Por ejemplo:
if(a = 0) ... // siempre ser "false"
if(a = 123)... // siempre ser "true", ya que 123 es distinto de 0
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 16
El resultado de evaluar la expresion no depende de "a" en ninguno de los dos casos,
como puedes ver.
En estos casos, el compilador, en el mejor de los casos, nos dara un "warning", o sea un
aviso, pero compilara el programa.
Nota: los compiladores clasiIican los errores en dos tipos, dependiendo de lo serios que
sean:
"Errores": son errores que impiden que el programa pueda ejecutarse, los programas con
"errores" no pueden pasar de la Iase de compilacion a la de enlazado, que es la Iase en
que se obtiene el programa ejecutable.
"Warnings": son errores de poca entidad, (segun el compilador que, por supuesto, no
tiene ni idea de lo que intentamos hacer). Estos errores no impiden pasar a la Iase de
enlazado, y por lo tanto es posible ejecutarlos. Debes tener ciudado si tu compilador de
da una lista de "warnings", eso signiIica que has cometido algun error, en cualquier caso
repasa esta lista e intenta corregir los "warnings".
A su vez, los "enlazadores" o "linkers" tambien pueden dar errores, y normalmente estos
son mas diIiciles de corregir.
Operadores lgicos
Los operadores "&&", ",," y "!" relacionan expresiones logicas, Iormando a su vez
nuevas expresiones logicas. Sintaxis:
expresion1~ && expresion2~
expresion1~ ,, expresion2~
!expresion~
El operador "&&" equivale al "AND" o "Y"; devuelve "true" solo si las dos expresiones
evaluadas son "true" o distintas de cero, en caso contrario devuelve "Ialse" o cero. Si la
primera expresion evaluada es "Ialse", la segunda no se evalua.
Generalizando, con expresiones AND con mas de dos expresiones, la primera expresion
Ialsa interrumpe el proceso e impide que se continue la evaluacion del resto de las
expresiones. Esto es lo que se conoce como "cortocircuito", y es muy importante, como
veremos posteriormente.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 17
A continuacion se muestra la tabla de verdad del operador &&:
Expresion1 Expresion2
Expresion1 &&
Expresion2
Ialse Ignorada Ialse
true False Ialse
true Trae true
El operador ",," equivale al "OR" u "O inclusivo"; devuelve "true" si cualquiera de las
expresiones evaluadas es "true" o distinta de cero, en caso contrario devuelve "Ialse" o
cero. Si la primera expresion evaluada es "true", la segunda no se evalua.
Expresion1 Expresion2
Expresion1 ,,
Expresion2
Ialse False Ialse
Ialse Trae true
true Ignorada true
El operador "!" es equivalente al "NOT", o "NO", y devuelve "true" solo si la expresion
evaluada es "Ialse" o cero, en caso contrario devuelve "true". La expresion "!E" es
equivalente a (0 E).
Expresion !Expresion
Ialse true
true Ialse
Operadores relacionales
Los operadores son "", "~", "" y "~", que comprueban relaciones de igualdad o
desigualdad entre dos valores aritmeticos. Sintaxis:
expresion1~ expresion2~
expresion1 ~ expresion2~
expresion1 expresion2~
expresion1~ ~ expresion2~
Si el resultado de la comparacion resulta ser verdadero, se retorna "true", en caso
contrario "Ialse". El signiIicado de cada operador es evidente:
~ mayor que
menor que
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 18
~ mayor o igual que
menor o igual que
En la expresion "E1 operador~ E2", los operandos tienen algunas restricciones, pero
de momento nos conIormaremos con que E1 y E2 sean de tipo aritmetico. El resto de
las restricciones las veremos cuando conozcamos los punteros y los objetos.
Nota:
Cuando decimos que operador es binario no quiere decir que solo se pueda usar con dos
operandos, sino que aIecta a dos operandos. Por ejemplo, la linea:
A 1 2 3 - 4;
Es perIectamente legal, pero la operacion se evaluara tomando los operandos dos a dos
y empezando por la izquierda, y el resultado sera 2. Ademas hay que mencionar el
hecho de que los operadores tienen diIerentes pesos, es decir, se aplican unos antes que
otros, al igual que hacemos nosotros, por ejemplo:
A 4 4 / 4;
Dara como resultado 5 y no 2, ya que la operacion de division tiene prioridad sobre la
suma. Esta propiedad de los operadores es conocida como precedencia. En el capitulo
de operadores II se veran las precedencias de cada operador, y como se aplican y se
eluden estas precedencias.
1.6.-TIPOS DE DATOS C++
A toda variable que se use en un programa, se le debe asociar
(generalmente al principio del programa) un tipo de dato especfico.
Un tipo de dato deIine todo el posible rango de valores que una variable puede tomar
al momento de ejecucion del programa y a lo largo de toda la vida util del propio
programa.
Los tipos de datos ms comunes en C++ son:
TIPO DATO ESPACIO MEMORIA RANGO
Unsigned char 8 bits 0 a 255
Char 8 bits -128 a 127
short int 16 bits -32,768 a 32,767
Unsigned int 32 bits 0 a 4,294,967,295
Int 32 bits -2,147,483,648 a
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 19
2,147,483,647
Unsigned long 32 bits 0 a 4,294,967,295
Enum 16 bits -2,147,483,648 a
2,147,483,647
Long 32 bits -2,147,483,648 a
2,147,483,647
Flota 32 bits 3.4 x 10-38 a 3.4 x
10+38(6 dec)
Double 64 bits 1.7 x 10-308 a
1.7*10+308(15 dec)
long double 80 bits 3.4 x 10-4932 a 1.1
x 10+4932
Void sin valor

Para manejar cadenas de caracteres (strings), se debera usar un arregllo de caracteres
con el siguiente Iormato.
Char nomstring|cant de elementos|;
Ejemplo
Char nombre|30|;
Char ciudad|20|;
Para cargar con un dato se usa el siguiente codigo;
strcpy(carrera,"ing sistemas");
Variables arreglos de caracteres, tienen que usar sus Iunciones de manipulacion que
vienen en la libreria string.h, algunas de estas Iunciones son: strcpy(), strcat(), strcmp(),
strlen(), etc.
C, igual que C, contiene tipos Iundamentales y tipos derivados o estructurados.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 20
1.6.1.-Los fundamentales son: int, char, long int,
Iloat, double, long double.
- Tipo vaco. El tipo vacio (void) se utiliza principalmente para especiIicar:
* Funciones que no devuelven valores.
* Punteros void, que reIerencian a objetos cuyo tipo es desconocido.
- Tipos enumerados. Un tipo enumerado o enumeracion esta construido por una serie
de constantes simbolicas enteras. Los tipos enumerados se tratan de modo ligeramente
diIerente en C que en ANSI C. El nombre de la etiqueta enum se considera como un
nombre de tipo igual que las etiquetas de struct y union. Por tanto se puede declarar
una variable de enumeracion, estructura o union sin utilizar las palabras enum, strcut o
union.
C deIine el tipo de enum de tipo int. En C, sin embargo, cada tipo enumerado es su
propio tipo independiente. Esto signiIica que C no permite que un valor int se
convierta automaticamente a un valor enum. Sin embargo, un valor enumerado se
puede utilizar en lugar de un int.
Ejemplo:
enum lugarprimero,segundo,tercero};
lugar pepeprimero; //correcto
int vencedorpepe; //correcto
lugar juan1; //incorrecto
La ultima sentencia de asignacion es aceptable en C pero no en C, ya que 1 no es un
valor deIinido en lugar.
- Tipos referencia. Las reIerencias son como alias. Son alternativas al nombre de un
objeto. Se deIine un tipo reIerencia haciendole preceder por el operador de direccion &.
Un objeto reIerencia, igual que una constante debe ser inicializado.
int a50;
int &reIaa; //correcto
int &reI2a; //incorrecto: no inicializado
Todas las operaciones eIectuadas sobre la reIerencia se realizan sobre el propio objeto:
reIa5; equivale a sumar 5 a a, que vale ahora 55
int *p&reIa; inicializa p con la direccion de a
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 21
1.6.2.- TIPOS DE DATOS DEFINIDOS POR EL USUARIO
Los tipos deIinidos por el usuario o tipos abstractos de datos (TAD) empaquetan
elementos dato con las operaciones que se realizan sobre esos datos. C soporta los
TAD con el tipo clase que puede ser implementado con estructuras, uniones y clases.
Abstraccin de datos
Una caracteristica importante de cualquier lenguaje de programacion es la capacidad de
crear tipos de datos deIinidos por el usuario. Aunque se pueden crear en C sus propios
tipos, utilizando las palabras reservadas typedeI y struct, los tipos resultantes no se
pueden integrar Iacilmente en el resto del programa. Ademas, en C, solo se pueden
deIinir los tipos en terminos de datos; es decir, las Iunciones utilizadas para manipular
esos tipos no son parte de la deIinicion del tipo.
Una deIinicion de un tipo que incluye datos y Iunciones y el modo para encapsular los
detalles, se conoce como tipo abstracto de dato. En C se implementa mediante el uso
de tipos de datos deIinidos por el usuario, llamados clases. clase datos + funciones
Una diIerencia importante entre C y C, es que en C se pueden declarar Iunciones
dentro de una estructura (no se requiere declarar punteros a Iunciones). Las estructuras
pueden tener tambien especiIicadas regiones de acceso (medios en que se puede
controlar el acceso a los datos).
La abstraccion de datos en C se obtiene con los tipos de datos estructura (struct) y
clase (class).
Concepto de clase
Una clase es un tipo de dato que contiene uno o mas elementos dato llamados miembros
dato, y cero, una o mas Iunciones que manipulan esos datos (llamadas Iunciones
miembro). Una clase se puede deIinir con struct, union o class. La sintaxis de una clase
es:
class nombreclase

miembro1;
miembro2;
...
Iuncionmiembro1();
Iuncionmiembro2();
...
};
Una clase es sintacticamente igual a una estructura, con la unica diIerencia de que en el
tipo class todos los miembros son por deIecto privados mientras que en el tipo struct son
por deIecto publicos.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 22
1.7.-PALABRAS RESERVADAS
En C se utiliza el termino variable estructura para reIerirse a una variable de tipo
estructura. En C no se utiliza el termino variable de clase, sino instancia de la clase.
flujo de datos stream

entrada estndar cin

Salida estndar cout

Salida de mensajes de error cerr

operacin de I/O a bajo nivel streambuf

operacin de I/O a alto nivel istream

operacin de I/O a alto nivel ostream

operacin de I/O a alto nivel iostream

clase para el manejo de la I/O a alto nivel ios

mtodo de la clase ios para inicializar los indic de formato setf()

mtodo de la clase ios para inicializar los indic de formato flags()

mtodo de la clase ios para desactivar los indic de formato unsetf()

funcin declarada en las clases istream, ostream e iostream width()

funcin declarada en las clases istream, ostream e iostream precision

funcin declarada en las clases istream, ostream e iostream fill()

manipulador sin argumentos definidos en iomanip.h ende

manipulador sin argumentos definidos en iomanip.h flush

operadores de insercin o extraccin de flujo << >>

Clase necesaria para la insercin de flujo de datos en fichs. Ifstream

Clase necesaria para la extraccin de flujo de datos en fichs. Ofstream

Clase necesaria para la I/O de flujo de datos en fichs. Fstream

Librera para poder leer o escribir desde ficheros. fstream.h
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 23

1.8.- EXPRESIONES PROGRAMACION
En este epigraIe se incluye una descripcion Iormal de la gramatica permitida a las
expresiones en C. Como puede verse, las expresiones son deIinidas recursivamente,
de Iorma que las subexpresiones pueden ser anidadas sin ningun limite Iormal, aunque
quizas el compilador pueda reportar un error de limite de memoria si no puede compilar
una expresion muy compleja.
Como en el caso de las sentencias, en los casos que pudieran resultar dudosos, junto a
la traduccion al espaol se ha incluido el original ingles.

Expresiones primarias: (primary-expression):
literal
this
:: identiIicador
:: nombre de Iuncion-operador (operator-Iunction-name)
:: nombre cualiIicado
(expresion)
expresion-de-identiIicacion
literal:
constante entera (integer-constant)
constante caracter (character-constant)
constante Iraccionaria (Iloating-constant)
cadena de caracteres (string-literal)
expresin-de-identificacin:
nombre (no cualiIicado)
nombre-cualiIicado
nombre (no cualiIicado):
identiIicador
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 24
nombre de Iuncion-operador
conversion-Iunction-name
~ nombre-de-clase
nombre-cualiIicado
nombre-cualificado: (qualiIied-name)
nombre-cualiIicado-de-clase :: nombre
expresiones: (postIix-expression)
primary-expression
postIix-expression | expression |
postIix-expression ( expression-list~ )
simple-type-name ( expression-list~ )
postIix-expression . name
postIix-expression -> name
postIix-expression
postIix-expression --
const_cast identiIicacion-de-tipo ~ ( expresion )
dynamic_cast identiIicacion-de-tipo ~ ( expresion )
reinterpret_cast identiIicacion-de-tipo ~ ( expresion )
static_cast identiIicacion-de-tipo ~ ( expresion )
typeid ( expresion )
typeid ( nombre-de-tipo )
lista de expresiones: (expression-list)
expresion-de-asignacion
lista-de-expresiones , expresion-de-asignacion
expresin-unitiaria: (unary-expression)
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 25
postIix-expression
expresion unitaria
- - expresion-unitaria
operador-unario expresion-de-modelado
sizeof expresion-unitaria
sizeof ( nombre-de-tipo )
expresion de asignacion-de-memoria (allocation-expression)
expresion-de-desasignacion
operador-unario: (alguno de los siguientes)
& ` + - ! ~
expresin-de-asignacin-de-memoria: (allocation-expression)
::~ new placement~ new-type-name inicializador~
::~ new placement~ (nombre-de-tipo) inicializador~
placement:
(lista-de-expresiones )
new-type-name:
especiIicadores-de-tipo declarador-new~
declarador-new: (new-declarator)
ptr-operator new-declarator~
declarador-new | expresion~ |
expresin de desasignacin: (deallocation-expression)
::~ delete expresion-de-modelado
::~ delete ] expresion-de-modelado
expresin-de-modelado: (cast-expression)
expresion-unitaria
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 26
( nombre-de-tipo ) expresion-de-modelado
expresin-pm: (pm-expression)
expresion-de-modelado
pm-expresion .` expresion-de-modelado
pm-expresion ->* expresion-de-modelado
expresin-multiplicativa: (multiplicative-expression)
expresion-pm
expresion-multiplicativa * pm-expression
expresion-multiplicativa / pm-expression
expresion-multiplicativa pm-expression
expresin-aditiva: (additive-expression)
expresion-multiplicativa
expresion-aditiva expresion-multiplicativa
expresion-aditiva - expresion-multplicativa
expresin-de-desplazamiento: (shiIt-expression):
expresion-aditiva
expresion-de-desplazamiento << expresion-aditiva
expresion-de-desplazamiento >> expresion-aditiva
expresin relacional: (relational-expression)
expresion-de-desplazamiento
expresion-relacional < expresion-de-desplazamiento
expresion-relacional > expresion-de-desplazamiento
expresion-relacional < expresion-de-desplazamiento
expresion-relacional > expresion-de-desplazamiento
expresin-de-igualdad: (equality-expression)
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 27
expresion-relacional
expresion-de-igualdad expresion-relacional
expresion-de-igualdad ! expresion-relacional
expresin-AND: (AND-expression)
expresion-de-igualdad
expresion-AND & expresion-de-igualdad
expresin-de-OR-exclusivo: (exclusive-OR-expression)
expresion-AND
expresion-de-OR-exclusivo ^ expresion-AND
expresin-de-OR-inclusivo: (inclusive-OR-expression)
expresion-de-OR-exclusivo
expresion-de-OR-inclusivo [ expresion-de-OR-exclusivo
expresin-lgica-AND: (logical-AND-expression)
expresion-de-OR-inclusivo
expresion-logica-AND && expresion-de-OR-inclusivo
expresin-lgica-OR: (logical-OR-expression)
expresion-logica-AND
expresion-logica-OR [[ expreson-logica-AND
expresin condicional:
expresion-logica-OR
expresion-logica-OR ? expresion : expresion-condicional
expresin-de-asignacin: (assignment-expression)
expresion condicional
expresion-unitiaria operador-de-asignacion expresion-de-asignacion
operador-de-asignacin (alguno de los siguientes):
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 28
* / -
~ ~ & ^ ,
expresin:
expresion-de-asignacion
expresion, expresion-de-asignacion
expresin-constante:
expresion-condicional

1.9.- ESTRUCTURAS DE CONTROL
En lenguajes de programacin, las estructuras de control permiten
modificar el flujo de ejecucin de las instrucciones de un programa.
Con las estructuras de control se puede:
De acuerdo a una condicin, ejecutar un grupo u otro de sentencias (If-
Then-Else y Select-Case)
Ejecutar un grupo de sentencias mientras exista una condicin (Do-
While)
Ejecutar un grupo de sentencias hasta que exista una condicin (Do-
Until)
Ejecutar un grupo de sentencias un nmero determinado de veces (For-
Next)
etc.
Todas las estructuras de control tienen un nico punto de entrada y un nico
punto de salida. Esto es una de las cosas que permite que la programacin se
rija por los principios de la programacin estructurada.
Los lenguajes de programacin modernos tienen estructuras de control
similares. Bsicamente lo que vara entre las estructuras de control de los
diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para
expresar la estructura.
Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los
comandos guardados.
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 29
SECUENCIAL
A este grupo pertenecen las instrucciones que estan Iormadas por una o varias
expresiones simples colocadas una a continuacion de la otra. La sintaxis para las
instrucciones estructurados en secuencia es la siguiente:

instruccion_1 ;

instruccion_2 ;

.........

instruccion_N;


SELECCIN O SELECTIVA
A este grupo pertenecen aquellas instrucciones que sirven para que la ejecucion del programa tome una
de varias opciones existentes en una ramiIicacion.

En C se tienen las siguientes instrucciones de seleccion:

La instruccin if - else

Esta instruccion permite elegir entre dos opciones de ejecucion, y su sintaxis es :
if( condicin )

[else]
[bloque_2]
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 30

donde:
bloque_1 y bloque_2 pueden estar formados por uno
ms instrucciones.

else es opcional, y en caso de no existir, bloque_2
tampoco existir.
Al ejecutarse esta estructura, primero se evala la condicin. En caso de que, de esta
evaluacin, resulte un valor de verdad verdadero, se ejecutarn las instrucciones que forman el
bloque_1; en caso contrario (si el valor de verdad es falso), se ejecutarn las instrucciones del
bloque_2.

El diagrama de flujo para la estructura if-else se presenta en la figura 3.2.

Esta estructura puede anidarse para elgir entre un grupo de mas de dos opciones, tomando la siguiente
Iorma:
if(condicin_1)
bloque_1;
else if(condicin_2)
bloque_2;
else if(condicin_3)
bloque_3;
............
else
bloque_N;
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 31
A continuacion se muestran algunos ejemplos de aplicacion de la instruccion iI-else

#include <iostream.h>

void main()
{
long ncontrol;

cout << "NUMERO DE CONTROL: "; cin>> ncontrol;
if(ncontrol<=0) cout << "NUMERO INVALIDO........."; else cout
<< "CORRECTO !!" << "\n\n\n"; }
Listado 3.1.- Uso de if-else


#include <iostream.h>
#include <conio.h>
void main()
{
int calif;
clrscr();
cout << "CALIFICACION: "; cin>> calif;
if(calif > 100)
cout << "ERROR: CALIFICACION DEMASIADO ALTA ....."; else
if(calif < 0) cout << "ERROR: CALIFICACION DEMASIADO BAJA ....."; else
if( (calif>= 70) && (calif <=100)) cout << "CALIFICACION
APROBATORIA."; else cout << "CALIFICACION REPROBATORIA."; }
Listado 3.2.- Uso de iI-else-iI

La instruccin switch

Esta instruccion es util cuando se tiene que elegir entre mas de dos opciones, como es el
caso de manejo de menus. Esta instruccion es preIerible que el uso de anidamientos de
varios iI-else.

Su sintaxis es:
switch(expresin_entera)
{
case Const_1 : Bloque_1 ; break ;
case Const_2 : Bloque_2 ; break ;
.............................
.............................
.............................
case Const_N : Bloque_N ; break ;
default : Bloque_X ;
}


A la entrada en una instruccin switch, primero se evala la
expresin_entera. En caso de que el resultado coincida con Const_1, se
ejecuta el Bloque_1 y break interrumpe la ejecucin del instruccin;
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 32
en caso de que coincida con el valor de Const_2, se ejecuta el
Bloque_2 , se interrumpe la ejecucin de la instruccin. Lo mismo pasa
en caso de que el resultado coincida con cualquiera de los otros
valores constantes. En caso de existir default:, y si el resultado no
coincide con ninguno de los valores constantes, se ejecutan las
instrucciones contenidas en el Bloque_X.

Esta estructura puede representarse con el diagrama mostrado en la
figura 3.3.















Es recomendable el uso de la instruccin switch en el caso del manejo de un men de
opciones como se observa en el listado 3.3.
#include <iostream.h>
#include <conio.h>

void main()
{
char opcion;

clrscr();
gotoxy(30,5);
cout << "MENU DE OPCIONES";
gotoxy(30,8);
cout << "1.- CREACION";
gotoxy(30,10);
cout << "2.- MODIFICACION";
gotoxy(30,12);
cout << "3.- ELIMINACION";
COLECIO DE COMPU1ACIOA DEL IS1MO
DIREC1OR: LIC. ISIDRO LOPEZ RUIZ
C.1. 2PB151H, 1EL 1971 71 3913
1U ME1OR OPCIOA!
Tu mejor opcion! 33
gotoxy(30,14);
cout << "0.- SALIDA";
gotoxy(30,18);
cout << "SU OPCION ? "; opcion="getche();"
cout << "\n\n";
switch(opcion)
{
case '1':
clrscr();
cout << "RUTINA DE CREACION\n";
break;
case '2':
clrscr();
cout << "RUTINA DE MODIFICACION\n";
break;
case '3':
clrscr();
cout << "RUTINA DE ELIMINACION\n";
break;
case '0':
clrscr();
cout << "SALIDA AL SISTEMA OPERATIVO\n";
break;
default:
clrscr();
cout << "OPCION INVALIDA.....\n";
}
}