Lenguaje C, segundo bloque: Sentencias de...

34
Lenguaje C, segundo bloque: Sentencias de control Lenguaje C, segundo bloque: Sentencias de control José Otero 1 Departmento de informática Universidad de Oviedo 23 de octubre de 2007

Transcript of Lenguaje C, segundo bloque: Sentencias de...

Page 1: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Lenguaje C, segundo bloque: Sentencias decontrol

José Otero

1Departmento de informáticaUniversidad de Oviedo

23 de octubre de 2007

Page 2: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 3: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia if

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 4: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia if

Permite ejecutar o no una sentencia o bloque, en función de siuna expresión es cierta o no.

Una sentencia:

if (expresion)sentencia;

Un bloque:

if (expresion){//bloque...}

verdadera

falsa expresion

sentencias

"expresion"se construye con operadores lógicos yrelacionales.

Page 5: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia if

Ejemplo: ordenar dosnúmeros de mayor a menor.

Si están desordenadoshay que intercambiarlos.

Si están ordenados nohay que hacer nada.

#include<stdio.h>int main(){int a,b,tmp;scanf("%d%d",&a,&b);//ordenar dos numeros//de mayor a menorif (a<b)

{tmp=a;a=b;b=tmp;}

printf("\n%d %d",a,b);}

Page 6: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia if-else

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 7: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia if-else

Permite ejecutar una sentencia/bloque u otra sentencia/bloque,en función de si una expresión es cierta o no.

if (expresion)sentencia;

elsesentencia;

if (expresion){//bloque...}

elsesentencia;

Etc.

verdadera

falsa

sentencias A

condición

sentencias B

Page 8: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia if-else

Ejemplo: mostrar el mayor de dos números.

#include<stdio.h>int main(){int a,b,mayor;printf("\nIntroduce dos numeros:");scanf("%d%d",&a,&b);if (a>b)

mayor=a;else

mayor=n;printf("\nEl mayor es %d",mayor);}

Page 9: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

if e if-else anidados

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 10: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

if e if-else anidados

Entre las sentencias después de if o else pueden haber másif e if-else. Por el lado del else:

if (condicion1){...}

elseif (condicion2)

{...}

else{...}

sentencias A

falsa

sentencias Bsentencias C

condición2

condición1

falsa

verdadera verdadera

Page 11: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

if e if-else anidados

Entre las sentencias después de if o else pueden haber másif e if-else. Por el lado del if:

if (condicion1){if (condicion2)

{...}

else{...}

}else

...

condición1

condición2

sentencias Asentencias Bsentencias C

verdadera

verdadera

falsa

falsa

Page 12: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

if e if-else anidados

Entre las sentencias después de if o else pueden haber másif e if-else. Por los dos lados:

if (condicion1){if (condicion2)

{...}

else{...}

}

else{if (condicion3)

{...}

else{...}

}

Page 13: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia switch

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 14: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia switch

Es equivalente a varios if-else restringiendo la condición ala comparación a igualdad entre expresion y cte1...cte2.

switch(expresion){case cte1:...

break;case cte2:...

break;...default:...}

if (expresion==cte1){...}

elseif (expresion==cte2)

{...}

...else

...

Page 15: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia switch

IMPORTANTE:

Si se omite break se ejecuta todo el código que sigahasta encontrar el siguiente.

Expresión es de tipo entero o carácter.

Después de case solo pueden ir constantes de esos tipos.

La condición es, implicitamente, la comparación a igualdadentre expresion y las constantes. No se puede hacerotro tipo de comparación.

Page 16: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia switch

Ejemplo: calculadora sencilla

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 17: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Sentencia switch

Ejemplo: calculadora sencilla

#include<stdio.h>int main(){

float a,b; char op;printf("\nIntroduce num op num:");scanf("%f%c%f",&a,&op,&b);switch(op)

{case ’+’:printf("\n%f+%f=%f",a,b,a+b);

break;case ’-’:printf("\n%f-%f=%f",a,b,a-b);

break;case ’*’:printf("\n%f*%f=%f",a,b,a*b);

break;case ’/’:printf("\n%f/%f=%f",a,b,a/b);

break;default:printf("\nerror");}

}

Page 18: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle while

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 19: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle while

Repite una sentencia o bloque mientras sea cierta unaexpresión. Primero se evalúa la expresión, si es cierta seejecutan las sentencias.

while(expresion)sentencia;

while(expresion){//bloque...}

verdadera

falsa expresion

sentencias

Page 20: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle while

IMPORTANTE:La primera vez que se evalúe expresion tienen quetener valor definido todas las variables que intervengan enella. De momento, estar definida es:

Que se haya pedido por el teclado.Que haya estado a la izquierda de una asignación.Esto tiene que hacerse antes del bucle.

Si la primera vez que se evalúa expresion es falsa, nose realiza ninguna iteración.De entre las sentencias que se repiten, algunas de ellastienen que modificar alguna variable de las que conformanexpresion, haciéndola falsa en algún momento.

De lo contrario el bucle no termina.

Page 21: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle while

Ejemplo: suma de las cifras de un número

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 22: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle while

Ejemplo: suma de las cifras de un número

#include<stdio.h>int main(){

//declaracion de variables, inicializar sumaint cifra,n,suma=0;printf("\nIntroduce un entero:");scanf("%d",&n);//mientras n!=0 quedan cifras por extraerwhile(n!=0)

{//se extrae la cifracifra=n%10;//se suma la cifrasuma=suma+cifra;//se elimina la cifra del numeron=n/10;

}printf("\nSuma de las cifras:%d",suma);

}

Page 23: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle do-while

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 24: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle do-while

Repite una sentencia o bloque mientras sea cierta unaexpresión. Primero se ejecutan las sentencias, después seevalúa la expresión.

dosentencia;

while(expresion);

do{//bloque...}while(expresion);

expresionfalsa

verdadera

sentencias

Page 25: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle do-while

IMPORTANTE:La primera vez que se evalúe expresion tienen quetener valor definido todas las variables que intervengan enella. De momento, estar definida es:

Que se haya pedido por el teclado.Que haya estado a la izquierda de una asignación.Esto puede hacerse durante la primera iteración.

Como primero se ejecutan las sentencias, al menos serealiza una iteración.De entre las sentencias que se repiten, algunas de ellastienen que modificar alguna variable de las que conformanexpresion, haciéndola falsa en algún momento.

De lo contrario el bucle no termina.

Page 26: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle do-while

Ejemplo: aproximación de una raíz por una sucesión

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 27: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle do-while

Ejemplo: aproximación de una raíz por una sucesión

#include<stdio.h>#include<math.h>int main(){

float x_i,x_i_1=.5,a,dif,precision;printf("\nIntroduce un num y precision");scanf("%f%f",&a,&precision);do{

//siguiente terminox_i=.5*(x_i_1+a/x_i_1);//diferencia entre dos consecutivosdif=fabs(x_i_1-x_i);//actualizacion del anteriorx_i_1=x_i;//mientras la dif mayor que precision

}while(dif>precision);printf("\nRaiz cuadrada=%f",x_i);}

Page 28: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle for

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 29: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle for

Es una forma compacta de escribir el bucle while para ciertosusos, por ejemplo para realizar un número fijo de iteraciones.

for(inicializacion;expresion;actualizacion)sentencia;

for(inicializacion;expresion;actualizacion){//bloque...}

Page 30: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle for

La inicializacion se hace una sola vez.Consiste en al menos una inicialización de las variablesque intervienen en expresion.

Después se evalúa expresion, si es cierta, se ejecutanlas sentencias.Finalmente se realiza la actualizacion.

Consiste en al menos una asignación en las que se cambiael valor de alguna variable de las que intervienen enexpresion.

Page 31: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle for

Equivale a un while con la siguiente estructura.

inicializacion;while(expresion)

{sentencias;actualizacion;}

verdadera

falsa expresion

sentencias

inicializacion

actualizacion

Page 32: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle for

Si hay varias inicializaciones se separan por comas.

Todas las variables de expresion deben de tener valordefinido la primera vez que se evalúe.Si hay varias actualizaciones se separan por comas.

Algunas deben hacer que expresion se haga falsa. De locontrario el bucle no termina.

En este curso casi siempre será suficiente unainicialización y una actualización.

Page 33: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle for

Ejemplo: cálculo del factorial

Índice1 Sentencia if

2 Sentencia if-else

3 if e if-else anidados

4 Sentencia switchEjemplo: calculadora sencilla

5 Bucle whileEjemplo: suma de las cifras de un número

6 Bucle do-whileEjemplo: aproximación de una raíz por una sucesión

7 Bucle forEjemplo: cálculo del factorial

Page 34: Lenguaje C, segundo bloque: Sentencias de controldi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque2_clases.pdf · Entre las sentencias después de ifo elsepueden haber más

Lenguaje C, segundo bloque: Sentencias de control

Bucle for

Ejemplo: cálculo del factorial

#include<stdio.h>int main(){int n,fact=1,i;printf("\nIntroduce un numero:");scanf("%d",&n);for (i=2;i<=n;i++)fact=fact*i;

printf("\n%d!=%d",n,fact);}