lenguaje C
El Lenguaje de programación C fue
implantado por primera vez en los años 70 por Dennis Ritchie para una
computadora DEC PDP-11 corriendo el sistema operativo UNIX.
El lenguaje C, a diferencia de lenguajes
como Basic y Pascal que son lenguajes de alto nivel, es un lenguaje de nivel
medio ya que combina las propiedades de un lenguaje de alto nivel con la
funcionalidad del lenguaje ensamblador.
Es esa misma característica la que le da
a este lenguaje más potencia y dominio sobre los recursos del sistema. Entre
una de las características más importantes de C está la portabilidad, esto es,
un programa escrito en C se puede trasladar fácilmente entre distintos sistemas
operativos como Windows, DOS o Linux.
A algunos
estudiantes que se inician en el estudio de C la visión del lenguaje les causa
miedo (lo digo por experiencia) porque C tiene fama de ser un lenguaje difícil,
nada más lejos de la verdad. Una vez que se entiende cómo trabaja es fácil
dominarlo, por algo C es el preferido de muchos programadores que lo consideran
un lenguaje "elegante". Por no ser un lenguaje de alto nivel, C le
relega al programador cierto grado de responsabilidad en el desarrollo de los
programas.
Ciclo de vida
La principal razón para aprender a programar y conocer los
lenguajes de programación es utilizar la computadora como herramienta para
solucionar problemas. La resolución de problemas se divide en tres fases:
El propósito de esta fase es ayudar al programador a comprender el
problema. El problema debe estar bien definido si se desea llegar a una
solución satisfactoria, para lo cual se requiere que las especificaciones de
entrada y salida sean descritas con detalle.
Una computadora solo puede solucionar problemas cuando se le
proporcionan los pasos sucesivos a realizar, a estos pasos sucesivos que
indican las instrucciones a realizar se les llama "algoritmos". Las
fases para realizar el diseño del algoritmo son:
- Diseño descendente
- Refinamiento de pasos
- Uso de herramientas de programación:
diagrama de flujo o pseudocódigo
Una vez que el algoritmo está diseñado y representado mediante una
herramienta de programación (pseudocódigo o diagrama de flujo) se lleva a cabo
la fase de la resolución del problema mediante la computadora, la cual se
divide a su vez en las siguientes subfases:
1.
Codificación del algoritmo, que consiste en utilizar un
lenguaje de programación siguiendo las reglas gramaticales del mismo (sintaxis)
para convertir el algoritmo en un programa
2.
Ejecución del programa utilizando un compilador del
lenguaje
3.
Comprobación del programa.
4.
Datos, constantes,
variables, acumuladores, y contadores
6.
Las computadoras pueden trabajar con varios tipos de datos, los
algoritmos y programas operan sobre estos. Existen dos clases de datos: datos
simples y datos compuestos.
7.
Los distintos tipos de datos se representan como un conjunto o
secuencia de dígitos binarios (bits). Los lenguajes de programación de alto nivel
nos permiten basarnos en abstracciones para no manejar los detalles de
representación interna.
8.
Los tipos de datos simples son: numéricos (enteros y reales),
lógicos y caracteres.
10.
Este tipo de datos se divide en enteros y reales.
11.
Los enteros son aquellos números que no tienen componente
fraccionario o decimal y dentro de la computadora son un subconjunto finito de
los números enteros. Estos números pueden ser negativos o positivos y el rango
es de –32,768 a 32,767.
12.
El tipo de datos "real" son aquellos números que tienen
una parte fraccionaria y pueden ser positivos y negativos dentro de la
computadora forman un subconjunto de los números reales. Para representar
números muy pequeños o muy grandes se emplea la notación de punto flotante, que
es una generalización de la notación científica. En esta notación se considera
al número real como mantisa y al exponente la potencia de 10 a la que se eleva
este número.
14.
Este tipo de dato es aquel que solo puede tomar uno de 2 valores:
verdadero (true) o falso (false). En lenguaje C no existe el tipo lógico pero
se puede implementar con un número entero conociendo que 0 es falso y cualquier
número diferente de cero verdadero.
16.
El dato tipo carácter puede tomar un valor de un conjunto finito y
ordenado de caracteres o símbolos que la computadora reconoce (código ASCII).
Este tipo de dato ocupa un byte y almacena un solo carácter.
17.
Existe también el dato tipo cadena (compuesto) que es una sucesión
de caracteres que se encuentran delimitados por comillas, la longitud de una
cadena es el número de caracteres comprendidos entre los delimitadores.
|
Tipos de datos
|
Descripción
|
Memoria
|
|
Int
|
Entero
|
2 bytes
|
|
Char
|
Caracter
|
1 byte
|
|
Float
|
Flotante
|
4 bytes
|
|
Double
|
Flotante de doble precisión
|
8 bytes
|
19.
Una constante es un dato que permanece sin cambio durante el
desarrollo del algoritmo o durante la ejecución del programa. La mayoría de los
lenguajes de programación nos permiten el manejo de diferentes tipos de
constantes, estas pueden ser enteras, reales, caracteres y cadenas. En lenguaje
C una constante se define por medio de la instrucción #define (directiva del
procesador).
20.
Una variable es un dato cuyo valor puede cambiar durante el
desarrollo del algoritmo o ejecución del programa. Hay diferentes tipos de
variables: enteras, reales, caracteres y cadenas. Una variable que es de cierto
tipo solo puede tomar valores que correspondan a ese tipo. Si se intenta
asignar un valor de tipo diferente se producirá un error.
21.
Una variable se identifica por dos atributos: el nombre de la
variable (identificador) y el tipo de la variable. El identificador se puede
formar con caracteres alfanuméricos y el carácter de subrayado ( _ ) empezando
siempre por una letra. No se admiten como identificadores palabras reservadas
del lenguaje de programación que se esté utilizando. Los nombres de variables
que se elijan para el algoritmo o programa deben ser significativos y tener
relación con el objeto que representa. En lenguaje C la sintaxis para definir
una variable es:
22. tipo_de_dato
identificador;
24.
Los procesos repetitivos requieren contar los sucesos y acciones
internas, una forma de hacerlo es mediante un contador. Un contador es una
variable cuyo valor se incrementa o decrementa en una cantidad constante en
cada repetición. La forma en que se construye un contador es la siguiente:
25. int contador = 1;
//variable con valor inicial de 1 contador = contador+1; contador
+= 1; contador
++;
27.
Un acumulador o totalizador es una variable cuya función es
almacenar cantidades resultantes de operaciones sucesivas. Realiza la misma
función que un contador con la diferencia de que el incremento o decremento es
variable en lugar de constante.
28. int acumulador =
0; acumulador
= acumulador + valor; acumulador += valor;
La metodología descendente (top-down),
también conocida como arriba-abajo consiste en establecer una serie de niveles
de menor o mayor complejidad (arriba-abajo) que den solución al problema.
Consiste en efectuar una relación entre las etapas de la estructuración de
forma que una etapa jerárquica y su inmediatamente inferior se relacionen
mediante entradas y salidas de información.
Un proceso descendente esta basado en dos
características esenciales:
representación en forma de árbol, y
descomposición funcional
El diseño se basa en la realización de
diferentes niveles. El primer nivel resuelve totalmente el problema y el
segundo y sucesivos niveles son refinamientos sucesivos del primero (stepwise)
y se sigue siempre la metodología de recursos abstractos.
Si el diseño y planteamiento es correcto
nunca será preciso volver atrás ya que los niveles anteriores al que se esté
situando en un momento dado ya habrán resuelto el problema en su totalidad.
Estructura general de un
programa en C
Todo programa en C consta de una o más funciones, una de las
cuales se llama main. El programa siempre comenzará por la ejecución de la
función main. Las definiciones de las funciones adicionales pueden preceder o
seguir a main.
Cada función debe contener:
1.
Una cabecera de la función, que consta del nombre de la
función, seguido de una lista opcional de argumentos encerrados con paréntesis.
2.
Una lista de declaración de argumentos, si se incluyen
éstos en la cabecera.
3.
Una sentencia compuesta, que contiene el resto de la
función.
Los comentarios pueden aparecer en cualquier parte del programa,
mientras estén situados entre los delimitadores /* */ o comenzar con // si solo
es una línea.
/*Estructura
de un programa en C*/ #include <nombre_de_la_biblioteca> #define nombre_de_la_constante valor //Función
principal void main(){ definición
de variables; instrucciones
del programa; }
Ejemplo:
/*Primer
programa en C*/ #include <stdio.h> #include
<conio.h> void main(){ //Imprime el texto en pantalla printf
("Hola, mundo!"); getch();
}
Entrada y salida de datos
en C
Como se mencionó anteriormente, es necesario conocer las entradas
y las salidas del problema para poder resolverlo. Para que C reciba estos datos
utilizamos las funciones de biblioteca scanf para la entrada y printf para la
salida. Su sintaxis es la siguiente:
//Lee el
valor y lo guarda en una variable scanf
("%d", &variable); //Imprime
en pantalla el texto y el valor printf
("El valor es %d", variable);
Ejemplo:
#include
<stdio.h> #include
<conio.h> #include
<math.h> void main() { int
r, a, p; printf
("Programa que calcula el área y perímetro de un circulo"); printf ("\nIntroduce el radio: ");
scanf ("%d", &r); a = M_PI * pow(r,2); p = M_PI * (r+r); printf ("\nEl área es: %d", a); printf ("\nEl perímetro es:
%d", p); getch(); }
En ocasiones, queremos que el programa reciba una entrada de tipo
caracter. Para lograr esto podemos declarar una variable de tipo carácter y
guardarla en getch() o getche(). La diferencia entre ellos es que getche()
muestra en pantalla el carácter introducido, mientras que getch() lo mantiene
oculto. Su sintaxis es la siguiente:
char opc; opc=getch(); opc=getche();
Estructura de decisión
If-Else
Cuando el programador desea especificar en un algoritmo o programa
2 o más caminos alternativos se debe utilizar una estructura de decisión, la
cual evalúa una condición y en función del resultado, realiza una parte de la
estructura u otra. Las condiciones se especifican mediante expresiones lógicas.
Una de las estructuras de decisión es la estructura if-else y su sintaxis es la
siguiente:
//Si se
trata de dos o más instrucciones, estas van entre llaves { } if (condición) Instrucciones a ejecutar cuando la condición es
verdadera; else
Instrucciones a ejecutar cuando la
condición es falsa;
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int
year; clrscr();
//Limpia la pantalla printf
("Progama para determinar si un año es bisiesto"); printf ("\nIntroduce un numero de
año\n"); scanf
("%i", &year); if
(year%4 == 0 && year%100 != 0 || year%400 == 0) printf
("\a\nEl año %i si es bisiesto", year); else printf ("\a\nEl año %i no es
bisiesto", year); getch(); }
if
(condición) if (condición) Instrucciones
a ejecutar cuando la condición es verdadera; else
Instrucciones
a ejecutar cuando la condición es falsa; else Instrucciones
a ejecutar cuando la condición es falsa;
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int
a, b, c, d, mayor; clrscr
(); printf
("Programa que indica cual de 4 numeros es el mayor\n"); printf ("Introduce 4 numeros enteros:\n");
scanf ("%i%i%i%i", &a,
&b, &c, &d); if
(a > b) if (a > c) if (a > d) mayor
= a; else
mayor = d; else
if (c > d) mayor = c; else mayor = d; else if (b > c) if (b > d) mayor = b; else mayor = a; else if
(c > d) mayor
= c; else mayor = d; printf
("El mayor es %i", mayor); getch();
}
La estructura switch evalúa una expresión que puede tomar n
valores distintos, según con cual de estos valores coincida, se ejecutaran
ciertas acciones, es decir, el programa o algoritmo seguirá un determinado
camino entre los n posibles.
La sintaxis de la estructura switch es:
switch
(expresión entera) { case exp_constante_1: acciones a realizar cuando la expresión
tiene el valor exp_constante_1; break; case
exp_constante_2: acciones a realizar cuando la expresión tiene el valor
exp_constante_2; break; ...especificar
todos los casos default: acciones
a realizar cuando la expresión no coincide con ninguno de los casos; break; }
Estructuras de repetición
Las computadoras están diseñados especialmente para aquellas
aplicaciones en las cuales una operación o conjunto de ellas deben de repetirse
varias veces. A las estructuras que repiten una secuencia de instrucciones un
número determinado de veces se les denomina bucles y se llama iteración al acto
de repetir la ejecución de una secuencia de acciones.
En estas estructuras el conjunto de instrucciones que forman parte
del bucle se repite mientras se cumple una determinada condición.
La diferencia entre ellas es que la estructura while checa la
condición de continuación del ciclo al principio de este, antes de ejecutar las
condiciones del bucle.
La estructura do/ while prueba la condición después de ejecutar
las instrucciones del bucle y por lo tanto esta se ejecutará por lo menos una
vez.
La sintaxis de la estructura while es:
while
(condición) { Instrucciones
que se repetirán mientras la condición sea verdadera; Instrucciones
adicionales; }
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int
b = 99; while
( b > 0 ){ printf ("\n%i bottle(s) of beer on the wall,",
b); printf
("\n%i bottle(s) of beer.", b); printf
("\nTake one down, pass it around,"); printf ("\n%i bottle(s) of beer on the wall.\n",
b-1); b--; }
getch(); }
La sintaxis de la estructura do/ while es:
do { Instrucciones que se repetirán al
menos una vez mientras la condición sea verdadera; Instrucciones adicionales: } while
(condición);
Ejemplo:
#include
<stdio.h> #include
<conio.h> #include
<math.h> void
main(){ float
a, b, c, raiz, x1, x2; char resp; do{
clrscr();
printf
("Programa para calcular las raices de una ecuacion cuadratica"); printf ("de la forma
ax^2+bx+c=0"); printf ("\n\nIntroduce el valor de
las variables a, b y c en orden: \n"); scanf ("%f%f%f",
&a,&b,&c); raiz=(b*b)-4*a*c;
if (raiz>=0){ x1=(-b+sqrt(raiz))/(2*a); x2=(-b-sqrt(raiz))/(2*a);
printf
("\nLas raices son x1: %.2f y x2: %.2f", x1, x2); } else
printf
("\nLos valores que introdujiste regresan raices imaginarias"); printf ("\n\nDeseas resolver otra
ecuacion? (s/n) "); resp = getche(); } while (resp=='s'
|| resp=='S'); getch();
}
La estructura for maneja de manera automática todos los detalles
de repetición controlada por un contador. La sintaxis de la estructura for es:
for
(contador; condición; variación) Secuencia de instrucciones que se
desean repetir;
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int x=1, y=1, z=0, a; clrscr (); printf("Serie de Fibonaci\n\n"); printf("Escribe el numero final:
"); scanf("%i",&a);
printf("%6i",x); printf("%6i", y); for
(; z < a ;){ z=x+y;
if(z <= a){ printf("%6i",z);
x
= y; Introducción
El Lenguaje de programación C fue
implantado por primera vez en los años 70 por Dennis Ritchie para una
computadora DEC PDP-11 corriendo el sistema operativo UNIX.
El lenguaje C, a diferencia de lenguajes
como Basic y Pascal que son lenguajes de alto nivel, es un lenguaje de nivel
medio ya que combina las propiedades de un lenguaje de alto nivel con la
funcionalidad del lenguaje ensamblador.
Es esa misma característica la que le da
a este lenguaje más potencia y dominio sobre los recursos del sistema. Entre
una de las características más importantes de C está la portabilidad, esto es,
un programa escrito en C se puede trasladar fácilmente entre distintos sistemas
operativos como Windows, DOS o Linux.
A algunos
estudiantes que se inician en el estudio de C la visión del lenguaje les causa
miedo (lo digo por experiencia) porque C tiene fama de ser un lenguaje difícil,
nada más lejos de la verdad. Una vez que se entiende cómo trabaja es fácil
dominarlo, por algo C es el preferido de muchos programadores que lo consideran
un lenguaje "elegante". Por no ser un lenguaje de alto nivel, C le
relega al programador cierto grado de responsabilidad en el desarrollo de los
programas.
Ciclo de vida
La principal razón para aprender a programar y conocer los
lenguajes de programación es utilizar la computadora como herramienta para
solucionar problemas. La resolución de problemas se divide en tres fases:
El propósito de esta fase es ayudar al programador a comprender el
problema. El problema debe estar bien definido si se desea llegar a una
solución satisfactoria, para lo cual se requiere que las especificaciones de
entrada y salida sean descritas con detalle.
Una computadora solo puede solucionar problemas cuando se le
proporcionan los pasos sucesivos a realizar, a estos pasos sucesivos que
indican las instrucciones a realizar se les llama "algoritmos". Las
fases para realizar el diseño del algoritmo son:
- Diseño descendente
- Refinamiento de pasos
- Uso de herramientas de programación:
diagrama de flujo o pseudocódigo
Una vez que el algoritmo está diseñado y representado mediante una
herramienta de programación (pseudocódigo o diagrama de flujo) se lleva a cabo
la fase de la resolución del problema mediante la computadora, la cual se
divide a su vez en las siguientes subfases:
1.
Codificación del algoritmo, que consiste en utilizar un
lenguaje de programación siguiendo las reglas gramaticales del mismo (sintaxis)
para convertir el algoritmo en un programa
2.
Ejecución del programa utilizando un compilador del
lenguaje
3.
Comprobación del programa.
4.
Datos, constantes,
variables, acumuladores, y contadores
6.
Las computadoras pueden trabajar con varios tipos de datos, los
algoritmos y programas operan sobre estos. Existen dos clases de datos: datos
simples y datos compuestos.
7.
Los distintos tipos de datos se representan como un conjunto o
secuencia de dígitos binarios (bits). Los lenguajes de programación de alto nivel
nos permiten basarnos en abstracciones para no manejar los detalles de
representación interna.
8.
Los tipos de datos simples son: numéricos (enteros y reales),
lógicos y caracteres.
10.
Este tipo de datos se divide en enteros y reales.
11.
Los enteros son aquellos números que no tienen componente
fraccionario o decimal y dentro de la computadora son un subconjunto finito de
los números enteros. Estos números pueden ser negativos o positivos y el rango
es de –32,768 a 32,767.
12.
El tipo de datos "real" son aquellos números que tienen
una parte fraccionaria y pueden ser positivos y negativos dentro de la
computadora forman un subconjunto de los números reales. Para representar
números muy pequeños o muy grandes se emplea la notación de punto flotante, que
es una generalización de la notación científica. En esta notación se considera
al número real como mantisa y al exponente la potencia de 10 a la que se eleva
este número.
14.
Este tipo de dato es aquel que solo puede tomar uno de 2 valores:
verdadero (true) o falso (false). En lenguaje C no existe el tipo lógico pero
se puede implementar con un número entero conociendo que 0 es falso y cualquier
número diferente de cero verdadero.
16.
El dato tipo carácter puede tomar un valor de un conjunto finito y
ordenado de caracteres o símbolos que la computadora reconoce (código ASCII).
Este tipo de dato ocupa un byte y almacena un solo carácter.
17.
Existe también el dato tipo cadena (compuesto) que es una sucesión
de caracteres que se encuentran delimitados por comillas, la longitud de una
cadena es el número de caracteres comprendidos entre los delimitadores.
|
Tipos de datos
|
Descripción
|
Memoria
|
|
Int
|
Entero
|
2 bytes
|
|
Char
|
Caracter
|
1 byte
|
|
Float
|
Flotante
|
4 bytes
|
|
Double
|
Flotante de doble precisión
|
8 bytes
|
19.
Una constante es un dato que permanece sin cambio durante el
desarrollo del algoritmo o durante la ejecución del programa. La mayoría de los
lenguajes de programación nos permiten el manejo de diferentes tipos de
constantes, estas pueden ser enteras, reales, caracteres y cadenas. En lenguaje
C una constante se define por medio de la instrucción #define (directiva del
procesador).
20.
Una variable es un dato cuyo valor puede cambiar durante el
desarrollo del algoritmo o ejecución del programa. Hay diferentes tipos de
variables: enteras, reales, caracteres y cadenas. Una variable que es de cierto
tipo solo puede tomar valores que correspondan a ese tipo. Si se intenta
asignar un valor de tipo diferente se producirá un error.
21.
Una variable se identifica por dos atributos: el nombre de la
variable (identificador) y el tipo de la variable. El identificador se puede
formar con caracteres alfanuméricos y el carácter de subrayado ( _ ) empezando
siempre por una letra. No se admiten como identificadores palabras reservadas
del lenguaje de programación que se esté utilizando. Los nombres de variables
que se elijan para el algoritmo o programa deben ser significativos y tener
relación con el objeto que representa. En lenguaje C la sintaxis para definir
una variable es:
22. tipo_de_dato
identificador;
24.
Los procesos repetitivos requieren contar los sucesos y acciones
internas, una forma de hacerlo es mediante un contador. Un contador es una
variable cuyo valor se incrementa o decrementa en una cantidad constante en
cada repetición. La forma en que se construye un contador es la siguiente:
25. int contador = 1;
//variable con valor inicial de 1 contador = contador+1; contador
+= 1; contador
++;
27.
Un acumulador o totalizador es una variable cuya función es
almacenar cantidades resultantes de operaciones sucesivas. Realiza la misma
función que un contador con la diferencia de que el incremento o decremento es
variable en lugar de constante.
28. int acumulador =
0; acumulador
= acumulador + valor; acumulador += valor;
La metodología descendente (top-down),
también conocida como arriba-abajo consiste en establecer una serie de niveles
de menor o mayor complejidad (arriba-abajo) que den solución al problema.
Consiste en efectuar una relación entre las etapas de la estructuración de
forma que una etapa jerárquica y su inmediatamente inferior se relacionen
mediante entradas y salidas de información.
Un proceso descendente esta basado en dos
características esenciales:
representación en forma de árbol, y
descomposición funcional
El diseño se basa en la realización de
diferentes niveles. El primer nivel resuelve totalmente el problema y el
segundo y sucesivos niveles son refinamientos sucesivos del primero (stepwise)
y se sigue siempre la metodología de recursos abstractos.
Si el diseño y planteamiento es correcto
nunca será preciso volver atrás ya que los niveles anteriores al que se esté
situando en un momento dado ya habrán resuelto el problema en su totalidad.
Estructura general de un
programa en C
Todo programa en C consta de una o más funciones, una de las
cuales se llama main. El programa siempre comenzará por la ejecución de la
función main. Las definiciones de las funciones adicionales pueden preceder o
seguir a main.
Cada función debe contener:
1.
Una cabecera de la función, que consta del nombre de la
función, seguido de una lista opcional de argumentos encerrados con paréntesis.
2.
Una lista de declaración de argumentos, si se incluyen
éstos en la cabecera.
3.
Una sentencia compuesta, que contiene el resto de la
función.
Los comentarios pueden aparecer en cualquier parte del programa,
mientras estén situados entre los delimitadores /* */ o comenzar con // si solo
es una línea.
/*Estructura
de un programa en C*/ #include <nombre_de_la_biblioteca> #define nombre_de_la_constante valor //Función
principal void main(){ definición
de variables; instrucciones
del programa; }
Ejemplo:
/*Primer
programa en C*/ #include <stdio.h> #include
<conio.h> void main(){ //Imprime el texto en pantalla printf
("Hola, mundo!"); getch();
}
Entrada y salida de datos
en C
Como se mencionó anteriormente, es necesario conocer las entradas
y las salidas del problema para poder resolverlo. Para que C reciba estos datos
utilizamos las funciones de biblioteca scanf para la entrada y printf para la
salida. Su sintaxis es la siguiente:
//Lee el
valor y lo guarda en una variable scanf
("%d", &variable); //Imprime
en pantalla el texto y el valor printf
("El valor es %d", variable);
Ejemplo:
#include
<stdio.h> #include
<conio.h> #include
<math.h> void main() { int
r, a, p; printf
("Programa que calcula el área y perímetro de un circulo"); printf ("\nIntroduce el radio: ");
scanf ("%d", &r); a = M_PI * pow(r,2); p = M_PI * (r+r); printf ("\nEl área es: %d", a); printf ("\nEl perímetro es:
%d", p); getch(); }
En ocasiones, queremos que el programa reciba una entrada de tipo
caracter. Para lograr esto podemos declarar una variable de tipo carácter y
guardarla en getch() o getche(). La diferencia entre ellos es que getche()
muestra en pantalla el carácter introducido, mientras que getch() lo mantiene
oculto. Su sintaxis es la siguiente:
char opc; opc=getch(); opc=getche();
Estructura de decisión
If-Else
Cuando el programador desea especificar en un algoritmo o programa
2 o más caminos alternativos se debe utilizar una estructura de decisión, la
cual evalúa una condición y en función del resultado, realiza una parte de la
estructura u otra. Las condiciones se especifican mediante expresiones lógicas.
Una de las estructuras de decisión es la estructura if-else y su sintaxis es la
siguiente:
//Si se
trata de dos o más instrucciones, estas van entre llaves { } if (condición) Instrucciones a ejecutar cuando la condición es
verdadera; else
Instrucciones a ejecutar cuando la
condición es falsa;
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int
year; clrscr();
//Limpia la pantalla printf
("Progama para determinar si un año es bisiesto"); printf ("\nIntroduce un numero de
año\n"); scanf
("%i", &year); if
(year%4 == 0 && year%100 != 0 || year%400 == 0) printf
("\a\nEl año %i si es bisiesto", year); else printf ("\a\nEl año %i no es
bisiesto", year); getch(); }
if
(condición) if (condición) Instrucciones
a ejecutar cuando la condición es verdadera; else
Instrucciones
a ejecutar cuando la condición es falsa; else Instrucciones
a ejecutar cuando la condición es falsa;
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int
a, b, c, d, mayor; clrscr
(); printf
("Programa que indica cual de 4 numeros es el mayor\n"); printf ("Introduce 4 numeros enteros:\n");
scanf ("%i%i%i%i", &a,
&b, &c, &d); if
(a > b) if (a > c) if (a > d) mayor
= a; else
mayor = d; else
if (c > d) mayor = c; else mayor = d; else if (b > c) if (b > d) mayor = b; else mayor = a; else if
(c > d) mayor
= c; else mayor = d; printf
("El mayor es %i", mayor); getch();
}
La estructura switch evalúa una expresión que puede tomar n
valores distintos, según con cual de estos valores coincida, se ejecutaran
ciertas acciones, es decir, el programa o algoritmo seguirá un determinado
camino entre los n posibles.
La sintaxis de la estructura switch es:
switch
(expresión entera) { case exp_constante_1: acciones a realizar cuando la expresión
tiene el valor exp_constante_1; break; case
exp_constante_2: acciones a realizar cuando la expresión tiene el valor
exp_constante_2; break; ...especificar
todos los casos default: acciones
a realizar cuando la expresión no coincide con ninguno de los casos; break; }
Estructuras de repetición
Las computadoras están diseñados especialmente para aquellas
aplicaciones en las cuales una operación o conjunto de ellas deben de repetirse
varias veces. A las estructuras que repiten una secuencia de instrucciones un
número determinado de veces se les denomina bucles y se llama iteración al acto
de repetir la ejecución de una secuencia de acciones.
En estas estructuras el conjunto de instrucciones que forman parte
del bucle se repite mientras se cumple una determinada condición.
La diferencia entre ellas es que la estructura while checa la
condición de continuación del ciclo al principio de este, antes de ejecutar las
condiciones del bucle.
La estructura do/ while prueba la condición después de ejecutar
las instrucciones del bucle y por lo tanto esta se ejecutará por lo menos una
vez.
La sintaxis de la estructura while es:
while
(condición) { Instrucciones
que se repetirán mientras la condición sea verdadera; Instrucciones
adicionales; }
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int
b = 99; while
( b > 0 ){ printf ("\n%i bottle(s) of beer on the wall,",
b); printf
("\n%i bottle(s) of beer.", b); printf
("\nTake one down, pass it around,"); printf ("\n%i bottle(s) of beer on the wall.\n",
b-1); b--; }
getch(); }
La sintaxis de la estructura do/ while es:
do { Instrucciones que se repetirán al
menos una vez mientras la condición sea verdadera; Instrucciones adicionales: } while
(condición);
Ejemplo:
#include
<stdio.h> #include
<conio.h> #include
<math.h> void
main(){ float
a, b, c, raiz, x1, x2; char resp; do{
clrscr();
printf
("Programa para calcular las raices de una ecuacion cuadratica"); printf ("de la forma
ax^2+bx+c=0"); printf ("\n\nIntroduce el valor de
las variables a, b y c en orden: \n"); scanf ("%f%f%f",
&a,&b,&c); raiz=(b*b)-4*a*c;
if (raiz>=0){ x1=(-b+sqrt(raiz))/(2*a); x2=(-b-sqrt(raiz))/(2*a);
printf
("\nLas raices son x1: %.2f y x2: %.2f", x1, x2); } else
printf
("\nLos valores que introdujiste regresan raices imaginarias"); printf ("\n\nDeseas resolver otra
ecuacion? (s/n) "); resp = getche(); } while (resp=='s'
|| resp=='S'); getch();
}
La estructura for maneja de manera automática todos los detalles
de repetición controlada por un contador. La sintaxis de la estructura for es:
for
(contador; condición; variación) Secuencia de instrucciones que se
desean repetir;
Ejemplo:
#include
<stdio.h> #include
<conio.h> void main(){ int x=1, y=1, z=0, a; clrscr (); printf("Serie de Fibonaci\n\n"); printf("Escribe el numero final:
"); scanf("%i",&a);
printf("%6i",x); printf("%6i", y); for
(; z < a ;){ z=x+y;
if(z <= a){ printf("%6i",z);
x
= y; y
= z; } } getch(); }
Las 3 expresiones de la estructura for son opcionales, si se omite
la condición el compilador de lenguaje C supone que esta es verdadera y crea un
ciclo infinito; si se omite el contador, la variable de control se debe
inicializar en otra parte del programa antes del ciclo; y si se omite la
variación, la modificación de la variable de control se calcula mediante
instrucciones dentro del bloque de la estructura for o bien se omite porque no
se requiere.
http://eztigma.brinkster.net/lenguajec.html#1www.geocities.com/eztigma
y
= z; } } getch(); }
Las 3 expresiones de la estructura for son opcionales, si se omite
la condición el compilador de lenguaje C supone que esta es verdadera y crea un
ciclo infinito; si se omite el contador, la variable de control se debe
inicializar en otra parte del programa antes del ciclo; y si se omite la
variación, la modificación de la variable de control se calcula mediante
instrucciones dentro del bloque de la estructura for o bien se omite porque no
se requiere.
http://eztigma.brinkster.net/lenguajec.html#1www.geocities.com/eztigma