Control de Flujo
## Objetivos de Aprendizaje
- Dominar las declaraciones if, else if, else
- Comprender las declaraciones switch
- Aprender los bucles for, while, do-while
- Usar break y continue
## Declaración if
### if Básico
```c
int age = 18;
if (age >= 18) {
printf("Adult\n");
}
```
### if-else
```c
int age = 15;
if (age >= 18) {
printf("Adult\n");
} else {
printf("Minor\n");
}
```
### if-else if-else
```c
int score = 85;
char grade;
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
printf("Grade: %c\n", grade);
```
## Operador Ternario
```c
int age = 20;
int status = (age >= 18) ? 1 : 0;
```
## Declaración switch
### switch Básico
```c
int day = 3;
char *dayName;
switch (day) {
case 1:
dayName = "Monday";
break;
case 2:
dayName = "Tuesday";
break;
case 3:
dayName = "Wednesday";
break;
case 4:
dayName = "Thursday";
break;
case 5:
dayName = "Friday";
break;
case 6:
dayName = "Saturday";
break;
case 7:
dayName = "Sunday";
break;
default:
dayName = "Invalid";
}
printf("%s\n", dayName);
```
### Caída a través (Fall-through)
```c
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = 28;
break;
}
```
## Bucle for
### for Básico
```c
for (int i = 0; i < 5; i++) {
printf("%d\n", i); // 0, 1, 2, 3, 4
}
```
### Componentes del Bucle
```c
// for (inicio; condición; incremento)
for (int i = 0; i < 5; i++) {
// cuerpo
}
```
Es equivalente a:
```c
int i = 0; // inicio
while (i < 5) { // condición
// cuerpo
i++; // incremento
}
```
### Bucle Infinito
```c
for (;;) {
// Se ejecuta para siempre
}
while (1) {
// También se ejecuta para siempre
}
```
### Operador Coma en for
```c
for (int i = 0, j = 10; i < 5; i++, j--) {
printf("%d - %d\n", i, j);
}
```
## Bucle while
### while Básico
```c
int i = 0;
while (i < 5) {
printf("%d\n", i);
i++;
}
```
### while con Condición Primero
```c
#include
int main(void) {
char input[100];
while (scanf("%99s", input) == 1) {
if (strcmp(input, "quit") == 0) {
break;
}
printf("You entered: %s\n", input);
}
return 0;
}
```
## Bucle do-while
### Se Ejecuta al Menos Una Vez
```c
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 5);
```
### Ejemplo de Menú
```c
#include
int main(void) {
int choice;
do {
printf("1. New Game\n");
printf("2. Load Game\n");
printf("3. Quit\n");
printf("Choose: ");
scanf("%d", &choice);
} while (choice < 1 || choice > 3);
return 0;
}
```
## break y continue
### break - Salir del Bucle
```c
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Sale cuando i es 5
}
printf("%d\n", i); // 0, 1, 2, 3, 4
}
```
### continue - Saltar Iteración
```c
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // Salta cuando i es 2
}
printf("%d\n", i); // 0, 1, 3, 4
}
```
## Bucles Anidados
```c
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("(%d,%d) ", i, j);
}
printf("\n");
}
```
Salida:
```text
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)
```
### break desde Bucle Anidado
```c
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
break; // Solo sale del bucle interno
}
printf("%d,%d\n", i, j);
}
}
```
## Declaración goto
### goto Básico
```c
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j == 2) {
goto done; // Salta a la etiqueta
}
}
}
done:
printf("Found it!\n");
```
### Evitar goto
**Nota:** goto dificulta seguir el código. Usa break/continue con indicadores en su lugar.
## Patrones Comunes
### Sumar 1 a N
```c
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
```
### Buscar en Arreglo
```c
int numbers[] = {3, 7, 2, 9, 4};
int target = 9;
int found = 0;
for (int i = 0; i < 5; i++) {
if (numbers[i] == target) {
found = 1;
break;
}
}
```
### Contar Coincidencias
```c
int numbers[] = {1, 2, 3, 2, 4, 2, 5};
int target = 2;
int count = 0;
for (int i = 0; i < 7; i++) {
if (numbers[i] == target) {
count++;
}
}
```
### FizzBuzz
```c
for (int i = 1; i <= 20; i++) {
if (i % 15 == 0) {
printf("FizzBuzz\n");
} else if (i % 3 == 0) {
printf("Fizz\n");
} else if (i % 5 == 0) {
printf("Buzz\n");
} else {
printf("%d\n", i);
}
}
```
## Resumen
- if/else if/else para lógica condicional
- switch para múltiples valores discretos
- for para iteraciones conocidas
- while para iteración basada en condición
- do-while para iteración de al menos una vez
- break sale del bucle; continue salta la iteración
- Evitar goto (dificulta seguir el código)
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →