Mudanças entre as edições de "AULA 6 - Programação 1 - Graduação"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(42 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 3: Linha 3:
 
*Utilizar os operadores relacionais e lógicos na programação C.
 
*Utilizar os operadores relacionais e lógicos na programação C.
 
*Utilizar o comando de decisão ''if else''.
 
*Utilizar o comando de decisão ''if else''.
*comando switch.
+
*Comando ''switch''.
  
====Operadores Relacionais e Lógicos====
+
===Operadores Relacionais e Lógicos===
 
----
 
----
 
Os operadores relacionais e lógicos são os mesmos vistos na aula anterior.
 
Os operadores relacionais e lógicos são os mesmos vistos na aula anterior.
Linha 39: Linha 39:
 
! style="background: #ffdead;" | Significado
 
! style="background: #ffdead;" | Significado
 
|-
 
|-
|&&
+
!style="text-align: center;" |&&
 
|AND (E)
 
|AND (E)
 
|-
 
|-
|<nowiki>||</nowiki>
+
!style="text-align: center;" |<nowiki>||</nowiki>
 
|OR (OU)
 
|OR (OU)
 
|-
 
|-
|!
+
!style="text-align: center;" |!
 
|NOT (NÃO)
 
|NOT (NÃO)
 
|}
 
|}
Linha 53: Linha 53:
 
=== Comandos de decisão ''if()'' e ''if() else'' ===
 
=== Comandos de decisão ''if()'' e ''if() else'' ===
 
----
 
----
 +
Estes comandos são também chamados de <b>Comandos de controle de fluxo</b>.<br>
 +
Possibilitam ao programador alterar a sequência de execução de um programa.<br>
 +
 +
O comando <b>if</b> representa uma tomada de decisão do tipo '''"SE isto ENTÃO aquilo"'''.<br>
 +
 +
Sua forma geral é:
 +
 +
::<i>if (condição) declaração;</i>
 +
 +
ou
 +
 +
::<i>if (condição)
 +
::{
 +
::declaração1;
 +
::declaração2;
 +
::}
 +
::else
 +
::{
 +
::declaração3;
 +
::declaração4;
 +
::};</i>
 +
 +
Note o uso das chaves sempre que houver mais de uma declaração.
 
<syntaxhighlight lang=c>  
 
<syntaxhighlight lang=c>  
  
Linha 98: Linha 121:
 
   scanf("%d",&y);
 
   scanf("%d",&y);
  
   if (y>x) {
+
   if (y>x)  
 +
  {
 
     printf("MSG1: y é maior que x\n");
 
     printf("MSG1: y é maior que x\n");
 
     z = y-x;
 
     z = y-x;
 
     printf("MSG2: Neste caso z =  %d\n", z);
 
     printf("MSG2: Neste caso z =  %d\n", z);
   } else {
+
   }  
 +
  else  
 +
  {
 
     printf("MSG3: y é igual ou menor que x\n");
 
     printf("MSG3: y é igual ou menor que x\n");
 
     z = x-y;
 
     z = x-y;
Linha 127: Linha 153:
 
===Tipo Char===
 
===Tipo Char===
 
----
 
----
Uma variável do tipo caracter é tratada como um número inteiro e declarada com o tipo ''char'', que na prática é um número inteiro de byte.
+
Os caracteres são um tipo de dado chamado de '''char'''. O C trata os caracteres<br>
 +
('a','b','c',...) como sendo variáveis de um ''byte'' (8 ''bits'').<br>
 +
Um ''bit'' é a menor unidade de informação que pode ser armazenada num <br>
 +
computador. Os inteiros ('''int''') e os reais ('''float''') têm um número de<br>
 +
''bytes'' maior. Podem ter 2 ''bytes'' (16 ''bits''), 4 ''bytes'' (32 ''bits'') ou<br>
 +
até mais.<br>
  
Exemplo
+
[http://pt.wikipedia.org/wiki/ASCII Consulte a tabela ASCII]
 +
 
 +
Uma variável do tipo '''caracter''' é tratada como um número inteiro e declarada <br>
 +
com o tipo ''char'', que na prática é um número inteiro de ''byte''.
 +
 
 +
;Exemplo 1
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 153: Linha 189:
  
 
[http://www.vivaolinux.com.br/dica/Limpando-a-sujeirinha-no-buffer-do-teclado Limpando sujeira do teclado]
 
[http://www.vivaolinux.com.br/dica/Limpando-a-sujeirinha-no-buffer-do-teclado Limpando sujeira do teclado]
 +
 +
 +
;Como gerar os caracteres ASCII imprimíveis na Linguagem C
 +
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
 +
main()
 +
{
 +
    int i;
 +
 +
    for (i = 32; i <= 126; i++)
 +
    {
 +
        printf("%c [%d]\n", i, i);
 +
    }
 +
}
 +
</syntaxhighlight>
  
 
===Indentação===
 
===Indentação===
Linha 160: Linha 213:
  
 
===Comando switch===
 
===Comando switch===
 
+
----
O comando switch permite controlar o fluxo de um programa de forma condicional. O comando testa uma expressão que deve resultar em um número inteiro. Uma sequência de cláusulas case permite executar uma sequência de instruções conforme o valor da expressão. Note que esta sequência de instruções pode ser interrompida por um break.
+
O comando '''switch''' permite controlar o fluxo de um programa de forma condicional.<br>
 +
O comando testa uma expressão que deve resultar em um número inteiro.<br>
 +
Uma sequência de cláusulas ''case'' permite executar um conjunto de instruções <br>
 +
conforme o valor da expressão. <br>
 +
Note que esta sequência de instruções pode ser interrompida por um ''break''.
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 197: Linha 254:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Exercício 1
+
;Exemplo 1
  
Implementar um programa de calculadora onde são fornecidos via scanf dois operandos reais e uma operação que pode ser uma das 4 operações. Com auxílio de um switch deve ser computado e mostrado o resultado da operação. Solução:
+
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>
 
<syntaxhighlight lang=c>
Linha 243: Linha 303:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Exercício 2
 
  
Elaborar uma função que recebe como parâmetro um número inteiro de 1 a 7. A função deve imprimir Domingo se o número é 1, Segunda se 2 etc. A função deve retornar -1 caso o parâmetro esteja fora da faixa e 0 caso contrário.
+
;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:
 
Solução:
  
Linha 295: Linha 358:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Exercício 3
+
;Exercício 1
 +
 
 +
Um funcionário irá receber um aumento de acordo com o seu plano de trabalho (A,B,C e D). <br>
 +
A tabela abaixo mostra o plano e o percentual de aumento:
 +
 
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
! style="background: #ffdead;" | Plano
 +
! style="background: #ffdead;" | Percentual
 +
|-
 +
!style="text-align: center;" | A
 +
!style="text-align: center;" | 5%
 +
|-
 +
!style="text-align: center;" | B
 +
!style="text-align: center;" | 10%
 +
|-
 +
!style="text-align: center;" | C
 +
!style="text-align: center;" | 15%
 +
|-
 +
!style="text-align: center;" | D
 +
!style="text-align: center;" | 20%
 +
|}
  
Um funcionário irá receber um aumento de acordo com o seu plano de trabalho, de acordo com a tabela abaixo [3]: Plano Aumento A 10% B 15% C 20% Faça um programa que leia o plano de trabalho e o salário atual de um funcionário e calcula e imprime o seu novo salário. Use o comando switch.
+
Faça um programa que leia o plano de trabalho e o salário atual de um funcionário<br>
 +
em seguida calcule e imprima o seu novo salário. Use o comando ''switch''.
  
Exercício 4
+
;Exercício 2
  
Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso. Use o comando switch.
+
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''.
  
===Exercícios===
+
===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 326: Linha 411:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
-->
 
-->
#Implementar um programa que lê um número inteiro e imprime se o número é par ou ímpar. SUGESTÃO: Usar o operador de resto.
+
#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.
 
#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.
 
#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.
 
<!--
 
<!--
Linha 414: Linha 499:
 
#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.
 
#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.
 +
 +
 +
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
! style="background: #cdc5bf;" | [[AULA 5 - Programação 1 - Graduação | << ]]
 +
! style="background: #cdc5bf;" | AULA 6
 +
! style="background: #cdc5bf;" | [[AULA 7 - Programação 1 - Graduação | >> ]]
 +
|}

Edição atual tal como às 09h40min de 11 de março de 2015

Objetivos


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

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.

 

#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");

Tipo Char


Os caracteres são um tipo de dado chamado de char. O C trata os caracteres
('a','b','c',...) como sendo variáveis de um byte (8 bits).
Um bit é a menor unidade de informação que pode ser armazenada num
computador. Os inteiros (int) e os reais (float) têm um número de
bytes maior. Podem ter 2 bytes (16 bits), 4 bytes (32 bits) ou
até mais.

Consulte a tabela ASCII

Uma variável do tipo caracter é tratada como um número inteiro e declarada
com o tipo char, que na prática é um número inteiro de byte.

Exemplo 1
#include <stdio.h>
 
main ()
{
  char x='A',y=65,w=0x41,z;
 
  scanf("%c",&z);
  printf("Caracter lido = %c\n",z);
  printf("Caracter lido = %d\n",z);
  printf("Caracter lido = %x\n",z);
  if (z==x)
      printf("Iguais 1\n");
  if (z==y)
      printf("Iguais 2\n");
  if (z==w)
      printf("Iguais 3\n");
}


Limpando sujeira do teclado


Como gerar os caracteres ASCII imprimíveis na Linguagem C
#include <stdio.h>
 
main()
{
    int i;
 
    for (i = 32; i <= 126; i++)
    {
        printf("%c [%d]\n", i, i);
    }
}

Indentação


Indentação Estilos

Comando switch


O comando switch permite controlar o fluxo de um programa de forma condicional.
O comando testa uma expressão que deve resultar em um número inteiro.
Uma sequência de cláusulas case permite executar um conjunto de instruções
conforme o valor da expressão.
Note que esta sequência de instruções pode ser interrompida por um break.

#include <stdio.h>
 
int x=1;
 
main ()
{
  int opcao;
  printf("Entre com uma opção (número inteiro)\n");
  scanf ("%d",&opcao);
  switch(opcao) {
  case 1:
          printf("opcao 1\n");
          break; /* o break força o encerramento da instrução*/
  case 2:
          printf("opcao 2\n");
          x++;  /* instrução demonstrativa apenas */
          printf("Note que pode existir ums lista de instruções\n");
          break;
  case 3:
          printf("opcao 3\n"); /* note o efeito de não ter o break */
  case 4:
          printf("opcao 4\n");
          break;
  case 5:
          printf("opcao 5\n");
          break;
  default:
          printf("opcao default\n");
          break;    /* a opção default é opcional */
  }
}
Exemplo 1

Implementar um programa de calculadora onde são fornecidos via scanf dois
operandos reais e uma operação que pode ser uma das 4 operações.
Com auxílio de um switch deve ser computado e mostrado o resultado da operação.
Solução:

#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;
  }
}
Exemplo 2

Elaborar uma função que recebe como parâmetro um número inteiro de 1 a 7.
A função deve imprimir Domingo se o número é 1, Segunda se 2, ...
A função deve retornar -1 caso o parâmetro esteja fora da faixa e 0 caso contrário.
Solução:

/* 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); 
 
}
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 2

Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso.
Use o comando switch.

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.


<< AULA 6 >>