Escolar Documentos
Profissional Documentos
Cultura Documentos
Unidade n.º 1
Algoritmia e programação em C – ciclos e decisões
- 2.ª Parte -
João Silva • 2021/22 1
SÍNTESE DE CONTEÚDOS
➢Estruturas sequenciais
Classificação
das
estruturas ➢Estruturas de decisão ou seleção
básicas de
programação
Estruturas de
controlo
Pseudocódigo Linguagem C
#include <stdio.h>
#include <stdlib.h>
Algoritmo soma; #include <conio.h>
Variáveis a, b, y : Inteiros; main( )
{
Início int a, b, y;
Ler (a, b); printf("O valor de A = ");
scanf("%d", &a);
y a + b;
printf("O valor de B = ");
Escrever (y); scanf("%d", &b);
Fim. y = a + b;
printf("O valor de Y = A + B = %d", y);
printf ("\nPrima uma tecla para terminar...");
getch();
}
FIM de
João Silva • 2021/22 Tópico 5
7.2. ESTRUTURAS DE CONTROLO EM C – VISÃO GERAL
As Estruturas de Controlo…
permitem dirigir o fluxo das ações de um programa, o que aumenta as
potencialidades para resolver problemas mais complexos.
Instruções básicas
Estruturas de controlo
Conceitos
sobre lógica
em
➢Operadores de incremento e de decremento
programação
➢Expressões booleanas/lógicas
OPERADORES LÓGICOS
EXEMPLO
OPERADOR SIGNIFICADO RESULTADO
(a=10, b=5 e c=2)
! Negação ! (a > b) False
&& Conjunção (E) (a > b) && (b > c) True
|| Disjunção inclusiva (OU) (c > a) || (b > c) True
EXEMPLOS
A expressão devolve o valor ‘verdadeiro’ quando a variável ‘Idade’ for igual
Idade == 20
a 20, caso contrário o valor será ‘falso’.
A expressão devolve o valor ‘verdadeiro’ quando a variável ‘Peso 1’ for
Peso 1 < Peso 2
menor que ‘Peso 2’, caso contrário será ‘falso’.
Tabelas de verdade
EXEMPLO
(Idade >= 10) && (Idade <= 20) A expressão será verdadeira para valores da variável ‘Idade’
pertencentes ao intervalo [10, 20], caso contrário será falsa.
Prioridade
/ OPERADORES UNÁRIOS EXEMPLO
Maior ! (negação lógica)
! ((6 >= 3) && (5 != 6)) || (10 * 2 > 22)
/ OPERADORES MULTIPLICATIVOS
* (Multiplicação)
/ (Divisão)
% (Resto da divisão inteira)
RESULTADO
&& (Conjunção lógica)
! (True && True) || False
/ OPERADORES ADITIVOS ! (True) || False
+ (Adição)
- (Subtração)
|| (Disjunção inclusiva) False || False
FIM de
João Silva • 2021/22 Tópico 11
7.2.3. OPERADORES DE AUTO INCREMENTO / AUTO DECREMENTO
Estruturas de
decisão
Em pseudocódigo Em fluxograma
SE <condição> ENTÃO SE
Falso
Condição
<bloco de instruções>
Verdadeiro
FimSe
VARIANTES DA
ESTRUTURA
DE DECISÃO SE (condição1) ENTÃO
“SE…” <bloco de instruções1>
SENÃO
SE (condição2) ENTÃO
<bloco de instruções 2>
II. Estruturas encadeadas SENÃO {
<bloco de instruções 3>
FimSe
FimSe
Ler (nota)
Verdadeiro
Verdadeiro
Fim Fluxograma
João Silva • 2021/22 20
8.1.2. ESTRUTURAS “SE…” ENCADEADAS / ANINHADAS (CONTINUAÇÃO)
IF
{ (Condição)
FALSO
<instruções>
}
VERDADEIRO
IF (condição) {
OPÇÕES DA <bloco de instruções1> }
ESTRUTURA II. Estrutura simples com a cláusula ELSE ELSE {
DE DECISÃO Executa 2 alternativas de instruções <bloco de instruções 2> }
“IF…”
IF <condição1> {
<bloco de instruções1> }
III. Estruturas encadeadas ELSE IF (condição2) {
Executa 3 ou mais alternativas de instruções <bloco de instruções 2> }
ELSE {
<bloco de instruções3> }
…
main() IF sem ELSE
{
IF
float nota; (Condição)
VERDADEIRO
…
main()
IF com ELSE
{ IF FALSO
VERDADEIRO
main()
{
IFs encadeados
float nota;
IF
printf ("Digite a classificação do exame: "); (Condição)
} [ELSE IF
[ELSE IF (condição) (Condição)
{
<Bloco_de_instruções_2>
[ELSE
}] <Instruções> <Instruções>]
<Instruções>]
...
[ELSE
{
<Bloco_de_instruções_3>
}] As partes incluídas dentro de parênteses retos são opcionais.
João Silva • 2021/22 30
8.2.4. ESTRUTURAS “IF…ELSE…” – CASO GERAL (CONTINUAÇÃO)
… Programa que avalia se um número
main() é par ou ímpar
{
int num, resto;
Como averiguar se um número é par ou ímpar?
printf ("Número inteiro? "); ✓Através do resto da divisão inteira por 2 – operador %
scanf ("%d", &num);
resto = num % 2; EXEMPLOS
if (resto == 0) Bloco de
{ instruções do
printf ("\n O número é par."); IF Todos os
printf ("\n Resto = %d", resto); números ímpares
19 2
} entre { e }
têm resto da
else
{ Bloco de divisão inteira = 1 9
printf ("\n O número é ímpar.");
instruções do
printf ("\n Resto = %d", resto); Todos os
} ELSE 20 2
printf ("\n\n Prima uma tecla para terminar..."); entre { e } números pares
têm resto da
}
getch();
divisão inteira = 0 10
FIM de
João Silva • 2021/22 Tópico 31
8.3. ESTRUTURA “SELECIONAR CASO… [SENÃO…]” - ALGORITMIA
…
Bloco de Bloco de Bloco de [Bloco de
[ Senão <bloco de instruções> ] Instruções 1 Instruções 2 Instruções N Instruções Z]
FimSelecionar
CASE valor1:
<1º Bloco de Instruções> CASE CASE
break; <valor 1> <valor 2>
CASE valor2:
[DEFAULT
<bloco de <bloco de
<2º Bloco de Instruções> instruções 1> instruções 2>
<bloco de
instruções_N>]
break;
...
[DEFAULT<bloco_de_instruções_N>
break;] As partes incluídas dentro de parênteses retos são opcionais.
João Silva • 2021/22 36
8.4. ESTRUTURA “SWITCH… [DEFAULT]” – EM C (CONTINUAÇÃO)
Instrução ‘break’
Serve para terminar a execução da
EXEMPLO
Algoritmo calculadora;
Variáveis a,b : inteiros;
y : real; Pseudocódigo
op : caracter;
Inicio
Ler(a); Exercício da calculadora
Ler(op);
Ler(b); Pretende-se calcular Y sabendo que:
Selecionar caso op
Y = A operação B, e que a operação
‘+’ : y = a + b;
‘-’ : y = a - b;
pode ser a soma, a subtração, a
‘*’ : y = a * b; multiplicação e a divisão.
‘/’ : y = a / b;
FimSelecionar
Escrever(y);
Fim.
// Programa C - Calculadora
// Este Programa calcula y = A operação B
#include <stdio.h> Linguagem C
#include <stdlib.h>
switch (op)
#include <conio.h>
{
main()
case '+': y=a+b; break;
{
case '-': y=a-b; break;
float a,b,y;
case '*': y=a*b; break;
char op;
case '/': y=a/b; break;
printf(" A = ");
}
scanf("%f", &a);
printf("\n %f %c %f", a, op, b);
printf("\n Operacao: "); printf(" = %.2f",y);
scanf(" %c", &op); printf ("\n\n Prima uma tecla para terminar...");
printf("\n B = "); getch();
scanf("%f", &b); }
FIM de
João Silva • 2021/22 Tópico 39
8.5. COMPARAÇÃO ENTRE SWITCH…[DEFAULT] E IF…[ELSE]
if (expressão == constante_1)
switch (expressão)
instruções_1;
{
else if (expressão == constante_2)
case constante_1: instruções_1; break;
instruções_2;
case constante_2: instruções_2; break;
…
…
else if (expressão == constante_n)
case constante_n: instruções_n; break;
instruções_n;
[default: instruções;]
else
}
instruções; /* default do switch */
FIM de
João Silva • 2021/22 Tópico 40
9. ESTRUTURAS DE REPETIÇÃO OU CICLOS (LOOPS)
Contador Valor_Inicial
Em pseudocódigo
Para Contador de <ValorInicial> Até <ValorFinal>
Em fluxograma
Contador <= Valor_Final
Fazer Verdadeiro
Instrução ou bloco de
<bloco de instruções> instruções
Início
Utilizar a estrutura de repetição com contador automático
para apresentar os dez primeiros múltiplos do número 2.
Escrever TABUADA DO 2
Algoritmo tabuada_do_2;
i
Variável i: Inteiro;
Início
Escrever (“TABUADA DO 2”);
i <= 10
Para i 1 Até 10
Verdadeiro
Fazer
Escrever ( i , i*2) Escrever ( i , “ * 2 = “, i * 2 );
i i+1 Falso i i + 1;
FimFazer
Fim Fim.
} Instrução ou bloco de
instruções
Falso
contador = contador + 1
Estrutura adequada a situações em que o número de
iterações (repetições) é conhecido à partida.
…
main()
{
int num;
printf ("Número inteiro --> ");
scanf ("%d", &num);
printf ("\n");
for (int i=1; i<=10; i++)
printf ("%d X %d = %d \n", num, i, num*i);
printf ("\n Prima uma tecla para terminar...");
getch();
}
...
main()
{
//DECLARAÇÃO DE VARIÁVEL
int i;
//PROCESSAMENTO E SAÍDA
for (i = 1; i <= 20; i++)
{
if(i%2 == 0)
printf("%d \n", i);
}
//FINALIZAÇÃO
printf ("\n Prima uma tecla para terminar...");
getch();
}
FIM de
João Silva • 2021/22 Tópico 51
9.3. ESTRUTURA “ ENQUANTO… FAZER…”
Em pseudocódigo
Enquanto <condição>
Em fluxograma
Condição
Fazer Verdadeiro
<bloco de instruções>
Instrução ou bloco de
FimFazer instruções
Falso
Algoritmos com sequência não linear de ações. Estrutura de repetição com teste a
condição lógica.
Algoritmos com sequência não linear de ações. Estrutura de repetição com teste a
condição lógica. Estrutura de decisão.
{
Instrução ou bloco de
<Bloco de instruções> instruções
} Falso
Programa que incrementa um número até 10 e que calcula o quadrado desse número.
...
main()
{
//DECLARAÇÃO DE VARIÁVEL
int num;
//ENTRADA, PROCESSAMENTO E SAÍDA
printf ("Qual o número (<10) ? ");
scanf ("%d", &num);
printf ("\n");
while (num <= 10)
{
printf ("Quadrado do nr %d = %d \n", num, num*num);
num = num + 1;
}
//FINALIZAÇÃO
printf ("\n Prima uma tecla para terminar...");
getch();
}
Programa que soma números reais até que seja premida a tecla 0 (zero). O resultado é
exibido com duas casas decimais.
...
main(){
//DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS
double num, soma=0;
//ENTRADA, PROCESSAMENTO E SAÍDA
do {
printf ("N.º a somar (termine com 0) : ");
scanf ("%lf", &num);
soma = soma + num;
} while (num != 0);
printf ("\n Soma = %.2lf", soma);
//FINALIZAÇÃO
printf ("\n\n Prima uma tecla para terminar...");
getch();
}
Qualquer ciclo FOR pode ser substituído por um WHILE, contudo, o oposto nem sempre se
verifica. O ciclo FOR é mais compacto e legível quando é necessário iterar um número bem
determinado de vezes. Assim, para usar esta estrutura apenas precisamos de saber quantas
repetições serão feitas, ou seja, precisamos de saber as condições de início e de fim.
inicialização;
for (inicialização; condição; contador) while (condição)
{ {
<bloco de instruções>; contador;
} <bloco de instruções>;
}
FIM de
João Silva • 2021/22 Tópico 61
10. ORGANIZAÇÃO E ESTRUTURAÇÃO DE CÓDIGO
Os programadores
profissionais usam
regras de indentação/
comentários/
organização de código
no seu trabalho de
equipa.
Um mesmo produto de
software pode ser
desenvolvido por vários
programadores,
inclusive, separados
geograficamente.
João Silva • 2021/22 63
10.1. APRESENTAÇÃO DO CÓDIGO (CONTINUAÇÃO)
» INDENTAÇÃO DE CÓDIGO
» COMENTÁRIOS AO CÓDIGO
FIM de
João Silva • 2021/22 Tópico 65
10.2. MENSAGENS DE ERRO BÁSICAS NOS DADOS DE ENTRADA
Trecho de código
do {
printf (“Número inteiro [1 a 100] ? “);
Se o utilizador digita um
scanf (“%d”,&num); número que não pertence ao
if (num < 1 || num > 100) intervalo [1, 100] o programa
printf (“ERRO. Tente novamente. \n\n”); entra em ciclo até que seja
digitado um valor correto.
} while (num < 1 || num > 100);
<instruções_do_programa>;
FIM de
João Silva • 2021/22 Tópico 67
10.3. NOÇÕES DE CONTADOR E ACUMULADOR & PALAVRAS RESERVADAS