AULA 10 - Microcontroladores - Técnico: mudanças entre as edições

De IFSC
Ir para navegação Ir para pesquisar
imported>Fargoud
imported>Fargoud
 
(14 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 36: Linha 36:
  }
  }


===Exemplo:===
  #include <stdio.h>
  int main ()
  {
    int num;
    printf ("Digite um numero: ");
    scanf ("%d",&num);
    if (num>10)
        printf ("\n\nO numero \202 maior que 10\n\n\n");
    if (num==10)
    {
      printf ("\n\nVoce acertou!\n");
      printf ("O numero \202 igual a 10.\n\n\n");
    }
    if (num<10)
        printf ("\n\nO numero \202 menor que 10\n\n\n");
    return (0);
}
'''OBSERVAÇÃO''':
As instruções IF-ELSE acima podiam ser substituídas pelo operador condicional:
  (num>10)? printf ("\n\nO numero \202 maior que 10\n\n\n") : ((num==10)?  printf ("O numero \202 igual a 10.\n\n\n"):printf ("\n\nO numero \202 menor que 10\n\n\n"));


=A INSTRUÇÃO IF-ELSE=
=A INSTRUÇÃO IF-ELSE=
Linha 54: Linha 78:


Os comandos if e if-else podem ser aninhados!!!
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)
Isto ocorre quando uma série de testes sucessivos tem que ser feita, para fazer-se a escolha da instrução a ser executada.
if(condição2)
 
                comando1;  //instrução executada quando condição1 e condição2 forem V
A sintaxe pode ser tal como:
                else
 
        comando2;  //instrução executada quando condição1 for V e condição2 for F
if(condição1)
else
    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.
 
{| class="wikitable"
! Idade:
! Feminino
! Masculino
|-
| <= 30 anos
| t = 15’
| t = 45’
|-
| > 30 anos
| t = 25’
| t = 60’
|}
 
[[RespostaExAcademia | Sugestão de código]]


if(condição3)
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!!!!!
                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.
Ex:  
{| class="wikitable"
! 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.


Sexo:
No terceiro caso e no quarto casos, o ponto-e-vírgula “terminou” a instrução ''if'', antes que esta executasse qualquer comando interno.
Idade:
Feminino
Masculino
 30 anos
t = 15’
t = 45’
> 30 anos
t = 25’
t = 60’


'''Obs:'''
  if (a > b)  c = a;                               
  else        c = b;         


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!!!!!
É equivalente a:         
Ex: 
O algoritmo:
é diferente de:
e de:
e de:  ...
          if ( i > 2)                                                           
          if ( i > 2)                                                           
if (i > 2);
if (i > 2)
                if ( j == 3)             
          {       if( j == 3)
if( j == 3)
{        if( j == 3);
                        y = 4;                                                           
                y = 4;
        y = 4;
          y = 4;
                else  y = 5;                                                   
            } else y = 5; 
else y = 5;
} 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:
c = ( a > b ) ? a : b ;  
            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 , y igual a 5 (i=3 é TRUE).
Obs3:
            if ( i != 0)  y = 3;    é equivalente a      if (i) y = 3; 


'''Obs2:'''  Em expressões condição_de_teste não-relacionais deve-se tomar cuidado:


Exercício:
if (i == 3)  y = 5;  -> se i for igual a 3, y igual a 5


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.
if (i = 3)  y = 5;  ® se i=3 for não zero ('''o que é SEMPRE TRUE!'''), y igual a 5 .


Exemplos
'''Obs3: '''


/**********************************************************************/
if ( i != 0) y = 3;  
/***                  Programa 1:  Exemplo de Conversão Automática                            **/
/**********************************************************************/
#include <stdio.h>
void main(void)
{     
      char ch;
      int i;
      float fl;


       fl = i = ch = 'A';                                                           // o caractere 'A' é armazenado
é equivalente a        
      printf("ch = %c, i = %d, fl = %2.2f \n", ch, i, fl);        // como 65 (em i) e 65.00 (em fl)
 
      ch = ch + 1;                                                                // converte ch para int, soma 1 e reconverte para char
if (i) y = 3;
      i = fl + 2 * ch;      // converte ch para int, multiplica 2, transforma em float, soma a fl e  converte para int
 
      fl = 2.0 * ch + i;                              // converte ch em float, multiplica por 2.0, i é convertido em float  e
===Exercício:===
      printf("ch = %c, i = %d, fl = %2.2f \n", ch, i, fl);          //somado a ch, o resultado é armazenado em fl
 
      ch = 5212205.17;                                                          // o valor excede 8 bits, portanto é truncado e o código
Crie um programa de adivinhação, utilizando os comandos '''if''' e '''if-else'''.  
      printf ("Agora ch = %c\n", ch);                                    //ASCII é armazenado em ch
 
}
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.
 
[[RespostaExAdiv1 |Sugestão de código]]


===Exemplos===


/**********************************************************************/
/*** Programa 2: Demonstrar Conversão Forçada de Dados      (Cast)              ******/
/**********************************************************************/
#include <stdio.h>
void main(void)
{      int valor1, valor2;
        valor1 = 1.6 + 1.7;
    valor2 = (int) 1.6 + (int) 1.7;
    printf("valor1 = %d\n", valor1);
    printf("valor2 = %d\n", valor2);
}


/**********************************************************************/
/**********************************************************************/
/***  Programa 3:  Demonstrar Estrutura IF - ELSE                                               ****/
/***  Programa 3:  Demonstrar Estrutura IF - ELSE                 ****/
/**********************************************************************/
/**********************************************************************/
/*  Este programa localiza a percentagem de dias abaixo gelados!!                             */
/*  Este programa localiza a percentagem de dias abaixo gelados!!   */
#include <stdio.h>
#include <stdio.h>
#define ESCALA "celsius"
#define ESCALA "celsius"
#define GELANDO 0
#define GELANDO 0
int main(void)
int main(void)
{
{
     float temperatura;
     float temperatura;
     int gelando = 0;
     int gelando = 0;
     int dias =0;
     int dias =0;  
   
     printf("Entre com a relacao das temperatura dos dias gelados.\n");
     printf("Entre com a relacao das temperatura dos dias gelados.\n");
     printf("Use escala %s, e entre s para sair.\n", ESCALA);
     printf("Use escala %s, e entre s para sair.\n", ESCALA);
Linha 181: Linha 195:
         printf("Nao foi fornecido nenhum dado!\n");
         printf("Nao foi fornecido nenhum dado!\n");
   return 0;
   return 0;
}
}






8.3 - O COMANDO WHILE
=A INSTRUÇÃO WHILE=


A forma geral da declaração while é:
A forma geral da declaração while é:


while( expressão_de_teste)
while( expressão_de_teste)
comando;
   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?
Ex:
#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); }
 
Ex2:
i = 0;                                                                i = 5;
... while (i<5)            É equivalente a            ... while (i)
      i++; ...                                                          i--;  ...
 
 
 
8.4 - O COMANDO DO-WHILE
 
A forma geral da declaração do-while é:
            do
                  comando;
              while(expressão_de_teste); 
   
A interpretação é: "Faça comando enquanto expressão_de_teste for verdadeira".O comando do-while faz quase o mesmo que o while, com a diferença que no primeiro, o loop é executado pelo menos uma vez, já que o teste da expressão é feito no final da interação. Ou seja, se expressão_de_teste for falsa já na primeira interação, comando é executado uma vez e em seguida a execução continua fora do loop, na próxima linha de comando. Caso expressão_de_teste seja verdadeira, comando será executado até que esta se torne falsa.
 
Exercício:
 
Adapte o programa do número mágico, para uso com estrutura do-while.
 


8.5 - O COMANDO FOR
A interpretação é: ''"Enquanto expressão_de_teste for verdadeira; execute comando"''.  


A forma geral da declaração for é:
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''.


          for(inicialização;teste;incremento)
Se houver vários comandos internos ao loop ''while'', estes devem estar entre chaves ({ }).
                    comando;


Em sua forma mais simples, inicialização é uma instrução de atribuição (p.e.: i = 0) e é sempre executada uma única vez antes do laço ser inicializado.
O teste é uma instrução condicional que controla o laço. Comando será executado até que teste seja falso.
A expressão de incremento (ou decremento) define a maneira como a variável de controle do laço será alterada a cada interação.
Ex:
Ex:
  for( i = 0; i < 5; i++)              ®  Para i de 0 até 4:
        j++;                                              incrementa j a cada interação e incrementa i
  for(i = 5; i > 0; i--)   ®  Para i de 5 até 0:
      j = j * 2;                                      novo valor de j é j * 2  e decrementa i
  for(;;)  { ... }                                ®  Loop eterno
  for(i = 0; i< 5; i++)                        É equivalente a          for (i = 0; i< 5; j++, i++);"
        j++;
Exercícios                     
1 - Faça um programa que imprima os números de 1 a 10, utilizando:
      a)  comando while,
      b)  comando do-while,
      c)  comando for.
2 - Faça um programa que imprima os números de 0 a 9, de 2 em 2, utilizando o comando for.
3 - Faça um programa que imprima o fatorial de um número solicitado ao usuário, utilizando o comando while.
8.8 - O COMANDO SWITCH
A forma geral da declaração switch é:
switch (exp_int)
              {    case rot1:
                                    cmd1   
                    case rot2:
                                    cmd2
                    ...
                    default:
                                    cmdn
                }


* Os comandos cmd1, cmd2, etc e a declaração default são opcionais no bloco.
  i=0;
  ...     
  while(i < 10)
  {  a = b * 2;
      chama_função( );
      i++;
  }


Este comando testa o valor da expressão inteira exp_int, comparando-a com rot1, rot2, etc, até encontrar um rótulo que se iguale. Quando encontra, começa a executar de cima para baixo os comandos cmd1, cmd2, etc, até o final do bloco. Se não encontra, executa o comando do bloco default, cmdn.
É 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'''.  


Ex:    switch (i)
Por exemplo, como saber quantas vezes o usuário vai digitar caracteres para um número ou uma string de entrada?
            {  case 1:  j = j + 5;
                case 2: 
                case 3:  j = j + 3;  } 
   
              Valor de i                                Comandos executados
                  1                                            j = j + 5;  e  j = j + 3;
                2 ou 3                                        j = j + 3;
          qualquer outro                                nenhum.


Utiliza-se a instrução break para que apenas o comando referente a cada rótulo seja executado.
====Exemplos:====
Ex:   switch ( i )
          { case 1:  j = j + 5;
                          break;
            case 2: 
            case 3:  j = j + 3;
                          break;
              default:  j = j+ 1;    }


            Valor de i                              Comandos executados
#include  <stdio.h>
                    1                                          j = j + 5;
#include <conio.h>
                2 ou 3                                      j = j + 3;
void main(void)
          qualquer outro                                j = j + 1;
{ 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--;
    ...                                              ...


Exercícios


/*************************************************************************/
/*************************************************************************/
/****       Programa que imprime números de 1 a 10 utilizando laço while:               *****/
/**** Programa que imprime números de 1 a 10 utilizando laço while: *****/
/************************************************************************/
/************************************************************************/
#include <stdio.h>
#include <stdio.h>
void main(void)
void main(void)
{  int contador = 1;
{  int contador = 1;
  while (contador <= 10)
    while (contador <= 10)
   {    printf("%d\n", contador);
   {    printf("%d\n", contador);
         contador++;
         contador++;
   }
   }
}
}




/*************************************************************************/
===Respostas do Exercício da Apostila===
/****    Programa que imprime números de 1 a 10 utilizando laço do-while                ****/
#include <stdio.h>
/************************************************************************/
int main()
#include <stdio.h>
{ int idade;
void main(void)
  char sexo, nome[20];
{   int contador = 1;
     printf("****PROGRAMA DA ACADEMIA*****\n\n");
     do
     printf("\n\nDigite o seu nome:");
     printf("%d\n", contador);
    gets(nome);
      contador++;
     printf("\nEntre com a sua idade %s: > ", nome);
     }
     scanf("%d",&idade);
     while (contador <= 10);
    printf("\nVc \202 do sexo (f)eminino ou (m)asculino, %s? > ", nome);
}
    sexo = getche();
 
    /** TREINAMENTO PARA MULHERES: **/
/*************************************************************************/
    if(sexo=='f'||sexo=='F')
/***    Programa que imprime números de 1 a 10 utilizando laço for                          *****/
        if(idade<= 30)
/*************************************************************************/
            printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 15 minutos.");
#include <stdio.h>
        else
void main(void)
            printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 25 minutos.");
{    int contador;
    /** TREINAMENTO PARA HOMENS: **/
    for( contador = 1; contador <= 10; contador++)
    else
        printf("%d\n", contador);
      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.");
/****      Programa que imprime números de 0 a 9, de 2 em 2                                  *****/
      else printf("\nSexo inaceitavel!!");
/************************************************************************/
    return 0;
#include <stdio.h>
void main(void)
{    int i;
      for ( i = 0; i <= 9; i+=2)
          printf("%d\n", i);
}
}


 
===Programa do Número Mágico ===
/*************************************************************************/
#include <stdio.h>
/*****   Programa que calcula o fatorial de um número                                        *******/
#define MAGICO 47
/************************************************************************/
int main()
#include <stdio.h>
{ int aposta=0;
#include <conio.h>
    printf("*****                     *****\n");
void main(void)
    printf("***** PROGRAMA DO NUMERO MAGICO  *****\n");
{     int numero, j;
    printf("*****                     *****\n");
      char ch;
     while(aposta != MAGICO)
      double fat=1;
    {
 
         printf("\n\nEntre com um numero de 0 a 100:  ");
      for(;;)
         scanf("%d", &aposta);
      { fat=1;
         if(aposta > MAGICO)
         printf("Entre com um número positivo\n");
             printf("\nO numero magico \202 menor que isto.\nChute + baixo...");
         scanf("%d", &numero);
         if(numero== 0 || numero == 1)
             printf("O fatorial de %d é: %.0f\n", numero, fat);
         else
         else
        {    j = numero;
          if(aposta < MAGICO)
              while(j)
            printf("\nO numero magico \202 maior que isto.\nChute + alto...");
              {  fat  *=  j;
          else
                    j--;
            printf("\n\nVOCE ACERTOU!!!! Parabens!!!\n\n\n");
              }
    }
              printf("O fatorial de %d é: %.0f\n", numero, fat);
    return 0;
        }
  }
      } 
}     
 
/*************************************************************************/
/***    Programa que gera a tabuada de 2 a 9                                                          ******/
/************************************************************************/
#include <stdio.h>
void main(void)
{  int i, j, k;
    printf("\n");
    for (k = 0; k <= 1; k++)
    {  printf("\n");
          for( i = 1; i < 5; i++)
              printf("TABUADA DO %3d  ", i+4*k+1);
          printf("\n");
          for( i = 1; i <= 9; i++)
          {    for( j = 2 + 4 *k; j <= 5 + 4*k; j++)
      printf("%3d x %1d = %3d\t", j, i, j*i);
              printf("\r");
          }
    }   
}
 
 
/*******************************************************************/
/****  Programa da feira  de frutas                                                                  ****/
/******************************************************************/
#include <stdio.h>
#include <conio.h>
void main(void)
{  int i, opcao;
      printf("\n");
      for(i = 1; i <= 53; i++)
    printf("*");
      printf("\n*****\t\tPROGRAMA DA FEIRA!!\t\t*****\n");
      for(i = 1; i <= 53; i++)
    printf("*");
      printf("\n\n\t\t Escolha sua opção: \n");
      printf("\n\n\t\t(1) Uva; \n");
      printf("\n\t\t(2) Maça; \n");
      printf("\n\t\t(3) Banana; \n");
      printf("\n\t\t(4) Laranja; \n");
      scanf("%d",&opcao);
      switch(opcao)
      {  case 1:  printf("O cacho de uvas custa R$1.00");
                      break;
    case 2:  printf("A unidade de maças custa R$0.50");
                      break;
    case 3: printf("O kilo de bananas custa R$0.70");
    break;
    case 4:  printf("A duzia de laranjas custa R$0.90");
                      break;
    default: printf("Desculpe, mas não temos esta fruta!!");
      }
}
 
 
Exercícios


1) Um certo Centro Acadêmico está tentando realizar um plebiscito para escolha do logotipo do curso, dentre 3 propostas. Faça o programa que implementa a “urna eletrônica”, a qual vai contabilizar os votos dos estudantes e professores em cada logotipo, os votos brancos e nulos; calcular os percentuais de votos válidos em cada logotipo e imprimir qual foi o logotipo vencedor.
-----------------------
[[  MCO1870321| << Página do curso]]


2) Faça um programa-calculadora de 4 funções, ou seja, o usuário entra com dois números e estes são somados, subtraídos, multiplicados ou divididos.
{| border="1" cellpadding="5" cellspacing="0"
! style="background: #cdc5bf;" | [[AULA 9 - Microcontroladores - Técnico| << Aula 10 - Operadores ]]
! style="background: #cdc5bf;" | AULA 11 - Microcontroladores
! style="background: #cdc5bf;" | [[AULA 12 - Microcontroladores - Técnico| Aula 12 - Instruções DO-WHILE, FOR e SWITCH >> ]]
|}

Edição atual tal como às 11h55min de 15 de outubro de 2019

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 \202 maior que 10\n\n\n");
   if (num==10)
   {
      printf ("\n\nVoce acertou!\n");
      printf ("O numero \202 igual a 10.\n\n\n");
   }
   if (num<10) 
       printf ("\n\nO numero \202 menor que 10\n\n\n");
   return (0);
}

OBSERVAÇÃO:

As instruções IF-ELSE acima podiam ser substituídas pelo operador condicional:

 (num>10)? printf ("\n\nO numero \202 maior que 10\n\n\n") : ((num==10)?  printf ("O numero \202 igual a 10.\n\n\n"):printf ("\n\nO numero \202 menor que 10\n\n\n"));

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’

Sugestão de código

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.

Sugestão de código

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;
}

<< Página do curso

<< Aula 10 - Operadores AULA 11 - Microcontroladores Aula 12 - Instruções DO-WHILE, FOR e SWITCH >>