Mudanças entre as edições de "MCO18703 2017 2 AULA03"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 165: Linha 165:
  
  
 
=Exemplo 1=
 
 
Implementar um programa de calculadora onde são fornecidos via ''scanf'' dois <br>
 
operandos reais e uma operação que pode ser uma das 4 operações. <br>
 
Com auxílio de um ''switch'' deve ser computado e mostrado o resultado da operação.<br>
 
Solução:
 
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
 
 
main ()
 
{
 
  float operando1, operando2, res;
 
  char operador;
 
 
  printf("Entre com operando 1\n");
 
  scanf ("%f",&operando1);
 
  printf("Entre com operando 2\n");
 
  scanf ("%f",&operando2); 
 
  printf("Entre com operador\n");
 
  scanf (" %c",&operador);
 
 
  switch(operador) {
 
  case '+':
 
          res = operando1 + operando2;
 
          printf("Valor da soma = %f\n", res);
 
          break;
 
  case '-':
 
          res = operando1 - operando2;
 
          printf("Valor da diferença = %f\n", res);
 
          break;
 
  case '*':
 
  res = operando1 * operando2;
 
          printf("Valor da diferença = %f\n", res);  
 
          break;
 
  case '/':
 
          if (operando2 != 0) {
 
res = operando1 / operando2;
 
          printf("Valor da diferença = %f\n", res);
 
          } else
 
          printf("Divisão por zero não permitida!\n");  
 
          break; 
 
  default:
 
          printf("Operação inválida!\n");
 
          break;
 
  }
 
}
 
</syntaxhighlight>
 
 
;Exemplo 2
 
 
Elaborar uma função que recebe como parâmetro um número inteiro de 1 a 7. <br>
 
A função deve imprimir Domingo se o número é 1, Segunda se 2, ...<br>
 
A função deve retornar -1 caso o parâmetro esteja fora da faixa e 0 caso contrário.<br>
 
Solução:
 
 
<syntaxhighlight lang=c>
 
/* contribuição do aluno Iago */
 
#include <stdio.h>
 
 
int operar(int x)
 
{
 
  switch(x) {
 
    case 1:
 
          printf("Domingo\n");
 
          break;
 
    case 2:
 
          printf("Segunda\n");
 
          break;
 
    case 3:
 
          printf("Terça\n");
 
          break;
 
    case 4:
 
          printf("Quarta\n");
 
          break;
 
    case 5:
 
          printf("Quinta\n");
 
          break;
 
    case 6:
 
          printf("Sexta\n");
 
          break;
 
    case 7:
 
          printf("Sábado\n");
 
          break;       
 
    default:
 
            printf("-1\n");
 
            return -1;
 
    }
 
    return 0;
 
}
 
 
main()
 
{
 
 
int num;
 
printf("Entre com um número:\n");
 
scanf("%d",&num);
 
num=operar(num);
 
printf("%d\n",num);
 
 
}
 
</syntaxhighlight>
 
  
 
;Exercício 1
 
;Exercício 1
Linha 295: Linha 191:
 
em seguida calcule e imprima o seu novo salário. Use o comando ''switch''.
 
em seguida calcule e imprima o seu novo salário. Use o comando ''switch''.
  
;Exercício 2
 
 
Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso.<br>
 
Use o comando ''switch''.
 
 
==O switch sem o break==
 
 
Nos exemplos passados, você viu que somente um dos ''case'' era selecionado para cada operação com o uso do 
 
''break''. Se você tirar o break, o switch identifica o case que é igual a 'operacao' e todos os que estão
 
abaixo até o fim, ou até encontrar um novo break.
 
 
Execute o exemplo a seguir:
 
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
 
int main(void)
 
{
 
    int continuar=1;
 
    char opcao;
 
 
    while(continuar)
 
    {
 
        system("clear || cls");
 
        printf("Repetir? (S/s)im (N/n)ao\n");
 
        scanf(" %c",&opcao);
 
        switch(opcao)
 
        {
 
            case 's':
 
            case 'S':
 
break;
 
 
            case 'n':
 
            case 'N':
 
                continuar = 0;
 
            }
 
 
        }
 
 
}
 
</syntaxhighlight>
 
 
O comando system("clear") serve para limpar a tela em sistemas operacionais do tipo Linux, e system("cls")
 
limpa a tela caso você use Windows. Então system("clear || cls") limpa a tela, independente de qual sistema
 
você esteja usando.
 
 
Nota-se que, enquanto continuar=1, o laço WHILE continua a ocorrer e só termina quando 'continuar' receber valor 0.
 
Se digitarmos 's' o primeiro case é selecionado. Como ele não tem break, o próximo também ocorre, que é o case caso
 
opcao='S'. Esse tem break. Ou seja, pra continuar a repetir basta digitar 'S' ou 's'.
 
 
Se digitar 'n', vai cair no case onde opcao='n' e onde opcao='N', pois não tem break no opcao='n'.
 
Então, 'continuar' recebe valor 0 e o laço WHILE termina.
 
  
 
;Exercício 1
 
;Exercício 1
Linha 359: Linha 203:
  
 
Faça um programa em C que calcule os juros (simples) de atraso usando switch e case acumulados.
 
Faça um programa em C que calcule os juros (simples) de atraso usando switch e case acumulados.
 
{{collapse top|Solução}}
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
 
int main(void)
 
{
 
        float valor_i,
 
              valor_f;
 
        int  juros=0;
 
 
        int meses;
 
 
        printf("Qual o valor inicial da dívida: ");
 
        scanf("%f", &valor_i);
 
 
        printf("Você vai atrasar quantos meses [1-5]?: ");
 
        scanf("%d", &meses);
 
 
        switch( meses )
 
        {
 
            case 5:
 
                juros++;
 
            case 4:
 
                juros++;
 
            case 3:
 
                juros++;
 
            case 2:
 
                juros++;
 
            case 1:
 
                juros++;
 
                break;
 
            default:
 
                printf("Você não digitou um valor válido de meses\n");
 
 
        }
 
        printf("Juros: %d%\n",juros);
 
        valor_f=( (1 + (juros/100.0))*valor_i);
 
        printf("Valor final da dívida: R$ %.2f\n", valor_f);
 
 
}
 
</syntaxhighlight>
 
{{collapse bottom}}
 
 
Caso tenha atrasado 5 meses, o valor da variável 'juros' é incrementado 5 vezes.
 
Se atrasou 4 meses, o 'juros' é incrementado 4 vezes, e assim por diante.
 
 
;Exercício 2
 
 
Crie um programa que receba um inteiro, de 1 até 12, representando os meses do ano e retorne o número de dias do mês.
 
Use switch e não use break. Acumule os case.
 
 
{{collapse top|Solução}}
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
 
int main()
 
{
 
    while(1)
 
    {
 
        int mes,dias=27;
 
        printf("\nDigite o numero do mes: ");
 
        scanf("%d",&mes);
 
        switch (mes)
 
        {
 
            case 1:
 
            case 3:
 
            case 5:
 
            case 7:
 
            case 8:
 
            case 10:
 
            case 12: dias++;
 
            case 4:
 
            case 6:
 
            case 9:
 
            case 11: dias=dias+2;
 
            case 2: dias++;
 
        }
 
        printf("\nMes: %d  Dias: %d",mes,dias);
 
 
    }
 
}
 
</syntaxhighlight>
 
{{collapse bottom}}
 
  
 
=Exercícios propostos=
 
=Exercícios propostos=

Edição das 14h18min de 24 de outubro de 2017

Objetivos

  • Utilizar os operadores relacionais e lógicos na programação C.
  • Utilizar o comando de decisão if else.


Operadores Relacionais e Lógicos

Os operadores relacionais e lógicos são os mesmos vistos na aula anterior.

Relacionais
Operador Significado
> maior que
>= maior ou igual que
< menor que
<= menor ou igual que
== igual a
!= diferente de


Lógicos
Operador Significado
&& AND (E)
|| OR (OU)
! NOT (NÃO)

Ver Operadores Relacionais e Lógicos

Comandos de decisão if() e if() else

Estes comandos são também chamados de Comandos de controle de fluxo.
Possibilitam ao programador alterar a sequência de execução de um programa.

O comando if representa uma tomada de decisão do tipo "SE isto ENTÃO aquilo".

Sua forma geral é:


if (condição) declaração;

ou


if (condição)
{
   declaração1;
   declaração2;
}
else
{
   declaração3;
   declaração4;
};

Note o uso das chaves sempre que houver mais de uma declaração e a utilização de identação (tecla TAB no teclado).

 

#include <stdio.h>

main()
{
 
  int x; /* declaração de uma variável inteira */
  int y;  /* declaração de uma variável inteira */

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

  printf ("Entre com o valor de y ");
  scanf("%d",&y);

  if (y>x)
     printf("MSG1:y é maior que x\n");


  if (y>x)
     printf("MSG2:y é maior que x\n");
  else
     printf("MSG3:y é igual ou menor que x\n");
 
}

Outro exemplo, usando blocos:

 
#include <stdio.h>

main()
{
 
  int x,y,z; /* declaração de uma variável inteira */

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

  printf ("Entre com o valor de y ");
  scanf("%d",&y);

  if (y>x) 
  {
     printf("MSG1: y é maior que x\n");
     z = y-x;
     printf("MSG2: Neste caso z =  %d\n", z);
  } 
  else 
  {
     printf("MSG3: y é igual ou menor que x\n");
     z = x-y;
     printf("MSG4: Neste caso z =  %d\n", z);
  }
 
}

No C, qualquer expressão que resulta em 0 é considerada FALSA e qualquer expressão com valor diferente de 0 é VERDADEIRA.

Exemplo:

  if (2)
      printf("expressão sempre VERDADEIRA");
  if ('2')
      printf("expressão sempre VERDADEIRA");      
  if (1-1)
      printf("expressão sempre FALSA");
  if (x=1) /* um erro comum - sinal de atribuição no lugar de == */
      printf("expressão sempre VERDADEIRA");

Indentação

É um recuo aplicado ao código fonte de um programa para ressaltar ou definir a estrutura do programa.



Exercício 1

Um funcionário irá receber um aumento de acordo com o seu plano de trabalho (A,B,C e D).
A tabela abaixo mostra o plano e o percentual de aumento:

Plano Percentual
A 5%
B 10%
C 15%
D 20%

Faça um programa que leia o plano de trabalho e o salário atual de um funcionário
em seguida calcule e imprima o seu novo salário. Use o comando switch.


Exercício 1

Suponha que você atrasou uma conta. A cada mês que você deixa de pagar, será cobrado 1% de juros no valor inicial. Ou seja, se você atrasar um mês, irá pagar 1%. Se atrasar 3 meses, irá pagar 3%. Vamos supor que você pode atrasar, no máximo, 5 meses.

O programa pede, como entrada, dois valores: - um float: com o valor de sua dívida inicial (valor_i) - um inteiro: de 0 até 5, que são o número de meses de atraso.

Faça um programa em C que calcule os juros (simples) de atraso usando switch e case acumulados.

Exercícios propostos

  1. Implementar um programa C que converte temperaturas de graus Fahrenheit para Celsius.
  2. Implementar um programa que lê um número inteiro e imprime se o número é par ou ímpar. SUGESTÃO: Usar o operador de módulo da divisão.
  3. Implementar um programa em C para ler dois números inteiros e imprimir uma mensagem indicando se os números lidos são iguais ou diferentes. Caso sejam diferentes, computar a média dos mesmos.
  4. Implementar um programa para ler 4 números inteiros e imprimir uma mensagem se a soma dos dois primeiros for igual ou menor a soma dos dois últimos.
  5. Implementar um programa para ler dois números reais e, na sequência, um número inteiro. Se o número inteiro for 1 os dois números iniciais deverão ser somados, se for 2 eles serão subtraídos, se for 3 eles serão multiplicados e se for 4 serão divididos. Mostrar mensagem de erro se o número inteiro não estiver na faixa de 1 a 4. Mostrar mensagem caso a divisão não seja possível.
  6. Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo na forma de fluxograma que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada. Implemente o algoritmo na forma de um programa C.
  7. Implementar um programa que recebe três números reais e então o programa testa se estes números podem formar um triângulo EQUILÁTERO, ISÓSCELES, ESCALENO ou NÃO pode ser triângulo. (ver aula anterior).
  8. Implementar um programa C para converter um ângulo em radianos para graus.
  9. Implementar um programa C que recebe os 3 coeficientes de uma equação do segundo grau e então determina as raízes da mesma.



Icone voltar.png Icone menu.png Icone prox.png