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
Download

Aula 6 - Estrutura de controle