Buscar

teorico 3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Paradigmas de 
Programação
Responsável pelo Conteúdo:
Prof. Me. Roberto Luiz Garcia Vichinsky 
Revisão Textual:
Prof. Me. Claudio Brites
Programação Estruturada
Programação Estruturada
 
 
• Introduzir os conceitos da programação estruturada;
• Capacitar o estudante a desenvolver softwares utilizando esse paradigma.
OBJETIVOS DE APRENDIZADO 
• Introdução;
• A Linguagem C e o Paradigma Estruturado;
• Operadores Aritméticos;
• Operadores Relacionais;
• Operadores Lógicos;
• Funções Nativas;
• Estruturas de Controle.
UNIDADE Programação Estruturada
Introdução
Os computadores eletrônicos, que até o final da década de 1950 tinham suas apli-
cações voltadas exclusivamente para as áreas científicas e militares, tornaram-se pre-
sentes em outras áreas com o surgimento dos primeiros modelos comerciais. Com a 
evolução das tecnologias de processamento de dados e a crescente popularização dos 
computadores, novas aplicações tornavam-se possíveis e cada vez mais solicitadas 
pelos usuários. Empresas de diversos ramos, assim como órgãos governamentais e 
universidades, começavam a utilizar intensamente os computadores, o que causou 
um aumento sensível na demanda por softwares específicos.
No final da década de 1960, em função da falta de técnicas adequadas para 
o desenvolvimento de software e da crescente demanda por aplicações, eclodiu a 
chamada “crise do software”, que foi um momento histórico caracterizado pelos pro-
blemas relativos ao desenvolvimento de programas de computadores. Nessa época, 
cerca de 50% a 80% dos projetos de software não eram concluídos ou não atendiam 
às expectativas do cliente. Dos projetos concluídos com sucesso, cerca de 90% 
terminavam acima do orçamento e do cronograma previstos.
Leia o artigo “O que foi a Crise do Software e o início da Engenharia de Software”. 
Disponível em: https://bit.ly/2Nl100Y
Uma das causas dessa crise era a falta de um paradigma de programação que per-
mitisse a construção de códigos mais legíveis e de fácil manutenção. As linguagens de 
programação da época não possuíam recursos que permitissem conferir melhor legi-
bilidade aos programas fontes. Os desvios de fluxo na programação eram realizados 
por instruções do tipo GOTO (Go To – vá para), que se tornaram os principais vilões 
dos problemas de legibilidade dos códigos. Em programas muito longos, o uso abu-
sivo de instruções do tipo GOTO gerava códigos confusos e difíceis de serem lidos, 
tornando-os sujeitos a erros e dificultando os eventuais trabalhos de manutenção.
Para apelidar esse tipo de programa, foi cunhado o termo Spaghetti Code (código 
espaguete), em alusão a um prato de spaghetti, no qual podemos encontrar uma das 
pontas do macarrão, porém, no emaranhado do prato, é muito difícil saber onde se 
encontra a outra ponta. Para dar um pequeno exemplo desse tipo de problema, veja 
a seguir um programa fonte escrito em linguagem C onde se aplica desvios de fluxo 
por meio de instruções “goto”. Note que mesmo sendo pequeno, o programa apre-
senta certa dificuldade em relação ao entendimento de sua lógica.
// Programa para calcular a área de triângulos
main() {
 float base, altura, area;
 inicio:
8
9
 printf(“Base..:”);scanf(“%f”,&base);
 printf(“Altura..:”);scanf(“%f”,&altura);
 if(base<1 || altura<1) goto fim; 
 area=base*altura/2; 
 printf(“Área...: %f\n\n”,area);
 getch();
 goto inicio;
 fim:
 exit(0);
}
Na tentativa de sanar os problemas citados, em 1968 ocorreu a Conferência da 
OTAN sobre Engenharia de Software (NATO Software Engineering Conference) 
em Garmisch, Alemanha. Nesse encontro, foram lançadas as primeiras ideias para 
se estabelecer práticas mais maduras e mais eficientes para as atividades de desen-
volvimento de software. A partir de então, desenvolvedores de linguagens de pro-
gramação dirigiram esforços para a inclusão de novos recursos em seus produtos, 
visando conferir maior produtividade no desenvolvimento de software, assim como 
maior legibilidade nos códigos fontes produzidos. Nasceu assim o “Paradigma Estru-
turado”, no qual o programa é escrito com base em estruturas de controle, eliminando 
ou diminuindo a necessidade do uso de desvios incondicionais do tipo goto. 
Leia sobre “código espaguete”. Disponível em: https://bit.ly/2zX2NpQ
A Linguagem C e o Paradigma Estruturado
A linguagem de programação C foi criada em 1972 por Dennis Ritch e Brian 
Kernighan da empresa americana de telecomunicações AT&T Bell Labs. O pro-
pósito inicial dessa linguagem era servir como ferramenta para o desenvolvi-
mento do sistema operacional UNIX, o qual, até então, era programado com a 
linguagem Assembly. 
Até o ano de 1978, a linguagem C era utilizada por poucos pesquisadores em ativi-
dades de cunho científico. Porém, após o lançamento do livro The C Programming 
Language, escrito por Ritch e Kernighan, a linguagem C se tornou uma das mais 
populares entre os desenvolvedores de software, sendo hoje uma das mais utilizadas 
no mundo.
A linguagem C já nasceu dentro do paradigma estruturado, ou seja, ela possui 
recursos que incluem estruturas de controle, tais como: estruturas de decisão e 
estruturas de repetição.
9
UNIDADE Programação Estruturada
Nas seções a seguir, serão abordados os aspectos básicos da Linguagem C, 
exemplificados por meio de programas que você poderá reproduzir usando um 
compilador da linguagem. 
Dentre os diversos compiladores C disponíveis, sugerimos que utilize o ambiente de desenvol-
vimento DEVC++, que pode ser baixado gratuitamente. Disponível em: https://bit.ly/2NgRITB
Faça também o download do tutorial do DEVC++. Acesse em: https://bit.ly/2zTJWMn
Organização Básica de um Programa C
Um programa C deve obedecer não apenas as regras sintáticas da linguagem, 
mas também as regras organizacionais impostas, as quais definem a localização ade-
quada dos blocos que compõem o programa (diretivas de pré-processamento, blocos 
de instruções, declarações etc.). De modo geral, um programa em linguagem C é 
organizado da seguinte forma:
• Bloco 1: Documentação ou comentários iniciais;
• Bloco 2: Diretivas de pré processamento;
• Bloco 3: Declarações globais;
• Bloco 4: Corpo principal;
• Bloco 5: Funções definidas pelo usuário.
Para exemplificar, é mostrado a seguir um programa escrito em linguagem C, 
onde os blocos são destacados com o propósito de demonstrar a organização ado-
tada no código. 
// -----------------------------------------------------------------------
// Programa raizes Bloco 1: Comentários iniciais 
// Calcula as raízes de um 
// polinômio de 2º grau.
// ----------------------------------------------------------------------
#include <stdio.h> Bloco 2: Diretivas de pré-processamento
#include <stdlib.h> 
#include <math.h>
// ----------------------------------------------------------------------
float a,b,c; Bloco 3: Declarações Globais
char r;
void entradas(void); 
// ----------------------------------------------------------------------
10
11
main() { Bloco 4: Corpo principal
 float delta,r1,r2;
 int continua=1;
 while(continua) {
 entradas();
 delta=(b*b)-(4*a*c);
 if(delta<0){
 printf(“Não existe raiz real”);
 }else{
 r1=(-b+sqrt(delta))/(2*a);
 r2=(-b-sqrt(delta))/(2*a);
 printf (“Raizes: %f %f”,r1,r2);
 }
 printf(“\nDigite S para continuar “);
 scanf(“%s”,&r);
 if(r!=’S’ && r!=’s’) continua=0;
 }
}
// ----------------------------------------------------------------------
void entradas(void) { Bloco 5: Funções definidas pelo usuário
 system(“cls”);
 a=0;
 while (a==0){
 printf(“Coeficiente a: “);
 scanf(“%f”,&a);
 }
 printf(“Coeficiente b: “);
 scanf(“%f”,&b);
 printf(“Coeficiente c: “);
 scanf(“%f”,&c);
}
// ----------------------------------------------------------------------11
UNIDADE Programação Estruturada
• O bloco 1: é reservado à documentação inicial do programa. É nesse bloco que 
são informados os dados essenciais para a identificação do processo, tais como: 
nome do programa, breve descrição, data de sua criação, nome do autor etc. 
Apesar de ser um bloco opcional, é extremamente importante a sua presença;
• No bloco 2: são introduzidas as diretivas de pré-processamento responsáveis 
pela inclusão das bibliotecas de funções necessárias à execução do programa, 
assim como a definição das constantes de macro substituição;
• O bloco 3: é reservado para a declaração das variáveis globais, ou seja, aquelas 
que poderão ser acessadas em qualquer parte do programa. É também nesse bloco 
que declaramos os protótipos das funções definidas pelo usuário (programador);
• O bloco 4: constitui o corpo principal do programa, onde as instruções princi-
pais do algoritmo são escritas;
• No bloco 5: são escritas as funções definidas pelo usuário, cujos protótipos 
 foram declarados no bloco 3. Esse bloco só é utilizado se houver necessidade, ou 
seja, se o programador incluir uma ou mais funções específicas escritas por ele.
Elementos Básicos da Linguagem C
Primeiramente, devemos salientar que a linguagem C é case sensitive, ou seja, 
letras maiúsculas e minúsculas são consideradas diferentes. Dessa forma, se o pro-
gramador escrever um determinado comando usando letras maiúsculas, sendo que 
esse comando é definido pela linguagem com letras minúsculas, o compilador não 
poderá reconhecê-lo, gerando assim um erro de compilação. Portanto, tenha muita 
atenção ao escrever um programa!
Como qualquer linguagem de programação, a linguagem C possui um conjunto 
de elementos que formam a base de sua sintaxe. Esses elementos são:
• Diretivas de compilação;
• Variáveis;
• Operadores aritméticos, relacionais e lógicos;
• Funções;
• Estruturas de controle.
Diretivas de Compilação
Diretivas de compilação (ou diretivas de pré-processador), como o nome sugere, 
são linhas de código que informam ao compilador as premissas que devem ser con-
sideradas antes do processo de compilação do programa. As principais diretivas são:
12
13
#include
Essa diretiva informa ao pré-processador para incluir um arquivo de cabeçalho 
naquele ponto do programa. Normalmente um arquivo de cabeçalho (header) 
contém os protótipos das funções que serão utilizadas no programa. Por exemplo, 
se o programa utilizar a função printf (escrita de dados), devemos inserir a diretiva 
#include<stdio.h> no início do código para que a função seja reconhecida, pois o 
protótipo da função printf encontra-se no arquivo stdio.h, presente na pasta padrão 
de bibliotecas da linguagem C.
Sintaxe:
• #include <nome_do_arquivo>: (para arquivos que estão na pasta padrão) ;
ou
• #include “nome_do_arquivo”: (para arquivos que estão fora da pasta padrão) .
#define
Essa diretiva informa ao pré-processador que uma determinada constante deverá 
ser substituída por um certo valor ou expressão em todas as ocorrências dessa no 
programa (macro substituição). Por exemplo, considere um programa que utiliza o 
valor do PI radiano (3.14159...) em vários pontos do código. Nesse caso, podemos 
escrever no início do programa a diretiva #define PI 3.14159 e, nas instruções em 
que o PI deve ser empregado, basta apenas escrever o seu identificador (PI).
Sintaxe:
• #idefine identificador valor_do_identificador.
Variáveis
Variáveis são posições de memória RAM que o computador (ou microcon-
trolador) reserva para o armazenamento dos dados manipulados pelo programa. 
Essas posições devem ser reservadas (declaradas) no início do programa ou antes 
da manipulação dessas. O termo “variável” é utilizado devido ao caráter desses 
elementos: os valores armazenados neles podem ser alterados diversas vezes em 
um único processamento. 
Na declaração de uma variável, devemos informar o seu identificador (nome pelo 
qual ela será reconhecida dentro do programa) e o tipo de dado que ela armazenará 
(qualificador de tipo, que pode ser: numérico inteiro, numérico real, caractere etc.).
Para atribuir nomes ou identificadores às variáveis, devemos seguir algumas re-
gras, a saber:
• Os identificadores de variáveis devem conter apenas letras do alfabeto inglês, 
números e underline;
• Não podem ser iniciados por número;
• Não podem ser palavras reservadas da linguagem (vide Tabela 2).
13
UNIDADE Programação Estruturada
Ao “batizarmos” uma variável, ou seja, ao atribuirmos um identificador a uma 
variável, devemos escolher um nome sugestivo, que indique o conteúdo que ela 
receberá. Por exemplo:
• Valor1: → Variável que armazenará o primeiro valor;
• Valor2: → Variável que armazenará o segundo valor;
• Resultado: → Variável que armazenará o resultado de um cálculo qualquer.
Após atribuir o nome, devemos indicar o tipo de dado que a variável receberá 
(qualificador de tipo). A Tabela 1 mostra os qualificadores básicos da linguagem C.
Tabela 1 – Qualificadores básicos de tipos de dados 
Tipo Descrição Tamanho (bits) Faixa
int Números inteiros 16 -32768 a 32767
float Reais de simples precisão 32 Precisão de 7 dígitos
double Reais de dupla precisão 64 Precisão de 15 dígitos
char Caractere 1 -128 a 127
Sintaxe para declaração de variáveis:
qualificador_de_tipo identificador [=valor_inicial]
Exemplos:
int X; 
(declara a variável “X”, definindo-a como numérica inteira)
float nota=0.5; 
(declara a variável “nota”, definindo-a como numérica real e atribuindo a ela o 
valor inicial 0.5)
Tabela 2 – Palavras reservadas da linguagem C
auto bool break case char const
continue default do double else enum
extern float for goto if int
long register return short signed sizeof
static struct switch typedef union unsigned
void volatile while
Operadores Aritméticos
Existem cinco operadores aritméticos em C. Cada operador aritmético está rela-
cionado a uma operação aritmética elementar: adição, subtração, multiplicação e di-
visão. Existe ainda um operador (%) chamado operador de módulo, cujo significado 
é o resto da divisão inteira. Os símbolos dos operadores aritméticos são:
14
15
Tabela 3
Operador Operação 
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo (resto da divisão inteira)
Exemplo :
Algumas expressões aritméticas:
1+2 a-4.0 b*c valor_1/taxa num%2
Os operandos das expressões aritméticas devem ser constantes numéricas ou iden-
tificadores de variáveis numéricas. Os operadores +, -, * e / podem operar números 
de todos os tipos (inteiros ou reais), porém, o operador de módulo (%) somente aceita 
operandos inteiros. 
Exemplo :
Expressões válidas:
Tabela 4
Expressão Resultado
6.4 + 2.1 8.5
7 - 2 5
2.0 * 2.0 4.0
6 / 3 2
10 % 3 1
Operadores Relacionais
Nas expressões que são avaliadas pelas estruturas condicionais, utilizamos opera-
dores de relação (também conhecidos como operadores de comparação), os quais nos 
permitem verificar se um determinado valor é igual ou não a um outro, se é maior ou 
menor, ou seja, os operadores relacionais verificam a relação de magnitude e igualdade 
entre dois valores. A linguagem C nos oferece seis operadores relacionais, a saber:
Tabela 5
Operador Signifi cado
> Maior que
< Menor que
>= Maior ou igual a (não menor que)
<= Menor ou igual a (não maior que)
== Igual a 1
!= Não igual a (diferente de)
15
UNIDADE Programação Estruturada
Operadores Lógicos
São operadores que utilizam a lógica booleana para a construção de expressões 
condicionais. Por exemplo: se eu quiser que uma determinada rotina seja executada 
somente quando os valores de duas variáveis (x e y) forem iguais a zero, eu construo 
a seguinte expressão:
Tabela 6
Pseudolinguagem Linguagem C
Se x = 0 e y = 0 entao ... if (x == 0 && y == 0) { ...
Por outro lado, se eu quiser que uma determinada rotina seja executada quando 
o valor de uma das duas variáveis for igual a zero, ou seja, se x for igual a zero ou y 
for igual a zero, eu construo a seguinte expressão:Tabela 7
Pseudolinguagem Linguagem C
Se x = 0 ou y = 0 entao ... if (x == 0 ¦¦ y == 0) { ...
A Tabela 8 apresenta os três operadores lógicos da linguagem C.
Tabela 8 – Operadores lógicos
Operador Função booleana Significado
&& And (e) Conjunção
|| Or (ou) Disjunção
! Not (não) Negação
Funções Nativas
Chamamos de funções nativas aquelas que pertencem às bibliotecas originais 
da linguagem C (bibliotecas nativas). Essas bibliotecas, que fazem parte do pacote 
da linguagem, são arquivos do tipo header (cabeçalho) que contêm rotinas pré-
-programadas (funções), agrupadas por tipo de operação. Por exemplo, a biblioteca 
STDIO.H contém as funções de entrada e saída de dados (printf, scanf, fprintf, 
fopen etc.). A seguir, estão relacionadas algumas bibliotecas nativas e suas respec-
tivas funções:
STDIO.H
Acrônimo da expressão Standard Input-Output (Entrada e Saída Padrão). Essa 
 biblioteca contém as funções responsáveis pelas entradas e saídas de dados (via tecla-
do, arquivos ou canais de comunicação). Principais funções dessa biblioteca:
16
17
• scanf (formatted scan – varredura formatada): entrada de dados via dispo-
sitivo padrão;
• printf (formatted print – impressão formatada): saída de dados via dispo-
sitivo padrão. 
CONIO.H
Acrônimo da expressão Console Input-Output (entrada e saída via console). Essa 
biblioteca contém as funções complementares de entrada e saída de dados via teclado, 
monitor de vídeo ou canais de comunicação. Principais funções dela:
• getch (get character – obter caractere): entrada de caractere via disposi-
tivo padrão;
• putch (put character – põe caractere): envio de um caractere para o dispo-
sitivo padrão;
• kbhit (key hit – pressionamento de tecla): verifica se uma tecla foi pressionada. 
MATH.H
Math (Matemática), contém um conjunto de funções matemáticas, sendo as 
principais:
• sin (seno); 
• cos (cosseno);
• tan (tangente);
• asin (arco seno);
• acos (arco-cosseno);
• atan (arco-tangente);
• log (logaritmo natural);
• log10 (logaritmo de base 10);
• sqrt (raiz quadrada).
Estruturas de Controle
As estruturas de controle são classificadas em dois grupos: estruturas condicionais 
e estruturas de repetição. As condicionais (também chamadas de estruturas de deci-
são) permitem que o programa faça a escolha do que executar, de acordo com a ava-
liação de uma condição (expressão condicional). Dentro desse grupo, a linguagem C 
nos oferece as funções nativas if e switch. As estruturas de repetição, como o nome 
sugere, permitem que o programa execute um determinado bloco de instruções 
repetidas vezes. Dentro desse grupo, a linguagem C nos oferece as funções nativas 
while, for e do/while. O diagrama apresentado na Figura 1 ilustra o conjunto de 
estruturas de controle da linguagem C.
17
UNIDADE Programação Estruturada
Estruturas de
controle
Estruturas 
condicionais
if switch while for do/while
Estruturas de 
repetição
Figura 1 – Conjunto de estruturas de controle da linguagem C
Estruturas Condicionais
Uma estrutura condicional, ou estrutura de decisão, permite que o programa faça 
a escolha do que executar, de acordo com uma condição. A linguagem C nos oferece 
duas funções nativas para trabalharmos com esse tipo de estrutura: if e switch.
A estrutura if é a mais simples estrutura de controle do C. Essa estrutura permite 
executar um entre dois blocos de instruções. O controle de qual bloco será executado 
é dado por uma condição (expressão lógica ou numérica). Essa estrutura pode se 
apresentar de dois modos diferentes: condicional simples ou composta.
A estrutura de decisão condicional simples permite a execução ou a não execu-
ção de um bloco de instruções de acordo com o resultado da avaliação de uma condi-
ção. Por exemplo, se a expressão condicional for verdadeira, o bloco será executado, 
caso contrário, o bloco não será executado. O fluxograma que ilustra esse tipo de 
estrutura é mostrado na Figura 2.
Condição
InstruçõesFalsa
Verdadeira
Figura 2 – Estrutura condicional simples
Também é possível escrever uma estrutura que execute um entre dois blocos de 
instruções. É o que chamamos de estrutura condicional composta, cujo fluxograma 
é apresentado na Figura 3.
Condição
bloco 2bloco 1
Verdadeira Falsa
Figura 3 – Estrutura condicional composta
18
19
Para ilustrar o uso das estruturas condicionais simples e compostas, construire-
mos dois pequenos programas. O primeiro receberá um número real pelo teclado e, 
se o número for positivo, calculará a sua raiz quadrada, caso contrário, ou seja, se 
o número for negativo ou zero, nada será feito. O segundo programa, receberá um 
número inteiro pelo teclado e, se o número for par, exibirá a mensagem “Número 
par”; caso contrário, exibirá a mensagem “Número ímpar”.
Programa exemplo 1:
Início
�m
Não
Sim
r
n > 0
n
r = √n
Figura 4 – Uso de uma estrutura condicional simples
Programa exemplo 2: 
Início
�m
Não Sim
“par”“ímpar”
n = 0
n
r = n % 2
Figura 5 – Uso de uma estrutura condicional composta
Vimos que o comando if permite que o programa escolha um caminho entre no 
máximo dois caminhos alternativos, de acordo com o resultado da avaliação de uma 
expressão condicional. Porém, existem situações em que desejamos que o programa 
escolha um caminho entre várias alternativas. Nesses casos, podemos utilizar um 
encadeamento de comandos if, conforme podemos observar no fluxograma apre-
sentado na Figura 6.
19
UNIDADE Programação Estruturada
Início
Fim
d
NãoSim
“Domingo”
“Segunda”
“Terça”
“Quarta”
“Quinta”
“Sexta”
“Sábado” “Inválido”
d = 1
NãoSim d = 2
NãoSim d = 3
NãoSim d = 4
NãoSim d = 5
NãoSim d = 6
NãoSim d = 7
Figura 6 – Encadeamento de comandos if
O algoritmo apresentado no fluxograma da Figura 6 mostra a sequência de ins-
truções para o recebimento de um número pelo teclado (representado pela variável 
“d”), o qual é avaliado dentro de um encadeamento de ifs. Em síntese, esse algoritmo 
recebe um número que representa um dia da semana e, em seguida, mostra por 
extenso o nome correspondente a esse dia. Observe que o algoritmo espera receber 
um número entre 1 e 7 (de domingo a sábado, respectivamente). Caso o número 
digitado seja maior que 7, o programa exibirá a mensagem “Inválido”, como pode-
mos notar no fluxograma em questão. O código desse algoritmo em linguagem C é 
apresentado a seguir:
/* Programa exemplo_3
 Mostra o dia da semana por extenso
*/
#include <stdio.h>
main() {
 int d;
 scanf(“%d”,&d); 
 if(d==1) 
 printf(“Domingo”);
 else 
 if(d==2) 
 printf(“Segunda”);
 else
20
21
 if(d==3)
 printf(“Terça”);
 else 
 if(d==4) 
 printf(“Quarta”);
 else
 if(d==5)
 printf(“Quinta”);
 else
 if(d==6)
 printf(“Sexta”);
 else
 if(d==7)
 printf(“Sábado”);
 else
 printf(“Inválido”);
}
Nas situações em que há uma escolha múltipla, pode-se sempre utilizar comandos 
if encadeados, como demonstrado no programa “exemplo_3”. No entanto, a lingua-
gem C tem um comando próprio para esse tipo de situação: o comando switch. 
O programa exemplo_4 apresentado a seguir, faz exatamente a mesma coisa que 
o programa do exemplo anterior, mas utiliza o comando switch em vez da sequência 
encadeada de if. 
/* Programa exemplo_4
 Mostra o dia da semana por extenso usando estrutura switch
*/
#include <stdio.h>
main() {
 int d;
 scanf(“%d”,&d); 
 switch(d) {
 case 1:printf(“Domingo”); break;
 case 2:printf(“Segunda”); break; 
 case 3:printf(“Terça”); break;
21
UNIDADE Programação Estruturada
 case 4:printf(“Quarta”); break;
 case 5:printf(“Quinta”); break;
 case 6:printf(“Sexta”); break; 
 case 7:printf(“Sábado”); break;
 default:printf(“Inválido”);
 }
}
O comando switch funciona do seguinte modo: primeiro, o computador verifi-
ca o valor que está dentrodos parêntesis que aparecem à direita da palavra switch 
(no exemplo, trata-se do valor da variável d). Baseado nesse valor, o computador 
salta para o caso apropriado. Por exemplo, se o valor for 3, o computador salta 
para a instrução que vem após a case 3:. Depois, prossegue com as instruções 
restantes até encontrar a instrução break. Essa instrução faz com que o compu-
tador salte para fora da estrutura switch, isso é, o programa prossegue com a 
instrução que aparece imediatamente após a chave correspondente ao final da 
estrutura switch.
O caso default é opcional e é executado se nenhum dos outros casos ocorrer.
Tudo o que se pode fazer com uma estrutura switch também se pode fazer 
com uma sequência encadeada de if, tal como foi ilustrado no exemplo anterior. 
No entanto, quando se tem muitas opções diferentes, é aconselhável a utilização do 
comando switch, porque isso garante uma maior legibilidade do programa.
Estruturas de Repetição
Estruturas de repetição são recursos da linguagem que permitem a execução de 
uma instrução, ou de um conjunto de instruções, repetidamente e de forma con-
trolada. A linguagem C nos oferece três tipos de comandos dentro dessa categoria: 
while, for e do/while.
Estrutura While
O comando while (enquanto, do inglês) é utilizado nas situações em que 
desejamos que um conjunto de instruções (ou uma única instrução) seja executado 
enquanto uma determinada condição for verdadeira. A sintaxe desse comando é 
apresentada a seguir:
while(condição){
 bloco
}
22
23
onde: 
• condição: é uma expressão lógica ou numérica;
• bloco: é um conjunto de instruções.
Essa estrutura faz com que a condição seja avaliada logo no início. Se a condição 
for verdadeira, o bloco de instruções será executado, e continuará sendo executado, 
repetidamente, enquanto a condição permanecer verdadeira. Caso a condição seja 
falsa, a repetição é terminada, finalizando a estrutura. Observe que nessa estrutura 
o bloco de instruções pode não ser executado nenhuma vez, basta que a condição 
seja inicialmente falsa. O fluxograma dessa estrutura é mostrado na Figura 7.
Condição
Bloco
Verdadeira
Falsa
Figura 7 – Fluxograma que representa uma estrutura de repetição do tipo while
Para exemplificar o uso desse tipo de estrutura, imaginaremos que pretendemos 
fazer um programa para escrever na tela a palavra “Olá” cem vezes. Podemos fazer um 
programa com cem instruções printf(“Olá\n”);, mas isso não seria muito inteligente. 
Uma forma correta para realizar essa tarefa é dizer ao computador para repetir a ins-
trução printf(“Olá\n”); cem vezes. O programa a seguir faz precisamente isso:
/* Programa exemplo_5
 Demonstração da estrutura while
*/
#include <stdio.h>
main(){
 int i;
 i = 0;
 while(i < 100){
 printf(“Olá\n”);
 i++;
 }
} 
23
UNIDADE Programação Estruturada
O programa acima começa por testar a expressão do while. Se a expressão 
(i<=100) for verdadeira, o programa executa a instrução que vem imediatamente 
abaixo (reparar que a instrução tanto pode ser única como ser composta por um 
bloco entre chaves). Depois de executar a instrução, ou o conjunto de instruções de-
limitado pelas chaves, o computador volta a testar a expressão do while e continua 
assim indefinidamente até a expressão se tornar falsa. Nessa altura, o programa 
abandona o ciclo while e executa a instrução que aparece imediatamente após a 
chave que finaliza o ciclo. 
Observe que no exemplo, a variável i serve para controlar a condição do ciclo 
while. Ela assume inicialmente o valor 0 (zero) e, dentro da estrutura while, ela é 
incrementada em 1 (i++), ou seja, no final de cada repetição o seu valor é acrescido 
de 1. Sendo i<100 a expressão avaliada pelo comando while, podemos deduzir que 
o número de repetições será 100 (cem), pois, sendo a variável i incrementada a cada 
repetição, seu valor chegará a 100 após cem repetições. Nesse momento, a estrutura 
será encerra porque a expressão i<100 passará a ser falsa.
Estrutura do/while
A estrutura do/while (faça/enquanto, do inglês) é muito parecida com a estrutura 
while. A diferença é que a condição é avaliada após a execução de cada ciclo de 
 repetição, e não antes, como acontece na estrutura while. A sintaxe desse comando 
é apresentada a seguir:
do{
 bloco
} while(condição);
onde: 
• bloco: é um conjunto de instruções;
• condição: é uma expressão lógica ou numérica.
Essa estrutura faz com que o bloco de instruções seja executado pelo menos uma 
vez. Após a execução do bloco, a condição é avaliada. Se a condição for verdadeira, 
o bloco é executado outra vez; caso contrário, a estrutura é finalizada. A Figura 8 
mostra o fluxograma que a representa.
Bloco
Verdadeira
Falsa
Condição
Figura 8 – Fluxograma que representa uma estrutura de repetição do tipo do/while
24
25
O programa exemplo_6 apresentado a seguir faz a mesma coisa que o pro-
grama exemplo_5, porém, utilizando uma estrutura do/while, em substituição à 
estrutura while.
/* Programa exemplo_6
 Demonstração da estrutura do/while
*/
#include <stdio.h>
main(){
 int i;
 i = 0;
 do{
 printf(“Olá\n”);
 i++;
 }while(i < 100);
} 
Estrutura for
A estrutura for (para, do inglês) é muito semelhante às estruturas de repetição 
vistas anteriormente, entretanto, costuma ser utilizada quando se quer um número 
determinado de ciclos. A contagem dos ciclos é feita por uma variável denominada 
contador. A estrutura for é, às vezes, chamada de estrutura de repetição com con-
tador. Sua sintaxe é a seguinte:
for(inicialização; condição; incremento){
 bloco
}
onde: 
• inicialização: é a expressão de inicialização do contador;
• condição: é a expressão lógica de controle de repetição;
• incremento: é a expressão de incremento do contador;
• bloco: é o conjunto de instruções a ser executado.
Essa estrutura executa um número determinado de repetições usando um conta-
dor de iterações. O contador é inicializado na expressão de inicialização antes da 
primeira iteração – por exemplo: i = 0; ou cont = 20. Então, o bloco será executado 
e, depois de cada iteração, o contador é incrementado de acordo com a expressão 
de incremento – por exemplo: i = i + 1 ou cont = cont-2. Em seguida, a expressão 
25
UNIDADE Programação Estruturada
de condição é avaliada: se a condição for verdadeira, o bloco é executado novamente 
e o ciclo recomeça; se a condição for falsa, encerra-se a estrutura de repetição. Essa 
condição é, em geral, uma expressão lógica que compara o valor do contador com 
um determinado valor limite – por exemplo: i <= 100 ou cont > 0.
O programa exemplo_7 apresentado a seguir realiza o mesmo que os progra-
mas exemplo_5 e exemplo_6, porém, utilizando uma estrutura for para o controle 
das repetições:
/* Programa exemplo_7
 Demonstração da estrutura for
*/
#include <stdio.h>
main(){
 int i;
 for(i=0; i<100; i++} {
 printf(“Olá\n”);
 }
} 
26
27
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
 Sites
Treinamento em linguagem C
 https://bit.ly/2Yoyjq9
 Livros
Lógica de Programação a construção de algoritmos e estruturas de dados
FORBELLONE, A. L. V.; EBESPACHER, H. F. Lógica de Programação a 
construção de algoritmos e estruturas de dados. 3 ed. São Paulo: Pearson, 2005. 
Treinamento em Linguagem
MIZRAHI, V. V. Treinamento em Linguagem C. 2. ed. São Paulo: Pearson, 2008. 
 Leitura
A problemática do desenvolvimento de software: crise ou calamidade crônica?
https://bit.ly/2zURmih
27
UNIDADE Programação Estruturada
Referências
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. 
Porto Alegre: AMGH, 2016. (e-book)
SEBESTA, R. W. Conceitos de Linguagens de Programação. 11. ed. Porto Alegre: 
Bookman, 2018.
SOFFNER, R. Algoritmos e Programação em Linguagem C. 1. ed. São Paulo: 
Saraiva, 2013. (e-book)
28

Outros materiais