miércoles, 30 de noviembre de 2011
Lenguaje C
C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación Ccon mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores (sobrecarga de operadores), y de poder crear nuevos tipos que se comporten como tipos fundamentales.
El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.
C++ | |
---|---|
Desarrollador(es) | |
Bjarne Stroustrup, Bell Labs | |
Información general | |
Extensiones comunes | .h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++ |
Paradigma | multiparadigma:orientado a objetos,imperativo, programación genérica. |
Apareció en | 1983 |
Diseñado por | Bjarne Stroustrup |
Última versión estable | ISO/IEC 14882:2011(2011) |
Última versión en pruebas | C++11 |
Tipo de dato | fuerte, estático, inseguro, nominativo |
Implementaciones | C++ Builder, clang,Comeau C/C++, GCC,Intel C++ Compiler,Microsoft Visual C++, Sun Studio |
Dialectos | ISO/IEC C++ 1998,ISO/IEC C++ 2003,ISO/IEC C++ 2011 |
Influido por | C, Simula, Ada 83,ALGOL 68, CLU, ML1 |
Ha influido a | Perl, LPC, Lua, Pike, Ada 95, Java, PHP, D, C99,C#, Falcon |
Sistema operativo | Multiplataforma |
C es un lenguaje de programación de
propósito general asociado, de modo universal, al sistema operativo UNIX. Sin
embargo, la popularidad, eficacia y potencia de C se ha producido porque este
lenguaje no está prácticamente asociado a ningún sistema operativo, ni a
ninguna máquina en especial.
Esta es la
razón fundamental por la que C es conocido como el lenguaje de
programación de sistemas por excelencia.
ejercicio de funcion scanf
// Este ejemplo guarda un número en n.
int n;
printf("Introduce un numero: ");
scanf("%d",&n);
// Este ejemplo guarda un caracter en m.
char m;
printf("Introduce un caracter: ");
scanf("%c",&m);
// Este ejemplo guarda una cadena de caracteres (solamente una palabra) en cad.
// Notese la ausencia de &
char cad[20];
printf("Introduce una palabra: ");
scanf("%s",cad);
printf("Introduce una palabra: ");
scanf("%10s",cad); // lee máximo 10 caracteres y le concatena el carácter cero.
ejercicio de funcion printf
El siguiente programa utiliza la función printf( ) para imprimir distintos tipos de variables. Como recordarás, cada tipo de variable precisa de su carácter de conversión precedido del carácter %, pudiendo haber entre ambos caracteres uno o varios elementos para el alineamiento por la izquierda, la anchura mínima del campo, etc. Y como una ejecución vale más que mil palabras, aquí tienes el programa para que lo puedas probar. Guárdalo con el nombre formatos.c.
Soluciones
Solución comentada al Ejercicio:
/* fichero formatos.c */
#include <stdio.h> int main(void) { int x=45; double y=23.354; char z[]="Esto es vida"; /* utilizamos barras inclinadas (/) para ver claramente la anchura del campo de caracteres */ printf("Voy a escribir /45/ utilizando el formato %%d: /%d/\n", x); printf("Voy a escribir /45/ utilizando el formato %%1d: /%1d/\n", x); printf("Voy a escribir /45/ utilizando el formato %%10d: /%10d/\n\n", x); printf("Voy a escribir /23.354/ utilizando el formato %%f:/%f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%.3f: /%.3f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%5.1f: /%5.1f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%-10.3f:/%-10.3f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%5f: /%5f/\n\n", y); printf("Voy a escribir /Esto es vida/ utilizando el formato %%s: /%s/\n", z); printf("Voy a escribir /Esto es vida/ utilizando el formato %%.7s:/%.7s/\n", z); printf("Voy a escribir /Esto es vida/ utilizando el formato %%-15.10s: /%-15.10s/\n", z); printf("Voy a escribir /Esto es vida/ utilizando el formato %%15s: /%15s/\n", z); }
ejercicio de funcion Gotoxy
//Funcion: gotoxy()
//Sintaxis:
//void gotoxy(int x, int y);
//Descripcion: Mueve el cursor de la ventana de texto a la posicion segun las coordenadas
//especificadas por los argumentos x e y. Si las coordenadas no son validas entonces
//la llamda a la funcion gotoxy es ignorada. Los argumentos no pueden ser 0.
//Ejemplo:
#include <conio.h>
void main() {
clrscr();
cprintf( "Ejemplo de \"gotoxy\"\n\n" );
cprintf( "1ø linea " );
cprintf( "2ø linea" );
gotoxy( 5, 20 ); //me posiciono en "renglon" 20
cprintf( "3ø linea, pero sale £ltima" );
gotoxy( 20, 2 ); //me posiciono en el "renglon" 2
cprintf( "4ø linea, pero sale segunda" );
gotoxy( 1, 15 ); //me posiciono en el "rengon" 15
cprintf( "Pulsa una tecla para continuar...\r\n" );
getch();
}
//Sintaxis:
//void gotoxy(int x, int y);
//Descripcion: Mueve el cursor de la ventana de texto a la posicion segun las coordenadas
//especificadas por los argumentos x e y. Si las coordenadas no son validas entonces
//la llamda a la funcion gotoxy es ignorada. Los argumentos no pueden ser 0.
//Ejemplo:
#include <conio.h>
void main() {
clrscr();
cprintf( "Ejemplo de \"gotoxy\"\n\n" );
cprintf( "1ø linea " );
cprintf( "2ø linea" );
gotoxy( 5, 20 ); //me posiciono en "renglon" 20
cprintf( "3ø linea, pero sale £ltima" );
gotoxy( 20, 2 ); //me posiciono en el "renglon" 2
cprintf( "4ø linea, pero sale segunda" );
gotoxy( 1, 15 ); //me posiciono en el "rengon" 15
cprintf( "Pulsa una tecla para continuar...\r\n" );
getch();
}
ejercicio de función getche
Te proponemos este programa que imprime los 21 primeros números y sus repectivos cuadrados de tres formas distintas. Para ejecutar de forma pausada el programa hemos introducido la función getchar( ) que espera que pulses cualquier tecla para capturar el carácter correspondiente (en este caso no se hace nada con dicho carácter, que está disponible como valor de retorno; es un simple truco para que el ordenador espere hasta que pulsemos una tecla cualquiera) y continuar ejecutando el programa. Guarda el programa como cuadrados.c.
Solución comentada al Ejercicio:
/* fichero cuadrados.c */ # include <stdio.h> void main(void) { int num=1; while (num<21) { printf("%10d %10d\n", num, num*num); num=num+1; } getchar(); num=1; while (num<21) { printf("%10d %10d\n", num, num*num); num+=1; } getchar(); num=1; while (num<21) { printf("%10d %10d\n", num, num*num); num++; } }En este programa las instrucciones: num=num+1, num+=1 y num++, las podrás utilizar de la forma que más te convenga, es decir, que la mayor o menor utilidad de una sobre otra se dará en la medida que quieras simplificar tus programas que realizarás más adelante. Como ya hemos dicho, la macro getchar() espera a que el usario teclee un valor cualquiera para continuar ejecutando el programa. Es una forma de esperar una señal del usario para continuar con la solución del programa. Se puede observar que si se pulza un carácter cualquiera seguido de un Intro, en realidad se han pulsado dos caracteres y el programa tiene suficiente para llegar hasta el final. Si se pulsa sólo el Intro hay que pulsarlo dos veces.Solucion en Pseudocódigo
ALGORITMO cuadrados ENTRADAS: (No tiene entradas) SALIDAS: (El cuadrado de los 21 primeros números) VARIABLES: num: ENTERO INICIO num<--1 MIENTRAS num<21 HACER ESCRIBIR num, num*num ESCRIBIR SaltoDeLinea num<--num+1 FIN_MIENTRAS num<--1 REPETIR ESCRIBIR num, num*num ESCRIBIR SaltoDeLinea num<--num+1 HASTA num>=21 PARA num<--1 HASTA 20 HACER ESCRIBIR num, num*num ESCRIBIR SaltoDeLinea num<--num+1 FIN_PARA FIN
sentencias
Una sentencia es cualquier expresión en C que se espera que tenga alguna
consecuencia. Pueden ser asignaciones, operaciones, llamadas a funciones o
combinaciones de ellas.
Toda sentencia termina con un ";". Una sentencia simple consiste en una expresión acabada en un punto y coma (;).
7.1 Etiquetas de sentencia
Toda sentencia termina con un ";". Una sentencia simple consiste en una expresión acabada en un punto y coma (;).
7.1 Etiquetas de sentencia
Sirven para etiquetar una sentencia de forma que el control del programa
pueda ser transferido a ella. Se separan de la sentencia por dos puntos
":".
La sintaxis es:etiqueta: sentencia;
Por ejemplo, etiq100: x++;.7.2 Sentencias compuestas
Es un conjunto de sentencia simples que se encierran entre los símbolos "{" y "}" para formar un bloque de código. Pueden aparecer en cualquier sitio en el que podría aparecer una sentencia simple. Pueden contener declaraciones de nuevos objetos (el alcance de la declaración afecta al bloque).
La sintaxis es:{
sentencia;
sentencia;
¿.
sentencia;
}
Sentencias de selección
Existen dos tipos, if y switch. Además, el operador "?" es una alternativa para if en ciertas situaciones. if y switch. Además, el operador "?" es una alternativa para if en ciertas situaciones.
IF
La forma general es:
if
(expresion) sentencia;
else sentencia;
Donde sentencia puede ser una sentencia simple, un bloque de sentencias o nada (en el caso de sentencias vacías). La cláusula else es opcional. Si la expresión del if es cierta (cualquier valor que no sea 0), se ejecuta la sentencia o el bloque de sentencias que constituye el objetivo del if; en cualquier otro caso se ejecuta la sentencia o bloque de sentencias que constituye el objetivo del else, si existe. Siempre se ejecuta el código asociado al if o al else, nunca ambos.
Un if anidado es un if que es el objeto de otro if o else. Son muy comunes en la programación. Un sentencia else siempre se refiere al if más próximo que esté en el mismo bloque que el else y que no esté asociado con un if. Por ejemplo: else es opcional. Si la expresión del if es cierta (cualquier valor que no sea 0), se ejecuta la sentencia o el bloque de sentencias que constituye el objetivo del if; en cualquier otro caso se ejecuta la sentencia o bloque de sentencias que constituye el objetivo del else, si existe. Siempre se ejecuta el código asociado al if o al else, nunca ambos.
if(i) {
if(j) sentencia 1;
if(k) sentencia 2; /* este if esta */
else sentencia 3; /* asociado con este else */
}
El estándar ANSI específica que al menos se deben permitir 15 niveles de anidamiento. En la práctica, la mayoría de los compiladores permiten bastantes más. La alternativa ?
SWITCH
Es una sentencia de selección múltiple, que compara sucesivamente el valor de una expresión con una lista de constantes enteras o de caracteres. Cuando se encuentra una16-correspondencia, se ejecutan las sentencias asociadas con la constante. La forma general es:
-correspondencia, se ejecutan las sentencias asociadas con la constante. La forma general es:
switch (expresión) {
case constante1:
secuencia de sentencias;
break;
¿..
¿..
default:
secuencia de sentencias;
}
Se comprueba el valor de la expresión, por orden, con los valores de las constantes especificadas en las sentencias case. Cuando se encuentra una correspondencia, se ejecuta la secuencia de sentencias asociada con ese case, hasta que se encuentra la sentencia break o el final de la sentencia switch. Si no se incluye la sentencia break, sigue buscando más correspondencias en las siguientes sentencias case. La sentencia sentencia break o el final de la sentencia switch. Si no se incluye la sentencia break, El estándar ANSI específica que una sentencia switch debe permitir al menos 257 sentencias case. En la práctica el número empleado es menor por razones de eficiencia.
Aunque case es una sentencia de etiqueta, no tiene calidad por sí misma fuera de un case. En la práctica el número empleado es menor por razones de eficiencia.
Aunque case es una sentencia de etiqueta, no tiene calidad por sí misma fuera de un case es una sentencia de etiqueta, no tiene calidad por sí misma fuera de un switch.
La sentencia switch se diferencia de la sentencia if en que sólo puede comparar la igualdad, mientras que if puede evaluar expresiones relacionales o lógicas.
No puede haber dos constantes case en el mismo switch que tengan los mismos valores (por supuesto que una sentencia switch contenida en otra sentencia switch pude tener constantes case que sean iguales).
Si se utilizan constantes de tipo carácter en la sentencia switch, se convierten automáticamente a sus valores enteros.
Sentencias de iteración
También denominadas bucles. Permiten realizar un conjunto de instrucciones hasta que se alcance una cierta condición (que puede estar predefinida como en el bucle for; o no haber final predeterminado, como en los bucles while y do-while).
FOR
El formato general es:for (inicialización; condición; incremento) sentencia; La inicialización normalmente es una sentencia de asignación que se utiliza para iniciar la variable de control del bucle.
La condición es una expresión relacional que determina cuando finaliza el bucle. El incremento define como cambia la variable de control cada vez que se repite el bucle.
Estas tres secciones principales deben ser separadas por punto y coma (";"). El bulce for continua ejecutándose mientras que la condición sea cierta. Una vez que la condición es falsa, la ejecución del programa sigue por la sentencia siguiente al for.
No es obligatoria ninguna de las tres expresiones, por ejemplo, se puede realizar un bucle infinito de la forma:
FOR
Sentencias de salto
C tiene cuatro sentencias que llevan a cabo un salto incondicional (además de goto, pero su uso no está bien visto por sus programadores): return, break, exit() y continue. goto, pero su uso no está bien visto por sus programadores): return, break, exit() y continue.
RETURN
Se usa para volver de una función. Se trata de una sentencia de salto porque hace que la ejecución vuelva al punto en que se hizo la llamada a la función. Si hay algún valor asociado con return, se trata del valor de vuelta de la función. Si no se especifica un valor de vuelta, se asume que devuelve un valor sin sentido.
Donde expresión es opcional. Se pueden usar tantas sentencias return como se quiera en una función. Sin embargo, la función termina al encontrar el primero.
expresión es opcional. Se pueden usar tantas sentencias return como se quiera en una función. Sin embargo, la función termina al encontrar el primero.
BREAK
Tiene dos usos: para finalizar un case en una sentencia switch y para forzar la terminación inmediata de un bucle, saltando la evaluación condicional normal del ciclo.
Cuando se encuentra la sentencia break dentro de un bucle, el bucle finaliza inmediatamente y el control sigue en la sentencia posterior al bucle.
EXIT()
Igual que se puede interrumpir un bucle, se puede salir anticipadamente de un programa usando la función exit() de la biblioteca estándar. Esta función da lugar a la terminación inmediata del programa, forzando la vuelta al sistema operativo. La forma general de la
función exit() es:
void exit (int código_de_vuelta);
El valor de código_de_vuelta es el que se devuelve al proceso de llamada, que normalmente es el sistema operativo. Generalmente se usa un cero como código de vuelta para indicar que se trata de una terminación normal del programa. Se utiliza otros argumentos para indicar algún tipo de error.
CONTINUE
Funciona de forma similar a break. Sin embargo, en vez de forzar la terminación, break. Sin embargo, en vez de forzar la terminación, continue fuerza una nueva iteración del bucle y salta cualquier código que exista entremedias. Para el bucle for, continue hace que se ejecuten las partes de prueba condicional y de incremento del bucle. Para los bucles while y do-while, el control del programa pasa a la prueba condicional.
La sintaxis es:etiqueta: sentencia;
Por ejemplo, etiq100: x++;.7.2 Sentencias compuestas
Es un conjunto de sentencia simples que se encierran entre los símbolos "{" y "}" para formar un bloque de código. Pueden aparecer en cualquier sitio en el que podría aparecer una sentencia simple. Pueden contener declaraciones de nuevos objetos (el alcance de la declaración afecta al bloque).
La sintaxis es:{
sentencia;
sentencia;
¿.
sentencia;
}
Sentencias de selección
Existen dos tipos, if y switch. Además, el operador "?" es una alternativa para if en ciertas situaciones. if y switch. Además, el operador "?" es una alternativa para if en ciertas situaciones.
IF
La forma general es:
if
(expresion) sentencia;
else sentencia;
Donde sentencia puede ser una sentencia simple, un bloque de sentencias o nada (en el caso de sentencias vacías). La cláusula else es opcional. Si la expresión del if es cierta (cualquier valor que no sea 0), se ejecuta la sentencia o el bloque de sentencias que constituye el objetivo del if; en cualquier otro caso se ejecuta la sentencia o bloque de sentencias que constituye el objetivo del else, si existe. Siempre se ejecuta el código asociado al if o al else, nunca ambos.
Un if anidado es un if que es el objeto de otro if o else. Son muy comunes en la programación. Un sentencia else siempre se refiere al if más próximo que esté en el mismo bloque que el else y que no esté asociado con un if. Por ejemplo: else es opcional. Si la expresión del if es cierta (cualquier valor que no sea 0), se ejecuta la sentencia o el bloque de sentencias que constituye el objetivo del if; en cualquier otro caso se ejecuta la sentencia o bloque de sentencias que constituye el objetivo del else, si existe. Siempre se ejecuta el código asociado al if o al else, nunca ambos.
if(i) {
if(j) sentencia 1;
if(k) sentencia 2; /* este if esta */
else sentencia 3; /* asociado con este else */
}
El estándar ANSI específica que al menos se deben permitir 15 niveles de anidamiento. En la práctica, la mayoría de los compiladores permiten bastantes más. La alternativa ?
SWITCH
Es una sentencia de selección múltiple, que compara sucesivamente el valor de una expresión con una lista de constantes enteras o de caracteres. Cuando se encuentra una16-correspondencia, se ejecutan las sentencias asociadas con la constante. La forma general es:
-correspondencia, se ejecutan las sentencias asociadas con la constante. La forma general es:
switch (expresión) {
case constante1:
secuencia de sentencias;
break;
¿..
¿..
default:
secuencia de sentencias;
}
Se comprueba el valor de la expresión, por orden, con los valores de las constantes especificadas en las sentencias case. Cuando se encuentra una correspondencia, se ejecuta la secuencia de sentencias asociada con ese case, hasta que se encuentra la sentencia break o el final de la sentencia switch. Si no se incluye la sentencia break, sigue buscando más correspondencias en las siguientes sentencias case. La sentencia sentencia break o el final de la sentencia switch. Si no se incluye la sentencia break, El estándar ANSI específica que una sentencia switch debe permitir al menos 257 sentencias case. En la práctica el número empleado es menor por razones de eficiencia.
Aunque case es una sentencia de etiqueta, no tiene calidad por sí misma fuera de un case. En la práctica el número empleado es menor por razones de eficiencia.
Aunque case es una sentencia de etiqueta, no tiene calidad por sí misma fuera de un case es una sentencia de etiqueta, no tiene calidad por sí misma fuera de un switch.
La sentencia switch se diferencia de la sentencia if en que sólo puede comparar la igualdad, mientras que if puede evaluar expresiones relacionales o lógicas.
No puede haber dos constantes case en el mismo switch que tengan los mismos valores (por supuesto que una sentencia switch contenida en otra sentencia switch pude tener constantes case que sean iguales).
Si se utilizan constantes de tipo carácter en la sentencia switch, se convierten automáticamente a sus valores enteros.
Sentencias de iteración
También denominadas bucles. Permiten realizar un conjunto de instrucciones hasta que se alcance una cierta condición (que puede estar predefinida como en el bucle for; o no haber final predeterminado, como en los bucles while y do-while).
FOR
El formato general es:for (inicialización; condición; incremento) sentencia; La inicialización normalmente es una sentencia de asignación que se utiliza para iniciar la variable de control del bucle.
La condición es una expresión relacional que determina cuando finaliza el bucle. El incremento define como cambia la variable de control cada vez que se repite el bucle.
Estas tres secciones principales deben ser separadas por punto y coma (";"). El bulce for continua ejecutándose mientras que la condición sea cierta. Una vez que la condición es falsa, la ejecución del programa sigue por la sentencia siguiente al for.
No es obligatoria ninguna de las tres expresiones, por ejemplo, se puede realizar un bucle infinito de la forma:
FOR
Sentencias de salto
C tiene cuatro sentencias que llevan a cabo un salto incondicional (además de goto, pero su uso no está bien visto por sus programadores): return, break, exit() y continue. goto, pero su uso no está bien visto por sus programadores): return, break, exit() y continue.
RETURN
Se usa para volver de una función. Se trata de una sentencia de salto porque hace que la ejecución vuelva al punto en que se hizo la llamada a la función. Si hay algún valor asociado con return, se trata del valor de vuelta de la función. Si no se especifica un valor de vuelta, se asume que devuelve un valor sin sentido.
Donde expresión es opcional. Se pueden usar tantas sentencias return como se quiera en una función. Sin embargo, la función termina al encontrar el primero.
expresión es opcional. Se pueden usar tantas sentencias return como se quiera en una función. Sin embargo, la función termina al encontrar el primero.
BREAK
Tiene dos usos: para finalizar un case en una sentencia switch y para forzar la terminación inmediata de un bucle, saltando la evaluación condicional normal del ciclo.
Cuando se encuentra la sentencia break dentro de un bucle, el bucle finaliza inmediatamente y el control sigue en la sentencia posterior al bucle.
EXIT()
Igual que se puede interrumpir un bucle, se puede salir anticipadamente de un programa usando la función exit() de la biblioteca estándar. Esta función da lugar a la terminación inmediata del programa, forzando la vuelta al sistema operativo. La forma general de la
función exit() es:
void exit (int código_de_vuelta);
El valor de código_de_vuelta es el que se devuelve al proceso de llamada, que normalmente es el sistema operativo. Generalmente se usa un cero como código de vuelta para indicar que se trata de una terminación normal del programa. Se utiliza otros argumentos para indicar algún tipo de error.
CONTINUE
Funciona de forma similar a break. Sin embargo, en vez de forzar la terminación, break. Sin embargo, en vez de forzar la terminación, continue fuerza una nueva iteración del bucle y salta cualquier código que exista entremedias. Para el bucle for, continue hace que se ejecuten las partes de prueba condicional y de incremento del bucle. Para los bucles while y do-while, el control del programa pasa a la prueba condicional.
estructura de control.
Las estructuras de control permiten
controlar el flujo de ejecución de las instrucciones en un código. Con estas
estructuras, el programador puede
determinar el orden y las veces que se ejecutarán las instrucciones que están
dentro de estas estructuras.
Originalmente las líneas de código (las instrucciones) eran ejecutadas siempre secuencialmente, o sea, una después de la otra. Se utilizaba la función GOTO para alterar el orden de ejecución. Con esta función se podía ir de un lado para el otro en el código. Esta función traía grandes problemas en el desarrollo de programas, como falta de claridad, errores, etc., por lo que se enunciaron tres estructuras de control que permitirían desarrollar cualquier programa: estructura de secuencia, estructuras de selección y estructuras de repetición.
Originalmente las líneas de código (las instrucciones) eran ejecutadas siempre secuencialmente, o sea, una después de la otra. Se utilizaba la función GOTO para alterar el orden de ejecución. Con esta función se podía ir de un lado para el otro en el código. Esta función traía grandes problemas en el desarrollo de programas, como falta de claridad, errores, etc., por lo que se enunciaron tres estructuras de control que permitirían desarrollar cualquier programa: estructura de secuencia, estructuras de selección y estructuras de repetición.
La estructura de secuencia es la que
venimos trabajando desde el principio. Es la ejecución de una instrucción tras
otra en secuencia.
Las estructuras de selección son aquellas que permiten, bajo una condición, ejecutar distintos códigos. La más simple es la estructura de selección IF. Se da una condición que puede ser verdadera o falsa, y se ejecuta un código u otro dependiendo del resultado de esa condición en tiempo de ejecución. También está la estructura de selección SWITCH que, dependiendo de un valor, ejecutará distintos códigos.
Luego están las estructuras de repetición, las cuales repiten un código cierta cantidad de veces hasta que se cumpla o deje de cumplir una condición. Son ejemplos de estas estructuras en C los WHILE, los FOR, etc.
Las estructuras de selección son aquellas que permiten, bajo una condición, ejecutar distintos códigos. La más simple es la estructura de selección IF. Se da una condición que puede ser verdadera o falsa, y se ejecuta un código u otro dependiendo del resultado de esa condición en tiempo de ejecución. También está la estructura de selección SWITCH que, dependiendo de un valor, ejecutará distintos códigos.
Luego están las estructuras de repetición, las cuales repiten un código cierta cantidad de veces hasta que se cumpla o deje de cumplir una condición. Son ejemplos de estas estructuras en C los WHILE, los FOR, etc.
for
La forma general de esta sentencia es:
for (expresion 1; expresion 2; expresion 3) sentencia;
- Inicialmente se ejecuta expresion 1, se hace para inicializar algún parámetro que controla la repetición del bucle.
- expresion 2 es una condición que debe ser cierta para que se ejecute sentencia.
- expresion 3 se utiliza para modificar el valor del parámetro.
- El bucle se repite mientras expresion 2 sea cierto.
- Si sentencia es compuesta se encierra entre { }.
- Si se omite expresion 2 se asumirá el valor permanente de 1 y el bucle se ejecutará de forma indefinida (bucle infinito).
Un ejemplo de uso de esta sentencia es el siguiente fragmento de programa, que calcula la suma de los numeros del 1 al 100:
int numero, suma; suma=0; for (numero=1; numero<=100; numero++) suma = suma + numero;
while
sintaxis
Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son opcionales.
Por otra parte, al igual que en las instrucciones alternativas doble y simple, a la<expresión_lógica> de una instrucción repetitiva while, también se le llama condición.
Para que se ejecute el <bloque_de_instrucciones>, la condición tiene que ser verdadera. Por el contrario, si la condición es falsa, el<bloque_de_instrucciones> no se ejecuta.
Por tanto, cuando el flujo de un programa llega a un bucle while, existen dos posibilidades:
Cuando la condición de un bucle while se evalúa siempre a verdadera, se dice que se ha producido un bucle infinito, ya que, el programa nunca termina. Un bucle infinito es un error lógico.
Es importante hacer hincapié en el hecho de que, en un bucle while, primero se evalúa la condición y, en el caso de que ésta sea verdadera, entonces se ejecuta el bloque de instrucciones. Veremos que, en el bucle do...while, el procedimiento es al revés. En él, primero se ejecuta el bloque de instrucciones y, después, se evalúa la condición.
Para que un bucle while no sea infinito, en el bloque de instrucciones debe ocurrir algo para que la condición deje de ser verdadera. En la mayoría de los casos, la condición se hace falsa al cambiar el valor de una variable.
En resumen, una instrucción repetitiva while permite ejecutar, repetidamente, (cero o más veces) un bloque de instrucciones, mientras que, una determinada condición sea verdadera.
Ejemplo 1: Se quiere escribir un programa que muestre por pantalla los primeros diez números naturales:
En lenguaje C, para resolver el problema de este ejemplo se puede escribir:
while ( <expresión_lógica> )
{ <bloque_de_instrucciones> } |
Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son opcionales.
Por otra parte, al igual que en las instrucciones alternativas doble y simple, a la<expresión_lógica> de una instrucción repetitiva while, también se le llama condición.
Para que se ejecute el <bloque_de_instrucciones>, la condición tiene que ser verdadera. Por el contrario, si la condición es falsa, el<bloque_de_instrucciones> no se ejecuta.
Por tanto, cuando el flujo de un programa llega a un bucle while, existen dos posibilidades:
- Si la condición se evalúa a falsa, el bloque de instrucciones no se ejecuta, y el bucle while finaliza sin realizar ninguna iteración.
- Si la condición se evalúa a verdadera, el bloque de instrucciones sí que se ejecuta y, después, se vuelve a evaluar la condición, para decidir, de nuevo, si el bloque de instrucciones se vuelve a ejecutar o no. Y así sucesivamente, hasta que, la condición sea falsa.
Cuando la condición de un bucle while se evalúa siempre a verdadera, se dice que se ha producido un bucle infinito, ya que, el programa nunca termina. Un bucle infinito es un error lógico.
Es importante hacer hincapié en el hecho de que, en un bucle while, primero se evalúa la condición y, en el caso de que ésta sea verdadera, entonces se ejecuta el bloque de instrucciones. Veremos que, en el bucle do...while, el procedimiento es al revés. En él, primero se ejecuta el bloque de instrucciones y, después, se evalúa la condición.
Para que un bucle while no sea infinito, en el bloque de instrucciones debe ocurrir algo para que la condición deje de ser verdadera. En la mayoría de los casos, la condición se hace falsa al cambiar el valor de una variable.
En resumen, una instrucción repetitiva while permite ejecutar, repetidamente, (cero o más veces) un bloque de instrucciones, mientras que, una determinada condición sea verdadera.
Ejemplo 1: Se quiere escribir un programa que muestre por pantalla los primeros diez números naturales:
1 2 3 4 5 6 7 8 9 10 |
En lenguaje C, para resolver el problema de este ejemplo se puede escribir:
#include <stdio.h>
int main() { int contador; printf( "\n " ); contador = 1; /* Inicialización del contador */ while ( contador <= 10 ) /* Condición */ { printf( "%d ", contador ); /* Salida */ contador++; /* Incremento del contador */ } return 0; } |
do while
sintaxis:
{
<bloque_de_instrucciones>
} while ( <expresión_lógica> );
Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son opcionales.Además, como se puede apreciar, la instrucción repetitiva do...while, también hace uso de una condición.
En un bucle do...while, primero se ejecuta el bloque de instrucciones y, después, se evalúa la condición. En el caso de que ésta sea verdadera, se vuelve a ejecutar el bloque de instrucciones. Y así sucesivamente, hasta que, la condición sea falsa.
Por consiguiente, cuando el flujo de un programa llega a un bucle do...while, existen dos posibilidades:
- Se ejecuta el bloque de instrucciones y, después, si la condición se evalúa a falsa, el bloque de instrucciones no se vuelve a ejecutar, de manera que, el bucle do...while finaliza, habiendo realizado una solaiteración.
- Se ejecuta el bloque de instrucciones y, a continuación, si la condición se evalúa a verdadera, el bloque de instrucciones se vuelve a ejecutar. Y así sucesivamente, hasta que la condición sea falsa.
En resumen, una instrucción repetitiva do...while permite ejecutar repetidamente (una o más veces) un bloque de instrucciones, mientras que, una determinada condición sea verdadera.
Ejemplo 1: De modo que, utilizando un bucle do...while, el problema del ejemplo 1 del apartado anterior, 3.1 Repetitiva mientras, se puede resolver con el código:
#include <stdio.h>
int main() { int contador; printf( "\n " ); contador = 1; /* Inicialización del contador */ do { printf( "%d ", contador ); /* Salida */ contador++; /* Incremento */ } while ( contador <= 10 ); /* Condición */ return 0; } |
Suscribirse a:
Entradas (Atom)