Você está na página 1de 13

1997 - Adriano Joaquim de Oliveira Cruz 1. Comandos de Teste 1. Blocos de Comandos 2. Comando if 3. Comando switch 4. Comando Ternrio 2.

Laos 1. Comando for 2. Comando while 3. Comando do-while 3. Comandos de Desvio 1. Comando break 2. Comando continue 3. Comando goto 4. Funo exit() 5. Comando return 4. Exerccios

Comandos de Teste

Blocos de Comandos Blocos de comando so grupos de comandos que devem ser tratados como uma unidade lgica. O incio de um bloco em C marcado por uma { e o trmino por uma }. O bloco de comando serve para criar um grupo de comandos que devem ser executados juntos. Normalmente usa-se bloco de comandos quando se usa comandos de teste em que deve-se escolher entre executar dois blocos de comandos. Um bloco de comandos pode ser utilizado em qualquer trecho de programa que se pode usar um comando C.

Comando if O comando if utilizado quando for necessrio escolher entre dois caminhos, ou quando se deseja executar um comando sujeito ao resultado de um teste. A forma geral do comando if a seguinte:
if (expresso) comando1; else

comando2;

Neste comando a expressp avaliada e caso o resultado seja VERDADE (qualquer resultado diferente de zero) o comando1 executado, caso contrrio o comando2 que executado. Pela definio do comando a expresso deve ter como resultado um valor diferente de zero para ser considerada verdade. Observar que somente um dos dois comandos ser executado. Como a clusula else opcional a forma abaixo do comando if perfeitamente vlida.
if (expresso) comando;

Nos dois casos acima os comandos sempre podem ser substitudos por um bloco de comandos, e neste caso os comandos ficariam da seguinte maneira:
if (expresso) { /* lista de comandos a serem executados */ } else { /* lista alternativa de comandos a serem executados */ }

ou
if (expresso) { /* lista de comandos a serem executados */ }

A seguir mostramos alguns trechos de programas com exemplos de uso de comando if:
1. scanf("%d", &dia); 2. if ( dia > 31 && dia < 1 ) 3. printf("Dia invalido\n");

4.
5. scanf("%d", &numero); 6. if ( numero >= 0 ) 7. printf("Numero positivo\n"); 8. else 9. printf("Numero negativo\n");

10.
11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. scanf("%f", salario); if (salario < 800.00) { printf("Aliquota de imposto = salario * } else { printf("Aliquota de imposto = salario * }

imposto = 0.1\n"); 0.1;

imposto = 0.25\n"); 0.25;

22. Uma construo que pode aparecer so os comandos if's em escada, cuja forma geral a seguinte:
if (expresso) comando; else if (expresso) comando; else if (expresso) comando; ... else comando;

O programa calc.c mostra um exemplo com if's em escada e aninhados. Para evitar que o recuo da escada seja muito profundo o comando if em escada pode ser escrito da seguinte maneira:
if (expresso) comando; else if (expresso) comando; else if (expresso) comando; ... else comando;

Comando switch O comando if, em todas suas formas, suficiente resolver problemas de seleao de comandos. Porm em alguns casos, como no exemplo acima ( ccalc.c) o programa se torna mais trabalhoso para ser escrito. O comando switch facilita a escrita de trechos de programa em que a seleo deve ser feita entre vrias alternativas. A forma geral do comando switch a seguinte:
switch (expresso) { case constante1: sequncia de comandos; break; case constante2: sequncia de comandos; break; case constante3: sequncia de comandos; break; ... default: sequncia de comandos; }

A execuo do comando segue os seguintes passos: 1. A expresso avaliada; 2. O resultado da expresso comparado com os valores das constantes que aparecem nos comandos case; 3. Quando o resultado da expresso for igual a uma das constantes, a execuo se inicia a partir do comando associado com esta constante. A execuo continua com a execuo de todos os comandos at o fim do comando switch, ou at que um comando break seja encontrado; 4. Caso no ocorra nenhuma coincidncia o comando default executado. O comando default opcional e se ele no aparecer nenhum comando ser executado. O comando break um dos comandos de desvio da linguagem C. O break se usa dentro do comando switch para interromper a execuo e pular para o comando seguinte ao comando switch. H alguns pontos importantes que devem ser mencionados sobre o comando switch.

O resultado da expresso deve ser um tipo compatvel com um inteiro, isto , expresses com resultados tipo char tambm podem ser usadas; Notar que caso no apareca um comando de desvio todas as instrues seguintes ao teste case que teve sucesso sero executadas, mesmo as que estejam relacionadas com outros testes case; O comando switch s pode testar igualdade; No podem aparecer duas constantes iguais em um case;

O programa calsw.c mostra um exemplo de uso de comandos switch.

Comando Ternrio O comando ternrio tem este nome porque necessita de trs operandos para ser avaliado. O comando ternrio tem a seguinte forma:
expresso1 ? expresso2 : expresso3

Para avaliar o resultado da expresso primeiro expresso1 avaliada. Caso este resultado seja correspondente ao valor VERDADE ento resultado da expresso ser igual ao valor da expresso2, no caso contrrio expresso3 avaliada e se torna o resultado. O programa tern.c mostra um exemplo de uso de comando ternrio.

Laos
Estes comandos permitem que trechos de programa sejam repetidos um certo nmero de vezes controlado pelo programa. O nmero de vezes que um lao ser executado pode ser fixo ou depender de condies.

Comando for Este comando aparece em vrias linguagens de programao, mas na linguagem C ele apresenta uma grau maior de flexibilidade. A idia bsica do comando for a seguinte. Uma varivel de controle, geralmente um contador, recebe um valor inicial. O trecho de programa que pertence ao lao executado e ao final a variavel de controle incrementada ou decrementada e comparada com o valor final que ela deve alcanar. Caso a condio de trmino tenha sido atingida o lao interrompido. A forma geral do comando for a seguinte:
for (expresso1; expresso2; expresso3) comando;

As trs expresses geralmente tem os seguintes significados: 1. A expresso1 utilizada para inicializar a varivel de controle do lao; 2. A expresso2 um teste que controla o fim do lao; 3. A expresso3 normalmente faz um incremento ou decremento da varivel de controle. A execuo do comando for segue os seguintes passos: 1. A expresso1 avaliada; 2. A expresso2 avaliada para determinar se o comando deve ser executado; 3. Se o resultado da expresso2 for VERDADE o comando executado caso contrrio o lao terminado; 4. A expresso3 avaliada; 5. Voltar para o passo onde 2. Exemplo Imp100f: O trecho de programa abaixo imprime todos os nmeros entre 1 e 100.
for (i = 0; i <= 100; i++)

printf("Numero %d\n", i);

possvel omitir qualquer uma das expresses. Por exemplo, se a expresso2 for omitida o programa assume que ela sempre verdade de modo que o lao s termina com um comando de desvio como obreak
for (i = 0; ; i++){ printf("numero %d\n", i); if (i == 5) break; }

O programa fat.c mostra como se pode calcular o fatorial de um nmero usando-se o comando for. Laos for com mais de um comando por expresso Outra possibilidade que o comando for em C permite e a incluso de mais de um comando, separados por vrgulas, nas expresses. O programa for1.c mostra um exemplo de uso de comando for com vrios comandos nas expresses. Laos for com testes com outras variveis A expresso de controle no precisa necessriamente envolver somente um teste com a varivel que controla o lao. O teste de final do lao pode ser qualquer expresso relacional ou lgica. No exemplolinf.c o lao pode terminar porque a varivel de controle j chegou ao seu valor limite ou foi batida a tecla '*'. Laos for com expresses faltando Um outro ponto importante do for que nem todas as expresses precisam estar presentes. No exemplo, fors.c a varivel de controle no incrementada. A nica maneira do programa terminar o usurio bater o nmero -1. Lao infinito Uma construo muito utilizada o lao infinito. No lao infinito o programa para quando se usa o comando break. No exemplo finf.c o programa s para for digitada ou a tecla 's' ou 'S '. Laos aninhados Uma importante construo aparece quando colocamos como comando a ser repetido um outro comando for. Esta construo aparece quando estamos trabalhando com matrizes. O exemplo ftab.c mostra um programa que imprime uma tabuada.

Comando while O comando while tem a seguinte forma geral:


while (expresso) comando;

A expresso pode assumir o valor FALSO (igual a 0) ou VERDADE (diferente de 0). Os passos para execuo do comando so os seguintes: 1. A expresso avaliada; 2. Se a expresso for VERDADE ento o comando executado, caso contrrio a execuo do comando terminada; 3. Voltar para o passo 1. Uma caracterstica do comando while, como pode ser visto dos passos acima, que o comando pode no ser executado. O exemplo de comando for Imp100f escrito com comando while fica da seguinte maneira:
i = 1; while (i <= 100){ printf("Numero %d\n", i); i++; }

O trecho acima escrito de forma mais compacta fica:


i = 1; while (i++ <= 100) printf("Numero %d\n", i);

A expresso do comando pode incluir chamada de funo. Lembrar que qualquer atribuio entre parnteses considerada como uma expresso que tem o valor da atribuio sendo feita. Por exemplo, o trecho abaixo repete um bloco de comandos enquanto o usurio usar a tecla 'c' para continuar, qualquer outra tecla o bloco interrompido.
#include <stdio.h> #include <conio.h> void main()

{ int c; puts("Tecle c para continuar.\n"); while ((c=getche()) == 'c'){ puts("\nNo Acabou.\n"); } puts("\nAcabou.\n"); }

Comando do-while A forma genrica do comando a seguinte:


do { comando; } while (expresso);

Observar que neste comando a expresso de teste est aps a execuo do comando, portanto o comando executado pelo menos uma vez. A execuo do comando segue os seguintes passos: 1. Executa o comando; 2. Avalia a expresso; 3. Se a expresso for VERDADE ento volta para o passo 1, caso contrrio interrompe o do-while O exemplo de comando for Imp100f escrito com comando do-while fica da seguinte maneira:
i = 1; do { printf("Numero %d\n", i); i++; } while (i <= 100);

Comandos de Desvio

Comando break

O comando break pode ser tanto usado para terminar um teste case dentro de um comando switch quanto interromper a execuo de um lao. Quando o comando utilizado dentro de um comando for o lao imediatamente interrompido e o programa continua a execuo no comando seguinte ao comando for. No trecho de programa abaixo o comando for deve ler 100 nmeros inteiros positivos. No entanto, se for digitado um nmero negativo o comando for interrompido imediatamente sem que o nmero seja impresso.
for (i = 0; i <100; i++) { scanf("%d", &um); if (num < 0) break; printf("%d\n", num); }

Comando continue O comando continue parecido com o comando break. A diferena que o comando continue interrompe a execuo da iterao corrente passando para a prxima iterao do lao, se houver uma. No comando for o controle passa para o teste e o incremento do lao sejam executados, nos comandos while e do-while o controle passa para a fase de testes. No trecho de programa abaixo o lao l 100 nmeros inteiros, caso o nmero seja negativo ele um novo nmero lido.
for (i = 0; i < 100; i++) { scanf("%d", &num); if (num < 0) continue; printf("%d\n", num); }

Comando goto O comando goto causa um desvio incondicional para um outro ponto da funo em que o comando est sendo usado. O comando para onde deve ser feito o desvio indicado por um rtulo, que um identificador vlido em C seguido por dois pontos.

importante notar que o comando goto e o ponto para onde ser feito o desvio devem estar dentro da mesma funo. A forma geral deste comando :
goto rtulo; . . . rtulo:

Este comando durante muito tempo foi associado a programas ilegveis. O argumento para esta afirmao se baseia no fato de que programas com comandos goto perdem a organizao e estrutura porque o fluxo de execuo pode ficar saltando erraticamente de um ponto para outro. Atualmente as restries ao uso do comando tem diminudo e seu uso pode ser admitido em alguns casos.

Funo exit() A funo exit provoca a terminao de um programa, retornando o controle ao sistema operacional. O prottipo da funo a seguinte:
void exit( int codigo);

Observar que esta funo interrompe o programa como um todo. O cdigo usado para indicar qual condio causou a interrupo do programa.

Comando return O comando return usado para interromper a execuo de uma funo e retornar um valor ao programa que chamou esta funo. Caso haja algum valor associado ao comando return este devolvido para a funo, caso contrrio um valor qualquer retornado. A forma geral do comando :
return expresso;

Notar que a expresso opcional. A chave que termina uma funo equivalente a um comando return sem a expresso correspondente. possvel haver mais de um comando return dentro de uma funo. O primeiro que for

encontrado durante a execuo causar o fim da execuo. Uma funo declarada como do tipo void no pode ter um comando return que retorne um valor. Isto no faz sentido, j que funes deste tipo no podem retornar valores.

Exerccios
1. Escreva um programa que calcule x elevado a n. Assuma que n um valor inteiro. Soluo: potencia.c 2. Escreva um programa que exiba um menu com as opes "1multiplicar" e "2-somar", leia a opo desejada, leia dois valores, execute a operao (utilizando o comando "if") e exiba o resultado. Soluo: menu.c 3. Utilizando if's em escada, inclua, no programa do exerccio anterior, as opes "3-Subtrair" e "4-Dividir". Soluo: if.c 4. Simplifique os programas anteriores da seguinte forma: Reescreva o programa do exerccio 1 substituindo o comando "if" pelo comando ternrio. Soluo: ternario.c Reescreva o programa do exerccio 2 substituindo os if's em escada pelo comando "switch". Soluo: switch.c 5. Utilizando um lao "while" e o comando "break", escreva um programa que exiba a mensagem "HA-HA-HA!! Voc est preso." at que a senha "FUI!!" seja digitada. Soluo: senha.c 6. Utilizando um lao "for" dentro de outro, escreva um programa que exiba as tabuadas de multiplicao dos nmeros de 1 9. Soluo: multi.c 7. Escreva um programa com menu de 5 opes que utilize o comando de desvio "goto" para executar a opo desejada e s saia do programa caso a opo "5-Sair" seja selecionada. Soluo: goto.c

8. Escreva um programa que tenha um nmero (inteiro) como entrada do usurio e escreva como sada a sequencia de bits que forma esse numero. Por exemplo, aps digitado o nmero 10, a saida deve ser 0000000000001010. Soluo: converte.c Soluo: converte1.c 9. Escreva um programa que imprima todos os numeros pares entre 0 e 50 e em seguida imprima todos os impares. Deixar um espaco entre os numeros. Soluo: par.c 10. Escreva um programa que leia 10 numeros. O programa deve imprimir a media, o maior e o menor deles. Obs: Os numeros devem ser entre 0 e 10. Soluo: media.c 11. Escreva um programa que leia 10 numeros. O programa deve imprimir a media, o maior e o menor deles. Obs: Considere agora que os nmeros podem ser quaisquer. Soluo: .c 12. Escreva um programa que exibe a tabela ascii. Soluo: ascii.c 13. Crie um programa para verificar se um nmero dado primo. Soluo: primo.c 14. Escreva um prgrama que leia um numero inteiro do teclado e acha se o numero e primo ou nao. O programa deve informar o menor divisor. Soluo: primos.c 15. Escreva um programa que leia um numero do teclado e ache todos os seus divisores. Soluo: divisores.c 16. Escreva um programa que imprima a seqncia "987654321876543217654321654321543214321321211", mas sem imprimir nenhuma constante, use apenas variveis. Em outra linha imprima as letras maisculas de A at Z (ABCD...). Soluo: imprime.c 17. Escreva um programa que conte de 100 a 999 (inclusive) e exiba, um por linha, o produto dois tres digitos dos numeros. Por exemplo, inicialmente o programa ir exibir: 0 (1*0*0) 0 (1*0*1)

0 (1*0*2) (...) 0 (1*1*0) 1 (1*1*1) 2 (1*1*2) at 9*9*9=729 Faa seu programa dar uma pausa a cada 20 linhas para que seja possvel ver todos os nmeros pouco a pouco (solicitando que seja pressionada alguma tecla para ver a prxima sequencia de nmeros, como o DIR/P do DOS). Soluo: produto.c

Você também pode gostar