ameliara freire [email protected]. variaveis, constantes, leitura e escrita ainda não são...
TRANSCRIPT
Aula 6 - Estruturas de Controle
Ameliara [email protected]
Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao de programas.
Cada programa/algoritmo tem um fluxo de execucao que pode ser definido usando termos especificos de uma linguagem◦ Estrutura sequencial◦ Estrutura de selecao◦ Estrutura de repeticao
2
Tipos primitivos
Impõe uma ordem de cima para baixo e da esquerda para a direita na execucao de um algoritmo.
As acoes são separadas por “;” Formato geral:
3
Estrutura sequencial
//declaracao de variaveis //corpo do algoritmoacao 1;acao 2;...
Permite o uso de condicoes para escolher entre execucoes de diferentes blocos
Condicoes são expressoes lógicas relacionais que, quando avaliadas, produzem valor lógico (booleano)
Comandos:◦ if◦ if – else◦ switch - case
4
Estruturas de selecao/decisao
Forma geral
5
if-else
if(condicao){ //sequencia de comandos se verdadeiro}else{ // o else é opcional //sequencia de comandos se falso}
if(media > 7.0){ printf(“Aprovado”);}else{ printf(“Final ou reprovado”);}
6
Fluxo do if-else
if (condicao) { C1; C2; ... Cn;}else { D1; D2; ... Dm;}
condicao
C1; C2;...Cn;
V
D1; D2;...Dn;
F
Altere a funcao que lê as notas do aluno e imprime a média para que a mensagem impressa se comporte da seguinte maneira:◦ Se a média foi maior ou igual a 7.0 a mensagem
deve ser “Aprovado”. Caso contrário a mensagem deve ser “Estude mais para a final”.
7
Exercicio
O que o programa abaixo faz?
8
Exercicio
#include <stdio.h>main(){ int a,b; printf(“Digite 2 números: “); scanf(“%d %d”,&a,&b); if (b){
printf(“%f”,a/b); }else {
printf(“Não posso fazer a divisao”); }}
9
Variacoes do if-else
if(condicao 1){ C1}else if (condicao 2){ C2}else if(condicao 3){ C3}else{ C4}
if(condicao 1){ if(condicao 2){ if(condicao 3){ ... } }}
if(condicao 1){ ...}if(condicao 2){ ...}if(condicao 3){ ...}
Cada código que estiver dentro de um bloco deve estar um nível a mais de indentação à direita do bloco mais externo.
Indentar o código é FUNDAMENTAL para compreensão do escopo de código (identificar onde começa e onde termina).
10
Importância da indentação
if(condicao 1){ if(condicao 2){ if(condicao 3){ ... } }}
Como simplificar a seguinte selecao aninhada?
11
Simplificando selecoes
if (condicao1) { if (condicao2) { if (condicao3) { if (condicao4) { W; } } }}
if (condicao1 && condicao2 && condicao3 && condicao4){ W;}
12
Simplificando selecoes
if (X == V1) { C1;}if (X == V2) { C2;}if (X == V3) { C3;}if (X == V4) { C4;}
Como diminuiro numero de testes?
if (X == V1) { C1;}else if (X == V2) { C2;}else if (X == V3) { C3;}else if (X == V4) { C4;}
Qual a sequencia decomparacoespara atingirC4?
13
Análise de fluxo
int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;
Que comandos são executadosquando A=B=V e C=F?
14
Análise de fluxoQue comandos são executadosquando A=B=V e C=F?
{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}
15
Análise de fluxoQue comandos são executadosquando A=C=F e B=V?
{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}
16
Análise de fluxoQue comandos são executadosquando A=C=F e B=V?
{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}
17
Análise de fluxoQue comandos são executadosquando A=C=F e B=V?
{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}
18
Análise de fluxoQue comandos são executadosquando A=C=F e B=V?
{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}
Escreva um programa que lê a idade de um usuario e em seguida diz se o usuário é ou não maior de idade.
Escreva um programa que lê um número inteiro e diz se o número é par ou ímpar.
Escreva um programa que lê tres numeros e em seguida imprime quantos deles são iguais.
Escreva um programa que lê três número s inteiros e em seguida imprime os números em ordem crescente.
19
Exercício
Multipla escolha: quando se tem um conjunto de valores discretos a serem testados, onde cada valor corresponde a uma acao.
Otimizacao das escolhas se-senao-se
20
Switch-case
switch (<variável>) {case <valor 1>:
<instruções>;[break;]
case <valor 2> :< instruções>;[break;]
...[default:<instruções>;]
}
OBS:• “ variável” deve ser int ou
char;
• “break” serve para implementar escolha disjunta
Escreva um programa C que receba 2 números e um caractere operador (+, -, * ou /) do teclado, realize a operação determinada entre eles e imprima na tela o resultado
21
Switch-case (exemplo)
#include <stdio.h>int main ( ) { char op; float num1, num2; printf(“Digite um número, um operador e um número:”); scanf (“ %f %c %f”, &num1, &op, &num2); switch (op) { case ‘+’: printf (“ = %f”, num1 + num2); break; case ‘-’: printf (“ = %f”, num1 - num2); break; default: printf (“ Operador inválido!”) }}
Escreva uma funcao que solicita o usuario digitar um numero de 1 à 7. Em seguida a funcao imprime uma mensagem de acordo com o numero digitado:◦ 1 – “Voce pertence ao curso de Agronomia”◦ 2 – “Voce pertence ao curso de Veterinária”◦ 3 – “Voce pertence ao curso de Zootecnia”◦ 4 – “Voce pertence ao curso de Pedagogia”◦ 5 – “Voce pertence ao curso de Letras”◦ 6 – “Voce pertence ao curso de Engenharia de Alimentos”◦ 7 – “Voce pertence ao curso de CIENCIA DA
COMPUTACAO!”◦ Qualquer outro numero - “Voce nao pertence a curso
algum da UAG”
22
Exercicio
Imagine um procedimento (algoritmo) pronto para calcular a média de um aluno.
O que fazer para calcular a média de todos os alunos de uma turma?
23
Estruturas de repeticao
São construcoes que permitem descrever acoes repetitivas
Também conhecido por loop. O numero de repeticoes pode ser
indeterminado? O número de repeticoes pode ser infinito? Repeticao com numero de vezes
indeterminado◦ Laço com teste no inicio (while)◦ Laço com teste no final (do-while)
Repeticao com numero de vezes determinado ◦ Laço (for)
24
Laços ou comandos de repeticao
Antes de cada execucao dos comandos de uma repeticao, a condicao é testada
25
Repeticao com teste no início
while (condicao) { C1; C2; ... Cn;}
while comandos
Segue o fluxo
condicao valida
condicao invalida
Exemplos
26
Repeticao com teste no início
int i = 0;while (i < 10) { printf(“Valor de i: %d ”, i); i++;}
int i = 0;while (i < 10) { printf(“Valor de i: %d ”, i);}
Como seria um programa para calcular a média de 50 alunos da uma turma?
Escreva um programa que calcula o produto de dois números lidos sem usar o operador de multiplicação (‘*’).
Construa um algoritmo que fica lendo indefinidamente numeros positivos. Caso o numero lido seja igual a 0 o algoritmo pára de ler números e imprime a média dos números pares lidos anteriormente.
27
Exercicio
Escreva um programa que lê um número e em seguida calcula e imprime seu fatorial.
28
Exercicio-desafio
Depois de cada execucao dos comandos de uma repeticao, a condicao é testada
Os comandos são executados pelo menos uma vez
29
Repeticao com teste no final
do { C1; C2; ... Cn;}while (condicao);
comandos
Segue o fluxo
while condicao validacondicao invalida
do
Como ficaria o algoritmo para calcular a média dos 50 alunos com teste no final usando o comando do-while?
30
Exercício
O numero de vezes da repeticao é determinado.
Possui uma variavel de controle cujo valor varia de um valor inicial a um valor final, de acordo com um determinado passo
A condicao de parada é o numero de vezes da repeticao.
31
Repeticao fixa
Inicialização:◦ Expressão de atribuição. Sempre é executada uma única
vez. Teste de Condição:
◦ Condição que controla a execução do laço. É sempre avaliada a cada execução. Se Verdadeiro continua a execução. Se falso pára a execução.
Incremento:◦ Define como a variável de controle será alterada.◦ É sempre executada após a execução do corpo do laço.
32
Repeticao fixa
for(inicializacao;condicao;incremento ){ C1; ... Cn;}
33
Repeticao fixa
int i;for(i= 0;i < 10;i++){ printf(“%d”,i);}
printf(“%d”,i);
i = 1
i = 1 + 2
i = 9
i = 11
int i;for(i= 0;i < 10;i=i+2){ printf(“%d”,i);}
i = 1
printf(“%d”,i);
i = 1 + 1
Como ficaria o algoritmo para calcular a media dos 50 alunos usando repeticao fixa?
Escreva um algoritmo que lê 50 números inteiros e em seguida mostra a soma de todos os ímpares lidos.
Altere o algoritmo anterior para que ele considere apenas a soma dos ímpares que estejam entre 100 e 200.
Construa um algoritmo que leia um conjunto de 20 numeros inteiros e mostre qual foi o maior e o menor valor fornecido.
34
Exercicio
Lacos são equivalentes
35
Comparacao entre repeticoes
se (numero de vezes é conhecido){ usa-se o for}senao{ se (teste precisa ser feito no inicio){ usa-se while }senao{ usa-se do-while }}