Você está na página 1de 35

Programação de Computadores I

Prof. Thiago Moraes Martins


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:
if (num == 10) { defina blocos { }
printf ("Voce acertou!\n"); para a execução de mais de um coma
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;
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 ! ++ -- + -
2. aritmético multiplicativo * / % Ainda vamos ver outros operado

3. aritmético aditivo + -
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 observ


3 <= 4? verdadeiro direção da avaliação e precedência d
10 < 9? falso
!(10 < 9) = ! falso = verdadeiro
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;
printf("Digite sua idade: "); Quantas impressões serão feitas para cada
scanf("%d",&i);
if (i >= 70)
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);
// troca os valores se necessário temp = 8
if (a > b) { a=5
temp = a; b=8
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
igual a uma das constantes citadas, break;
então são executados os comandos a
case constante_2:
partir do case correspondente
Se o valor não for igual a nenhuma comando_2;
constante, então são executados os
comandos do default, se existir break;

o default é opcional case constante_n:


as constantes podem ser apenas dos
comando_n;
tipos char, int ou long
break;

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: "); Digite seu salario: 34


scanf("%f",&salario); Digite seu sexo(M/F): f
printf("Digite seu sexo(M/F): "); Imposto = 3.40
scanf("%c",&sexo);
switch (sexo) {
case 'f': Digite seu salario: 34
case 'F': imposto = 0.1; Digite seu sexo(M/F): m
break; Imposto = 6.80
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 ");
: : :
printf("1000\n");
1000 linhas de código com printf!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
2 4 6 8 .... 1000
Testar todos os códigos
Comando for
flexibilidade: qualquer expressão de um laço “for” pode conter várias i

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 usado
incrementa 1 a x, e x a y
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 ) e o ;

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 c
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);
} while (num < 100);
} Saida

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

Você também pode gostar