Você está na página 1de 28

5.

A Lógica da programação
5.1 Introdução

5- A Lógica da Programação  Neste tópico começaremos a ver em detalhes, a lógica que está
por traz dos programas computacionais. Para tanto vamos, ao
Comandos If-else mesmo tempo, aprender a fazer algoritmos e a colocá-los em
linguagem C.

Unesp – Campus de Guaratinguetá Exemplo 1: Dados os comprimentos dos lados de um triângulo (nas
variáveis LADO1 e LADO2), fazer um algoritmo para determinar e
imprimir o comprimento do terceiro lado (HIPOTENUSA).
Curso de Programação Computadores Suponha que todas as variáveis sejam inteiras.
Profa. Cassilda Ribeiro
hipotenusa ?
lado1

1 lado2 H = (L12+L22)1/2 2

5.1 Introdução 5.1 Introdução


Declarações
Algoritmo Código C
Algoritmo: Pitágoras
Algoritmo: Pitágoras // Dados os 2 catetos de um triângulo,
variáveis LADO1, LADO2, Q1, Q2: inteiros. //este programa calcula a hipotenusa!
HIPOTENUSA:real; #include <stdio.h>
Inicio Declarar variáveis; #include <stdlib.h>
1. [Ler dados conhecidos] #include <math.h>
Leia (LADO1, LADO2); Inicio main()
2. [Calcular os quadrados dos lados conhecidos] Leia (L1, L2); { //Inicio
float L1, L2, H, Q1,Q2;
Q1  LADO1 ↑ 2;
Q1  L1 ↑ 2; printf(“Forneça L1 e L2:”);
Q2  LADO2 ↑ 2; scanf(“%f%f”,&L1,&L2);
3. [Calcular o comprimento do terceiro lado] Q2  L2 ↑ 2;
Q1=pow(L1,2);
HIPOTENUSA SQRT (Q1 + Q2); H SQRT (Q1 + Q2); Q2=pow(L2,2);
4. [Sair resultado] H = sqrt(Q1 + Q2);
Escreva (´Lados =`, LADO1, LADO2, HIPOTENUSA); Escreva(L1,L2,H); printf(“L1=%f, L2=%f, H=%f \n”,L1,L2,H);
Fim Fim system(“pause”);
Instruções 3
}//Fim 4
5.2. Rastreando um Algoritmo 5.2. Rastreando um Algoritmo
5.2. Rastreando um Algoritmo Exemplo 2: Rastrear Pitágoras Algoritmo
Suponha que conheçamos os Algoritmo: Pitágoras
Depois de elaborado um algoritmo, como saber se
ele faz o que se supõe que faça? dois catetos de um triângulo
Declarar variáveis;
retângulos cujas medidas são
Para se descobrir isto, deve-se rastrear o algoritmo, 3cm e 4cm. Então os dados de
isto é, executá-lo manualmente, com dados numéricos, Inicio
entrada são 3 e 4. Leia (L1, L2);
utilizando lápis e papel para registrar os valores
tomados pelas variáveis a cada passo. Passo L1 L2 Q1 Q2 H Saída
Q1  L1 ↑ 2; 1
L1=3 1 3 4 9 ? ? ? Q2  L2 ↑ 2; 2
Algoritmo H=5
L2=4 2 3 4 9 16 ? ? H SQRT (Q1 + Q2); 3
3 3 4 9 16 5 ?
O exemplo 2 a seguir ilustra o rastreamento do Escreva(L1,L2,H); 4
algoritmo do exemplo 1.
4 3 4 9 16 5 3,4,5 Fim
5 6
4

5.2. Rastreando um Algoritmo 5.2. Rastreando um Algoritmo

Exemplo 3: Calcular Média Exemplo 3: Calcular Média Algoritmo


Algoritmo
Fazer um algorítmo que leia Fazer um algorítmo que leia Algoritmo Notas
Algoritmo Notas
quatro notas (NOTA1, quatro notas (NOTA1, Variáveis N1, N2, N3, N4, MEDIA;
Variáveis N1, N2, N3, N4, MEDIA;
NOTA2, NOTA3 e NOTA4 ) e NOTA2, NOTA3 e NOTA4 ) e Inicio
Inicio
calcula a nota média, calcula a nota média, 1. [Ler as notas individuais]
1. [Ler as notas individuais]
armazena o resultado na armazena o resultado na Escreva(“digite as 4 notas”)
Escreva(“digite as 4 notas”)
variável MEDIA. O variável MEDIA. O Leia ( N1, N2, N3, N4 );
Leia ( N1, N2, N3, N4 );
resultado final deve ser resultado final deve ser 2. [Calcular a nota média]
2. [Calcular a nota média]
impresso com uma impresso com uma MEDIA ( N1 + N2 + N3 + N4 ) / 4.0;
MEDIA ( N1 + N2 + N3 + N4 ) / 4.0;
mensagem explicativa. Toda mensagem explicativa. Toda 3. [Sair resultados]
3. [Sair resultados]
as variáveis são reais. Escreva (´Nota Final =`, MEDIA);
as variáveis são reais. Escreva (´Nota Final =`, MEDIA);
Fim
Fim
Aqui está sendo dada uma ordem para que o computador
Aqui está sendo dada uma ordem para que o computador leia os
7 escreva na tela o valor da média que ele calculou. 8
dados necessários para calcular a média.
5.2. Rastreando um Algoritmo 5.3. Trabalhando com a Linguagem C
Exemplo 3: Código C Uma outra forma de escrever em Linguagem C o programa
Passo N1 N2 N3 N4 M Saída associado ao algoritmo que resolve o Exemplo 3 é:
include<stdlib.h>
include<stdio.h> 1 6.0 6.5 8.0 9.5 ? ? /* -------------------------------------------------*
main() * Programa do exemplo 3- Tópico 5 *
2 6.0 6.5 8.0 9.5 7.5 ? Aqui está sendo dada
{ * Cálculo da média final entre 4 notas * uma ordem para que o
3 6.0 6.5 8.0 9.5 7.5 7.5 *--------------------------------------------------*/
float n1, n2, n3, n4,media; computador escreva a
printf(“Forneça as notas n1, n2, n3 e n4:”); #include <stdio.h> frase “DIGITE A NOTA1”
scanf(“%f%f%f%f”,&n1,&n2,&n3,&n4); 1 #include <stdlib.h>
media = (n1 + n2 + n3 + n2)/4.0; 2 main()
printf(“ Nota Final = %f \n”,media); 3 { Aqui está sendo dada
system(“pause”); uma ordem para que o
float N1, N2, N3, N4, MEDIA; computador guarde na
} printf("DIGITE A NOTA1 "); memória a NOTA1
que foi digitada
scanf("%f",&N1);
9 continua na pg. seguinte 10

5.3. Trabalhando com a Linguagem C 5.3. Trabalhando com a Linguagem C


printf("NOTA1=%f\n",NOTA1);
Ao se executar o programa do exemplo 3, aparece a
printf("\nDIGITE A NOTA2 "); Aqui está sendo dada uma ordem
para que o computador escreva a
seguinte tela:
scanf("%f",&N2); frase “NOTA1=”, seguido do valor
printf("NOTA2=%f\n",NOTA2); da variável que está armazenado na
memória.
printf("\nDIGITE A NOTA3 ");
scanf("%f",&N3);
printf("NOTA3=%f\n“ ,NOTA3);
Aqui está sendo calculado
printf("\nDIGITE A NOTA4 "); o valor da MEDIA
scanf("%f",&N4);
printf("NOTA4=%f\n",NOTA4);
MEDIA = (N1+N2+N3+N4)/4.0; Aqui está sendo dada uma
ordem para que o
printf("\n "); computador escreva a
printf("NOTA FINAL = %f\n", MEDIA); frase “NOTA FINAL=”,
seguido do valor da
system("pause"); MEDIA que foi calculada
}
anteriormente.
11 12
5.3. Trabalhando com a Linguagem C 5.3. Trabalhando com a Linguagem C
Exemplo 4: Fazer um algoritmo que leia um valor em dólar e o /*====================================
converta para real. * Este eh o programa do exemplo 4- tópico 5 *
*====================================*/
Algoritmo Conversão #include <stdio.h> Ordena ao
#include <stdlib.h> Ordena ao computador que
Variáveis: Qdolar, Qreal,taxa: real escreva na tela a frase em computador que
main() leia e armazene
Inicio vermelho
{ na memória o
1.[Ler a taxa e quantidade Qdolar] float taxa, Qdolar, Qreal; número digitado
O Exemplo 4 em //ler dados pelo usuário
Leia (taxa, Qdolar)
Linguagem C torna-se: printf("digite o valor da taxa em reais\n");
2. [Converter dolar para real] scanf("%f",&taxa);
Qreal  taxa * Qdolar. printf("digite a quantidade de dolares que deseja trocar\n");
3. [Sair resultados] scanf("%f",&Qdolar);
//Converter dolar para real
Escreva (Qdolar“dolar =Qreal reais) Qreal = taxa * Qdolar;
Fim // Sair resultados
printf ("%.2f dolares = %.2f reais\n",Qdolar,Qreal);
system("pause");
13 }//Fim 14

5.3. Trabalhando com a Linguagem C 5.3. Trabalhando com a Linguagem C


/*======================================
Exemplo 5: Fazer um algoritmo que leia uma quantidade de
* Este é o programa do exemplo 5 - tópico 5 *
chuvas em polegadas e converta para milímetros. Todas as
*======================================*/
variáveis são reais. Todas as variáveis em questão são reais.
# include <stdio.h>
# include <stdlib.h>
Algoritmo Converte_Chuva main() Programa do Exemplo 5
Variáveis: POL, MILIM: real. {
Inicio float POL,MILIM;
1. [Ler dados conhecidos] printf("Digite o valor da chuva em polegadas=");
Escreva (“ Digite o valor da chuva em polegadas”) Colocando o Exemplo 5 scanf("%f",&POL);
em Linguagem C
Leia ( POL ) printf("\n ");
2. [Converter polegadas em milímetros] printf("Chuva em Polegadas = %f\n", POL);
MILIM  25.4 * POL MILIM = 25.4 * POL;
3. [Sair resultado] printf ("\n");
Escreva (´Quantidade de chuva em mm =`,MILIMETROS) printf("Chuva em Milímetros = %f\n", MILIM);
Fim printf("\n ");
15
system("pause"); 16
}
5.3. Trabalhando com a Linguagem C 5.3. Trabalhando com a Linguagem C : Algoritmo do Exemplo 6

Programa do Exemplo 5 : Continuação Exemplo 6: Fazer um algoritmo que leia uma quantidade de
itens comprados ( HAM, CHE, FRITAS, REFRI, MILK ), bem
como seus custos ( C1, C2, C3, C4, C5 ) e calcule a conta
Ao se executar o programa do exemplo 5, aparece a final. As variáveis relativas a itens comprados são inteiras e as
seguinte tela: variáveis relativas a custo são reais.

Algoritmo Lanchonete
Variáveis: HAM , CHE , C1, FRITAS, REFRI, MILK: inteiro
CONTA, C1, C2, C3, C4, C5, CUSTO1 CUSTO2 CUSTO3 CUSTO4, CUSTO5 : real.
inicio
1.[Ler dados de entrada]
Leia ( HAM , C1 )
Leia ( CHE , C2 )
Leia (FRITAS , C3 )
Leia ( REFRI , C4 )
Leia ( MILK , C5 )
17 18

5.3. Trabalhando com a Linguagem C : Algoritmo do Exemplo 6 5.3. Trabalhando com a Linguagem C : Programa do Exemplo 6

2. [Calcular o custo total de cada item] /* ------------------------------------


CUSTO1  HAM * C1 * Programa do exemplo 6 - Tópico 5 *
CUSTO2  CHE * C2 * Cálculo da Conta de uma Lanchonete *
CUSTO3  FRITAS * C3 *-------------------------------------*/
CUSTO4  REFRI * C4 #include <stdio.h>
CUSTO5  MILK * C5 #include <stdlib.h>
3. [Calcular a conta final] main()
CONTA  CUSTO1 + CUSTO2 + CUSTO3 + CUSTO4 + CUSTO5 {
4. [Impressão de resultados] float C1, C2, C3, C4,C5, CONTA; //Declara variáveis
Escreva (´Hambúrguer (R$´,C1`)`,CUSTO1) float CUSTO1, CUSTO2, CUSTO3, CUSTO4,CUSTO5;
Escreva (´Chesburguer (R$´,C2`)`,CUSTO2) int HAM, CHE, FRITAS, REFRI, MILK;
Escreva (´Batatas fritas (R$´,C3`)`,CUSTO3) Colocando o Exemplo 6 /*Ler dados de entrada*/
Escreva (´Refrigerantes (R$´,C4`)`,CUSTO4) em Linguagem C printf("DIGITE A quantidade de hamburgueres\n");
Escreva (´Milkshake (R$´,C5`)`,CUSTO5) printf("consumida e o seu custo unitario ");
Escreva (´Total`,CONTA) scanf("%d%f",&HAM,&C1);
Saída 19 printf("\n\n"); 20
Programa do Exemplo 6 : Continuação Programa do Exemplo 6 : Continuação

printf("DIGITE A quantidade de Chesburgueres\n"); printf("DIGITE A quantidade de Milkshake\n");


printf("consumida e o seu custo unitario "); printf("consumida e o seu custo unitario ");
scanf("%d%f",&CHE,&C2); scanf("%d%f",&MILK,&C5);
printf("\n\n"); /*Calcular o custo de cada item*/
printf("DIGITE A quantidade de Fritas\n");
CUSTO1 = HAM * C1;
printf("consumida e o seu custo unitario ");
CUSTO2 = CHE * C2;
scanf("%d%f",&FRITAS,&C3);
CUSTO3 = FRITAS * C3;
printf("\n\n");
CUSTO4 = REFRI * C4;
printf("DIGITE A quantidade de Refrigerantes\n");
CUSTO5 = MILK * C5;
printf("consumida e o seu custo unitario ");
scanf("%d%f",&REFRI,&C4); /*Calcular a conta final*/
printf("\n\n"); CONTA = CUSTO1 + CUSTO2 + CUSTO3 + CUSTO4 + CUSTO5;

21 22

Programa do Exemplo 6 : Continuação Programa do Exemplo 6 : Continuação

/*Impressão de resultados*/
printf("===================================\n\n");
printf ("Hamburguer (%f R$) = %f\n",C1,CUSTO1);
printf ("Chesburguer (%f R$) = %f\n",C2,CUSTO2);
printf ("Batatas fritas(%f R$) = %f\n",C3,CUSTO3);
printf ("Refrigerantes (%f R$) = %f\n",C4,CUSTO4);
printf ("Milkshake (%f R$) = %f\n",C5,CUSTO5);
printf ("==================Total = %f\n\n",CONTA);
system("pause");
}

Ao se executar o programa do exemplo 6, aparece a


seguinte tela:
23 24
5.4 Seleção de Ações Alternativas 5.4 Seleção de Ações Alternativas

Suponha que temos duas variáveis numéricas, A e B, Em Linguagem Algorítmica a construção Se_Então_Senão
cujos valores são diferentes, e desejamos imprimir a tem o seguinte formato:
maior delas. Se “condição”
Neste caso utilizamos uma construção chamada então “alternativa verdadeira”
Se_Então_Senão senão “alternativa falsa”

SIM NÃO Exemplo:


A >B?
Se A > B
então Escreva ( A )
escreva (A) escreva (B)
senão Escreva ( B )
25 26

5.4 Seleção de Ações Alternativas 5.4 Seleção de Ações Alternativas


 Um conjunto especial de operadores relacionais é Exemplo 7: Fazer um algorítmo em que dadas as três notas individuais em
solicitado para expressar condições. São eles: três aspectos do ano escolar (Lab, Exame_inter, Exame_final) para um estudante
chamado Nome. O algorítmo deve calcular a média final com pesos de 20%,
Operador em Operador em 30% e 50%, respectivamente. O relatório de saída deve fornecer o nome do aluno,
Linguagem Linguagem C Significado suas notas individuais,sua média final e uma mensagem caso o aluno esteja
Algorítmica reprovado. A variável Média é real.
> > maior do que
Algoritmo Relatório
< < menor do que Variáveis: Lab, Exame_inter, Exame_final, Média : reais
= == igual a Nome : cadeia de caractere
≥ >= maior do que ou igual a Início
1. [Ler dados]
≤ <= menor do que ou igual a Leia [Nome, Lab, Exame_inter, Exame_final]
2. [Calcular a média]
≠ != não igual ( diferente de )
Média  0.2 * Lab + 0.3 * Exame_inter + 0.5 * Exame_final
27 28
5.4 Seleção de Ações Alternativas 5.4 Seleção de Ações Alternativas

Exemplo 7: Continuação.... Exemplo 8: Faça um algoritmo que leia dois valores, determine o maior
deles e o imprima com uma mensagem de identificação. Assumir que
todas as variáveis são inteiras.
3. [Imprimir resultados]
Escreva (´Nome estudante:´, Nome) Algoritmo Mostre
Escreva (´Nota Laboratório:`, Lab) Variáveis: Valor1, Valor2, Max : inteiras 3. [Imprimir o maior valor]
Escreva (´Exame Intermediário:`, Exame_inter) Início Escreva (´Maior Valor =`, Max)
Escreva (´Exame Final`, Exame_final) 1. [Ler os valores] 4. [Terminar]
Escreva ( ´Média Final:`, Média) Leia ( Valor1, Valor2 ) Fim
4. [Verificar se tem aluno reprovado] 2. [Determinar o maior]
Se Media < 5.0 Se Valor1 > Valor2
então Escreva (´Reprovado`) então Max  Valor1
Escreva (´O Primeiro valor é maior`)
Fim
senão Max  Valor2
29
Escreva (´O Segundo Valor é maior`) 30

5.4 Seleção de Ações Alternativas 5.4.1 Diagrama de blocos - Fluxograma

5.4.1 Diagrama de blocos - Fluxograma


Símbolo Descrição
 Como já foi dito anteriormente, antes de se fazer um programa,
Inicio/Fim Delimita o início ou o final das instruções.
deve-se fazer um algoritmo de problema. Para tanto temos
utilizado uma linguagem algorítmica que também chamamos de Leitura Leitura de dados (através do teclado, pex).
portugol.
Cond Avaliação de uma condição.
 Uma outra maneira de se escrever algoritmos é através de
fluxograma ou diagrama de bloco. No fluxograma, as ações a Resultados Apresentação de resultados.
serem executadas são representadas de maneira gráfica.
Operacoes Atribuição ou operação de processamento.
 Embora a linguagem algorítmica seja mais utilizada, existem
vários livros que utilizam o fluxograma para explicar partes do Fluxo de execução.
algoritmo, devido ao seu forte apelo visual
Conexão entre partes do algoritmo.
 A seguir mostramos rapidamente as ferramentas utilizadas para a
confecção de um fluxograma. 31 32
5.4.1 Diagrama de blocos - Fluxograma 5.4.2 Seleção de Ações Alternativas : Ses Encaixados

Problema Maior 5.4.2 Seleção de Ações Alternativas : Ses Encaixados


Inicio
Suponha duas variáveis
numéricas, A e B, com Em algumas aplicações, uma das alternativas de uma
Ler A,B; estrutura Se_Então_Senão pode envolver outras decisões
valores diferentes, e
deseja-se imprimir a Exemplo 9 : Faça um algoritmo que leia três números A, B e C e imprima
maior delas. o valor do maior. Assumir valores distintos e reais.
Se A>B
Algoritmo Maior V F
Algorítmo Max_3
Variaveis A, B;
Inicio Variáveis A, B, C, Max : reais
Escreva(A); Escreva(B);
1. Ler(A,B); Início
2. Se (A > B) 1. [Ler dados]
entao imprimir A; Leia (A, B, C)
Senao imprimir B;
Fim Final 33 34

5.4.2 Seleção de Ações Alternativas : Ses Encaixados 5.4.2 Seleção de Ações Alternativas : Ses Encaixados

Exemplo 9: Continuação.... Inicio

2. [Determinar o maior valor, comparando pares]


Cuidado com a paragrafação
Ler A,B,C;
Se A > B V
Se A > B
F Ex1: Se C1
Então Se A > C onde: C1 e C2 significam
então Se C2
então Max  A ( A > B,A > C ) condições e S1 e S2,
então S1 comandos
senão Max  C ( C > A > B ) V V
Senão Se B > C
Se A > C Se B > C senão S2
então Max  B ( B > A, B > C ) F F

senão Max  C ( C > B > A ) A; C; B; C; Em que condições S2 é executado?


3. [Imprimir o maior valor]
Escreva (´Maior valor =`, Max) Isso não fica claro.
4. [Terminar] Escreva(Max);
35 36
Fim Final
5.4.2 Seleção de Ações Alternativas : Ses Encaixados 5.4.2 Seleção de Ações Alternativas : Ses Encaixados

Ex2: Exemplo 10: Uma empresa decidiu dar uma gratificação de Natal
a seus funcionários. Esta gratificação é calculada com base no
Se C1 Se C1 número de horas extras trabalhadas e o número de horas de
então Se C2 então Se C2 falta. A fórmula para se calcular o prêmio é a seguinte:
então S1 então S1 Extra – 2 /3 * Faltas.
O prêmio é distribuído segundo a tabela a seguir:
senão S2 senão S2

Extra – 2/3 * Faltas Prêmio (R$) Pede-se um algoritmo e


Neste exemplo, o comando
Neste exemplo, o comando > 40 horas 50 um programa em C, para
Se C2 só será executado ler informações de
se a condição C1 for Se C2 só será executado se a > 30 mas <= 40 horas 40
funcionários e calcular o
Verdadeira. Se C1 for falsa, condição C1 for verdadeira. Se > 20 mas <= 30 horas 30 prêmio a ser dado.
nenhum comando será ela for falsa, o comando S2 será
> 10 mas <= 20 horas 20
Executado. executado
<= 10 horas 10
37 38

Exemplo 10: continuação Exemplo 10: continuação


Algoritmo Bônus
Variáveis: Extras, Faltas, Pagamentos : reais Se A > 40
V  Podemos melhorar este algorítmo, calculando o valor do teste
Nome : cadeia (Extra – (2/3.0) * Faltas) somente uma vez. Para isto vamos
Início F P←
←50; introduzir uma variável temporária (Valor_teste).
1. [Ler informações de um funcionário] V
Leia (Nome, Extras, Faltas) Se A > 30 2.1 [Calcular o valor teste]
2. [Calcular o prêmio] Valor_teste  Extras – (2/3.0) * Faltas
P←
←40;
Se Extras – (2/3.0) * Faltas > 40 F 2.2 [Calcular o prêmio]
Então Pagamento  50
V Se (Valor_teste > 40)
Senão Se Extras – (2/3.0) * Faltas >30 Se A > 20
Então Pagamento  40 Então Pagamento  50
Senão Se Extras – (2/3.0) * Faltas >20 P←
←30; Senão Se Valor_teste > 30
F
Então Pagamento  30 Então Pagamento  40
Senão Se Extras – (2/3.0)*Faltas>10 V
Se A > 10 Senão Se Valor_teste > 20
Então Pagamento  20
P←
←20; Então Pagamento  30
Senão Pagamento  10
3. [Imprimir resultados] F Senão Se Valor_teste > 10
Escreva ( ´Prêmio para`, Nome,`=R$`, Pagamento) Então Pagamento 20
Fim P←
←10; 39 Senão Pagamento 10 40
5.4.3 Seleção de Ações Alternativas: O Comando if 5.4.3 Seleção de Ações Alternativas: O Comando if

Em linguagem C a construção Se – Então - Senão OBS: Quando dentro do comando if, forem executados
é feita através do: mais de um comando (bloco de comando) é
necessário colocar chaves, {}, para marcar o
Comando if inicio e o fim dos comandos a serem executados.
Falso = 0 Aqui tem duas ações
# Sintaxe: Verdadeiro ≠ 0 sendo feitas dentro da

if (expressão é verdadeira) # Exemplo: condição verdadeira

execute comando ou bloco de comandos Chave marcando o inicio if (contador >9)


da condição verdadeira
{
# Exemplo: contador = 0;
if (contador > 9) Chave marcando o fim soma = 32
contador = 0; da condição verdadeira }
41 42

5.4.3 Seleção de Ações Alternativas: O Comando if 5.4.4 Seleção de Ações Alternativas: O Comando else

#include <stdio.h>
Exemplo 11 #include <stdlib.h> O Comando else pode ser considerado um complemento do
main () comando if, cujos comandos serão executados
Fazer um { /* Inicio do programa */ SOMENTE SE a expressão, especificada após o
programa em C int num; comando if, for 0 (falsa).
que leia um printf ("Digite um numero: ");
scanf ("%d",&num);
número e impri- # Sintaxe:
if (num > 10)
ma uma mensa- printf ("\n\n O numero digitado eh maior que 10");
Falso = 0
Verdadeiro ≠ 0
gem dizendo se if (num == 10) { /* Inicio do if */ if (expressão é verdadeira)
ele é maior que printf ("\n\n Voce acertou!\n"); execute comando1 ou bloco1 de comandos
10, menor ou printf ("O numero digitado e igual a 10.");
igual a 10. } /* fim do if*/ else
if (num < 10)
printf ("\n\n O numero digitado eh menor que 10");
execute comando2 ou bloco2 de comandos
Observe a
system("pause");
chave {
}
marcando o
43 44
inicio do if
5.4.4 Seleção de Ações Alternativas: O Comando else 5.4.5 Seleção de Ações Alternativas: if-else encaixados

#include <stdio.h>  É possível aninhar construções do tipo if-else em


#include <stdlib.h>
main ( )
diversos níveis.
{
int num; Exemplo 12 if (cond1) /* if1 */
printf ("Digite um numero: "); if (cond2) /* if2 */
scanf ("%d", &num); Refazer o programa comando if2 ;
if (num == 10) {//inicio então else /* else2 */
printf ("\n\n Voce acertou!\n"); em C do exemplo 11 comando else2 ;
printf ("O numero e igual a 10.\n");
}//fim então
anterior, utilizando else /* else1 */
if (cond3) /* if3 */
else {//inicio senão o comando else if (cond4) /* if4 */
printf ("\n\n Voce errou!\n"); comando if4 ;
printf ("O numero eh diferente de 10.\\nn"); else /* else4 */
}//fim senão comando else4 ;
system("pause"); else /* else3 */
} comando else3 ;
45 46

5.4.6- Exercícios resolvidos - Comando If- else 5.4.6- Exercícios resolvidos - Comando If- else

Exercício 1: Colocar o Exemplo 7 em Linguagem C // 3. [imprimir resultados] Continuação do Exercício 1


printf ("\nNome. estudante:%s\n",nome);
#include <stdlib.h>
#include <stdio.h> printf("\n");
main() printf("Nota Laboratorio: %f\n\n",lab);
{
// declarar variáveis printf("Exame1: %f\n\n",exame1);
float lab,exame1, exame_final, media; printf("Exame Final: %f\n\n",exame_final);
char nome[30]; printf("Media Final: %f\n\n",media);
//1. [Ler dados]
printf( "Digite o nome do aluno: " ); if(media < 5.0 )
scanf("%s",&nome); printf("Reprovado\n\n\n");
printf("\n\n" );
else
printf("Digite as notas de: lab, exame1 e exame_final, do aluno:%d\n", nome);
scanf("%f%f%f",&lab,&exame1,&exame_final); printf("Aprovado\n\n");
//2. [Calcular a média] system("PAUSE");
media= 0.2*lab + 0.3 * exame1 + 0.5*exame_final; continua na página seguinte 47 48
}// fim programa
5.4.6- Exercícios resolvidos - Comando If- else 5.4.6- Exercícios resolvidos - Comando If- else
Exercício 2: Colocar o Exemplo 9 em Linguagem C
else
#include <stdlib.h> Continuação do Exercício 2
#include <stdio.h>
{ if (B > C) // ( B > A, B > C )
Exemplo 9 : Faça um programa
main( ) que leia três números A, B e C e
{ max = B;
{// declarar variáveis imprima o valor do maior.Assumir printf( "\nO maior valor eh o B\n" );
float A, B, C, max; valores distintos e reais. }
//1. [Ler dados] else
printf( "Digite tres numeros A, B, C\n" ); { max = C; // ( C > B > A )
scanf("%f%f%f",&A,&B,&C); printf( "\nO maior valor eh o C\n" );
// 2. [Determinar o maior valor, comparando pares]
if (A > B)
}
{ if (A > C) }
{ max = A ; //( A > B , A > C ) // 3. [Imprimir o maior valor]
printf( "\nO maior valor eh o A\n" ); printf ("\nMaior valor =%f\n\n", max);
} system("pause");
else } //4. Fim do programa
{ max = C ; // (A > B e C >A )

}
printf( "\nO maior valor eh o C\n" );  continua na página 50
49 50
}

5.4.6- Exercícios resolvidos - Comando If- else 5.4.6- Exercícios resolvidos - Comando If- else

#include <stdlib.h> Exercício 3: Refazer o programa do Continuação do Exercício 3


#include <stdio.h> Exercício 2 para imprimir os 3
main ( ) números na ordem crescente. else
{ if ( a > c ) { maior = b; meio = a; menor = c; }
int a, b, c, maior, meio, menor ; // declaração de variáveis. else
// Leitura de dados
{ menor = a;
printf(" Entre com tres numeros inteiros\n");
scanf("%d%d%d",&a,&b,&c); if ( b > c ) { maior = b; meio = c; }
if ( a > b ) else { maior = c; meio = b; }
if ( a > c ) }
{ maior = a; printf("Em ordem crescente: %d %d %d\n\n", menor, meio, maior);
if ( b > c ) { meio = b; menor = c; } system("pause");
else { meio = c; menor = b; }
}
else { maior = c; meio = a; menor = b; }
continua na próxima
página
51
} //fim programa

52
5.4.7- Exercícios para Casa - Comando If- else 5.4.7- Exercícios para Casa - Comando If- else

1) Colocar em Linguagem C os algoritmos dos exemplos 8, e 10. 5) Faça um programa que leia dois valores, o primeiro servindo de
2) Fazer um programa em C que leia 4 números (A, B, C, D) e encontre indicador de operação e o segundo correspondendo ao raio
o maior deles. Imprima uma mensagem dizendo qual deles é o maior de uma circunferência. Caso o primeiro valor lido seja igual a
e o valor do maior. 1, calcular e imprimir a área desta circunferência. Se o valor
3) Faça um programa em C que calcule o aumento de salário para o lido for 2, calcular e imprimir o perímetro da circunferência. E
corrente ano. Se salário >1000 o aumento é de 5%. Senão o
aumento é de 7%.
se o valor lido for diferente destes dois valores; imprimir uma
4) Preparar um algoritmo e um programa em C para ler os
mensagem dizendo que o indicador de operação foi mal
comprimentos dos três lados de um triângulo (S1, S2, e S3) e fornecido.
determinar que tipo de triângulo temos, com base nos seguintes
casos. Sejam A o maior dos lados de S1, S2, e S3 e B e C os outros
dois lados. Então: 6) Fazer um programa que: dada a altura e peso de uma pessoa,
Se A ≥ B + C nenhum triangulo é formado calcule seu índice de massa corporal. Fórmula: peso dividido
Se A2 = B2 + C2 um triangulo retangulo é formado, por altura ao quadrado. Faixas: <= 18,5 - abaixo do peso
Se A2 > B2 + C2 um triangulo obtusangulo é formado normal; > 18,5 e <= 25 - peso normal; > 25 e <=30 - peso
Se A2 < B2 + C2 um triangulo acutangulo é formado acima do normal; acima de 30 - peso excessivo.
53 54 54
53

5.4.7- Exercícios para Casa - Comando If- else Resolução Exercícios para Casa (1)

7) Faça um programa que leia dois valores, o primeiro servindo de #include <stdlib.h>
indicador de operação e o segundo correspondendo ao raio de #include <stdio.h> Ex casa 1: Colocar
uma circunferência. Caso o primeiro valor lido seja igual a 1, o exemplo 8 em C
calcular e imprimir a área desta circunferência. Se o valor lido for 2, // Programa: Mostre o maior de 2 numeros
calcular e imprimir o perímetro da circunferência. E se o valor lido main()
for diferente destes dois valores; imprimir uma mensagem dizendo
que o indicador de operação foi mal fornecido.
{
int Valor1, Valor2, Max;
8)Fazer um programa que resolva uma equação de segundo grau, //1. [Ler os valores]
realizando consistências dos valores do discriminante e do printf("Digite dois numeros \n");
coeficiente "a". Caso o discriminante seja negativo, deverá apenas
ser impressa a mensagem: " Esta equação não possui raízes reais" scanf("%d%d",&Valor1,&Valor2 );
. Caso o coeficiente "a" seja igual à zero, deverá ser impressa a //2. [Determinar o maior]
mensagem: " Esta não é uma equação de segundo grau" e deverá
ser fornecido o valor da única raiz. Se o discriminante for maior ou
igual a zero e o coeficiente "a" não for nulo, deverão ser impressas:
if (Valor1 > Valor2)
{ Max = Valor1;
 continua
na próxima
"as raízes da equação: ax2 + bx + c = 0 são R1 = xxx e R2 = xxx". printf ("\nO Primeiro valor eh maior\n"); página
55 55 } 56
Resolução Exercício para Casa 1 Resolução Exercício para Casa (8)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
else main()
{ int a, b, c;
{ Max = Valor2; float delta, raiz1, raiz2;
printf("digite os coeficientes a, b, c da equacao\n");
scanf("%d%d%d",&a,&b,&c);
printf ("\nO Segundo Valor eh maior\n"); if(a==0)
{ printf(" esta equacao eh de 1o. grau\n");
} raiz1= -c/b;
printf(" sua raiz eh: %f \n", raiz1);
//3. [Imprimir o maior valor] }
else
printf("Maior Valor =%d\n\n", Max); { delta=(pow(b,2)-4*a*c);
if(delta >= 0)
//4. [Terminar] { raiz1=(b+sqrt(delta))/(2*a);
raiz2=(b-sqrt(delta))/(2*a);
system("PAUSE"); }
printf("as raizes sao:R1= %f,R2=%f \n",raiz1,raiz2);
else printf("Esta equacao nao possui raizes reais\n");
} }
57
system("PAUSE"); 58
}

5.4.8 Aplicação: O paradoxo da inovação 5.4.8 Aplicação: O paradoxo da inovação

Os dados do censo (que ocorre a cada 10 anos) de 1880 Lei de Moore: O fundador da Intel, Gordon Moore, constatou
dos EUA levaram quase 8 anos para serem processados. que a capacidade de processamento dos computadores dobra
Temia-se que os dados do censo de 1890 não estivessem a cada 1 ano, enquanto os custos permanecem fixos.
processados em 1900.
Problema: Imagine que uma tarefa deve ser processada e

Herman Hollerith (estatístico): ? levará 8 anos e que não pode ser movida da máquina uma vez
iniciada. De acordo com a Lei de Moore deve-se esperar a
melhoria dos processadores ou deve-se começar hoje ?
Foi encarregado pela Agência Estatística
dos EUA de desenvolver uma técnica Solução: O senso comum diz que é melhor começar agora,
para acelerar o processamento dos dados ! mas antes de por a mão na massa é bom olhar a Tabela dada
do censo, levando apenas 3 anos. a seguir:
59 60
5.4.8 Aplicação: O paradoxo da inovação 5.4.8 Aplicação: O paradoxo da inovação

Tempo de Tempo de Tempo Forma Geral: O paradoxo da inovação pode ser formulado
Início Desenvolvimento Processamento Total Final de acordo com três parâmetros: tempo de desenvolvimento t,
(anos) (anos) (anos) taxa de aperfeiçoamento a e tempo de processamento p.

0º. ano 0 8 8 8º. ano No caso anterior, os valores eram: 8


1º. ano 1 4 5 5º. ano y =t +
2º. ano 2 2 4 4º. ano
p = 8 e a = 50% = 0.5. 2t
3º. ano 3 1 4 4º. ano A fórmula para o caso geral p
y=t+
4º. ano 4 0,5 4,5 4º. ano será dada por: (1 / a ) t
Observação: É melhor começar no 2º. ou 3º. Ano, pois com Considerando-se t variável, a e p Alternativa: Vale
! isso pode-se terminar antes a tarefa. Esta análise também fixos, para encontrar o menor a pena esperar se
pode ser útil para dividir recursos entre produção e pesquisa. 61
tempo y, pode-se fazer dy/dt = 0. p/(1/a) > 1 62

5.4.8 Aplicação: O paradoxo da inovação 5.4.8 Aplicação: O paradoxo da inovação


Exemplo 12 Código C
No caso anterior: 8/(1/0.5) = 4 > 1 // Programa: paradoxo da inovação.
Algoritmo: Inovação
#include <stdio.h>
variáveis: r,p,a: real;
Tempo de Tempo de Tempo Inicio
#include <stdlib.h>
Início Desenvolvimento Processamento Total Final Escreva(“Forneça a e p”)
main()
(anos) (anos) (anos) {
Leia (a, p);
float a, p, r;
0º. ano 0 8 8 8º. ano printf(“Forneça a e p:”);
r  (p/(1/a)); scanf(“%f %f”,&a,&p);
1º. ano 1 4 5 5º. ano Se (r > 1.0) r = p/(1/a);
2º. ano 2 2 4 4º. ano Então Escreva(‘Espere’); if (r > 1.0)
Senão printf(“Espere”);
3º. ano 3 1 4 4º. ano Escreva(‘Comece’); else
4º. ano 4 0,5 4,5 4º. ano Fim printf(“Comece”);
system(“pause”);
63 64
}
5.4.8 Aplicação: Ano Bissexto 5.4.8 Aplicação: Ano Bissexto
Um problema simples: Ano Bissexto. Simples ? Egito Antigo: 365 dias
4 anos = 1 dia intercalar
Calendário Alexandrino

Roma Antiga: 365,25 dias


4 anos = 1 ano bissexto
Calendário Juliano

Mas o ano solar dura: 365,242199 dias ! Ou seja:

1 1 1 1
Quantos dias demora a Terra para dar uma 365,242199 ≅ 365 + − + −
volta completa no Sol ? 65
4 100 400 3300 66

5.4.8 Aplicação: Ano Bissexto 5.4.8 Aplicação: Ano Bissexto


Ano Calendário Ano Solar Em 1582, Gregório XIII:
1 1 1 1
1º Ano 365 dias 365 + − + − Nova definição para ano bissexto
4 100 400 3300
 1 1 1 1  Calendário Gregoriano
2º Ano 2*365 dias 2 *  365 + − + − 
 4 100 400 3300 
1 1 1 1
 1 1 1 1  365,242199 ≅ 365 + − + −
3º Ano 3*365 dias 3 *  365 + − + −  4 100 400 3300
 4 100 400 3300 

4  1 1 1  Cada 4 anos + 1 dia


4º Ano 4*365 dias 4 * 365 + + 4*− + − 
4  100 400 3300 
Cada 100 anos - 1 dia
Ano Bissexto ! Mais um dia no ano !

Mas e quanto aos demais termos ? 67


Cada 400 anos + 1 dia 68
5.4.8 Aplicação: Ano Bissexto 5.4.8 Aplicação: Ano Bissexto- Programa em C
Em 1582, Gregório XIII: //Exemplo 13: Programa que calcula quando um ano é Bissexto
# include <stdio.h>
# include <stdlib.h>
Nova definição para ano bissexto main ( )
{ int ano, resto;
Calendário Gregoriano printf("Forneca o ano:");
scanf("%d",&ano);
Exemplo 16- Ano Bissexto Algoritmo if (ano%100 == 0)
Se resto(ano/100) é 0 então if (ano%400 == 0)
(a) Não divisível por 100 e printf("O Ano %d eh bissexto \n\n", ano);
Se (ano/400) = 0
divisível por 4. else
então bissexto; (b) printf(" O Ano %d Nao eh bissexto \n\n", ano);
Senão não_bissexto; (c) else
(b) Divisível por 100 e 400.
Senão if (ano%4 == 0)
Se (ano/4) = 0 printf("O Ano %d eh bissexto \n\n", ano );
(c) Os demais anos não
então bissexto; (a) else
são Bissextos.
Senão não_bissexto; (c) printf(" O Ano %d nao eh bissexto \n", ano);
OBSERVAÇÃO: Subtrair 1 dia do calendário a cada 3300 anos system("pause");
69 70
}

5.4.9 Seleção de Ações Alternativas: Condições Compostas 5.4.9 Seleção de Ações Alternativas: Condições Compostas

Utilização de Condições Compostas b) Exemplo de disjunção :


UM < 2 ou UM < 0
 Alguns problemas ficam mais simples se utilizarmos
condições compostas ao invés de relações simples. verdadeiro falso  verdadeiro

 As condições compostas podem ser do tipo “e”


conjunção, “ou” disjunção e “não” negação.
c) Exemplo de negação :
Não UM < 2
Seja a variável UM = 1. As expressões a seguir resultam em: falso

a) Exemplo de Conjunção : OBS: As condições compostas podem ser


UM < 2 e UM < 0 utilizadas tanto nos comandos “Se” como nos
verdadeiro falso  falso “repita condicionais”.
71 72
5.4.9 Seleção de Ações Alternativas: Condições Compostas 5.4.9 Seleção de Ações Alternativas: Condições Compostas

1) Suponha que I e J sejam variáveis inteiras com valores 6 2) Assuma que A, B, C e D são variáveis e S1, S2 , S3 e S4 são
e 12, respectivamente. Quais das seguintes condições comandos ou alternativas.
são verdadeiras? a) Usando condições compostas reescreva as instruções
a) 2 * 1 ≤ J abaixo:
Verdadeiro
Se A > B
b) 2 * I – 1 < J Verdadeiro
Então Se B ≤ C
c) I > 0 e I ≤ 10 Verdadeiro então Se C ≠ D
d) I > 25 ou (I < 8 e J > 10) Verdadeiro então S1
senão S2
e) I < 4 ou J > 5 Verdadeiro senão S3
f) Não I > 6 Verdadeiro Senão S4
73 74

5.4.9 Seleção de Ações Alternativas: Condições Compostas 5.4.9 Seleção de Ações Alternativas: Condições Compostas

b) Reescrever a instrução abaixo, como uma estrutura “Se”


Solução 1: Solução 2: utilizando somente condições simples.
Se (A < B e C ≠ D) e (B > D ou B = D)
Se (A > B e B ≤ C) então S1
Se (A > B e B ≤ C ) e (C ≠ D)
Então Se C ≠ D
então S1 então S1
senão S2 Se (A > B e B ≤ C ) e (C = D)
Solução :
Senão Se (A > B e B > C) então S2
Se A < B
Então S3 Se (A > B) e (B > C)
Se (A ≤ B) Então Se C ≠ D
então S3
Então S4 então Se B ≥ D
Se (A ≤ B) então S4
então S1
75 76
5.4.9 Seleção de Ações Alternativas: Condições Compostas 5.4.9 Seleção de Ações Alternativas: Condições Compostas
Operadores Lógicos em C Exemplo14: Refazer o programa do Ano Bissexto usando Condições
Operador Significado Compostas
&& Conjunção lógica (“and”). # include <stdio.h>
|| Disjunção lógica (“or”). # include <stdlib.h>
! Negação lógica (“not”). main ( )
{
Conjunção Conjunção int ano, resto;
A B A&&B A B A||B printf("Forneca o ano:");
Falso Falso Falso Falso Falso Falso scanf("%d",&ano);
Verdade Falso Falso Verdade Falso Verdade if ((ano%100 == 0) && (ano%400 == 0))
Falso Verdade Falso Falso Verdade Verdade printf("O Ano %d eh bissexto \n\n", ano);
Verdade Verdade Verdade Verdade Verdade Verdade else { if ((ano%4 == 0) && (ano%100 != 0))
printf("O Ano %d eh bissexto \n\n", ano );
Negação else
A !A printf(" O Ano %d nao eh bissexto \n", ano); }
Verdade Falso system("pause");
77 78
Falso Verdade }

5.4.9 Seleção de Ações Alternativas: Condições Compostas 5.4.9 Seleção de Ações Alternativas: Condições Compostas

Exemplo15: Usando condições compostas, fazer um algoritmo em um #include <stdlib.h>


#include <stdio.h> Programa em C
programa em C que leia três números, A, B e C e imprima o maior
main()
deles. Assuma que os valores são diferentes. { //Inicio
float A, B, C, Max;
// 1. [Ler dados]
Algorítmo Max_3 2. [Determinar o maior valor] printf("Digite tres numero diferentes\n");
Variáveis A, B, C, Max : real Se (A > B e A > C) então Max  A scanf("%f%f%f",&A,&B,&C );
//2. [Determinar o maior valor]
Início Se (B > A e B > C) então Max  B if (A > B && A > C) Max = A;
1. [Ler dados] Se (C > A e C > B) então Max  C if (B > A && B > C) Max = B;
Leia ( A, B, C ) 3. [Imprimir maior valor] if (C > A && C > B) Max = C;
//3. [Imprimir maior valor]
Escreva (´Maior valor =`, Max ) printf("Maior valor =%3.1f\n\n", Max )
4. [Terminar] system("pause");
Fim 79
} 80
5.4.9 Seleção de Ações Alternativas: Condições Compostas 5.4.9 Seleção de Ações Alternativas: Condições Compostas
#include <stdlib.h>
Exemplo16: Fazer um algoritmo e um programa em C, utilizando #include <stdio.h> Programa em C
condições compostas, que leia três números e imprima o maior e main()
menor deles. Assume-se que os valores são diferentes. {
float A,B, C,Max, Min;
Algorítmo Max_Min_3 Se (B > A e B > C) e (A < C) então Max  B //1. [Ler dados]
Variáveis A, B, C, Max, Min : real Min  A printf("Digite tres numeros diferentes\n" );
Início scanf("%f%f%f",&A,&B,&C);
Se (C > A e C > B) e (B > A) então Max  C
1. [Ler dados] //2. [Determinar o maior e menor valor]
Min  A
if(A > B && A > C && B > C)
Leia ( A, B, C ) Se (C > A e C > B) e (B < A) então Max  C { Max = A;
2. [Determinar o maior e menor valor] Min  B Min = C;}
Se (A > B e A > C) e (B < C) então Max  A
3. [Imprimir o maior e o menor valor] if(A > B && A > C && B < C)
Min  B { Max = A;
Escreva (´Maior valor =`, Max )
Se (A > B e A > C) e (C < B) então Max  A Min = B;}
Escreva (´Menor valor =`, Min )
Min  C if(B > A && B > C && A > C)
4. [Terminar]
Se (B > A e B > C) e (A > C) então Max  B { Max = B;
Fim 81 82
Min  C Min =C;} continua na próxima pg . . .

5.4.9 Seleção de Ações Alternativas: Condições Compostas 5.4.10 Seleção de Ações Alternativas: Comando Switch

if(B > A && B > C && A < C) …continuação O Comando Switch


{Max= B;
Min = A;
}  Quando for necessário escolher uma dentre várias opções, ao
if(C > A && C > B && B >A) invés de aninhar construções do tipo if-else em diversos níveis,
{ Max =C; pode ser preferível utilizar o comando Switch. A sintaxe do
Min= A; switch é dada por:
}
if (C > A && C > B && B < A) switch (expressão)
{Max = C; {
Min = B; case (constante 1): intruções 1; break;
} case (constante 2): intruções 2; break;
//3. [Imprimir o maior e o menor valor] ...
printf("Maior valor =%4.1f\n\n",Max); case (constante n): intruções n; break;
printf("Menor valor =%4.1f\n\n", Min); default: instruções;
system( "PAUSE"); }
83 84
}
5.4.10 Seleção de Ações Alternativas: Comando Switch 5.4.10 Seleção de Ações Alternativas: Comando Switch

 A palavra expressão indica qualquer avaliação cujo resultado seja Exemplo 17: Estado Civil Programa: Estado Civil
um valor numérico dos tipos char, int ou long. Fazer um programa que leia um #include <stdio.h>
#include <stdlib.h>
caractere ch indicando o estado main ( )
 O switch compara o resultado da expressão com o valor de cada civil e imprima uma mensagem de {
constante que segue a cada um dos case. Se o valor não for igual a
acordo com a correspondência: char ch;
nenhuma das constantes apresentadas pelos case, então, são printf (“Qual estado civil: ");
executadas as instruções que seguem o default. scanf ("%c", &ch);
Se (ch = C) Escreva(‘Casado’); switch (ch) {
 A utilização do comando default é opcional. Se (ch = S) Escreva(‘Solteiro’); case ‘C’: printf (“Casado \n”); break;
case ‘S’: printf (“Solteiro \n”); break;
Se (ch = D) Escreva(‘Divorciado’);
case ‘D’: printf (“Divorcio \n”); break;
 Cada case do switch só pode avaliar uma única constante do tipo Se (ch = V) Escreva(‘Viuvo’); case ‘V’: printf (“Viuvo \n”); break;
char, int ou long
Default Escreva(‘Estado Incorreto’); default: printf(“Est. Inc.”); break;
}//fim switch
Observação importante: Após um comando case ser selecionado, se
não existir o break, todos os cases subseqüentes e suas instruções Não esquecer o break ! system("pause");
85 86
serão executados. }

5.4.10 Seleção de Ações Alternativas: Comando Switch 5.4.10 Seleção de Ações Alternativas: Comando Switch

Programa: Estado Civil


#include <stdio.h> OBS: o comando break interrompe a execução do
#include <stdlib.h> Sem o break; todos os switch, e continua a execução do programa na
main ( )
case abaixo do case
{
char ch; ! selecionado serão
instrução seguinte ao switch

printf (“Qual estado civil: ");


scanf ("%c", &ch); executados.
switch (ch) { Ex. 1) Escreva um programa que pede para o usuário
case ‘C’: printf (“Casado \n”); Resultado da Execução entrar um número correspondente a um dia da
case ‘S’: printf (“Solteiro \n”);
case ‘D’: printf (“Divorcio \n”); Qual estado civil: C semana e que então apresente na tela o nome do dia,
case ‘V’: printf (“Viuvo \n”); Casado utilizando o comando switch.
default: printf(“Est. Inc.”); Solteiro
}//fim switch Divorcio
Viuvo
system("pause"); Pressione uma tecla para continuar…
} 87 88
5.4.11 Exercícios Seleção de Ações Alternativas 5.4.11 Exercícios Seleção de Ações Alternativas

// programa exemplo 1 switch Ex 1- Continuação


#include <stdio.h>
#include <stdlib.h> switch (dia) {
main () case 1: printf (" O dia escolhido eh Segunda Feira\n");break;
{ int dia; case 2: printf (" O dia escolhido eh Terca Feira\n");break;
char ch; case 3: printf (" O dia escolhido eh Quarta Feira\n"); break;
printf("\tDigite o dia da semana:\n "); case 4: printf (" O dia escolhido eh Quinta Feira\n"); break;
printf("\t1==> para segunda feira\n"); case 5: printf (" O dia escolhido eh Sexta Feira\n");break;
printf("\t2==> para terca feira\n"); case 6: printf (" O dia escolhido eh Sabado\n");break;
printf("\t3==> para quarta feira\n"); case 7: printf (" O dia escolhido eh Domingo\n");break;
printf("\t4==> para quinta feira\n"); default: printf(" Dia Inexistente\n");
printf("\t5==> para sexta feira\n"); }//fim switch
printf("\t6==> para sabado\n");
printf("\t7==> para domingo\n"); system("pause");
89
} 90
scanf ("%d",&dia);

5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
Solução Ex. 2
Ex. 2) Dadas as seguintes informações de um funcionário: #include <stdlib.h>
Nome, Numero funcional, idade, cargo e o seu salário bruto e #include <stdio.h>
considerando que: main()
a) O salário bruto teve um reajuste de 38%. { int num_func, idade;
b) O funcionário receberá uma gratificação de 20% do salário float Sal_Bruto, Reajuste,Sal_liq,GRAT,Desconto;
bruto. char nome[30], cargo[30];
c) O Salário liquido total é descontado em 15% printf("digite o nome do funcionario\n");
gets(nome);
Faça um programa para:
printf("digite o cargo do funcionario\n");
•Imprimir Nome, Numero funcional, idade e cargo. gets(cargo);
•Imprimir o salário bruto. printf("digite o numero funcional\n");
•Imprimir o salário líquido. scanf("%d",&num_func);
printf("digite o valor do salario bruto %s\n",nome);
91 scanf("%f",&Sal_Bruto); 92
5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
Solução Ex. 2 - Continuação

Reajuste = Sal_Bruto*0.38;
GRAT = Sal_Bruto * 0.20;
Sal_Bruto = Sal_Bruto+GRAT+Reajuste;
Desconto = Sal_Bruto*0.15;
Sal_liq = Sal_Bruto - Desconto;
printf("\n\n");
printf("Nome:%s cargo:%s No. Funcional:%d\n", nome, cargo,num_func);
printf("===================================================\n");
printf("salario Bruto \t%.2f\n",Sal_Bruto);
printf("Reajuste \t%.2f\n",Reajuste);
printf("Gratificacao \t%.2f\n",GRAT);
printf("Desconto \t%.2f\n",Desconto);
printf("Salario Liquido \t%.2f\n",Sal_liq);
printf("====================================================\n");
system("PAUSE");
} 93 94

5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
3) O salário liquido de um professor da rede pública é calculado da Os descontos efetuados são IAMSP, Previdência e Imposto de
seguinte maneira: renda.
Os vencimentos recebidos são: Salário Base inicial (SBI), O desconto relativo ao IAMSP é de 2% e o da previdência é de
Gratificação de representação(GRAT), Qüinqüênio (QUIN) e 11%. Isto é feito sobre o total de vencimentos (SBT),onde:
Sexta parte (SEXT_P). SBT=SBI+GRAT+SEXT_P+QUIN.
A gratificação de representação (GRAT) é paga na sua totalidade O desconto do IR é feito sobre o SBT-IAMSP-PREV-150.69*
para quem está exercendo um cargo de chefia. Se a pessoa não numero de dependentes., de acordo com a tabela abaixo:
está exercendo o cargo de chefia, mas já exerceu, ela recebe
20% do valor total da gratificação para cada dois ano exercido, Base de Cálculo em R$ Alíquota % Parcela a deduzir do imposto em R$
assim se ela exerceu o cargo por 4 anos, ela recebe 20% do valor Até 1499.15 - -
total da gratificação.
De 1499.15 à 2246.75 7.5 112.43
A cada 5 anos a pessoa recebe 5% de aumenta relativo ao
qüinqüênio (QUIN), assim quem está trabalhando a 17 anos De 2246.75 à 2995.70 15.0 280.94
recebe 15% de aumento relativo a 3 qüinqüênios. De 2995,70 à 37432.19 22.5 505.62
Depois de 20 anos de serviço a pessoa recebe mais a sexta parte do Acima de 37432.19 27.5 692.78
salário, calculado do seguinte modo:
84
95 96
SEXT_P= (SBI+QUIN+GR)/6.
5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
Isto é, verificar em qual faixa o Para fazer esse programa é necessário começar a pensar em
VALOR=(SBT-IAMSP-PREV-150.69* N_dep) se encaixa. quais variáveis precisam ser criadas. São necessárias as
Por exemplo, se VALOR >= à 3743.19 reais, o imposto a ser seguintes variáveis:
pago será: SBI ⇒ para armazenar o valor do salário inicial
IR = (VALOR*0.275)-692.78. GRAT ⇒ para armazenar o valor da gratificação relativo a cargo de
chefia.
O salário liquido final será: SL=SBT-IAMSP-PREV
QUIN ⇒ para armazenar o valor do acréscimo salarial relativo ao
tempo de serviço
Fazer um programa em C que leia o nome do professor, seu SBT ⇒ para armazenar o valor do salário bruto total. Lembre-se que
cargo, seu salário base inicial, o número de seus SBL=(SBI+GRAT+QUIN+SEXT_P)
dependentes, o tempo de serviço em anos, se está ou não SL ⇒ para armazenar o valor do salário Liquido
exercendo cargo de chefia ou se já exerceu e por quanto
tempo e a seguir calcule e imprima o seu salário bruto, cada SEXT_P ⇒ para armazenar o valor do acréscimo salarial relativo a
sexta parte por 20 anos de serviço
um dos descontos efetuados, o total de descontos e por fim o
salário liquido. IAMSP ⇒ para armazenar o desconto relativo ao iamsp que é de
2% de (SBI+GRAT)
97
PREV ⇒ para armazenar o desconto relativo a previdencia que é de 98
11% de (SBI+GRAT)

5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
IR ⇒ para armazenar o valor do imposto de renda a ser pago. Observe que nchefe é uma variável do tipo inteira que está sendo
dividida pelo numero inteiro 2. O resultado dessa divisão é um numero
SL ⇒ para armazenar o valor do salário liquido que é obtido pelo
inteiro. Assim, se a pessoa esteve como chefe por 3 anos, a divisão
SBT-IAMSP-PREV-IR. de nchefe/2 será 1, porque divisão de inteiro por inteiro resulta na
parte inteira da divisão. Neste caso a variável perc_grat será:
Todas essas variáveis devem ser do tipo float porque elas representam perc_grat= 20*(nchefe/2) = 20*(3/2) = 20
dinheiro. E a gratificação será de GRAT=(1046.1*20)/100.0;
Para se calcular o valor da gratificação GRAT será necessário criar
as seguintes variáveis: chefe, nchefe, perc_grat. A variável chefe Para se calcular o valor do aumento relativo aos qüinqüênios (QUIN) é
vai ser lida e seu valor será zero se o funcionário não está necessário calcular o numero de qüinqüênios, para tanto são
exercendo atualmente um cargo de chefia ou 1 caso contrário. Se a necessárias as variáveis nquin, e Temp_serv, ambas do tipo
pessoa estiver exercendo o cargo de chefia, GRAT = 1046.1. Se a inteiro.Temp_serv vai armazenar quantos anos de serviço tem o
pessoa não está exercendo, mas já exerceu cargo de chefia, ela
funcionário, e este valor deve ser lido, isto é o usuário vai fornecer
receberá 20% de 1046.1 R$, a cada 2 anos que esteve como chefe,
e esta porcentagem é armazenada em perc_grat. Então essa via teclado este valor. Deste modo o numero de qüinqüênios será
porcentagem é calculada da seguinte maneira: nquin = Temp_serv/5. Como Temp_serv é inteira e está sendo
perc_grat= 20*(nchefe/2), dividida por 5 inteiro, o valor armazenado em nquin será a parte
inteira divisão. Assim, se Temp_serv=9, nquin = 1. Deste modo o valor
onde nchefe é o numero de anos que a pessoa esteve como chefe. 99 100
5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
Do aumento relativo aos qüinqüênios é dado por: Observe que para se calcular a variável valor é necessário ter
QUIN= (SBI+GRAT)*(Nquin*0.05); calculado antes as variáveis:
Observe que antes de se calcular o valor do qüinqüênio foi calculado o
valor da gratificação GRAT. SBT= salário bruto total, IAMSP e PREV
O calculo da Sexta Parte deve ser feito somente após o calculo do O valor do salário liquido será : SL = SBT-IAMSP-PREV-IR;
qüinqüênio, pois a sexta parte é calculada por:
Se o tempo de serviço for maior ou igual 20 anos
SEXT_P=(SBI+GRAT+QUIN)/6.0.. A seguir é apresentado o programa, solicitado, bem como a execução
Senão SEXT_P=0.0 de exemplo.
No calculo do imposto de Renda (IR), serão necessárias as variáveis
Valor, Alíquota, Parcela, todas do tipo float para armazenar
respectivamente, o Valor para se calcular em qual faixa o funcionário
se encontra e assim calcular a Alíquota a ser paga e a Parcela a se
deduzir do imposto. Será necessário também a variável N-dep, do tipo
int para armazenar o numero de dependentes do funcionário. Este
numero deve ser lido. A variável valor será calculada por:
Valor = SBT-IAMSP-PREV-150.69*N_dep; 101 102

5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
#include <stdlib.h> Solução Exercício 3 - Continuação
#include <stdio.h>
Solução Exercício 3
main()
printf("O funcionario em questao esta exercendo algum cargo de chefia?\n");
{ int N_dep, Nquin, Temp_serv,chefe, nchefe, perc_grat;
printf("digite 1 para sim e zero para nao\n");
float SBI,SBT, Valor, QUIN, SEXT_P, IAMSP, PREV,IR,SL;
scanf(" %d",&chefe);
float GRAT, Aliquota, Parcela; //Calculo da gratificação
char nome[30], cargo[30];
if(chefe==1)
printf("digite o nome do funcionario\n");
GRAT=1046.1;
gets(nome);
else
printf("digite o cargo do funcionario\n");
{ nchefe=0;
gets(cargo);
printf("Se o funcionario exerceu no passado algum cargo de chefia,\n digite o
printf("digite o valor do salario base inicial do %s\n",nome);
numero de anos.\n");
scanf("%f",&SBI);
scanf("%d",&nchefe);
printf("digite o numero de dependentes do %s\n", nome);
perc_grat= 20*(nchefe/2);
scanf("%d",&N_dep);
GRAT=(1046.1*perc_grat)/100.0;
printf("digite o tempo de servico do %s\n", nome);
103
} 104
scanf("%d",&Temp_serv);
5.4.11 Exercícios sobre Seleção de Ações Alternativas 5.4.11 Exercícios sobre Seleção de Ações Alternativas
//Calculo do IR
Solução Exercício 3 - Continuação Valor = SBT-IAMSP-PREV-150.69*N_dep;
if( Valor< 1499.15)
// Calculo do quinquenio { Aliquota=0;
Nquin= Temp_serv/5; Parcela=0;}
else if( Valor< 2246.75) Solução Exercício 3 - Continuação
QUIN= (SBI+GRAT)*(Nquin*0.05);
{Aliquota=0.075;
// Calculo da Sexta Parte.
Parcela=112.43;}
if(Temp_serv >= 20) else if( Valor< 2995.7)
SEXT_P=(SBI+GRAT+QUIN)/6.0; {Aliquota=0.15;
else SEXT_P=0.0; Parcela=280.94;}
// Calculo do Salario bruto total else if( Valor< 3743.19)
SBT=(SBI+GRAT+QUIN+SEXT_P); {Aliquota=0.225;
//calculo dos descontos IAMSP, PREV Parcela=505.62;}
IAMSP=SBT*0.02; else
PREV=SBT*0.11; {Aliquota=0.275;
Parcela=692.78;}
IR=(Valor*Aliquota)-Parcela;
105 106
SL = SBT-IAMSP-PREV-IR;

5.4.11 Exercícios sobre Seleção de Ações Alternativas Solução Exercício 3 - Resultado


printf("Nome:%s cargo:%s\n", nome, cargo);
printf("==============================================\n");
printf("Vencimento \t%.2f\n",SBI);
printf("Gratif. de representacao\t%.2f\n",GRAT);
printf("Adicional Tempo Servico \t%.2f\n",QUIN);
printf("Sexta Parte \t%.2f\n",SEXT_P);
printf("Salario Bruto \t%.2f\n",SBT);
printf("======= Descontos==============================\n");
printf("Contribuicao Previdencia\t%.2f\n",PREV);
printf("IAMSP \t%.2f\n",IAMSP);
printf("IMPOSTO DE RENDA \t%.2f\n",IR);
printf("==============================================\n");
printf("Total de Descontos \t%.2f\n",PREV+IAMSP+IR);
printf("==============================================\n");
printf("Salario Liquido \t%.2f\n",SL);
printf("===============================================\n\n\n");
system("PAUSE");
} Solução Exercício 3 - Continuação 107 108
Mas, Continua...

Fim do if
Este material foi
desenvolvido por: Aníbal
Tavares de Azevedo e
Cassilda Maria Ribeiro

109

Você também pode gostar