Você está na página 1de 36

Programação de Computadores I

Engenharia de Computação

2018/1

CEFET-MG

Prof. Anisio Mendes Lacerda


Conteúdo da aula

 Estruturas de Controle: o coração da programação


 Testes e condições
 if
 If-else
 ?:
 switch
 Laços
 for
 while
 do
Testes e condições

 o comando if :

if (expressão) comando;
 Significado: é um teste
Se a expressão é verdadeira
então execute os comandos que vem a seguir.

Se a expressão NÃO é verdadeira


Prossiga para o próximo comando.
Ou seja, somente o teste do comando if é feito e nada mais.

 Importante: não há ; após a expressão!


 Pode haver, mas torna-se um comando nulo.
Testes e condições

o comando if : if (expressão) comando;
#include <stdio.h>
int main () {

int num;
printf ("Digite um numero: ");
scanf ("%d",&num);

if (num > 10)


printf ("O numero é maior que 10\n"); ATENÇÃO:
defina blocos { }
if (num == 10) { para a execução
printf ("Voce acertou!\n"); de mais de um
comando!
printf ("O numero é igual a 10.");
}

if (num < 10)


printf ("O numero é menor que 10");
}
Falso e Verdadeiro em C
 Conceito de falso e verdadeiro em C
 Falso: valor igual a 0 (zero)
 Verdadeiro: valor diferente de zero: 2, -3, 0.1

 resultado de comparações (testes) em C:


 igual a zero: se resultar em FALSO
 igual a 1: se resultar em verdadeiro
Verdadeiro e falso: exemplo

#include <stdio.h>

int main ( ) {

int verdadeiro, falso;

verdadeiro = (15 < 20);

falso = (15 == 20);

printf("Verdadeiro = %d\nFalso= %d\n", verdadeiro, falso);

Saída:

Verdadeiro = 1
Falso = 0
Operadores Relacionais e Lógicos

Operador Ação
> maior que
>= maior ou igual a
< menor que
<= menor ou igual a
== igual a
!= diferente de
&& condição “E”
|| condição “OU”
! negação
else if aninhados
if (x > 0)
printf("x é positivo\n");
else if (x < 0)
cálculo de alíquota de IR
printf("x é negativo\n");
else
if (salario <= 1499.15)
printf("x = 0\n");
aliquota = 0.0;
else if (salario <= 2246.75)
aliquota = 7.5;
else if (salario <= 2995.70)
aliquota = 15.0;
else if (salario <= 3743.19)
aliquota = 22.5;
else aliquota = 27.5;
Comparações e Testes

 Como seria avaliada esta expressão?

if (10 > 4 && ! (10 < 9) || 3 <= 4)

 precedência de operadores: quais operadores têm maior


prioridade?
Precedência de operadores
ordem de precedência - menor para maior (seta)
tipo de operador operadores (lista parcial)

1.unário ! ++ -- + - Ainda
vamos ver
2. aritmético multiplicativo * / % outros
3. aritmético aditivo + - operadores!

4. relacional < > <= >=


5. relacional == !=
6. lógico and &&
7. lógico or ||
8. condicional ? :
9. assinalamento = += -= *= /+ %=
Comparações e Testes
 Como seria avaliada esta expressão?

if (10 > 4 && !(10 < 9) || 3 <= 4) Dois aspectos


a serem
observados:
 3 <= 4? verdadeiro direção da
avaliação e
 10 < 9? falso precedência de
 !(10 < 9) = ! falso = verdadeiro operadores
 verdadeiro || verdadeiro = verdadeiro
 10 > 4 ? verdadeiro
 verdadeiro && verdadeiro = verdadeiro

Conclusão: sempre colocar parênteses para definir o que deve ser feito:
retira qualquer ambiguidade e erro do programador
Exemplo: if - else

include <stdio.h>
int main() {
int a,b;
printf(“Digite 2 números: “);
scanf(“%d %d”, &a, &b);
if (b) // testa denominador
printf(“%f”, a/b);
else
printf(“Erro; divisão por zero\n”);
}
Exemplo: if – else aninhados

// programa melhor idade


#include <stdio.h>
int main() {
int i; Quantas
impressões
printf("Digite sua idade: "); serão feitas
scanf("%d",&i); para cada
if (i >= 70) idade?
printf("A melhor idade!\n");
else if (i >= 60)
printf("Você está quase lá!\n");
else if (i >= 40)
printf("Adulto maduro: aproveite!\n");
else if (i >= 18)
printf ("Adulto jovem: maioridade\n");
else printf ("Criança\n");
}
Observem a
indentação!
Exemplo: if: o maior de três números
// imprime o maior de três números lidos
# include <stdio.h>
int main() {
int a,b,c, maior;

printf("Digite o 1º Número: ");


scanf("%d",&a);

printf("Digite o 2º Número: ");


scanf("%d",&b);

printf("Digite o 3º Número: ");


scanf("%d",&c);

if (a > b)
maior = a;
else
maior = b;

if (c > maior)
maior = c;
printf("O Maior é %d\n",maior);
}
Troca valores em variáveis se necessário
// imprime dois números em ordem crescente
#include <stdio.h>

int main() {

int a,b,temp;

printf("Digite o 1º Número: "); a=8


scanf("%d",&a); b=5
printf("Digite o 2º Número: ");
scanf("%d",&b); temp = 8
// troca os valores se necessário a=5
if (a > b) { b=8
temp = a;
a = b;
b = temp;
}

printf("Ordenados: %d e %d\n",a,b);
}
A que if pertence um else

• cada else é sempre associado ao if mais próximo


• observar blocos!

Exemplo 1: Exemplo 2:

if (n > 0) if (n > 0) {
if (a > b)
if (a > b) { z = a;
z = a; }
printf("z = %d\n", z); else
} z = b;
else
z = b;

Para cada exemplo, em que situação o


comando z = b será executado?
A que if pertence um else

• cada else é sempre associado ao if mais próximo


• observar blocos!

Exemplo 1: Exemplo 2:

if (n > 0) if (n > 0) {
if (a > b)
if (a > b) { z = a;
z = a; }
printf("z = %d\n", z); else
} z = b;
else
z = b;

Ex1: quando n > 0 e a <= b


Para cada exemplo, em que situação o Ex2: quando n < 0
comando z = b será executado?
Comando condicional

forma compacta de expressar uma instrução if – else

(condição) ? expressão1 : expressão2;

 Exemplo
max = (num1 > num2) ? num1 : num2;

 equivale a
if (num1 > num2)
max = num1;
else
max = num2;

 outro exemplo
valor_absoluto = (num < 0) ? -num : num;
Comando switch
switch (expressão) {
Comando de decisão
case constante_1:
 usado quando o número de opções é
elevado comando_1;
 Lógica: se o valor da expressão for break;
igual a uma das constantes citadas, case constante_2:
então são executados os comandos a
partir do case correspondente comando_2;
break;
 Se o valor não for igual a nenhuma
constante, então são executados os case constante_n:
comandos do default, se existir
comando_n;
 o default é opcional
break;
 as constantes podem ser apenas dos
default:
tipos char, int ou long
comando_default;
}
switch – uso de break

switch (x) {

case 1:
printf("x = 1\n");
break;

case 2:
printf("x = 2\n");
break;

default:
printf("o valor de x é desconhecido\n");

}
switch com e sem break

switch (x) {

case 1:
case 2:
case 3:
printf("x é 1, 2 ou 3\n");
break;

default:
printf("x não é 1, 2 nem 3)";

}
Comando switch: calculadora de 2 operações
#include <stdio.h>
int main ( ) {
char op;
float num1, num2;

printf ("Digite um número, um operador e um número\n”);


scanf ("%f %c %f", &num1, &op, &num2);

switch (op) {

case ‘+’:
printf (" = %f", num 1 + num 2);
break;

case ‘-’:
printf (" = %f", num 1 - num 2);
break;

default:
printf ("operador inválido\n");
}
}
switch com e sem break
//calcula imposto
#include <stdio.h>

int main() {

float salario,imposto;
char sexo;
Saída:
printf("Digite seu salario: ");
scanf("%f",&salario);
Digite seu salario: 34
printf("Digite seu sexo(M/F): "); Digite seu sexo(M/F): f
scanf("%c",&sexo); Imposto = 3.40

switch (sexo) {
case 'f': Digite seu salario: 34
case 'F': Digite seu sexo(M/F): m
imposto = 0.1; Imposto = 6.80
break;

case 'm': case 'M':


imposto = 0.2;
}

printf("Imposto = %.2f\n",salario*imposto);
}
Laços for, while e do

 Chamados de estruturas de repetição


 laços ou loops

 executam um ou mais comandos de forma repetida


dependendo de uma condição

 Estruturas essenciais na programação!


Estruturas de Repetição
Como imprimir os mil primeiros números?

#include <stdio.h>
int main ( ) {
printf ("1 ");
printf ("2 ");
: : :
printf ("10 ");
1000 linhas : : :
de código
com printf! printf("1000\n");
Insano!!! }

saída: 1 2 3 4 5 6 7 8 9 10 ... 1000


Imprimir mil números
#include<stdio.h>
int main () { for

int num;
for (num = 1; num <= 1000; num++)
printf ("%d ", num);
}

#include<stdio.h>
int main () {
while
int num =1;
while (num <= 1000) {
printf ("%d ", num);
num++;
}
}
Comando for
for (início; condição; incremento) comando;
 o comando for tem 4 partes e uma variável de controle
 inicialização da variável de controle
 atribuição do valor inicial
 executada uma única vez
 teste ou condição
 condição que define se o comando será ou não executado
 avaliada a cada execução
 a execução continua se o teste for verdadeiro
 comando - ou comandos em blocos { }
 executado imediatamente após o teste (se teste é verdadeiro)
 incremento
 alteração do valor da variável de controle
 executada após o comando e antes do teste
Comando for: imprimindo apenas os pares

#include<stdio.h>
int main ( ) {

int numero;

for (numero = 2; numero <= 1000; numero += 2)

printf ("%d ", numero);


}

Saída
Testar
2 4 6 8 … 1000
todos os
códigos
Comando for
 flexibilidade: qualquer expressão de um laço “for” pode
conter várias instruções separadas por vírgula

for (x=0,y=0; x+y<100; ++x, y=y+x)

printf(“%d”,x+y);

 inicializa x e y com 0
 testa se x + y < 100
 executa comando raramente
 incrementa 1 a x, e x a y usado
Laços for infinito e vazio são válidos!
laço infinito

for (;;)
printf(“Este loop executará eternamente!\n”);

laço vazio: não há comando Não há


nada entre
o ) eo ;

for(i=0;i<10;i++) ;
Comando while

while (condição) comando;

o loop se repete enquanto a condição for verdadeira

#include <stdio.h>
int main() {

int i=0;

while (i < 10) {

printf("%d ",i);
i++;

}
}
Comando do while => faça ... enquanto

do comando;
while (condição);

 o comando é executado
 a condição é avaliada

se a condição é verdadeira, volta ao do (o comando é
executado)
 se a condição for falsa, o comando termina
 ao contrário das estruturas “for” e “while” que testam a
condição no começo do loop, “do - while” sempre a testa no
final, garantido a execução dos comandos ao menos uma vez
Comando do while
Exemplo: Término determinado pelo usuário

#include <stdio.h>
int main() {

int num;

do {

printf("Digite um número: ");


scanf("%d",&num);
Saida
} while (num < 100);
} Digite um número: 4
Digite um número: 5
Digite um número: 6
Digite um número: 8
Digite um número: 12
Digite um número: 101
Comparação entre os laços

while for do .. while

executa o comando 0 ou + vezes 0 ou + vezes 1 ou + vezes

testa a condição antes do comando antes do comando depois do comando

utlização do laço frequente frequente infrequente

Diferença entre o for e o while: o número de vezes que o


comando do for será executado é normalmente conhecido
enquanto no while é desconhecido
os comandos break e continue

 break

sai de um laço (for, while, do) e do switch
 o próximo comando a ser executado é o comando seguinte
ao laço

 continue
 vai para o início do laço
Exercícios

 Ler os capítulos 3 e 4.
 Fazer todos os exercícios dos capítulos 3 e 4.
 Implementar os exercícios das aulas e testar com variações no
código.

 Cronograma da disciplina:
 Próxima aula: Prova (caps 1,2,3,4)

Você também pode gostar