Вы находитесь на странице: 1из 14

Manual de C++

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

Estructura de un programa en C++:

#include

Directivas de preprocesador (para incluir otros mdulos)

Declaraciones globales
tipo_retorno1 nombre_funcion1 ( lista_parametros )

tipo_retornoN nombre_funcionN ( 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

Explicacin del programa:

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.

2 Tipos de datos en C++


Los tipos de datos fundamentales en C++ son:
Caracteres: char. Este tipo puede contener cualquier carcter individual almacenando el nmero
entero correspondiente a dicho carcter segn el cdigo ASCII. Por ejemplo, en arquitecturas
con palabras de 16 bits, un carcter ocupara 1 byte siendo, por tanto, su rango un entero entre
-128 y 127, es decir, 256 elementos.
Se puede mostrar el cdigo ASCII de un carcter sin ms que convertirlo a un tipo int.
Igualmente, se puede obtener el carcter asociado a un nmero entero, entre 0 y 255, sin ms
que convertirlo a char, como se muestra en la sentencia siguiente:
int codigo_a = ( int ) a;
char primeraLetra = ( char ) 97;
Hay ciertos caracteres que son problemticos porque se usan en el lenguaje C++ para otras
cosas, (como , que delimita la cadena de formato) o que no se pueden representar directamente,
como ocurre con los cdigos ASCII entre el 0 y el 31, denominados caracteres de control (por

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;

const char caracter = S;

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

typedef int vector[10]; //vector de diez nmeros enteros


vector v;

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 uno o ms parmetros de entrada.

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

Las funciones de E/S ms comunes son las dos siguientes:

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

Leer un nico carcter

%d

Leer un entero decimal

%e

Leer un nmero en notacin cientfica (notacin exponencial)

%f

Leer un nmero en coma flotante

%h

Leer un entero corto

%o

Leer un nmero octal

%s

Leer una cadena de caracteres

%x

Leer un nmero hexadecimal

%p

Leer un puntero

%u

Leer un entero sin signo en base decimal

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

Visualiza un entero decimal con signo

%e

Visualiza un real en notacin cientfica

%f

Visualiza un real en decimal

%o

Visualiza un entero octal, sin el cero inicial

%s

Visualiza una cadena de caracteres

%u

Visualiza un entero decimal sin signo

Programacin I

11

%x

Visualiza un entero hexadecimal sin el prefijo 0x

%%

Visualiza un signo de porcentaje

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

Las rdenes de formato pueden tener los siguientes modificadores:


especificador de longitud mnima de campo: es un entero situado entre el signo % y el cdigo de
formato. Este modificador provoca que se rellene la salida con espacios para asegurar que el
campo alcanza una cierta longitud mnima. Si se desea rellenar con ceros, es necesario poner un
cero antes de este especificador. En el caso de que la cadena o el nmero sea ms largo que la
longitud especificada, se visualizara en toda su longitud, aunque sobrepase el mnimo. Por
ejemplo, %05d rellena con ceros un nmero que tenga menos de 5 dgitos para que su longitud
sea cinco.
especificador del nmero de posiciones decimales: consiste en colocar un punto tras el
especificador de longitud de campo, seguido del nmero de decimales que se desea visualizar.
Por ejemplo, %10.4f visualiza un nmero de al menos 10 caracteres con cuatro posiciones
decimales. Si este modificador es aplicado a cadenas o a enteros, el significado consiste en
especificar la longitud mxima del campo. Por ejemplo, %5.7s visualiza una cadena de al menos
cinco caracteres y no ms de siete. Si la cadena es ms larga que la longitud mxima se truncarn
los caracteres finales de la cadena.
especificador de ajuste a la izquierda. Por omisin, todas las salidas se ajustan a la derecha, es
decir, si la longitud del campo es mayor que el dato a imprimir, el dato se sita en la parte
derecha del campo. Sin embargo, se puede forzar a que la salida se ajuste a la izquierda situando
un signo menos directamente despus del %. Por ejemplo, %-10.2f hace que se ajuste a la
izquierda un nmero real con dos espacios para decimales en un campo de diez caracteres.

Programacin I

12

10 Composiciones de programacin estructurada


10.1 Composicin condicional
Pseudocdigo

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

Un caso particular de la composicin condicional es la seleccin entre varios valores simples


(enteros, caracteres, lgicos o enumerados), una posibilidad presente en muchos lenguajes de
programacin.
Pseudocdigo
CASO x SEA
1, 2:INICIO
x x + 1;
y y - 1;
FIN
3: y y + 1;
SINO: z z 2;
FIN_CASO

C++
switch( x ) {
case 1:
case 2:
x = x +
y = y
break;
case 3:
y = y +
break;
default:
z = z
}

1;
1;

1;

2;

10.2 Composicin iterativa

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

for(i = 1; i <= 10; ++i)


{
printf( %d, i );
}

scanf( %d, &x );


} while( x >= 5 );

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++
=
==
!=
&&
||
!
%
/

12 Errores comunes de programacin


El texto siguiente muestra algunos de los errores ms comunes en programacin:
Utilizar mayor ndice de vector/matriz que la longitud del vector/matriz. En C++, los ndices
de un vector o matriz van desde cero hasta el nmero de elementos-1.
Omitir una coma o una llave de cierre.
Utilizar un puntero no inicializado.
Utilizar una barra diagonal cuando se requiere un backslash (por ejemplo, sustituir /n por
\n").
Utilizar "=" en una comparacin donde se desea "==".
Sobrescribir el terminador nulo para una cadena.
Terminar una declaracin de funcin con una coma (el compilador marca a menudo el bloque
"hurfano" de cdigo como un error de sintaxis) antes de tiempo.
Especificar los valores de variables de una instruccin scanf() en lugar de sus direcciones.
Error al declarar el tipo devuelto para una funcin.
Suponer un orden de evaluacin de expresin cuando utiliza una expresin con efectos
secundarios (Por ejemplo, i = i++; es ambiguo y peligroso).

Programacin I

14

Вам также может понравиться