Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Comandos de Deciso
Comandos de Deciso
Uma das tarefas fundamentais de qualquer programa decidir o que deve ser executado a seguir Os comandos de deciso permitem determinar qual a ao a ser tomada com base no resultado de uma expresso condicional Podemos escolher entre aes alternativas, dependendo de critrios desenvolvidos no decorrer do programa A linguagem C oferece trs comandos de deciso if if-else switch
O Comando if
/*IfDemo.C */ #include <stdio.h> #include <stdlib.h> int main() { int anos; printf("Quantos anos voce tem? \n"); scanf("%d", &anos); if( anos < 30) /* Toma uma deciso caso anos < 30 */ printf("Voce e muito jovem!\n"); getchar (); getchar (); return 0; }
Sintaxe do if
O comando consiste na palavra-chave if seguida de uma expresso de teste entre parnteses Se a expresso de teste for verdadeira, a instruo ser executada Se a expresso de teste for falsa, nada ser feito O corpo de um if pode conter uma nica instruo terminada por ponto-e vrgula, ou vrias instrues entre chaves
Comandos if aninhados
/* Ninhosif.C */ /* Mostra if aninhados */ #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { char ch; printf("Digite uma letra de 'a' a 'z':"); ch=getche(); if(ch >= 'a') if(ch <= 'z') printf("\nVoce digitou uma letra minuscula.\n"); printf("Tecle [ENTER] para sair.\n");
getchar(); return 0;
}
Implementando um algoritmo
n 2 2i 1
i 0
n 1
32 = 1 + 3 + 5 62 = 1 + 3 + 5 + 7 + 9 + 11 82 = 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15
Implementando um algoritmo
/*Quadrado.C */ /*Calcula o quadrado de nmeros */ #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { int i,n, soma=0; printf("Digite um numero inteiro:\n"); scanf("%d", &n); printf("O quadrado de %d e ", n); if( n < 0 ) n = -n; /*Se negativo, muda o sinal*/
for(i=1 ; n > 0 ; n-- ) { soma += i; i += 2; } printf("%d.\n", soma); printf("Tecle [ENTER] para sair.\n"); getchar(); getchar(); return 0; }
O Comando if-else
O comando if permite que executemos algo somente se a sua expresso de teste for verdadeira caso contrrio nada executado
Por outro lado, o comando if-else permite executar determinadas instrues se a expresso de testes for verdadeira alm de outras instrues se a expresso de testes for falsa
if-else consiste no comando if acompanhado de uma instruo ou de um bloco de instrues seguido da palavra-chave else, tambm acompanhada de um instruo ou de um bloco de instrues
if(expresso de teste) { instruo; instruo; } else { instruo; instruo; }
Quando v tem um certo nmero de if e else, como o computador decide qual else de qual if?
Contrues else-if
/* Calculadora.C */ /*Simula uma calculadora de 4 operaes*/ #include <stdio.h> #include <stdlib.h> int main() { const int TRUE=1; while(TRUE) /* Sempre verdadeiro*/ { float n1,n2; char op; printf("\nDigite numero operador numero: "); scanf("%f%c%f", &n1, &op, &n2); if( op == '+') printf("\n%f", n1 + n2); else if( op == '-') printf("\n%f", n1 - n2); else if( op == '*') printf("\n%f", n1 * n2); else if( op == '/') printf("\n%f", n1 / n2); else printf("\nOperador desconhecido.");
Contrues else-if
Um conjunto de if-else aninhados pode ser escrito por meio de outro estilo, afim de tornar o programa mais legvel: construes else-if
Contrues else-if
/* Calculadora1.C */ /*Simula uma calculadora de 4 operaes*/ #include <stdio.h> #include <stdlib.h> int main() { const int TRUE=1; while(TRUE) /* Sempre verdadeiro*/ { float n1,n2; char op; printf("\nDigite numero operador numero: "); scanf("%f%c%f", &n1, &op, &n2); if( op == '+') printf("\n%f", n1 + n2); else if( op == '-') printf("\n%f", n1 - n2); else if( op == '*') printf("\n%f", n1 * n2); else if( op == '/') printf("\n%f", n1 / n2); else printf("\nOperador desconhecido.");
} }
return 0;
Os comandos break e continue so instrues que devem pertencer ao corpo de um lao for, while ou do-while
O comando break tem um segundo uso que ser analisado em seguida junto ao comando switch O comando break causa a sada imediata de um lao
Se a instruo break pertencer a um conjunto de laos aninhados, afetar somente o lao ao qual pertence e os laos internos a ele
O programa anterior tem uma falha: nunca acaba.
if( op == '+') printf("\n%f", n1 + n2); else if( op == '-') printf("\n%f", n1 - n2); else if( op == '*') printf("\n%f", n1 * n2); else if( op == '/') printf("\n%f", n1 / n2); else printf("\nOperador desconhecido.");
O comando continue
O comando continue fora a prxima iterao do lao e pula o cdigo que estiver abaixo
Nos laos while e do-while, um comando continue faz com que o controle do programa avalie imediatamente a expresso de teste e depois continue o processo do lao
No lao for, executada a expresso de incremento e, em seguida, o teste
O exemplo a seguir imprime apenas os caracteres digitados no teclado que so diferentes de dgitos
getchar(); return 0;
}
O comando goto
O comando goto est disponvel em C para fornecer alguma compatibilidade com outras linguagens
Sua utilizao no aconselhada Esse comando causa o desvio do controle do programa para a instruo seguinte ao rtulo com o nome indicado Lembrando que um rtulo um nome seguido de dois-pontos (:)
if(x == 0) goto erro; else r = n/x; ..... ..... erro; printf(\nERRO: diviso por zero);
O comando switch
O comando switch permite selecionar uma entre vrias aes alternativas Embora construes como if-else possam executar testes para escolha de uma entre vrias alternativas, muitas vezes so deselegantes O comando switch tem um formato limpo e claro
Voc no poder usar uma varivel ou uma expresso lgica como rtulo de um caso dentro de um switch
Exemplo
O primeiro exemplo imprime o dia da semana a partir de uma data O ano deve ser maior ou igual a 1600 Nessa data houve uma redefinio do calendrio
/* DiaSemana.C */ /* Imprime o dia da semana a partir de uma data */ /* Mostra o uso de switch */ #include <stdio.h> #include <stdlib.h> #include <conio.h> /* para getch()*/ int main() { int dia, mes, ano, dSemana; const char ESC = 27; do { printf("Digite a data na forma dd mm aaaa: "); scanf("%d%d%d",&dia, &mes, &ano); dSemana = ano + dia + 3 * (mes - 1) - 1; if( mes < 3) ano--; else dSemana -= (int)(0.4*mes+2.3); dSemana += (int)(ano/4) - (int)((ano/100 + 1)*0.75); dSemana %= 7; switch(dSemana) { case 0: printf("Domingo"); break; case 1: printf("Segunda-feira"); break; case 2: printf("Tera-feira"); break; case 3: printf("Quarta-feira"); break; case 4: printf("Quinta-feira"); break; case 5: printf("Sexta-feira"); break; case 6: printf("Sbado"); } printf("\nESC para terminar ou ENTER para recomear"); printf("\n"); } while (getch() != ESC); system("PAUSE"); return 0; }
Re-escrevemos o programa para que use um comando switch no lugar de ninhos de if-else
Quando vrios casos devem executar as mesmas instrues, usamos casos sem break Suponhamos que queremos permitir ao usurio do programa calculadora.c utilizar o sinal * ou x para indicar multiplicao o sinal / ou \ para indicar diviso
/* Calculadora4.C */ /* Simula uma calculadora de 4 operaes*/ /* Mostra casos sem break em switch */ #include <stdio.h> #include <stdlib.h> int main() { const int TRUE=1;