Ameliara Freire [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 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; ... 3 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 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”); } 5 condicao if (condicao) { C1; C2; ... Cn; }else { D1; D2; ... Dm; } V C1; C2; ... Cn; F D1; D2; ... Dn; 6 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 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”); } } 8 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){ ... } 9 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 Como simplificar a seguinte selecao aninhada? if (condicao1) { if (condicao2) { if (condicao3) { if (condicao4) { W; } } } } if (condicao1 && condicao2 && condicao3 && condicao4){ W; } 11 if (X C1; } if (X C2; } if (X C3; } if (X C4; } == V1) { == V2) { == V3) { Como diminuir o numero de testes? if (X C1; }else C2; }else C3; }else C4; } == V1) { if (X == V2) { if (X == V3) { if (X == V4) { == V4) { Qual a sequencia de comparacoes para atingir C4? 12 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 executados quando A=B=V e C=F? 13 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 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; } 15 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 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 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 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 #include <stdio.h> main() { int num; printf("Programa que verifica numero\n\n"); printf("Digite o numero: "); scanf("%d",&num); if(num%2 == 0) { printf("\n Numero par!"); } else { printf("\n Numero impar!"); } } 20 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 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 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 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 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 Antes de cada execucao dos comandos de uma repeticao, a condicao é testada while (condicao) { C1; C2; ... Cn; } condicao valida while condicao comandos invalida Segue o fluxo 26 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 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 Escreva um programa que lê um número e em seguida calcula e imprime seu fatorial. 29 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 condicao invalida comandos while condicao valida Segue o fluxo 30 Como ficaria o algoritmo para calcular a média dos 50 alunos com teste no final usando o comando do-while? 31 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 for(inicializacao;condicao;incremento ){ C1; ... Cn; } 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. 33 int i; for(i= 0;i < 10;i++){ printf(“%d”,i); } i = 1 i = 1 + 1 printf(“%d”,i); i = 9 i = 1 int i; for(i= 0;i < 10;i=i+2){ printf(“%d”,i); } i = 1 + 2 printf(“%d”,i); i = 11 34 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 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. Faça um programa em C que leia do teclado um número x real e um número n inteiro a fim de estimar o valor de ex utilizando a equação abaixo: Obs.: Garanta que n >= 2 e Imprima o resulta na tela considerando apenas 2 casas decimais. 37 #include <stdio.h> #include <conio.h> main( ) { char sexo, passou; int nh = 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++; } else if (passou == 'n' || passou == 'N') ntotal++; } }while(sexo != 'x' && sexo != 'X'); if(ntotal > 0) 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(); } 39