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
 
(7 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 63: Linha 63:
  
 
if (condição) declaração;
 
if (condição) declaração;
 +
 +
</pre>
  
 
ou
 
ou
 +
<pre>
  
 
if (condição)
 
if (condição)
Linha 76: Linha 79:
 
   declaração4;
 
   declaração4;
 
};
 
};
 +
 
</pre>
 
</pre>
  
 +
Note o uso das chaves sempre que houver mais de uma declaração e a utilização de identação (tecla TAB no teclado).
  
Note o uso das chaves sempre que houver mais de uma declaração.
 
 
<syntaxhighlight lang=c>  
 
<syntaxhighlight lang=c>  
  
Linha 155: Linha 159:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=Indentação=
+
==Indentação==
  
 
É um recuo aplicado ao código fonte de um programa para ressaltar ou definir a estrutura do programa.
 
É um recuo aplicado ao código fonte de um programa para ressaltar ou definir a estrutura do programa.
  
  
 +
==Exemplo 1==
  
 
+
(sala de aula)
=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
 
  
 
Um funcionário irá receber um aumento de acordo com o seu plano de trabalho (A,B,C e D). <br>
 
Um funcionário irá receber um aumento de acordo com o seu plano de trabalho (A,B,C e D). <br>
Linha 291: 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;
 
            }
 
 
        }
 
  
}
+
==Exemplo 2==
</syntaxhighlight>
 
  
O comando system("clear") serve para limpar a tela em sistemas operacionais do tipo Linux, e system("cls")
+
(sala de aula)
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
 
  
 
Suponha que você atrasou uma conta. A cada mês que você deixa de pagar, será cobrado 1% de juros no valor inicial.
 
Suponha que você atrasou uma conta. A cada mês que você deixa de pagar, será cobrado 1% de juros no valor inicial.
Linha 354: Linha 204:
 
- um inteiro: de 0 até 5, que são o número de meses de atraso.
 
- 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.
+
Faça um programa em C que calcule os juros (simples) de atraso.
 
 
{{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=
  
 
+
<!--
 
#Implementar um programa C que converte temperaturas de graus Fahrenheit para Celsius.  
 
#Implementar um programa C que converte temperaturas de graus Fahrenheit para Celsius.  
<!--
 
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
Linha 547: Linha 312:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
-->
 
-->
#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.
+
#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 um programa C.
#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).
 
 
#Implementar um programa C para converter um ângulo em radianos para graus.
 
#Implementar um programa C para converter um ângulo em radianos para graus.
#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.
+
 
  
  
  
 
-----
 
-----
[[Imagem:icone_voltar.png|link=MCO18703_2017_2_AULA02#Aulas]]
+
[[Imagem:icone_voltar.png|link=MCO18703_2017_2_AULA02]]
 
[[Imagem:icone_menu.png|link=MCO18703_2017_2#Aulas]]
 
[[Imagem:icone_menu.png|link=MCO18703_2017_2#Aulas]]
 
[[Imagem:icone_prox.png|link=MCO18703_2017_2_AULA04]]
 
[[Imagem:icone_prox.png|link=MCO18703_2017_2_AULA04]]

Edição atual tal como às 15h03min 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.


Exemplo 1

(sala de aula)

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.


Exemplo 2

(sala de aula)

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.

Exercícios propostos

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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 um programa C.
  6. Implementar um programa C para converter um ângulo em radianos para graus.




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