Академический Документы
Профессиональный Документы
Культура Документы
El lenguaje C fue desarrollado, a principios de los setenta, por dos investigadores de los
Laboratorios Bell, Kernigan y Ritchie. Hecho sobre Unix y para Unix, el lenguaje C nunca ha
tenido dependencias significativas respecto al sistema operativo ni las plataformas hardware, lo que
le ha convertido en uno de los ms extendidos.
Sobre la base de C, Bjarne Stroustrup cre en 1990 el lenguaje C++ que, habitualmente, es
descrito como un superconjunto de C que incorpora caractersticas de orientacin a objetos.
Aunque son dos lenguajes distintos, lo cierto es que C++ est fuertemente basado en C, lo
cual hace que la mayora de las construcciones bsicas de C existan y se comporten igual en C++.
Este manual es, formalmente, una introduccin a la programacin estructurada soportada
por C++.
1 Estructura de un programa
Un programa en C++ es una coleccin de una o ms funciones. Una funcin es una subrutina que
contiene una o ms sentencias, y que lleva a cabo una o ms tareas. Cada funcin tiene un nombre y
una lista de argumentos. En general, se le puede dar a cada funcin el nombre que se quiera,
excepto el de main, que est reservado para la funcin que inicia la ejecucin del programa
(denominada funcin principal) y siempre debe de estar presente en cualquier programa de C++. El
cdigo de un programa se almacena en lo que se denomina mdulos de cdigo. Un mdulo no es
ms que un archivo de texto, generalmente con extensin .cpp, que tiene una estructura general
siempre idntica. De este mdulo tambin forma parte el archivo de cabecera asociado, con
extensin .h.
Programacin I
#include
Declaraciones globales
tipo_retorno1 nombre_funcion1 ( lista_parametros )
int main ( )
{
Declaraciones de variables
Sentencias
}
tipo_retorno1 nombre_funcion1 ( lista_parametros )
{
Declaraciones de variables locales
Sentencias
}
.
tipo_retornoN nombre_funcionN ( lista_parametros )
{
Declaraciones de variables locales
Sentencias
}
El compilador acepta cualquier patrn de saltos de lnea y sangras, sin embargo, los
programas siempre deben organizarse de modo que sean fciles de leer.
// Un ejemplo de un programa sencillo en C++
#include <cstdio>
int main()
{
printf (Empezamos con C++);
}
Programacin I
Comentarios de una lnea: cuando se usa un par de barras inclinadas seguidas (//) se est
indicando que el resto de la lnea debe ser considerado como un comentario, es decir no causan
ninguna accin al ejecutarse el programa sino que se aade para hacer ms comprensible y
legible el programa. (Tambin existen los comentarios que contienen varias lneas, se inician
con /* y terminan con */).
Las lneas que se inician con # son directivas del preprocesador. En concreto, esta directiva
include le dice al preprocesador que durante el linkaje incluya las funciones asociadas a la
librera especificada entre < y > (en este caso es la librera estndar de entrada/salida cstdio, que
debe incluirse para que el programa pueda enviar salida a la pantalla o aceptar datos del
teclado).
La lnea int main () contiene la cabecera de la funcin main e indica el comienzo del programa.
Los parntesis se usan para transferir parmetros a las funciones. En concreto, en este programa,
la funcin principal no requiere transferir ninguna informacin, por lo tanto el contenido de los
parntesis es nulo.
Las llaves { } indican el comienzo y final de una funcin, o en general, de un grupo de
sentencias que constituyen un bloque. Cada { debe tener su correspondiente }, delimitando un
bloque. Dentro de cada bloque pueden existir otros bloques anidados.
El smbolo de punto y coma denominado terminador de sentencia forma parte de las sentencias,
y va siempre al final de cada una. No es una sentencia, por ejemplo, la cabecera de una funcin.
Se utiliza una funcin estndar denominada printf ( ) que se encarga de imprimir por la salida
estndar, normalmente es la pantalla. Los parntesis indican que es una funcin, y todo lo
encerrado entre ellos es la informacin que se transfiere.
Un identificador deber comenzar siempre con una letra o un carcter de subrayado, e ir
seguido de cualquier nmero de caracteres. Estos caracteres sern necesariamente letras, dgitos
numricos o caracteres de subrayado (excluir letras acentuadas y la ). No se permiten los
espacios en blanco. Se distingue entre maysculas y minsculas.
Programacin I
ej. salto de lnea). Estos caracteres se usan mediante secuencias de escape. Una secuencia de
escape es un carcter que est representado por el carcter \ seguido por una letra o conjunto de
dgitos. La siguiente tabla muestra las secuencias de escape definidas en C++:
Secuencia
\n
\t
\b
\r
\
\
\\
\?
Significado
Nueva lnea
Tabulador
Backspace
Retorno de carro
Comillas
Apstrofo
Backslash
Signo de interrogacin
Enteros: int. Un entero es un nmero sin punto decimal. Por ejemplo, en arquitecturas con
palabras de 16 bits ocupan 2 bytes y su rango va de -32768 a 32767.
Coma flotante: representan nmeros reales que contienen punto decimal.
float (reales en simple precisin). Por ejemplo, en arquitecturas con palabras de 16 bits
ocupan 4 bytes, usando normalmente 8 bits para el exponente y 24 para la mantisa. Por lo
tanto, un nmero real en simple precisin no tiene ms de 7 dgitos de precisin
(significativos) y puede estar comprendido en el siguiente rango:
-3.402823E+38 a -1.175494E-38 para nmeros negativos
1.175494E-38 a 3.402823E+38 para nmeros positivos
double (reales de doble precisin) Por ejemplo, en arquitecturas con palabras de 16 bits
ocupan 8 bytes, dando lugar a que tenga hasta 15 dgitos de precisin (significativos) y puede
estar comprendido en el rango de:
-1.79769E+308 a -2.22507E-308 para nmeros negativos
2.22507E-308 a 1.79769E+308 para nmeros positivos
Nulo, vaco: void. No se pueden declarar variables de este tipo. Se usa para:
indicar que una funcin no devuelve valor,
definir punteros genricos (todava no se sabe el tipo de dato al que va a apuntar).
Booleanos: bool.
Enumeraciones: se explican en el apartado 5 de este manual.
2.1 Modificadores
Los modificadores de tipo ms usuales son: short (corto) y long (largo). Todos ellos se aplican a los
tipos int y char, mientras que al tipo double, slo se le puede aplicar long. (En general, tamao
(short) <= tamao (int))
Programacin I
La siguiente tabla muestra las combinaciones posibles entre los tipos bsicos y sus
modificadores, junto a los rangos obtenidos en arquitecturas con palabras de 16 bits.
TIPO
TAMAO EN BYTES
RANGO MINIMO
char
-128 a 127
int
-32768 a 32767
long int
-2147483648 a 2147483647
float
7 dgitos de precisin
double
15 dgitos de precisin
long double
10
19 dgitos de precisin
Cada tipo char tiene una representacin como entero equivalente, de esta forma un char es
realmente una clase especial de entero corto.
3 Constantes
La declaracin de una constante se lleva a cabo mediante la palabra const seguida del tipo de dato.
A continuacin, se especificar el identificador que va a representar a la constante y el valor que
contendr, separando ambos elementos mediante el signo =. La sintaxis que se sigue para declarar
una constante es la siguiente:
const tipo identificador_constante = valor;
Por ejemplo:
const int HorasDia
= 24;
4 Declaracin de variables
Cada lnea de declaracin estar compuesta de un nombre de tipo y uno o varios identificadores,
separando ambos elementos por un espacio. En caso de que se vayan a declarar varias variables del
mismo tipo, se pueden disponer los identificadores uno tras otro separados por comas. La sintaxis
que se sigue para declarar una variable es la siguiente:
Programacin I
tipo identificador_variable;
Por ejemplo:
char contador;
int n;
bool correcto;
5 Enumeraciones
Una enumeracin es un conjunto de constantes enteras con nombre que especifican todos los
valores vlidos que una variable de ese tipo puede tener. La forma general de declaracin es la que
sigue:
enum nombre_enumeracin {lista_constantes};
donde enum es una palabra reservada. La sintaxis que se sigue para declarar variables de
enumeracin individuales (posteriormente a la definicin de una enumeracin) es la siguiente:
nombre_enumeracin lista_variables;
Las siguientes declaraciones muestran varios ejemplos de enumeraciones:
enum Fruta {pera, platano, manzana, uva};
Fruta frutaVerano, frutaInvierno;
Es muy importante tener en cuenta que cada uno de los smbolos corresponde a un valor
entero y recibe un valor mayor en 1 al que le precede. El valor del primer smbolo de la
enumeracin es 0. De esta forma, pueden usarse en cualquier expresin entera.
Una suposicin errnea es que los smbolos pueden leerse y escribirse directamente. Esto no es
as, el nombre que damos (pera) es slo un nombre para un entero, no una cadena que puede leerse
o escribirse directamente. Al mostrar el contenido de una variable de tipo enumerado visualiza el
valor entero del smbolo.
Programacin I
6 Matrices
La declaracin de matrices se realiza de forma idntica a como se realizara la de una variable del
tipo correspondiente, pero aadiendo a continuacin entre corchetes el nmero de elementos del
vector o matriz.
// Se
variable
puede
definir
previamente
un
tipo
continuacin
declarar
la
printf(%d, v[0]);
printf(%d, m[1][0]);
7 Registros o estructuras
Para definir un registro o estructura se sigue la siguiente notacin:
struct nombre_registro {lista_campos};
donde struct es una palabra reservada. La sintaxis que se sigue para declarar variables de tipo
resgistro (posteriormente a la definicin del tipo registro) es la siguiente:
nombre_registro lista_variables;
Las siguientes declaraciones muestran varios ejemplos de registros:
struct Persona {
char nombre[80];
int edad;
char direccion[50];
float sueldo;
};
Persona alumno1, alumno2;
printf(%s, alumno1.nombre);
Programacin I
7.1. Uniones
Una unin es un tipo de dato que permite que una variable pueda contener, en diferentes momentos,
valores de distinto tipo. Una variable de tipo unin se declara de forma similar a un registro o
estructura.
Por ejemplo, supngase que se pretende representar el resultado de un partido de ftbol, el
cual puede finalizar en el tiempo reglamentario con un marcador o ser suspendido por causas que es
preciso reflejar en un acta.
struct Marcador {
int local;
int visitante;
};
union Resultado {
Marcador puntuacion;
char causaSuspension[100];
};
Resultado resultadoPartido;
printf(%d, resultadoPartido.puntuacion.local);
8 Procedimientos y funciones
8.1 Funciones
Una funcin es un conjunto de instrucciones, con un nombre asociado, que cumple las siguientes
caractersticas:
Tiene un parmetro exclusivamente de salida y de tipo simple (es decir, lo que devuelve).
Muchos lenguajes de programacin no requieren el hecho de que el parmetro sea simple
pero en esta asignatura se considerar la versin ms purista.
Todos los valores de entrada son necesarios y suficientes para determinar el valor de salida.
En C++, la definicin de una funcin se realiza mediante una cabecera en la que se establece el
tipo devuelto por la funcin, el identificador que da nombre a la funcin y su lista de parmetros
entre parntesis, seguida del bloque en el que se incluyen el lxico local de la funcin y las
instrucciones de que consta.
Programacin I
La forma en que una funcin devuelve un valor es mediante la sentencia return seguida de una
expresin del tipo devuelto por la funcin. En el punto en que se encuentra return, la funcin
termina y el valor de la expresin es retornado al punto desde el que se llam a la funcin. Es
prctica de buen estilo de programacin que nicamente haya una sentencia return en una funcin y
que sta sea la ltima sentencia del bloque.
int sqr(int x);
int main()
{
printf( El cuadrado de 2 es %d\n, sqr( 2 ) );
}
int sqr(int x)
{
return x * x;
}
8.2 Procedimientos
En C++, todos los subprogramas que definamos han de ser necesariamente funciones. Pero, si lo
que queremos es implementar un procedimiento, es decir, un conjunto de instrucciones con unos
parmetros de entrada y que no devuelva ningn valor de ningn tipo, debemos utilizar un tipo
especial de C++: el tipo void, que equivale a algo as como tipo vaco o ningn tipo.
Las funciones de tipo void no deberan contener ninguna sentencia return.
void sqr(int &x);
int main()
{
int x = 2;
sqr( x );
printf( El cuadrado de 2 es %d\n, x );
}
void sqr(int &x)
{
x = x * x;
}
9 Entrada/Salida
La biblioteca de funciones incluye un cierto nmero de funciones de entrada/salida, a las que se
puede acceder desde cualquier lugar de un programa escribiendo el nombre de la funcin, seguido
de una lista de argumentos entre parntesis.
Programacin I
a) scanf
int scanf(const char *cadena_formato, arg1, arg2, , argn)
Permite leer la entrada desde el dispositivo de entrada estndar, siendo la entrada cualquier
combinacin de valores numricos, caracteres sueltos y cadenas de caracteres, es decir, lee
cualquier tipo de datos y convierte los nmeros de forma automtica a su representacin interna
apropiada. La funcin devuelve el nmero de datos que se han conseguido introducir correctamente
y si se encuentra un fin de archivo prematuro, devuelve EOF.
cadena_formato hace referencia a una cadena de caracteres que contiene cierta informacin sobre el
formato de los datos. Para ello, esta informacin va a estar dividida en tantos grupos de caracteres
como datos se van a leer, puesto que cada uno de ellos especifica el formato de los mismos. Cada
grupo de caracteres comienza con el signo de porcentaje (%), seguido de un carcter de conversin
que indica el tipo de dato correspondiente. La siguiente tabla muestra los caracteres de conversin
ms usuales:
Cdigo
Significado
%c
%d
%e
%f
%h
%o
%s
%x
%p
Leer un puntero
%u
Para cada uno de los datos que se introduce es necesario especificar la direccin donde van a
ser almacenados, es decir los argumentos son punteros a las variables que se usan. Esta es la forma
con la que se consigue realizar un paso por referencia y permitir que una funcin altere el contenido
de un argumento. Por ejemplo, para leer un entero en la variable cuenta, se utiliza la siguiente
llamada a la funcin scanf: scanf(%d, &cuenta);
Programacin I
10
Los elementos de datos de entrada deben estar separados por espacios, tabulaciones o saltos
de lnea. Los smbolos de puntuacin, tales como las comas, los punto y comas y similares no
cuentan como separadores. Es decir, si la llamada a la funcin scanf es: scanf(%d%d, &r, &c); y
la entrada es 10,20, entonces la llamada falla. Adems, los cdigos de formato deben
corresponderse ordenadamente con las variables que van a recibir la entrada de la lista de
argumentos.
Las cadenas se asignan a vectores de caracteres y el propio nombre del vector (sin ndice) es
la direccin del primer elemento del vector. Por lo tanto, para leer una cadena en un vector de
caracteres se utiliza slo el nombre del vector sin tener que ir precedido por el operador &.
Supngase el siguiente ejemplo:
char cad[80];
scanf(%s, cad);
Existe el modificador longitud mxima de campo que consiste en un entero situado entre el
% y el cdigo de la orden de formato, que limita el nmero de caracteres ledos para ese campo. Por
ejemplo, %20s leer como mximo 20 caracteres. De esta forma, si la entrada tiene ms
caracteres que los indicados, una llamada posterior a la funcin scanf comenzar a leer donde la
anterior acab.
b) printf
int printf(const char *cadena_formato, arg1, arg2, , argn)
Escribe cualquier combinacin de valores numricos, caracteres sueltos y cadenas de caracteres por
el dispositivo estndar de salida, usando para ello formato. La cadena de formato puede contener
caracteres que se muestran en la pantalla y rdenes de formato que definen la forma en que se
muestran los argumentos. Una orden de formato empieza con un signo de porcentaje y va seguido
por el cdigo del formato. La siguiente tabla muestra las rdenes de formato ms frecuentes:
Cdigo
Formato
%c
Visualiza un carcter
%d
%e
%f
%o
%s
%u
Programacin I
11
%x
%%
%p
Visualiza un puntero
Los argumentos pueden ser constantes, referencias a funciones, variables simples o nombres
de formaciones o expresiones ms complejas. Estos argumentos no representan direcciones de
memoria y por tanto no son precedidos de &.
Programacin I
12
C++
SI x>10
x x - 1
j j + 1
FIN_SI
if ( x > 10 ) {
x = x + 1;
j = j + 1;
}
SI x>y
x x y
SINO
y y - x
FIN_SI
if ( x > y ) {
x = x y;
} else {
y = y x;
}
C++
switch( x ) {
case 1:
case 2:
x = x +
y = y
break;
case 3:
y = y +
break;
default:
z = z
}
1;
1;
1;
2;
Pseudocdigo
MIENTRAS x > 5
x x / 2;
y y 1;
FIN_MIENTRAS
Programacin I
C++
while ( x > 5) {
x = x / 2;
y = y 1;
}
13
REPETIR
LEER( x );
HASTA x < 5;
do {
DESDE i 1 HASTA 10
ESCRIBIR( i )
FIN_DESDE
11 Operadores Bsicos
Pseudocdigo
Asignacin
Operador de igualdad
Operador de desigualdad
Operador Y lgico
Operador O lgico
Operador NO lgico
Mdulo aritmtico
Divisin
=
<>
and, y
or, o
not, no
mod
/
C++
=
==
!=
&&
||
!
%
/
Programacin I
14