1 / 38

Aula 6 - Estruturas de Controle

Aula 6 - Estruturas de Controle. Ameliara Freire ameliara.fjn@gmail.com. Tipos primitivos. Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao de programas.

Download Presentation

Aula 6 - Estruturas de Controle

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aula 6 - Estruturas de Controle Ameliara Freire ameliara.fjn@gmail.com

  2. Tipos primitivos • 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

  3. Estrutura sequencial • 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: //declaracao de variaveis //corpo do algoritmo acao 1; acao 2; ...

  4. Estruturas de selecao/decisao • 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

  5. if-else • Forma geral 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. V F C1; C2; ... Cn; D1; D2; ... Dn; Fluxo do if-else condicao if (condicao) { C1; C2; ... Cn; }else { D1; D2; ... Dm; }

  7. Exercicio • 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”.

  8. Exercicio • O que o programa abaixo faz? #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){ if(condicao 2){ if(condicao 3){ ... } } } 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){ ... }

  10. Importância da indentação • 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). if(condicao 1){ if(condicao 2){ if(condicao 3){ ... } } }

  11. if (condicao1 && condicao2 && condicao3 && condicao4){ W; } Simplificando selecoes • Como simplificar a seguinte selecao aninhada? if (condicao1) { if (condicao2) { if (condicao3) { if (condicao4) { W; } } } }

  12. Simplificando selecoes if (X == V1) { C1; } if (X == V2) { C2; } if (X == V3) { C3; } if (X == V4) { C4; } if (X == V1) { C1; }else if (X == V2) { C2; }else if (X == V3) { C3; }else if (X == V4) { C4; } Como diminuir o numero de testes? Qual a sequencia de comparacoes para atingir C4?

  13. Análise de fluxo Que comandos são executados quando 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;

  14. Análise de fluxo Que comandos são executados quando 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 fluxo Que comandos são executados quando 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 fluxo Que comandos são executados quando 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 fluxo Que comandos são executados quando 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 fluxo Que comandos são executados quando 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; }

  19. Exercício • 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.

  20. Switch-case • 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 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

  21. Switch-case (exemplo) • 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 #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!”) } }

  22. Exercicio • 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”

  23. Estruturas de repeticao • 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?

  24. Laços ou comandos 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)

  25. Repeticao com teste no início • Antes de cada execucao dos comandos de uma repeticao, a condicao é testada condicao valida while (condicao) { C1; C2; ... Cn; } comandos while condicao invalida Segue o fluxo

  26. Repeticao com teste no início • Exemplos 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); }

  27. Exercicio • 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.

  28. Exercicio-desafio • Escreva um programa que lê um número e em seguida calcula e imprime seu fatorial.

  29. Repeticao com teste no final • Depois de cada execucao dos comandos de uma repeticao, a condicao é testada • Os comandos são executados pelo menos uma vez do{ C1; C2; ... Cn; }while (condicao); do comandos while condicao valida condicao invalida Segue o fluxo

  30. Exercício • Como ficaria o algoritmo para calcular a média dos 50 alunos com teste no final usando o comando do-while?

  31. Repeticao fixa • 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.

  32. 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. for(inicializacao;condicao;incremento ){ C1; ... Cn; }

  33. Repeticao fixa i = 1 i = 1 + 1 int i; for(i= 0;i < 10;i++){ printf(“%d”,i); } printf(“%d”,i); i = 9 i = 1 i = 1 + 2 int i; for(i= 0;i < 10;i=i+2){ printf(“%d”,i); } printf(“%d”,i); i = 11

  34. Exercicio • 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.

  35. Comparacao entre repeticoes • Lacos são equivalentes 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 } }

  36. Foi feita uma pesquisa para determinar o perfil dos alunos que ingressaram em engenharia na UFPE num determinado semestre. Faça um programa que: • a) Leia um número indeterminado de alunos que prestaram vestibular. Os dados solicitados correspondem ao sexo do aluno (‘m’ para masculino e ‘f’ para feminino), se passou no vestibular e o número de vezes que este aluno prestou vestibular. No caso de conter no lugar do sexo a letra ‘x’, este é o “sinal” para parar de ler os dados. • c) Determine e imprima: • A quantidade de alunos que passaram no vestibular. • A porcentagem de alunos do sexo masculino que passaram no vestibular. • A porcentagem de alunos, independentemente do sexo, que prestou vestibular 3 ou mais vezes no período.

  37. #include <stdio.h> #include <conio.h> main( ) { char sexo, passou; intnh = 0, nr = 0, nv, ntotal = 0, nrpassou = 0; do { printf("\nDigite o sexo do aluno que prestou vestibular: "); fflush(stdin); scanf("%c", &sexo); if (sexo != 'x' && (sexo == 'm' || sexo == 'M' || sexo == 'f' || sexo == 'F')) { printf("Digite o numero de vezes que o aluno prestou vestibular: "); scanf("%d", &nv); printf("Digite se o aluno passou vestibular [s - sim ou n - nao]: "); fflush(stdin); scanf("%c", &passou); if(passou == 's' || passou == 'S') { if (sexo == 'm' || sexo == 'M') nh++; if (nv > 3) nr++; nrpassou++; ntotal++; } elseif (passou == 'n' || passou == 'N') ntotal++; } }while(sexo != 'x' && sexo != 'X'); if(ntotal > 0) { printf("\nA porcentagem dos alunos que passaram no vestubular eh: %.2f\n", ((float)nrpassou/ntotal)*100); printf("A porcentagem dos alunos do sexo masculino que passaram no vestubular eh: %.2f\n", ((float)nh/ntotal)*100); printf("A porcentagem dos alunos que prestaram vestibuar mais de 3 vezes eh: %.2f\n", ((float)nr/ntotal)*100); } else printf("Nenhum dado foi informado!"); getche(); }

  38. #include <stdio.h> #include <conio.h> main() { int n, k; float x, e, num, den; do { printf("Digite o valor de x e n (n >= 2)"); scanf("%f %d",&x,&n); }while (n < 2); num = 1; den = 1; e = num/den; for (k = 1; k <= n-1; k++) { num = num * x; den = den * k; e = e + num/den; } printf("Resultado: %.2f", e); getch(); }

More Related