AULA 10 - Microcontroladores - Técnico
Considera-se comando válido em C, qualquer expressão válida, seguida por um ponto-e-vírgula (;), ou expressão entre chaves ({}). Ex:
a = 5;
Neste capítulo, entretanto, trataremos de comandos de controle de fluxo.
Pode-se dividir os comandos de controle de fluxo do C, em três categorias:
- instruções condicionais (if e switch),
- comandos de controle de loop (while, for e do-while) e
- instrução de desvio incondicional (goto).
A INSTRUÇÃO IF
A forma geral da declaração if é:
if(condição_de_teste) comando;
A interpretação é:
"Se a condição_de_teste for verdadeira (não-zero), executa comando".
Caso contrário, a execução é transferida para a instrução seguinte ao comando if.
Ex:
if (x==5) y=3;
Se comando contiver mais de uma instrução, o bloco deve ser colocado entre chaves ( {} ):
if(condição_de_teste)
{ comando1;
comando2;
comando3;
...
}
Exemplo:
#include <stdio.h>
int main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10) printf ("\n\nO numero e maior que 10");
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.");
}
if (num<10) printf ("\n\nO numero e menor que 10");
return (0);
}
A INSTRUÇÃO IF-ELSE
A forma geral da declaração if-else é:
if(condição_de_teste)
comando1;
else
comando2;
A interpretação é: "Se a condição_de_teste for verdadeira (não-zero), executa comando1, Senão, executa comando2". Ex:
if ( x < 6)
y = 1;
else
y = 2;
Os comandos if e if-else podem ser aninhados!!!
Isto ocorre quando uma série de testes sucessivos tem que ser feita, para fazer-se a escolha da instrução a ser executada.
A sintaxe pode ser tal como:
if(condição1)
if(condição2)
comando1; //instrução executada quando condição1 e condição2 forem V
else
comando2; //instrução executada quando condição1 for V e condição2 for F
else
if(condição3)
comando3; //instrução executada quando condição1 for F e condição3 for V
else
comando4; //instrução executada quando condição1 e condição3 forem F
Exercício:
Um professor de educação física especificou a tabela abaixo que define o tempo de treinamento para alunos do sexo feminino e masculino, jovens ou adultos.
Escreva o programa que implementa a tabela abaixo, isto é, lê a idade e sexo do usuário e devolve o tempo de treinamento recomendado.
| Idade: | Feminino | Masculino |
|---|---|---|
| <= 30 anos | t = 15’ | t = 45’ |
| > 30 anos | t = 25’ | t = 60’ |
Mas há que se ter cuidado com o que é interno, o que é externo e a qual if pertence cada else e com a endentação!!!!!
Ex:
| O algoritmo: | é diferente de: | e de: | e de: ... |
|---|---|---|---|
| if ( i > 2) if ( j == 3) y = 4; else y = 5; | if ( i > 2) { if( j == 3) y = 4; } else y = 5; | if (i > 2); if( j == 3) y = 4; else y = 5; | if (i > 2) { if( j == 3); y = 4; } else y = 5; |
No primeiro caso, o else refere-se ao if mais interno e no segundo caso, ao if externo, pelo uso das chaves.
No terceiro caso e no quarto casos, o ponto-e-vírgula “terminou” a instrução if, antes que esta executasse qualquer comando interno.
Obs:
if (a > b) c = a; else c = b;
É equivalente a:
c = ( a > b ) ? a : b ;
Obs2: Em expressões condição_de_teste não-relacionais deve-se tomar cuidado:
if (i == 3) y = 5; -> se i for igual a 3, y igual a 5
if (i = 3) y = 5; ® se i=3 for não zero (o que é SEMPRE TRUE!), y igual a 5 .
Obs3:
if ( i != 0) y = 3;
é equivalente a
if (i) y = 3;
Exercício:
Crie um programa de adivinhação, utilizando os comandos if e if-else.
O programa pede um número ao usuário, verifica se este é igual ao número mágico (previamente definido) e imprime " ** Certo **", caso a pessoa tenha acertado ou " ** O número mágico é maior que .... ** " o número que a pessoa digitou, ou ainda " ** O número mágico é menor que ... ** " o número digitado.
Exemplos
/**********************************************************************/
/*** Programa 3: Demonstrar Estrutura IF - ELSE ****/
/**********************************************************************/
/* Este programa localiza a percentagem de dias abaixo gelados!! */
#include <stdio.h>
#define ESCALA "celsius"
#define GELANDO 0
int main(void)
{
float temperatura;
int gelando = 0;
int dias =0;
printf("Entre com a relacao das temperatura dos dias gelados.\n");
printf("Use escala %s, e entre s para sair.\n", ESCALA);
while (scanf("%f", &temperatura) == 1)
{ dias++;
if(temperatura < GELANDO)
gelando++;
}
if (dias!=0)
printf("Do total de %d dias: %.1f\% foram abaixo de zero.\n", dias, 100.0*(float) gelando/dias);
else
printf("Nao foi fornecido nenhum dado!\n");
return 0;
}
A INSTRUÇÃO WHILE
A forma geral da declaração while é:
while( expressão_de_teste) comando;
A interpretação é: "Enquanto expressão_de_teste for verdadeira; execute comando".
No momento em que expressão_de_teste deixa de ser não-zero, a execução continua na linha de comando seguinte ao laço while.
Se houver vários comandos internos ao loop while, estes devem estar entre chaves ({ }).
Ex:
i=0;
...
while(i < 10)
{ a = b * 2;
chama_função( );
i++;
}
É importante salientar que se a expressão_de_teste não for verdadeira já no primeiro teste do laço este não será executado nenhuma vez e que o comando while é mais apropriado para laços onde o número de interações não é conhecido de antemão.
Por exemplo, como saber quantas vezes o usuário vai digitar caracteres para um número ou uma string de entrada?
Exemplos:
#include <stdio.h>
#include <conio.h>
void main(void)
{ int cont=0;
printf("Digite uma frase: \n");
while(getche()!= 13) /* O caractere com ASCII igual a 13 é a tecla enter (return) */
cont++;
printf("\nO numero de caracteres é %d", cont); }
i = 0; i = 5; ... ... while (i<5) É equivalente a while (i) i++; i--; ... ...
/*************************************************************************/
/**** Programa que imprime números de 1 a 10 utilizando laço while: *****/
/************************************************************************/
#include <stdio.h>
void main(void)
{ int contador = 1;
while (contador <= 10)
{ printf("%d\n", contador);
contador++;
}
}
Respostas do Exercício da Apostila
#include <stdio.h>
int main()
{ int idade;
char sexo, nome[20];
printf("****PROGRAMA DA ACADEMIA*****\n\n");
printf("\n\nDigite o seu nome:");
gets(nome);
printf("\nEntre com a sua idade %s: > ", nome);
scanf("%d",&idade);
printf("\nVc \202 do sexo (f)eminino ou (m)asculino, %s? > ", nome);
sexo = getche();
/** TREINAMENTO PARA MULHERES: **/
if(sexo=='f'||sexo=='F')
if(idade<= 30)
printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 15 minutos.");
else
printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 25 minutos.");
/** TREINAMENTO PARA HOMENS: **/
else
if(sexo=='m'||sexo=='M')
if(idade<= 30)
printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 45 minutos.");
else
printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 60 minutos.");
else printf("\nSexo inaceitavel!!");
return 0;
}
Programa do Número Mágico
#include <stdio.h>
#define MAGICO 47
int main()
{ int aposta=0;
printf("***** *****\n");
printf("***** PROGRAMA DO NUMERO MAGICO *****\n");
printf("***** *****\n");
while(aposta != MAGICO)
{
printf("\n\nEntre com um numero de 0 a 100: ");
scanf("%d", &aposta);
if(aposta > MAGICO)
printf("\nO numero magico \202 menor que isto.\nChute + baixo...");
else
if(aposta < MAGICO)
printf("\nO numero magico \202 maior que isto.\nChute + alto...");
else
printf("\n\nVOCE ACERTOU!!!! Parabens!!!\n\n\n");
}
return 0;
}
| << Aula 10 - Operadores | AULA 11 - Microcontroladores | Aula 12 - Instruções DO-WHILE, FOR e SWITCH >> |
|---|