Programación en C y C++ Temas selectos de Modelación Numérica Intoducción • C es un lenguaje estructurado de nivel medio, ni de bajo nivel como ensamblador, ni de alto nivel como Ada o Haskell. Esto permite una mayor flexibilidad y potencia, a cambio de menor abstracción. • No lleva a cabo comprobación de errores en Cempo de ejecución, por ejemplo no se comprueba que no se sobrepasen los límites de los arrays. El programador es el único responsable de llevar a cabo esas comprobaciones. • Tiene un reducido numero de palabras clave, unas 32 en C89 y 37 en C99. • C dispone de una biblioteca estándar que conCene numerosas funciones y que siempre está disponible, además de las extensiones que proporcione cada compilador o entorno de desarrollo. • En resumen, es un lenguaje muy flexible, muy potente, muy popular, pero que no protege al programador de sus errores. Palabras claves Tipos de datos • char: • Contenido: Puede contener un caracter del conjunto de caracteres locales • Tamaño: Normalmente 1 byte. • int: • Contenido: Un número entero • Tamaño: El determinado por la arquitectura para números enteros. En arquitecturas Intel/x86 es 4 bytes • float: • Contenido: Un número en coma flotante • Tamaño: El determinado por la arquitectura para números en coma flotante. En arquitecturas Intel/x86 es 4 bytes • double • Contenido: Un número en coma flotante de precisión doble • Tamaño: El determinado por la arquitectura para números en coma flotante de doble precisión. En arquitecturas Intel/x86 es 8 bytes Variables • DEFINICIÓN • Variable: Espacio de memoria, referenciado por un iden5ficador, en el que el programador puede almacenar datos de un determinado 5po. • Declarar una variable es indicar al compilador que debe reservar espacio para almacenar valores de un Cpo determinado, que serán referenciados por un idenCficador determinado. En C debemos declarar todas las variables antes de usarlas, establecer el Cpo que Cenen y, en los casos que sea necesario, darles un valor inicial. • A la hora de declarar una variable debemos tener en cuenta diversas restricciones : • Los nombres de variables se componen de letras, dígitos y el caracter de subrayado _. • El primer caracter del nombre debe ser una letra o el carácter de subrayado. • Las letras mayúsculas y minúsculas son disCntas en C. • Las palabras reservadas del lenguaje no se pueden usar como nombres de variable. Constantes • Las constantes son valores fijos que no pueden ser modificados por el programa. Pueden ser de cualquier Cpo de datos básico (punteros incluidos). • También podemos marcar en nuestro programa que queremos que una variable sea constante. Para ello uClizamos la palabra reservada const tal que: • const int dummy = 321; /* declaramos que dummy vale y valdrá siempre 321 */ • No Cene demasiado senCdo declarar una variable de Cpo const sin darle valor inicial, pero algunos compiladores permiten hacerlo. Operadores • En C existen una gran variedad de operadores, que se pueden agrupar de la siguiente manera: • • • • • Operadores aritméCcos. Operadores lógicos. Operadores relacionales. Operadores asignación. Operadores especiales. Operadores aritméticos • Los operadores aritméCcos nos permiten, básicamente, hacer cualquier operación aritméCca, que necesitemos (ejemplo: suma, resta, mulCplicación, etc). En la siguiente tabla se muestran los operadores de los que disponemos en C y su función asociada. Nota: Todos ellos aceptan operandos de cualquier 5po excepto el Módulo, Incremento y Decremento, que sólo acepta operadores enteros. Operadores lógicos • Como operadores lógicos designamos a aquellos operadores que nos permiten “conectar” un par de propiedades (al igual que en lógica): Operadores relacionales • Al igual que en matemáCcas, estos operadores nos permiCrán evaluar las relaciones (igualdad, mayor, menor, etc) entre un par de operandos (en principio, pensemos en números). Los operadores relacionales de los que disponemos en C son: Operadores de asignación • Los operadores de asignación ++ y – pueden ir antes o delante de una expresión formando una nueva expresión. Estas expresiones se denominan post-­‐incrementos o pre-­‐ incrementos (decrementos si el operador es -­‐-­‐) y son expresiones compuestas, normalmente son del Cpo y=x++; (y= ++x;). a) Forma prefija: preincremento y predecremento Cuando un operador de incremento o decremento precede a su operando, se llevará a cabo la operación de incremento o de decremento antes de uClizar el valor del operando. Veámoslo con un ejemplo: int x,y; x = 2004; y = ++x; /* x e y valen 2005. */ b) Forma pos:ija: pos;ncremento y postdecremento En el caso de los posCncrementos y postdecrementos pasa lo contrario: se uClizará el valor actual del operando y luego se efectuará la operación de incremento o decremento. int x,y x = 2004; y = x++; /* y vale 2004 y x vale 2005 */ Prioridad y asociatividad de los operadores Librerias • El estándar ANSI C de define un conjunto de funciones, así como Cpos relacionados y macros, que son proporcionados para la implementación. • Todas la librerías son declaradas en un fichero cabecera. Para que sea visible al programa se añade el comando del presocesador #include. Por ejemplo: #include <stddef.h>; • Cada fichero de cabecera se denomina librería. Librerías estándar Caracteres Especiales • Caracteres de escape Estructura de los programas Estructura de los programas • El mínimo programa de C++ es: main( ) { } • Lo único que hemos hecho es definir una función (main) que no Cene argumentos y no hace nada. Las llaves { } delimitan un bloque en C++, en este caso el cuerpo de la función main. Todos los programas deben tener una función main() que es la que se ejecuta al comenzar el programa. Estructura de los programas • Los comentarios se introducirán en el programa separados por /* y */ o comenzándolos con //. Los comentarios entre /* y */ pueden tener la longitud que queramos, pero no se anidan, es decir, si escribimos /* hola /* amigo */ mío */, el compilador interpretará que el comentario termina antes de mío, y dará un error. Los comentarios que comienzan por // sólo son válidos hasta el final de la línea en la que aparecen. • Un programa simple que muestra todo lo que hemos visto puede ser el siguiente: Comentario /* Este es un programa mínimo en C++, lo único que hace es escribir una frase en la pantalla */ #include <iostream.h> int main( ) { cout << "Hola guapo\n"; // imprime en la pantalla la frase "hola guapo" } Estructura de los programas • Los comentarios se introducirán en el programa separados por /* y */ o comenzándolos con //. Los comentarios entre /* y */ pueden tener la longitud que queramos, pero no se anidan, es decir, si escribimos /* hola /* amigo */ mío */, el compilador interpretará que el comentario termina antes de mío, y dará un error. Los comentarios que comienzan por // sólo son válidos hasta el final de la línea en la que aparecen. • Un programa simple que muestra todo lo que hemos visto puede ser el siguiente: /* Este es un programa mínimo en C++, lo único que hace es escribir una frase en la pantalla */ #include <iostream.h> DirecCva, este caso incluye un fichero int main( ) { cout << "Hola guapo\n"; // imprime en la pantalla la frase "hola guapo" } Estructura de los programas • Los comentarios se introducirán en el programa separados por /* y */ o comenzándolos con //. Los comentarios entre /* y */ pueden tener la longitud que queramos, pero no se anidan, es decir, si escribimos /* hola /* amigo */ mío */, el compilador interpretará que el comentario termina antes de mío, y dará un error. Los comentarios que comienzan por // sólo son válidos hasta el final de la línea en la que aparecen. • Un programa simple que muestra todo lo que hemos visto puede ser el siguiente: /* Este es un programa mínimo en C++, lo único que hace es escribir una frase en la pantalla En la declaración de main() hemos incluido la */ palabra int, que indica que la función devuelve un entero. Este valor se le entrega al sistema #include <iostream.h> operaCvo al terminar el programa. Si no se int main( ) devuelve ningún valor el sistema recibe un valor aleatorio. { cout << "Hola guapo\n"; // imprime en la pantalla la frase "hola guapo" } Estructura de los programas • Los comentarios se introducirán en el programa separados por /* y */ o comenzándolos con //. Los comentarios entre /* y */ pueden tener la longitud que queramos, pero no se anidan, es decir, si escribimos /* hola /* amigo */ mío */, el compilador interpretará que el comentario termina antes de mío, y dará un error. Los comentarios que comienzan por // sólo son válidos hasta el final de la línea en la que aparecen. • Un programa simple que muestra todo lo que hemos visto puede ser el siguiente: /* Este es un programa mínimo en C++, lo único que hace es escribir una frase en la pantalla */ La sentencia separada ente llaves indica que se escriba la #include <iostream.h> f r a s e " H o l a g u a p o " . E l int main( ) operador << ("poner en") escribe el segundo argumento { en el primero. En este caso la "Hola guapo\n” se cout << "Hola guapo\n"; // imprime en la pantalla la frase "hola guapo" cadena escribe en la salida estándar (cout). El carácter \ seguido de } otro carácter indica un solo carácter especial, en este caso el salto de línea (\n). Estructuras de control • Como estructuras de control el C++ incluye las siguientes construcciones: • condicionales: • if instrucción de selección simple • switch instrucción de selección múlCple • bucles: • do-­‐while instrucción de iteración con condición final • while instrucción de iteración con condición inicial • for instrucción de iteración especial (similar a las de repeCción con contador) • de salto: • break instrucción de ruptura de secuencia (sale del bloque de un bucle o instrucción condicional) • con;nue instrucción de salto a la siguiente iteración (se emplea en bucles para saltar posición donde se comprueban las condiciones) • goto Instrucción de salto incondicional (salta a una eCqueta) • return instrucción de retorno de un valor (se emplea en las funciones) Programas • Escriba un programa que imprima el mensaje “Primer programa” Compliando • En este caso usaremos un compilador concreto de C. • Su forma de uso más básica es ésta: gcc fichero.c –o ficehro_ejecutable • La opción -­‐o es abreviatura de <<output>>, es decir, <<salida>>, y a ella le sigue el nombre del fichero que contendrá la traducción a código máquina del programa. Debes tener presente que dicho fichero sólo se genera si el programa C está correctamente escrito. • Escriba un programa que lea y escriba un carácter. • Escriba un programa que te imprima un mensaje de presentación, te pregunte como te llamas y te salude. Ejemplo de código fuente en Lenguaje C de un programa que pide un número entero que luego muestra en pantalla: // atoi.c: Pide un número entero por teclado y lo muestra en pantalla. #include<stdio.h> // Incluiremos la biblioteca stdio porque usaremos las funciones: prin:, gets #include<stdlib.h> // Incluiremos la biblioteca stdlib porque usaremos las funciones: atoi, system int main() { char cadena[10]; // Variable de cadena (char [ ]) donde guardaremos las teclas que se pulsen. int numero; // Declaramos una variable numérica entera (int) donde almacenar el número conver;do. prinw(“Introduzca un número entero: “); // Informamos al usuario. gets(cadena); // Leemos (gets) las teclas pulsadas y las guardamos en cadena. numero=atoi(cadena); // Obtenemos (atoi) el valor numérico entero de la cadena. // Mostraremos (prin:) el resultado de obtener el número que se introdujo por teclado: prinw(“El número introducido es: %i \r\n”, numero); system(“PAUSE”); // Parar la ejecución hasta que se pulse una tecla. return(0); // Salir del programa indicando que no hubo errores. }