Universidad Nacional de Ingeniera
CTIC
Curso: Lenguaje C++
Prof.: Lic. Csar Martn Cruz Salazar
Bibliografa
Programacin en C Metodologa, Algoritmos y Estructura de Datos.
Luis Joyanes Aguilar. Ignacio Zahonero Martnez
The C Programming Language. Kernighan & Ritchie. Segunda
Edicin.
Programacin en Lenguaje C. Rommel Romero Navarrete. Agosto
2008
Lenguaje C. Enrique Vicente Bonet Esteban
The C Language. Stephen A. Edwards
Brief Introduction to the C Programming Language. Fred Kuhns
http://blog.espol.edu.ec/programando/tipos-de-datos-en-el-lenguaje-c/
Curso de programacin en C. Miquel A. Garcies.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 1
Historia del lenguaje C
Desarrollado entre 1969 y 1973 junto con el sistema operativo Unix.
Desarrollado principalmente por Dennis Ritchie en
Bell Laboratories sobre una computadora
DEC PDP-11.
Diseado para la programacin de :
Sistemas operativos
Programas de utilidad
Compiladores
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 2
Historia del lenguaje C
C evoluciona de B, que fue diseado por Ken Thompson, y usado para
crear versiones tempranas del sistema operativo UNIX en Bell
Laboratories en 1970 sobre una computadora DEC PDP-7.
B evolucion a partir de BCPL(Basic Combined Programming
Language) diseado por Martin Richards (Cambridge) en 1967.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 3
Historia del lenguaje C
Mquina original (DEC PDP-11)
era muy pequea de 24K bytes de
memoria, de las cuales 12K se
utilizaron para el sistema operativo.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 3
Historia del lenguaje C
Ante la necesidad de ser estandarizados. En 1983, el comit
tcnico X3J11 fue creado bajo el American National Standards
Institute (ANSI) Comisin de Informtica y Procesamiento de la
Informacin (X3) para proporcionar una definicin inequvoca y
independiente de la mquina y se aprob luego de 6 aos en
1989, llamado ANSI C.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 5
Historia del lenguaje C++
C++ es un lenguaje de programacin diseado a mediados de
los aos 1980 por Bjarne Stroustrup en los mismos laboratorios
de AT&T Bell. La intencin de su creacin fue el extender al
lenguaje C mecanismos que permiten la manipulacin de
objetos. Al C++ se le considera un lenguaje hbrido. El estndar
de C++ se pudo terminar de definir en 1998 cuando se
incluyeron en 1995 algunas bibliotecas de funciones al lenguaje
C.
El nombre C++ fue propuesto por Rick Mascitti en el ao 1983,
cuando el lenguaje fue utilizado por primera vez fuera de un
laboratorio cientfico.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 6
Ejemplo de un Programa
#include <iostream>
using namespace std;
int main()
{
cout << "Hola mundo" << endl;
return 0;
}
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 7
Anlisis de las partes constitutivas
del Programa
Un programa en C++ se compone de una o ms funciones. Una
de las funciones debe ser obligatoriamente main. Una funcin
en C++ es un grupo de instrucciones que realizan una o ms
acciones. Un programa contendr una serie de directivas
#include que permitirn incluir en el mismo, archivos de
cabecera que a su vez constarn de funciones y datos
predefinidos en ellos.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 8
Anlisis de las partes constitutivas
del Programa
En este caso se le dice al compilador que busque e interprete
todos los elementos definidos en el archivo que acompaa la
directiva (iostream).
Para evitar sobrescribir los elementos ya definidos al ponerles
igual nombre, se crearon los espacios de nombres o namespace,
en este caso hay un espacio de nombres llamado std.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 9
Anlisis de las partes constitutivas
del Programa
Al incluir la sentencia using namespace std le estamos diciendo al
compilador que usaremos el espacio de nombres std por lo que
no tendremos que incluirlo cuando usemos elementos de este
espacio de nombres, como pueden ser los objetos cout y cin,
que representan el flujo de salida estndar (tpicamente la
pantalla o una ventana de texto) y el flujo de entrada estndar
(tpicamente el teclado).
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 10
Anlisis de las partes constitutivas
del Programa
El smbolo << se conoce como operador de insercin, y grosso
modo est enviando a cout lo que queremos mostrar por
pantalla para que lo pinte, en este caso la cadena "Hola
mundo".
return 0; La intruccin return determina que es lo que se
devolver de la funcin main().
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 11
Identificadores
Un identificador es una secuencia de caracteres, letras, dgitos y
subrayados(_) (El primer carcter debe ser una letra mayscula o
minscula). Nombre nico que simplemente hace referencia a las
posiciones de memoria, que pueden contener valores (datos).
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 12
Identificadores
El lenguaje C es sensible a las maysculas. Por consiguiente, C
reconoce como distintos los identificadores BETA, beta y BeTa. Un
consejo que puede servir de posible regla es:
1. Escribir identificadores de variables en letras minsculas.
2. Constantes en maysculas.
3. Funciones con tipo de letra mixto: mayscula/minscula
Los identificadores no pueden ser palabras reservadas, tales como
if, switch o else.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 13
Identificadores
Ejemplos: nombres de variables
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 14
Palabras Reservadas Lenguaje C++
El lenguaje C++ posee un nmero de palabras reservadas que
define el standard ANSI-C. Estas palabras reservadas pueden verse
en la tabla siguiente:
and auto break case char const continue default
bitand do double else enum extern float for
and_equ goto if int long register return short
asm signed sizeof static struct switch typedef union
bitor match class delete unsigned void volatile while
export false friend inline mutable namespa new not
ce
not_equ operator or or_equ private protected public this
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 15
Tipos de datos en Lenguaje C++
Los tipos de datos son:
enteros: (nmeros completos y sus negativos), tipos short,
int, long.
reales: nmeros decimales, tipos float, double o long double.
caracteres: letras, dgitos, smbolos y signos de puntuacin,
tipo char.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 16
Tipos de datos en Lenguaje C++
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.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 17
Tipos de datos
Tipo Descripcin Tamao Rango de valores
char Carcter (normalmente 8 bits) [-128 , 127]
Unsigned Carcter (normalmente 8 bits) [0 , 255]
char
short Entero corto con signo (normalmente 16 bits) [-32768 , 32767]
int Entero con signo (depende de la [-32768 , 32767] o [-
implementacin) 2147483647 , 2147483648]
unsigned Entero sin signo (depende de la [0 , 65535] o
implementacin) [0 , 4294967295]
long Entero largo con signo (normalmente 32 bits) [-2147483647 , 2147483648]
float Flotante simple (normalmente 32 bits) [-3.4E+38 , -3.4E-38], 0 ,
[3.4E-38 , 3.4E+38]
double Flotante doble (normalmente 64 bits) [-1.7E+308 , -1.7E-308], 0
,[1.7E-308 , 1.7E+308]
long Flotante doble largo (normalmente 80 bits) [-3.4E-4932 , -1.1E+4932], 0
double ,[3.4E-4932 , 1.1E+4932]
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 18
Modificadores de tipos de datos
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). Estos cuatro
modificadores de tipo, los cuales se aplican sobre los tipos de
datos anteriormente citados. Los modificadores de tipo permiten
cambiar el tamao, etc., de los tipos de datos anteriormente
especificados. Estos modificadores, que sintcticamente
anteceden a la declaracin del tipo de dato, son:
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 19
Modificadores de tipos de datos
Modificador Tipos de actuacin Descripcin
signed char int Con signo (por defecto)
unsigned char int Sin signo
long int double Largo
short int Corto
Tabla 2: Modificadores de los tipos de datos.
Es por ello, que podemos declarar variables como:
unsigned char a;
long double b;
short int i;
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 20
Modificadores de tipos de datos
Es posible, adems, aplicar dos modificadores seguidos a un
mismo tipo de datos, as, es posible definir una variable de tipo
unsigned long int (entero largo sin signo). El rango de valores
que permite cada variable depende del sistema operativo sobre
el cual se trabaje (MS-DOS, Windows95/98/NT/2000,
UNIX/Linux). De forma general, los sistemas operativos de 16
bits (MS-DOS, Windows 16 bits) poseen un rango, los de 32 bits
(Windows 32 bits, UNIX/Linux) otro y los de 64 bits(Windows 64
bits, UNIX/Linux) tambin otro.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 21
Constantes
Las constantes se refieren a los valores fijos que el programa no
puede alterar. En C existen cuatro tipos de constantes:
constantes literales,
constantes definidas,
constantes enumeradas,
constantes declaradas.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 22
Constantes
Algunos ejemplos de constantes son:
Tipo de dato Constantes de ejemplo
char a 9 'Q'
int 1 -34 21000
long int -34 67856L 456
short int 10 -12 1500
Unsigned int 45600U 345 3
float 12.45 4.34e-3 -2.8e9
Double -34.657 2.2e-7 1.0e100
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 23
Constantes
Las constantes literales son las ms usuales; toman valores tales
como 45.32564, 222 o bien "Introduzca sus datos" que se escriben
directamente en el texto del programa. Las constantes definidas
son identificadores que se asocian con valores literales constantes y
que toman determinados nombres.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 24
Constantes
Las constantes declaradas son como variables: sus valores se
almacenan en memoria, pero no se pueden modificar. Las
constantes enumeradas permiten asociar un identificador, tal
como Color, con una secuencia de otros nombres, tales como Azul ,
Verde, Rojo y Amarillo.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 25
Constantes
Constantes literales
Las constantes literales o constantes, en general, se clasifican
tambin en cuatro grupos, cada uno de los cuales puede ser de
cualquiera de los tipos:
constantes enteras,
constantes caracteres,
constantes de coma flotante,
constantes de cadena.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 26
Constantes
Constantes enteras
La escritura de constantes enteras requiere seguir unas
determinadas reglas:
No utilizar nunca comas ni otros signos de puntuacin en
nmeros enteros o completos.
123456 en lugar de 123.456
Para forzar un valor al tipo long, terminar con una letra L o l. Por
ejemplo,
1024 es un tipo entero 1024 I, es un tipo largo ( long )
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 27
Constantes
Constantes enteras
Para forzar un valor al tipo unsigned, terminarlo con una letra
mayscula U. Por ejemplo, 4352U.
Para representar un entero en octal (base 8), ste debe de estar
precedido de 0.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 28
Constantes
Constantes enteras
Formato decimal 123
Formato octal 0777 (estn precedidas de la cifra 0)
Para representar un entero en hexadecimal (base 16), este
debe de estar precedido de 0x.
Formato hexadecimal 0xFF3A (estn precedidas de 0x")
Se pueden combinar sufijos L( l ) , que significa long (largo), o
bien U (u) , que significa unsigned (sin signo).
3456UL
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 29
Constantes
Constantes reales
Una constante flotante representa un nmero real; siempre tienen
signo y representan aproximaciones en lugar de valores exactos.
82.347 .63 83. 47e-4 1.25E7 61.e+4
La notacin cientfica se representa con un exponente positivo o
negativo.
2.5E4 equivale a 25000
5.435E-3 equivale a 0.005435
Existen tres tipos de constantes:
Float 4 bytes
double 8 bytes
long double 10 bytes
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 30
Constantes
Constantes carcter
Una constante carcter (char) es un carcter del cdigo ASCII
encerrado entre apstrofes.
'A' 'b' 'C'
Adems de los caracteres ASCII estndar, una constante carcter
soporta caracteres especiales que no se pueden representar
utilizando su teclado, como, por ejemplo, los cdigos ASCII altos y
las secuencias de escape.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 31
Constantes
. Constantes carcter
As, por ejemplo, el carcter sigma () -cdigo ASCII 228, hex E4-
se representa mediante el prefijo \x y el nmero hexadecimal del
cdigo ASCII. Por ejemplo,
char sigma = '\xE4';
Este mtodo se utiliza para almacenar o imprimir cualquier
carcter de la tabla ASCII por su nmero hexadecimal.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 32
Constantes
Las constantes de caracteres de barra invertida se usan para introducir
caracteres que es imposible introducir por el teclado (tales como retorno
de carro, etc.). Estas son:
Cdigo de escape Significado
\n nueva lnea
\r retorno de carro
\t tabulacin
\v tabulacin vertical
\a alerta (pitido sonoro)
\b retroceso de espacio
\f avance de pgina
\\ barra inclinada inversa
\ comilla simple
\ doble comilla
\? signo de interrogacin
\000 nmero octal
\xhh nmero hexadecimal
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 33
Constantes
Constantes cadena
Una constante cadena (tambin llamada literal cadena o
simplemente cadena) es una secuencia de caracteres
encerrados entre dobles comillas. Algunos ejemplos de
constantes de cadena son:
8765432
"28 de julio 1821"
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 34
Constantes
. Constantes cadena
"esto es una cadena de caracteres"
Se puede escribir una cadena en varias lneas, terminando
cada lnea con \
"esto es una cadena de caracteres\
que tiene dos lneas"
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 35
Constantes
Constantes cadena
En memoria, las cadenas se representan por una serie de
caracteres ASCII ms un 0 o nulo. El carcter nulo marca el final de
la cadena y se inserta automticamente por el compilador C++ al
final de las constantes de cadenas. Para representar valores nulos,
se define el smbolo NULL como una constante en diversos
archivos de cabecera (normalmente stdef.h, stdio.h, stdlib.h y
string.h). Para utilizar NULL en un programa, incluya uno o ms de
estos archivos en lugar de definir NULL con una lnea tal como
#define NULL 0.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 36
Constantes
Constantes definidas (simblicas)
Las constantes pueden recibir nombres simblicos mediante la
directiva #define.
#define PI 3.141592
#define VALOR 106
C++ utiliza 3.141592 y 106 cuando se encuentra las constantes
simblicas PI y VALOR. Las lneas anteriores no son sentencias y,
por ello, no terminan en punto y coma.
cout << El valor es <<VALOR <<endl;
Escribe en pantalla la constante que corresponde a VALOR.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 37
Constantes
Constantes enumeradas
Las constantes enumeradas permiten crear listas de elementos
afines. Un ejemplo tpico es una constante enumerada de lista de
colores, que se puede declarar como:
enum Colores {Rojo, Naranja, Amarillo, Verde, Azul, Violeta};
Cuando se procesa esta sentencia, el compilador asigna un valor
que comienza en 0 a cada elemento enumerado; as, Rojo equivale
a 0, Naranja a 1, etc.
Otro ejemplo puede ser:
enum Boolean { False, True };
que asignar al elemento False el valor 0 y a True el valor 1.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 38
Constantes
Constantes declaradas const
const permite dar nombres simblicos a constantes a modo de
otros lenguajes, como Pascal. El formato general para crear una
constante es:
const tipo nombre = valor;
Si se omite tipo, C++ utiliza int (entero por defecto)
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 39
Constantes
Constantes declaradas const
const int Meses=12; /* Meses es constante simblica */
const char CARACTER='@';
const int OCTAL=0233;
const char CADENA[ ] ="Curso de C" ;
C++ soporta el calificador de tipo variable const. Especifica que el
valor de una variable no se puede modificar durante el programa.
Cualquier intento de modificar el valor de la variable definida con
const producir un mensaje de error.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 40
Constantes
Constantes declaradas volatile
La palabra reservada volatile acta como const, pero su valor
puede ser modificado no slo por el propio programa, sino tambin
por el hardware o por el software del sistema. Las variables
voltiles, sin embargo, no se pueden guardar en registros, como es
el caso de las variables normales.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 41
Variables
En C++ una variable es una posicin con nombre en memoria
donde se almacena un valor de un cierto tipo de dato. Las
variables pueden almacenar todo tipo de datos: cadenas,
nmeros y estructuras.
Toda variable utilizada en un programa debe ser declarada
previamente. La definicin en C++ debe situarse al principio del
bloque, antes de toda sentencia ejecutable. Una definicin
reserva un espacio de almacenamiento en memoria. El
procedimiento para definir una variable es escribir el tipo de dato,
el identificador o nombre y, en ocasiones, el valor inicial que
tomar. Por ejemplo,
char Respuesta;
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 42
Variables
Significa que se reserva espacio en memoria para Respuesta, en
este caso, un carcter ocupa un solo byte.
El nombre de una variable ha de ser un identificador vlido.
Ejemplo:
char x;
char y=e;
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 43
Variables
Una declaracin de una variable es una sentencia que
proporciona informacin de la variable al compilador C++. Su
sintaxis es:
tipo variable
tipo es el nombre de un tipo de dato conocido por el C++.
variable es un identificador (nombre) vlido en C.
Ejemplos :
long dNumero;
double HorasAcumuladas;
float HorasPorSemana;
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 44
Variables
Es preciso declarar las variables antes de utilizarlas. Se puede
declarar una variable al principio de un archivo o bloque de
cdigo al principio de una funcin.
#include <iostream>
/* variable al principio del archivo */
using namespace std;
int Numero;
int main()
{
cout << Cual es su numero favorito?<<endl ;
cin>> Numero;
return 0;
}
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 45
Variables
/*Variable al principio de una funcin.
Al principio de la funcin main()*/
int main()
{
int i;
int j;
}
/*Variable al principio de un bloque.
Al principio de un bloque for*/
...
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 46
Variables
int main()
{
int i;
for(i=0; i<9; i++)
{
double suma;
...
}
}
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 47
Inicializacin de Variables
Algunas veces se utiliza 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.
Ejemplos:
char respuesta = 'S';
int contador = 1;
float peso = 156.45;
int anyo = 1993;
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 48
Duracin de una Variable
Dependiendo del lugar donde se definan las variables de C, stas
se pueden utilizar en la totalidad del 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).
Los tipos bsicos de variables en C son:
variables locales;
variables globales;
variables dinmicas.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 49
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 son nicos. Dos, tres o
ms funciones pueden definir variables de nombre valor. 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.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 50
Variables Locales
#include <iostream>
using namespace std;
int main()
{
int a, b, c, suma; /*variables locales */
cout<<"Ingrese numeros a sumar: ";
cin>>a;
cin>>b;
cin>>c;
suma = a + b + c;
cout<<"La suma es: ";
cout<<suma;
return 0;
}Lic. Martn Cruz S. Lenguaje C++ - CTIC. UNI 51
Variables Globales
Las variables globales son variables que se declaran fuera de la
funcin y por defecto son visibles a cualquier funcin, incluyendo
main() .
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 52
Variables Globales
Todas las variables locales desaparecen cuando termina su bloque.
Una variable global es 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.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 53
Operadores y Expresiones
Los programas C constan de datos, sentencias de programas y
expresiones. Una expresin es, normalmente, una ecuacin
matemtica, tal como 9 + 6. En esta expresin, el smbolo ms (+)
es el operador de suma, y los nmeros 9 y 6 se llaman
operandos. 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 8, -x es el valor -8. El signo menos (-) es el operador
unitario menos.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 54
Operadores y Expresiones
C soporta un conjunto potente de operadores unarios, binarios y de
otros tipos.
Sintaxis
variable = expresin
variable : identificador vlido C declarado como variable.
expresin una constante, otra variable a la que se ha asignado
previamente un valor.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 55
Operador de Asignacin
El operador = asigna el valor de la expresin derecha a la
variable situada a su izquierda.
codigo = 8393;
fahrenheit = 117.456;
coordX = 47;
coordY = 86;
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, b y c se asigna el valor 45.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 56
Operador de Asignacin
Esta propiedad permite inicializar varias variables con una
sola sentencia
int a, b, c;
a = b = c = 13; /* se asigna 13 a las variables a, b y 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=a*b)
/= a/=b Divide a entre b y asigna el resultado a la variable a (a=a/b)
%= a%=b Fija a al resto de a/b (a=resto de a/b)
+= a+=b Suma b y a y lo asigna a la variable a (a=a + b)
-= a-=b Resta b de a y asigna el resultado a la variable a (a=a - b)
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 57
Operador de Asignacin
C proporciona un operador abreviado de asignacin ( * = ) , que
realiza una asignacin equivalente,
i *= 10; equivale a i = i * 10;
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 58
Operadores Aritmticos
Los operadores aritmticos C++ siguen las reglas algebraicas
tpicas de jerarqua o prioridad.
Considere la expresin :
9+10*6
La multiplicacin se realiza antes que la suma. Por consiguiente,
la expresin anterior equivale a:
9 + (10*6)
En C++ las expresiones interiores a parntesis se evalan
primero; a continuacin, seguidos por los operadores de
multiplicacin, divisin, resto, suma y resta.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 59
Operadores Aritmticos
Operador Tipos enteros Tipos reales Ejemplo
+ Suma Suma x+y
- Resta Resta b-c
* Producto Producto x*y
/ Divisin entera: cociente Divisin en b/9
coma flotante
% Divisin entera: resto b%8
Operadores de Incrementacin y Decrementacin
Los operadores ++ y --, denominados de incrementacin y
decrementacin, suman o restan 1 a su argumento,
respectivamente, cada vez que se aplican a una variable.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 60
Operadores Aritmticos
Operadores de Incrementacin y Decrementacin
Incrementacin Decrementacin
++n --n
n+ = 1 n- = 1
n=n+1 n=n-1
n = 8;
m = ++n; / * incrementa n en 1, 9, y lo asigna a m * /
n = 9;
printf( n = %d,--n); /*decrementa n en 1, 8, y lo pasa a printf() * /
n = 8;
m = n++; / * asigna n(8) a m, despus incrementa n en 1 (9) */
n = 9;
printf( n = %d,n--); / * pasa n(9) a printf(), despus decrementa n * /
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 61
Operadores Aritmticos
Operadores de Incrementacin y Decrementacin
Si los operadores ++ y -- estn de prefijos, la operacin de incremento
o decremento se efecta antes que la operacin de asignacin; si los
operadores ++ y -- estn de sufijos, la asignacin se efecta en primer
lugar y la incrementacin o decrementacin a continuacin.
Ejemplo:
#include <stdio.h>
main()
{
int n=8,m;
m=++n;
n=9;
printf( n = %d\n,--n);//decrementa n en 1, 8 y luego printf(()
n=8;
m=n++;
n=9;
printf( n = %d\n,n--);//asigna 9 a n y printf(), luego decrementa
return 0;
}
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 62
Operadores Relacionales
Operadores tales como >= y == que comprueban una relacin
entre dos operandos se llaman operadores relacionales y se
utilizan en expresiones de la forma:
expresin, operador-relacional expresin
expresin, y expresin expresiones compatibles C
operador-relacional un operador de la tabla que se
muestra ms arriba
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 63
Operadores Relacionales
Los operadores relacionales se usan normalmente en sentencias
de seleccin (if) o de iteracin (while, for), que sirven para
comprobar una condicin. Utilizando operadores relacionales se
realizan operaciones de igualdad, desigualdad y diferencias
relativas. La siguiente Tabla muestra los operadores relacionales
que se pueden aplicar a operandos de cualquier tipo de dato
estndar: char, int, float, double, etc.
Cuando se utilizan los operadores en una expresin, el operador
relacional produce un 0, o un 1, dependiendo del resultado de la
condicin. 0 se devuelve para una condicin falsa, y 1 se devuelve
para una condicin verdadera.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 64
Operadores Relacionales
Operador Significado Ejemplo
== Igual a a == b
!= No igual a a != b
> Mayor que a>b
< Menor que a<b
>= Mayor o igual que a >= b
<= Menor o igual que a <= b
Tabla. Operadores relacionales de C
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 65
Operadores Lgicos
Adems de los operadores matemticos, C tiene tambin
operadores lgicos. Estos operadores se utilizan con
expresiones para devolver un valor verdadero (cualquier entero
distinto de cero) o un valor falso (0). Los operadores lgicos se
denominan tambin operadores booleanos.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 66
Operadores Lgicos
Los operadores lgicos de C son: not (!) , and (&&) y or (II) . El
operador lgico ! (not, no) produce falso (cero) si su operando
es verdadero (distinto de cero) y viceversa. El operador lgico
&& (and, y) produce verdadero slo si ambos operandos son
verdadero (no cero); si cualquiera de los operandos es falso
produce falso. El operador lgico II (or, o) produce verdadero si
cualquiera de los operandos es verdadero (distinto de cero) y
produce falso slo si ambos operandos son falsos. La Tabla
siguiente muestra los operadores lgicos de C.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 67
Operadores Lgicos
Operador Operacin lgica Ejemplo
Negacin (!) No lgica !(z >= w)
Y lgica (&&) operando_1 && operando_2 r < s && j > k
O lgica (||) Operando_1 || operando_2 r = 5 || s != 10
Ejemplo:
Las sentencias de asignacin siguientes asignan valores cero o uno a los
dos tipos de variables int, rango y es-letra . La variable rango es 1 ( true )
si el valor de n est en el rango -100 a 100; la variable es-letra es 1
(verdadera) si car es una letra mayscula o minscula.
a. rango = (n > -100) && (n < 100);
b. es-letra = (( 'A'<= car) && (car <= 'Z ')) II (('a'<= car) && (car <= 'z'));
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 68
Operadores de Manipulacin de Bits
Los operadores de manipulacin o tratamiento de bits (bitwise)
ejecutan operaciones lgicas sobre cada uno de los bits de los
operandos. Estas operaciones son comparables en eficiencia y
en velocidad a sus equivalentes en lenguaje ensamblador.
Cada operador de manipulacin de bits realiza una operacin
lgica bit a bit sobre datos internos.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 69
Operadores de Manipulacin de Bits
Los operadores de manipulacin de bits se aplican slo a
variables y constantes char, int y long, y no a datos en coma
flotante. Dado que los nmeros binarios constan de 1s y 0s
(denominados bits), estos 1 y 0 se manipulan para producir el
resultado deseado para cada uno de los operadores.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 70
Operadores de Manipulacin de Bits
Operador Operacin
& Y (AND) lgica bit a bit
| O (OR) lgica (inclusiva) bit a bit
^ O (XOR) lgica (exclusiva) bit a bit
(OR exclusive)
~ Complemento a uno
<< Desplazamiento de bits a la izquierda
>> Desplazamiento de bits a la derecha
Tabla. Operadores lgicos bit a bit
Ejemplo :
(^) 83 0x53 = 0101 001 1
204 0xCC = 1100 1100
83^204 = 1001 1111 = 0x9F
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 71
Operadores de Asignacin
adicionales
AI igual que los operadores aritmticos, los operadores de
asignacin abreviados estn disponibles tambin para
operadores de manipulacin de bits. Estos operadores se
muestran en la Tabla.
Smbolo Uso Descripcin
<<= a <<= b Desplaza a a la izquierda b bits y asigna el resultado a
a.
>>= a >> b Desplaza a a la derecha b bits y asigna el resultado a
a.
&= a &= b Asigna a a el valor a&b(AND)
^= a ^= b Establece a a a^b(OR exclusivo)
|= a |= b Establece a a a|b(OR)
Tabla. Operadores de asignacin adicionales.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 72
Operador Condicional
Las sentencias:
if (a > b)
z = a;
else
z = b;
calcula en z el mximo de a y b. El operador conditional, con el
operador ternario ?:, suministra un modo alternativo para escribir
esto y construcciones similares.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 73
Operador Condicional
Al ser un operador ternario requiere tres operandos. El formato del
operador condicional es:
expr1 ? expr2 : expr3
Se evala primero la expresin expr1 y su valor (cero = falso,
distinto de cero = verdadero) determina cul es la expresin a
ejecutar; si la condicin es verdadera se ejecuta expr2 y si es falsa
se ejecuta expr3.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 74
Operador Condicional
De este modo para fijar z al mximo de a y b,
z = (a > b) ? a : b; /* z = max(a, b) */
Ejemplo 1:
/*escribe x, y escribe el carcter fin de lnea(\n) si x%5(resto 5)
es 0, en caso contrario un tabulador(\t) * /
printf("%d %c", x, x%5 ?'\t':'\n');
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 75
El operador sizeof
Con frecuencia su programa necesita conocer el tamao en bytes
de un tipo de dato o variable. C proporciona el operador sizeof,
que toma un argumento, bien un tipo de dato o bien el nombre de
una variable (escalar, array, registro, etc.). El formato del operador
es :
sizeof (nombre-variable)
sizeof ( tipo-dato )
sizeof(expresin)
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 76
El operador sizeof
Si se supone que el tipo int consta de cuatro bytes y el tipo double
consta de ocho bytes, las siguientes expresiones proporcionarn
los valores 4 y 8 respectivamente
sizeof (unsigned int)
sizeof(double).
Este operador se puede aplicar tambin a expresiones.
printf("La expresin a + b ocupa %d bytes ",sizeof (a + b));
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 77
El operador sizeof
Ejercicio:
Suponga que se desea conocer el tamao, en bytes, de variables de
coma-flotante y de doble precisin de su computadora. El siguiente
programa realiza esta tarea:
/ * Imprime el tamao de valores de coma flotante y double * /
#include <stdio.h>
int main()
{
printf(El tamao de variables de coma flotante es %d \n, sizeof(float));
printf(El tamao de variables de doble precisin es %d \n, sizeof(double));
return 0;
}
Compilando este programa bajo C, el programa produce :
El tamao de variables de coma flotante es: 4
El tamao de variables de doble precisin es: 8
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 78
Reglas de prioridad y asociatividad
La prioridad de operadores determina el orden en el que se aplican los
operadores a un valor.
Si dos operadores se aplican al mismo operando, el operador
con mayor prioridad se aplica primero.
Todos los operadores del mismo grupo tienen igual prioridad y
asociatividad.
La asociatividad izquierda-derecha significa aplicar el operador
ms a la izquierda primero, y en la asociatividad derecha-
izquierda se aplica primero el operador ms a la derecha.
Los parntesis tienen la mxima prioridad.
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 79
Reglas de prioridad y asociatividad
A. La Prioridad: La expresin "2 * 3 + 4" podra interpretarse como "(2 *
3) + 4" o como "2 * (3 + 4)". Para resolver la ambigedad, cada operador
tiene asignado un valor de prioridad (un entero entre 0 y 9). En una
situacin como la anterior, se comparan los valores de prioridad y se
utiliza primero el operador con mayor prioridad (el (+) y el (*) tienen
asignados 6 y 7, respectivamente, por lo cual se realizara primero la
multiplicacin). B. La Asociatividad: La regla anterior resolva
ambigedades cuando los smbolos de operador tienen distintos valores
de prioridad, sin embargo, la expresin "1 - 2 - 3" puede ser tratada como
"(1 - 2) - 3" resultando -4 o como "1 - (2 - 3)" resultando 2. Para resolverlo,
a cada operador se le puede definir una regla de asociatividad. Por
ejemplo, el smbolo (-) se puede decir que es: asociativo a la izquierda: si
la expresin "x-y-z" se toma como "(x-y)-z" asociativo a la derecha: si la
expresin "x-y-z" se toma como "x-(y-z).
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 80
Reglas de prioridad y asociatividad
Tabla. Prioridad y Asociatividad de los Operadores
Lic. C. Martn Cruz Salazar Lenguaje C++ - CTIC. UNI 81