AULA 8 - Programação 1 - Graduação

De MediaWiki do Campus São José
Revisão de 17h26min de 5 de março de 2015 por Douglas (discussão | contribs) (→‎Exercícios)
Ir para navegação Ir para pesquisar

Objetivos

  • Uso do break associado ao comando for, do, while.
  • Uso da biblioteca matemática (math.h).

Uso de break para sair de loops

Em exercícios anteriores, a finalização de um loop normalmente se dá pela expressão de controle de loop associado a instrução usada.
É possível sair de um loop na "força bruta" usando a instrução break:

#include <stdio.h>
main()
{
  int i,j;

  for (i=0;i<10;i++) {
     if (i==5)
       break;
  }
  printf("valor de i=%d\n", i);
}


Note que o break sempre sai do loop mais próximo a ele.


#include <stdio.h>
main()
{
  int i,j;

  for (i=0;i<3;i++) {
     for (j=0;j<4;j++) {
         if (j==1) { 
             break;
         }
         printf("valor de j = %d\n", j);
     }
     if (i==2)
         break;
     printf("valor de i = %d\n", i);
  }

}

Uso do continue para prosseguir no início do loop

#include <stdio.h>
main()
{
  int i,j;

  for (i=0;i<3;i++) {
     if (i==1) { 
         continue;
     }
     printf("valor de j = %d\n", j);
     for (j=0;j<4;j++) {
         if (j==1) { 
             continue;
         }
         printf("valor de j = %d\n", j);
     }
  }

}

Usando funções da biblioteca matemática

Para usar as funções matemáticas da biblioteca padrão, fazer os seguintes passos:

Tanto valores passados como argumento, quanto o returno de valores são do tipo double.
Veja alguns exemplos de funções disponíveis ao se utilizar math.h.

Função Como chamar
Seno sin(x)
Cosseno cos(x)
Tangente tan(x)
Exponencial exp(x)
Logaritmo log(x), log10(x)
Potência pow(x,y)
Raiz sqrt(x)


Atenção

No arquivo-fonte incluir o header math.h da biblioteca matemática:

 
#include <stdio.h>
#include <math.h>

main()
{
 
  float x,y; /* declaração de duas variáveis reais */

  printf ("Entre com o valor de x ");
  scanf("%f",&x);

  y = sqrtf(x);
  printf ("Raiz de x = %lf", y);
}

NOTA: a maior parte de parâmetros e valores de retorno das funções matemáticas são reais de dupla precisão (double).

Compilar e linkar o arquivo da forma
 gcc ex1.c -o ex1 -lm

Exercícios

  1. Faça uma versão "politicamente incorreta" do programa de adivinhação da aula passada, Faça um loop infinito com o do while() e use uma instrução goto para sair do loop.
    /* rand example: guess the number */
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main ()
    {
          int iSecret, iGuess;
     
          /* initialize random seed: */
          srand ( time(NULL) );
     
          /* generate secret number: */
          iSecret = rand() % 10 + 1;
    
          do {
              printf ("Guess the number (1 to 10): ");
              scanf ("%d",&iGuess);
              if (iSecret<iGuess) 
                  printf ("The secret number is lower\n");
              else {
                  if (iSecret>iGuess) 
                     printf ("The secret number is higher\n");
              }
              if (iSecret==iGuess) /* se acertou salta para FIM */
                  goto FIM;
          } while(1); 
     
    FIM:  printf ("Congratulations!\n");
          return 0;
    }
    
  2. Ainda sobre o exercício 1, implemente uma versão usando o comando while().
    /* rand example: guess the number */
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main ()
    {
          int iSecret, iGuess;
     
          /* initialize random seed: */
          srand ( time(NULL) );
     
          /* generate secret number: */
          iSecret = rand() % 10 + 1;
    
          /* coloca um valor em iGuess que nunca será inserido pelo usuário */
          iGuess = -1;
    
          while (iSecret!=iGuess) {
              printf ("Guess the number (1 to 10): ");
              scanf ("%d",&iGuess);
              if (iSecret<iGuess) 
                  printf ("The secret number is lower\n");
              else {
                  if (iSecret>iGuess) 
                     printf ("The secret number is higher\n");
              }
          } 
     
          printf ("Congratulations!\n");
          return 0;
    }
    
  3. Ainda sobre o exercício 1, implemente uma versão usando loop infinito e o comando break;
    /* rand example: guess the number */
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main ()
    {
          int iSecret, iGuess;
     
          /* initialize random seed: */
          srand ( time(NULL) );
     
          /* generate secret number: */
          iSecret = rand() % 10 + 1;
    
          do {
              printf ("Guess the number (1 to 10): ");
              scanf ("%d",&iGuess);
              if (iSecret<iGuess) 
                  printf ("The secret number is lower\n");
              else {
                  if (iSecret>iGuess) 
                     printf ("The secret number is higher\n");
              }
              if (iSecret==iGuess) /* se acertou sai do loop */
                  break;
          } while(1); 
     
          printf ("Congratulations!\n");
          return 0;
    }
    
  1. Uso do while e switch (Aula 6)
#include <stdio.h>
 
main()
{
    float tf,tc; /* declaração de duas variáveis reais */
	int opcao=0;
 	while (opcao!=3){
		printf("\nDigite: (1) para converter de F para °C\n");
		printf("Digite: (2) para converter de C para °F\n");
		printf("Digite: (3) para sair\n");
        scanf ("%d",&opcao);
  		switch(opcao) {
  		case 1:	printf ("\nEntre com o valor da temperatura fahrenheit = ");
  				scanf("%f",&tf);
   				tc = (tf-32)/1.8;
  				printf ("\nTemperatura = %0.1f°C", tc);
          		break;
  		case 2: printf ("\nEntre com o valor da temperatura Celcius = ");
  				scanf("%f",&tf);
   				tf = (tc*1.8)+32;
  				printf ("\nTemperatura = %0.1f°F", tf);
          		break;
        default: 
                printf("\nFim.\n");
                break;
       }
  	}
}