Estruturas de controle
As estruturas de controle em C são usadas para controlar o fluxo de execução de um programa. Existem dois tipos principais de estruturas de controle em C:
- Estruturas condicionais
- Estruturas de repetição.
Estruturas condicionais
As estruturas condicionais em C são usadas para executar um bloco de código conforme uma determinada condição seja verdadeira ou falsa.
O C tem duas estruturas condicionais: a instrução if e a instrução switch-case.
A instrução if
A sintaxe da instrução if é a seguinte:
if (condição) {
// bloco de código a ser executado se a condição fôr verdadeira
}
Se a condição fôr verdadeira o bloco de código é executado, caso contrário não é:
int nr1 = 24;
int nr2 = 17;
if(nr1 >= nr2){
puts("nr1 maior ou igual a nr2");
}
No exemplo acima, o output será “nr1 maior ou igual a nr2” uma vez que a condição é verdadeira.
A instrução if … else
A sintaxe da instrução if…else é a seguinte:
if (condição) {
//bloco de código 1 a ser executado se a condição for verdadeira
}else{
//bloco de código 2 a ser executado se a condição for falsa
}
Se a condição fôr verdadeira executa o bloco de código 1 senão, executa o bloco de código 2:
int nr1 = 17;
int nr2 = 24;
if(nr1 >= nr2){
puts("nr1 maior ou igual a nr2");
}else{
puts("nr1 menor que nr2");
}
No exemplo acima o output será “nr1 menor que nr2”, uma vez que a condição é falsa.
A instrução if … else if … else
A instrução if …else if…else é usada para executar diferentes blocos de código com base em condições específicas. Ela permite que o programador controle o fluxo de execução do programa com base em diferentes situações. Você pode testar várias condições e executar um bloco de código correspondente à primeira condição verdadeira encontrada.
Se nenhuma das condições fôr satisfeita, é executado o bloco de código da cláusula else, no final, caso ela exista.
A sintaxe da instrução é a seguinte:
if (condição1) {
// bloco de código a ser executado se a condição1 for verdadeira
} else if (condição2) {
// bloco de código a ser executado se a condição2 for verdadeira
...
} else if (condiçãoN){
// bloco de código a ser executado se a condiçãoN for verdadeira
} [else {
// bloco de código a ser executado se nenhuma das condições anteriores for verdadeira
}]
De acordo com a sintaxe, a instrução if… else if…else pode ter vários blocos else if mas só pode ter um bloco if no inicio e, opcionalmente, um bloco else, no final:
int nr;
puts("Introduza um numero inteiro entre 1 e 4");
scanf("%d", &nr);
if(nr == 1){
puts("Introduziu o nr 1");
}else if(nr == 2){
puts("Introduziu o nr 2");
}else if(nr == 3){
puts("Introduziu o nr 3");
}else if(nr == 4){
puts("Introduziu o nr 4");
}else{
puts("Nr inválido");
}
De notar que, nesta instrução, só um dos blocos é executado.
A instrução switch … case
A instrução switch-case é usada para selecionar um bloco de código a ser executado com base no valor de uma expressão. A instrução switch-case é uma alternativa mais eficiente e legível do que usar várias instruções if-else if .
A sintaxe da instrução switch-case é a seguinte:
switch (expressão) {
case valor1:
// código a ser executado se a expressão for igual a valor1
[break;]
...
case valorN:
// código a ser executado se a expressão for igual a valorN
[break;]
[default:
// código a ser executado se a expressão não for igual a nenhum dos valores
break;]
}
De acordo com a sintaxe, a instrução switch-case começa por avaliar uma expressão e executa um dos blocos case consoante o seu valor. Caso não haja nenhuma opção case que corresponda ao valor da expressão, é executada a opção default, se esta existir.
De notar que, quer a instrução break quer o bloco default são opcionais.
Exemplo 1:
int dia;
printf("Digite um número de 1 a 7: ");
scanf("%d", &dia);
switch (dia) {
case 1:
printf("Domingo\n");
break;
case 2:
printf("Segunda\n");
break;
case 3:
printf("Terça\n");
break;
case 4:
printf("Quarta\n");
break;
case 5:
printf("Quinta\n");
break;
case 6:
printf("Sexta\n");
break;
case 7:
printf("Sábado\n");
break;
default:
printf("Número inválido\n");
break;
}
Neste exemplo, verificamos que cada bloco case termina com a instrução break. Esta instrução interrompe a execução da instrução switch, passando para a instrução seguinte.
Caso a instrução break não exista num bloco case, o programa executa os blocos case seguintes até encontrar uma instrução break ou atingir o final na instrução switch.
Exemplo 2:
int nr = 1;
switch(nr){
case 1:
puts("Nr 1");
case 2:
puts("Nr 2");
case 3:
puts("Nr 3");
break;
case 4:
puts("Nr 4");
default:
puts("Nr invalido");
}
Neste exemplo, o output no ecran será
Nr 1
Nr 2
Nr 3
porque o bloco case 1 será executado assim como os blocos case 2 e case 3 uma vez que os blocos case 1 e case 2 não têm a instrução break.
A instrução switch-case também suporta a utilização de múltiplos casos para um mesmo bloco de código, como por exemplo:
int dia;
printf("Digite um dia da semana de 1 a 7: ");
scanf("%d", &dia);
switch (dia) {
case 1:
case 7:
printf("Fim de semana\n");
break;
case 2:
case 3:
case 4:
case 5:
case 6:
printf("Dia útil\n");
break;
default:
printf("Número inválido\n");
break;
}
No exemplo acima, se o dia escolhido fôr 1 ou 7, o bloco case 7 é executado. Se o dia escolhido fôr 2, 3, 4, 5, ou 6, o bloco case 6 é executado.
Estruturas de repetição
As estruturas de repetição em C são usadas para executar um bloco de código várias vezes. Existem três tipos principais de estruturas de repetição em C: for, while e do-while.
Repetição for
A repetição for é usada para executar um bloco de código um número específico de vezes.
De forma a repetição executar um bloco de código um numero especifico de vezes, é usada uma variável inteira que serve para contar as iterações.
A sintaxe da instrução é a seguinte:
for (inicialização; condição; incremento) {
// código a ser executado enquanto a condição for verdadeira
}
Inicialização: a variável é inicializada com um valor.
Condição: a variável é testada no inicio de cada iteração para confirmar se já atingiu o numero de iterações que se pretende. Se já atingiu a repetição termina senão é executada mais uma iteração.
Incremento: a variável é incrementada de um valor no final de cada iteração.
Exemplo:
int i;
for (i = 1; i <= 10; i++) {
printf("%d\n", i);
}
Neste exemplo a instrução for executa dez iterações repetindo a instrução printf() esse numero de vezes.
Repetição while
A repetição while em C é usada para executar um bloco de código enquanto uma determinada condição for verdadeira.
A sintaxe da estrutura while é a seguinte:
while (condição) {
// código a ser executado enquanto a condição for verdadeira
}
Exemplo:
int nr;
puts("Digite um nr inteiro (0 para terminar");
scanf("%d", &nr);
while(nr != 0){
printf("%d\n", nr);
puts("Digite um nr inteiro (0 para terminar");
scanf("%d", &nr);
}
Repetição do … while
A estrutura de repetição do-while em C é usada para executar um bloco de código pelo menos uma vez e, em seguida, repetir o bloco enquanto uma determinada condição for verdadeira.
A sintaxe da estrutura do…while é a seguinte:
do {
// código a ser executado pelo menos uma vez
} while (condição);
Exemplo:
int nr;
do{
puts("Digite um nr inteiro (0 para terminar");
scanf("%d", &nr);
if( nr != 0){
printf("%d\n", nr);
}
} while(nr != 0);
Desvios de controle – break e continue
As instruções break e continue em C são usadas para controlar o fluxo de execução de uma repetição. Estas instruções podem ser usadas nas repetições for, while e do…while.
A instrução break
A instrução break em C é usada para sair imediatamente de uma repetição. Quando a instrução break é executada, a repetição é interrompida e a execução continua na próxima instrução após a repetição. A instrução break é geralmente usada com uma condição dentro da repetição. Se a condição for verdadeira, a instrução break é executada e a repetição é interrompida.
A sintaxe mais comum da instrução break é a seguinte (neste caso aplicada à repetição while):
while (condição) {
// código a ser executado enquanto a condição for verdadeira
if (condição_de_saida) {
break;
}
}
Exemplo:
int i;
for (i = 1; i <= 10; i++) {
if (i == 4) {
break;
}
printf("%d\n", i);
}
Neste exemplo, a instrução break é usada para sair da repetição quando a variável i fôr igual a 4. A repetição é executada 4 vezes e os números de 1 a 3 são impressos no ecran.
A instrução continue
A instrução continue em C é usada para saltar uma iteração da repetição e continuar com a próxima iteração. Quando a instrução continue é executada, a repetição é interrompida e a execução continua com a próxima iteração da repetição. A instrução continue é geralmente usada com uma condição dentro da repetição. Se a condição for verdadeira, a instrução continue é executada e a iteração atual da repetição é interrompida.
A sintaxe mais comum da instrução continue é a seguinte:
while (condição) {
// código a ser executado enquanto a condição for verdadeira
if (condição_de_salto da iteração) {
continue;
}
// código a ser executado se a condição de salto não for verdadeira
}
Exemplo:
int i;
for (i = 1; i <= 10; i++) {
if (i == 5) {
continue;
}
printf("%d\n", i);
}
Neste exemplo, a instrução continue é usada para saltar a iteração da repetição quando a variável i fôr igual a 5. A repetição é executado 9 vezes e os números de 1 a 4 e de 6 a 10 são impressos no ecran.