You are on page 1of 199

Professora Me.

Gislaine Camila Lapasini Leal

ALGORITMOS E LGICA DE
PROGRAMAO II

GRADUAO
ANLISE E DESENVOLVIMENTO DE SISTEMAS
SISTEMAS PARA INTERNET
MARING-PR
2012

Reitor: Wilson de Matos Silva


Vice-Reitor: Wilson de Matos Silva Filho
Pr-Reitor de Administrao: Wilson de Matos Silva Filho
Presidente da Mantenedora: Cludio Ferdinandi

NEAD - Ncleo de Educao a Distncia

Diretoria do NEAD: Willian Victor Kendrick de Matos Silva


Coordenao Pedaggica: Gislene Miotto Catolino Raymundo
Coordenao de Polos: Diego Figueiredo Dias
Coordenao Comercial: Helder Machado
Coordenao de Tecnologia: Fabrcio Ricardo Lazilha
Coordenao de Curso: Danilo Xavier Saes
Supervisora do Ncleo de Produo de Materiais: Nalva Aparecida da Rosa Moura
Capa e Editorao: Daniel Fuverki Hey, Fernando Henrique Mendes, Luiz Fernando Rokubuiti e Thayla Daiany Guimares
Cripaldi
Superviso de Materiais: Ndila de Almeida Toledo
Reviso Textual e Normas: Cristiane de Oliveira Alves, Janana Bicudo Kikuchi, Jaquelina Kutsunugi e Maria Fernanda
Canova Vasconcelos

Ficha catalogrfica elaborada pela Biblioteca Central - CESUMAR





CENTRO UNIVERSITRIO DE MARING. Ncleo de Educao

a distncia:
C397 Algoritmos e lgica de programao II / Gislaine Camila Lapa

sini Leal. Maring - PR, 2012.
199 p.
Graduao em Anlise e Desenvolvimento de Sistemas e

Sistemas para Internet- EaD.

1. Algoritmos. 2. Programao. 3.EaD. I. Ttulo.

CDD - 22 ed. 005.1


CIP - NBR 12899 - AACR/2

Av. Guedner, 1610 - Jd. Aclimao - (44) 3027-6360 - CEP 87050-390 - Maring - Paran - www.cesumar.br
NEAD - Ncleo de Educao a Distncia - bl. 4 sl. 1 e 2 - (44) 3027-6363 - ead@cesumar.br - www.ead.cesumar.br

ALGORITMOS E LGICA DE
PROGRAMAO II
Professora Me. Gislaine Camila Lapasini Leal

APRESENTAO DO REITOR

Viver e trabalhar em uma sociedade global um grande desafio para todos os cidados.
A busca por tecnologia, informao, conhecimento de qualidade, novas habilidades para
liderana e soluo de problemas com eficincia tornou-se uma questo de sobrevivncia no
mundo do trabalho.
Cada um de ns tem uma grande responsabilidade: as escolhas que fizermos por ns e pelos
nossos far grande diferena no futuro.
Com essa viso, o Cesumar Centro Universitrio de Maring assume o compromisso
de democratizar o conhecimento por meio de alta tecnologia e contribuir para o futuro dos
brasileiros.
No cumprimento de sua misso promover a educao de qualidade nas diferentes reas
do conhecimento, formando profissionais cidados que contribuam para o desenvolvimento
de uma sociedade justa e solidria , o Cesumar busca a integrao do ensino-pesquisa
-extenso com as demandas institucionais e sociais; a realizao de uma prtica acadmica que
contribua para o desenvolvimento da conscincia social e poltica e, por fim, a democratizao
do conhecimento acadmico com a articulao e a integrao com a sociedade.
Diante disso, o Cesumar almeja ser reconhecido como uma instituio universitria de
referncia regional e nacional pela qualidade e compromisso do corpo docente; aquisio
de competncias institucionais para o desenvolvimento de linhas de pesquisa; consolidao
da extenso universitria; qualidade da oferta dos ensinos presencial e a distncia; bem
-estar e satisfao da comunidade interna; qualidade da gesto acadmica e administrativa;
compromisso social de incluso; processos de cooperao e parceria com o mundo do
trabalho, como tambm pelo compromisso e relacionamento permanente com os egressos,
incentivando a educao continuada.
Professor Wilson de Matos Silva
Reitor

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Caro aluno, ensinar no transferir conhecimento, mas criar as possibilidades para a sua
produo ou a sua construo (FREIRE, 1996, p. 25). Tenho a certeza de que no Ncleo de
Educao a Distncia do Cesumar, voc ter sua disposio todas as condies para se
fazer um competente profissional e, assim, colaborar efetivamente para o desenvolvimento da
realidade social em que est inserido.
Todas as atividades de estudo presentes neste material foram desenvolvidas para atender o
seu processo de formao e contemplam as diretrizes curriculares dos cursos de graduao,
determinadas pelo Ministrio da Educao (MEC). Desta forma, buscando atender essas
necessidades, dispomos de uma equipe de profissionais multidisciplinares para que,
independente da distncia geogrfica que voc esteja, possamos interagir e, assim, fazer-se
presentes no seu processo de ensino-aprendizagem-conhecimento.
Neste sentido, por meio de um modelo pedaggico interativo, possibilitamos que, efetivamente,
voc construa e amplie a sua rede de conhecimentos. Essa interatividade ser vivenciada
especialmente no ambiente virtual de aprendizagem AVA no qual disponibilizamos, alm do
material produzido em linguagem dialgica, aulas sobre os contedos abordados, atividades de
estudo, enfim, um mundo de linguagens diferenciadas e ricas de possibilidades efetivas para
a sua aprendizagem. Assim sendo, todas as atividades de ensino, disponibilizadas para o seu
processo de formao, tm por intuito possibilitar o desenvolvimento de novas competncias
necessrias para que voc se aproprie do conhecimento de forma colaborativa.
Portanto, recomendo que durante a realizao de seu curso, voc procure interagir com os
textos, fazer anotaes, responder s atividades de autoestudo, participar ativamente dos
fruns, ver as indicaes de leitura e realizar novas pesquisas sobre os assuntos tratados,
pois tais atividades lhe possibilitaro organizar o seu processo educativo e, assim, superar os
desafios na construo de conhecimentos. Para finalizar essa mensagem de boas-vindas, lhe
estendo o convite para que caminhe conosco na Comunidade do Conhecimento e vivencie
a oportunidade de constituir-se sujeito do seu processo de aprendizagem e membro de uma
comunidade mais universal e igualitria.
Um grande abrao e timos momentos de construo de aprendizagem!
Professora Gislene Miotto Catolino Raymundo
Coordenadora Pedaggica do NEAD- CESUMAR

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

APRESENTAO
Livro: ALGORITMOS E LGICA DE PROGRAMAO II
Professora Me. Gislaine Camila Lapasini Leal

Caro(a) aluno(a)! Bem-vindo disciplina de Algoritmos e Lgica de Programao II. Sou


a professora Gislaine Camila e nesta disciplina aprenderemos a utilizar a linguagem C na
construo de nossos programas. Para tanto, retomaremos alguns conceitos vistos na
disciplina de Algoritmos e Lgica de Programao I.
Nesta disciplina voc aprender os conceitos iniciais da linguagem de programao C. uma
linguagem que vem se popularizando por ser uma linguagem de propsito geral e no ser
vinculada a um hardware especfico ou qualquer outro sistema.
Apresento a voc o livro que nortear seus estudos nesta disciplina, auxiliando no aprendizado
da linguagem C. Em cada unidade sero apresentados exemplos de programas em C.
importante que voc compile cada um desses programas gerando o executvel e verifique o
funcionamento dos mesmos. Apenas a leitura dos exemplos no suficiente, o aprendizado
requer prtica.
Na Unidade I veremos o histrico da linguagem C, suas caractersticas, os conceitos iniciais
sobre programao, destacando as etapas para a criao de um programa, bem como
sua estrutura. Estudaremos os tipos de dados disponveis na linguagem C, como nomear
identificadores, declarar variveis, constantes, realizar operaes de atribuio, entrada e sada
de dados. Conheceremos, tambm, as palavras reservadas da linguagem C, os operadores e
funes intrnsecas. A partir destes contedos iniciaremos a construo de nossos primeiros
programas em C.
Na Unidade II aprenderemos a construir programas com desvio de fluxo, isto , vamos
impor condies para a execuo de uma determinada instruo ou conjunto de instrues.
Trataremos como construir programas em C utilizando a estrutura condicional simples,
composta e a estrutura case.
A Unidade III aborda a construo de programas com repetio de um determinado trecho
de cdigo sem a necessidade de reescrev-lo vrias vezes. Estudaremos as estruturas de
repetio disponveis na linguagem C: estrutura for, estrutura while e estrutura do while.
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Discutiremos sobre as diferenas de cada uma delas e como utiliz-las.


Na Unidade IV sero apresentados os conceitos sobre estruturas de dados homogneas
(vetores e matrizes) e estruturas de dados heterogneas (structs). Essas estruturas permitem
agrupar diversas informaes em uma nica varivel. Aprenderemos como declar-las e
manipul-las nas operaes de entrada, atribuio e sada. Trataremos questes relacionadas
pesquisa de um elemento em um vetor e a ordenao de um vetor segundo algum critrio.
Estudaremos tambm como manipular as cadeias de caracteres (strings) e conheceremos
as funes disponveis na linguagem C que nos permitem concatenar, comparar, verificar
tamanho, converter os caracteres para maisculo/minsculo e outros.
Por fim, na unidade V, trabalharemos com a modularizao de nossos programas utilizando
funes. Abordaremos os conceitos relacionados ao escopo de variveis e a passagem de
parmetros por valor e por referncia, prottipo de funo e recursividade. Estudaremos as
funes disponveis para manipulao de arquivos que nos permitem abrir um arquivo, verificar
erro durante a abertura, verificar fim de arquivo, fechar um arquivo, ler e gravar caractere,
cadeia de caracteres e demais tipos de dados. Sero apresentados programas que ilustram o
funcionamento de cada uma dessas funes.
Em cada unidade deste livro voc encontrar indicaes de leitura complementar, as quais
enriquecero o seu conhecimento e apresentaro mais exemplos de programas em C. Preste
ateno nos momentos REFLITA, pois eles apresentam informaes importantes que voc
precisa pensar com calma e que te auxilia a consolidar o conhecimento adquirido. Alm disso,
sero apresentadas ATIVIDADES DE AUTOESTUDO que permitem que voc coloque em
prtica os conhecimento e EXERCCIOS DE FIXAO, que apresentam exerccios resolvidos
que podem te auxiliar no aprendizado e sanar eventuais dvidas.
Desejo a voc um bom estudo!

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

SUMRIO
UNIDADE I
CONCEITOS INICIAIS
LINGUAGEM C

16

CONCEITOS INICIAIS DE PROGRAMAO

18

ESTRUTURA DE UM PROGRAMA EM C

19

IDENTIFICADORES

23

PALAVRAS RESERVADAS

26

CONSTANTES

28

EXPRESSES E OPERADORES

28

FUNES INTRNSECAS

33

ATRIBUIO

34

ENTRADA DE DADOS

35

SADA DE DADOS

37

CONSTRUINDO UM PROGRAMA

41

UNIDADE II
ESTRUTURA CONDICIONAL
ESTRUTURA CONDICIONAL SIMPLES

58

ESTRUTURA CONDICIONAL COMPOSTA

62

ESTRUTURA CASE

65

UNIDADE III
ESTRUTURAS DE REPETIO
ESTRUTURA FOR

91

ESTRUTURA WHILE

94

ESTRUTURA DO WHILE

96

PROBLEMA 1

98

PROBLEMA 2

102

UNIDADE IV
VETORES, STRINGS, MATRIZES E ESTRUTURAS
VETORES

119

ORDENAO EM VETOR

125

PESQUISA EM VETOR

127

STRINGS

130

MATRIZES

135

ESTRUTURAS

138

PROBLEMA

144

UNIDADE V
FUNES E ARQUIVOS
FUNES

164

ESCOPO DE VARIVEIS

168

PASSAGEM DE PARMETROS

169

PASSAGEM DE PARMETROS POR VALOR

171

PASSAGEM DE PARMETROS POR REFERNCIA

172

PROTTIPO DE FUNES

175

RECURSIVIDADE

176

ARQUIVOS

178

CONCLUSO

195

REFERNCIAS

199

UNIDADE I

CONCEITOS INICIAIS

Professora Me. Gislaine Camila Lapasini Leal

Objetivos de Aprendizagem
Conhecer os conceitos iniciais de programao, da linguagem C e a estrutura de
um programa em C.
Estudar os tipos de dados, variveis, constantes, expresses e operadores.
Entender como realizar atribuio, entrada e sada de dados.

Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Linguagem C
Conceitos Iniciais de Programao
Estrutura de um Programa em C
Identificadores
Tipos de Dados
Palavras Reservadas
Variveis
Constantes
Expresses e Operadores
Funes Intrnsecas

Atribuio
Entrada de Dados
Sada de Dados
Construindo um programa

INTRODUO
Nesta primeira unidade, voc ser introduzido ao universo da Linguagem de Programao C,
uma linguagem poderosa e que tem se tornado cada vez mais popular.
Primeiramente, voc conhecer o histrico da linguagem C, suas caractersticas, pontos fortes
e fracos e compiladores disponveis para essa linguagem. Estudar os conceitos bsicos
relacionados programao que possibilitam entender como um cdigo-fonte convertido
em um programa executvel. Alm disso, ter contato com a interface do compilador que
adotaremos na construo de nossos programas.
Estudaremos a estrutura bsica de um programa em C e os elementos que a compe. Ao
construir nossos programas precisamos guardar algumas informaes do problema. Para
isso, veremos o conceito de variveis e constantes e sua sintaxe em C. Conheceremos os
tipos de dados disponveis na linguagem, expresses e operadores, funes intrnsecas e
como utiliz -los em nossos programas. Para obter dados dos usurios, mostrar mensagens e
resultados de processamento estudaremos as funes relacionadas entrada de dados, que
nos permitem interagir como usurio; comando de atribuio que possibilita atribuir valor s
variveis; e funes de sada de dados que permitem o envio de mensagens e exibio dos
resultados do processamento.
Ao final desta unidade, voc ter adquirido conhecimento sobre a estrutura de um programa,
variveis, constantes, palavras reservadas da linguagem C, expresses e operadores, funes
intrnsecas, comando de atribuio, funo de entrada de dados e funo de sada de dados.
Com esses conceitos voc saber construir os primeiros programas em C. Vamos l?

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

15

Fonte: SHUTTERSTOCK.COM

LINGUAGEM C

A linguagem C foi concebida e implementada, inicialmente, para o sistema operacional UNIX, na


dcada de 70 por Dennis Ritchie nos Laboratrios Bell da companhia AT & T (KERNINGHAN;
RITCHIE, 1988).
C uma linguagem de programao de propsito geral, com uma sintaxe muito compacta e
que permite a combinao de operadores de diferentes tipos. Alm disso, no est vinculada
a um hardware especfico ou qualquer outro sistema. De modo que fcil escrever programas
que sero executados sem mudanas em qualquer mquina que suporta C (KERNINGHAN;
RITCHIE, 1988).
Segundo Rocha (2006), a principal caracterstica da linguagem C que ela combina as
vantagens de uma linguagem de alto nvel com a eficincia da linguagem de montagem
assembly. Em C possvel realizar operaes aritmticas sobre ponteiros e operaes sobre
palavras binrias.
Podemos dizer que esta liberdade oferecida pela linguagem C uma faca de dois gumes, pois
ao passo que permite com que programadores experientes escrevam cdigos mais compactos

16

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

e eficientes, possibilita que programadores inexperientes realizam construes sem sentido,


as quais so aceitas como vlidas pelo compilador. Deste modo, ao construir programas
utilizando C devemos ficar atento s construes da linguagem (ROCHA, 2006).
Ascencio e Campos (2010) destacam que durante alguns anos, o padro da linguagem C foi
fornecido com a verso do sistema operacional UNIX. No entanto, com a popularizao dos
microcomputadores foram criadas vrias implementaes da linguagem C o que ocasionou
vrias discrepncias. Em 1983, o ANSI (American National Standards Institute) criou um
comit para definir um padro que guiasse todas as implementaes da linguagem C.
Na literatura podemos encontrar diversos compiladores C, sendo os principais: GCC, Dev C++,
C++ Builder, Turbo C e Visual C#. Em nossa disciplina de Algoritmos e Lgica de Programao
II adotaremos o Turbo C (Figura 1).

Figura 1- Interface Turbo C

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

17

CONCEITOS INICIAIS DE PROGRAMAO


A programao inicia-se com a escrita do programa (cdigo-fonte) e encerra com a gerao
de um programa executvel. A escrita do programa deve ser realizada em um editor de textos.
Aps a criao do programa temos que compil-lo. O processo de compilao analisa o cdigo
e o converte para um cdigo objeto, que a verso em linguagem de mquina do programa. Se
o programa possui chamada s funes de bibliotecas, o lincador (ligador) rene o programa
objeto com as bibliotecas referenciadas e gera o cdigo executvel (ROCHA, 2006).
A Figura 2 ilustra o processo de criao de um programa, desde a criao do cdigo-fonte at
a gerao de um programa executvel.

Cdigo-Fonte

Compilador

Bibliotecas

Programa - objeto

Ligador

Programa - executvel

Figura 2 - Etapas para a criao de um programa


Fonte: adaptado de Rocha (2006)

Em nossa disciplina escreveremos nossos programas utilizando o Turbo C (Figura 1). Na Figura
3 so mostrados os menus em que as operaes compilar, ligar e executar so realizadas.

18

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Figura 3 - Turbo C

ESTRUTURA DE UM PROGRAMA EM C
Kerninghan e Ritchie (1988) destacam que a nica maneira de aprender uma nova linguagem
de programao escrevendo programas nela. Com isto, para entender a estrutura de um
programa em C, vamos construir nosso primeiro programa Hello, world (Quadro 1).
Quadro 1 - Programa HelloWorld

# include <stdio.h>
main()
{
printf(Hello, World);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

19

Fique tranquilo!! Vamos analisar o programa acima linha a linha e entender o que cada um
destes elementos significa.
Na primeira linha temos a instruo #include <stdhio.h>, que indica ao compilador que deve
incluir o contedo do arquivo pr-definido chamado de stdio.h. Este arquivo chamado de
arquivo de cabealho e contm declaraes de funes para entrada e sada de dados.
Portanto, no podemos esquecer de inserir esta linha em nossos programas.
Em seguida, temos a instruo main (), que identifica uma funo denominada main. Os
programas em C so formados por chamadas de funo. Obrigatoriamente, todo programa
deve possuir uma funo main, a qual chamada quando o programa executado. Note que
o contedo da funo delimitado por chaves, de modo anlogo ao incio e fim do algoritmo.
Isto quer dizer que o contedo entre as chaves ser executado sequencialmente quando o
programa for executado.
Dentro das chaves temos duas instrues, a primeira dela printf, que uma funo
previamente definida no arquivo de cabealho stdio.h que imprime na tela a sequncia de
caracteres Hello, World. A ltima linha, return (0), indica o valor de retorno da funo. No
caso 0, indica que o programa terminou sem erros. Observe que ao final de cada instruo h
um ponto e vrgula, isto , todos os comandos em C terminam com ;.
Agora que vimos cada um dos elementos, voc deve estar se perguntando como executar
isso. Para visualizar nosso programa precisamos escrever o cdigo no Turbo C, conforme
Figura 4. Observe que alm do cdigo apresentado no Quadro 1, h outras informaes que
esto entre /* */. Este comando utilizado para escrever comentrios em nosso cdigo, isto ,
o compilador desconsidera qualquer coisa que esteja entre estes dois pares de smbolos. Um
comentrio pode ter mais de uma linha.
Os comentrios so textos que podem ser inseridos com o objetivo de document-lo. Em
nossos programas adotaremos como padro a escrita de comentrios. Eles nos auxiliam a

20

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

entender o funcionamento dos programas.

Figura 4 - Primeiro programa em C Cdigo


Aps escrever o cdigo do programa temos que compil-lo (ALT + F9). neste momento que
sero realizadas as verificaes de sintaxe. E para visualizar o resultado do programa basta
execut-lo. No caso do Turbo C podemos ir ao menu Run ou pressionar as teclas Ctrl + F9.
Ao executar o cdigo temos como resultado a impresso na tela da cadeia de caracteres Hello,
World, conforme pode ser visualizado na Figura 5.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

21

Figura 5 - Primeiro programa em C Sada


A estrutura geral de um programa em C apresentada no Quadro 2.
Quadro 2 - Estrutura geral de um programa em C

main()
{
conjunto de instrues;
return (0);
}

22

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Fonte: SHUTTERSTOCK.COM

IDENTIFICADORES

Os identificadores consistem nos nomes que utilizamos para representar variveis, constantes,
tipos, funes e rtulos do programa. Um identificador uma sequncia de uma ou mais
letras, dgitos ou sublinhas, que comea com uma letra ou sublinha. Em geral, evita-se iniciar
um identificador com sublinhas, pois este tipo de notao reservado para o compilador
(PAPPAS; MURRAY, 1991).
A linguagem C case sensitive, isto , o compilador considera letras maisculas e minsculas
como caracteres distintos. Os comandos em C s podem ser escritos em minsculos, seno
o compilador ir interpret-los como variveis. O Quadro 3 apresenta alguns exemplos de
identificadores vlidos e invlidos.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

23

Quadro 3 - Exemplo de identificadores


Identificadores vlidos

Identificadores invlidos

b@

media

media idade

altura2

x*y

media_idade

#media

x36

idade!

Devemos lembrar que em C o identificador A no o mesmo que o identificador a, cada um


um identificador nico.
TIPOS DE DADOS
Na linguagem C as informaes podem ser representadas por sete tipos bsicos: char, int,
float, double, enum, void e pointer (PAPPAS; MURRAY, 1991).
O tipo char composto por caracteres simples e strings (cadeia de caracters). O tipo int
so dados numricos que no possuem componentes decimais ou fracionrios. O tipo float,
valores em ponto flutuante, so nmeros que tm componente decimal ou fracionrio. O
tipo double so valores em ponto flutuante de preciso dupla, que apresentam alcance mais
extenso. O tipo enum, dados enumerados, possibilitam os tipos definidos pelo usurio. O tipo
void significa valores que ocupam 0 bits e no possuem valor algum. O tipo pointer representa
um tipo especial, que no contm informao, mas sim, uma localizao de memria que
contm o dado verdadeiro.
A partir dos tipos bsicos podem ser definidos outros tipos de dados utilizando modificadores.
No Quadro 4 so apresentadas informaes relativas faixa de valores e o tamanho

24

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

aproximado dos tipos de dados. Observe que foram aplicados os modificadores unsigned,
short e long aos tipos bsicos.
O modificador unsigned utilizado para declarar os tipos como sem sinal, duplicando assim
a gama de valores que pode ser representado. O modificador short reduz a capacidade de
armazenamento, enquanto o modificador long aumenta a capacidade.
Quadro 4 - Tipos de dados e faixa de valores
Tipo

Faixa de Valores

Tamanho (aproximado)

char

- 128 a 127

8 bits

unsigned char

0 a 255

8 bits

int

- 32.768 a 32.767

16 bits

unsigned int

0 a 65.535

16 bits

short int

- 32.768 a 32.767

16 bits

long

- 2.147.483.648 a 2.147.483.647

32 bits

unsigned long

0 a 4.294.967.295

32 bits

float

3.4 x 10 a 3.4 x 10

double

1.7 x 10 a 1.7x10

long double

-38

-308

3.4 x 10

-49328

38

32 bits

308

64 bits
4932

a 1.1 x 10

80 bits

Fonte: Ascencio; Campos (2010)

Ascencio e Campos (2010) apontam que a faixa de valores e o tamanho podem variar de
acordo com o compilador. Os valores descritos acima esto em conformidade com o padro
ANSI.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

25

PALAVRAS RESERVADAS
As palavras reservadas, tambm conhecidas como palavras-chave, so identificadores que
possuem uso especfico para a linguagem C, ou seja, tm significados especiais.
No Quadro 5 so destacadas as palavras reservadas da linguagem C. Lembre-se: no
podemos utilizar como identificador uma palavra reservada.
Quadro 5 - Palavras reservadas da linguagem C

Fonte: Pappas; Murray (1991)

26

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

VARIVEIS
Em nossos programas precisamos armazenar algumas informaes e para isto utilizamos as
variveis. Uma varivel um espao na memria principal do computador que pode conter
diferentes valores a cada instante de tempo (LOPES; GARCIA, 2002).
Na linguagem C as variveis so declaradas aps a especificao de seus tipos. Sendo os
tipos mais utilizados: int, float e char. Note que em C no existe o tipo de dados boolean, pois
considera verdadeiro qualquer valor diferente de 0. Alm disso, no h um tipo especial para
armazenar cadeia de caracteres (strings), sendo utilizado um vetor contendo vrios elementos
do tipo char (ASCENCIO; CAMPOS, 2010).
A sintaxe para declarao de variveis dada por:
<tipo>

identificador;

No Quadro 6 so apresentados exemplos de declarao de variveis. Atente para o fato de


que a declarao de variveis seguida de ; . Observe, tambm, que podemos declarar em
uma mesma linha diversas variveis do mesmo tipo.
Quadro 6 - Exemplos de declarao de variveis

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

27

CONSTANTES
Uma constante armazena informaes que no variam com o tempo, ou seja, o seu contedo
um valor fixo. Em C podemos definir constantes por meio da seguinte sintaxe:
#define <identificador> valor
Observe que na definio de constantes no utilizamos o ; no final.

EXPRESSES E OPERADORES
As expresses esto diretamente relacionadas ao conceito de frmula matemtica, em que um
conjunto de variveis e constantes relaciona-se por meio de operadores (LOPES; GARCIA,
2002).
As expresses aritmticas so aquelas em que o resultado consiste em um valor numrico.
Desta forma, apenas operadores aritmticos e variveis numricas (inteiro e real) podem ser
utilizadas em expresso desse tipo.
O Quadro 7 apresenta os operadores aritmticos da linguagem C, destacando suas
representaes e forma de uso.
Quadro 7 - Operadores aritmticos

28

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Em C temos, tambm, os operadores aritmticos de atribuio (Quadro 8) que so utilizados


para representar de maneira sinttica uma operao aritmtica, seguida de uma operao de
atribuio (ASCENCIO; CAMPOS, 2010).
Quadro 8 - Operadores matemticos de atribuio

Fonte: adaptado de (ASCENCIO; CAMPOS, 2010)

As expresses relacionais referem-se comparao entre dois valores de um tipo bsico. Os


operadores relacionais so destacados no Quadro 9, em que possvel visualizar o operador,
smbolo associado e forma de uso.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

29

Quadro 9 - Operadores relacionais

Fonte: adaptado de (ASCENCIO; CAMPOS, 2010)

As expresses lgicas so aquelas cujo resultado consiste em um valor lgico verdadeiro ou


falso. Neste tipo de expresso podem ser usados os operadores relacionais, os operadores
lgicos ou expresses matemticas.
No Quadro 10 so descritos cada um dos operadores lgicos: conjuno, disjuno e negao.

30

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 10 - Operadores lgicos


Operador

Smbolo

Explicao

Disjuno

||

A disjuno entre duas variveis resulta em um valor


verdadeiro quando pelo menos uma das variveis verdadeira.

Conjuno

&&

A conjuno entre duas variveis resulta em um valor


verdadeiro somente quando as duas varveis so verdadeiras.

Negao

A negao inverte o valor de uma varivel. Se a varivel A


verdadeira, a negao de A, torna o valor da varivel falso.

Fonte: adaptado de (LOPES; GARCIA, 2002)

Em uma expresso podemos ter mais de um operador. Em situaes que h um nico operador
a avaliao da expresso realizada de forma direta. Quando h mais de um operador
necessria a avaliao da expresso passo a passo, ou seja, um operador por vez. No Quadro
11 apresentado um resumo com os principais operadores da linguagem C, destacando desde
a precedncia mais alta at a mais baixa, e descreve como cada operador est associado
(esquerda para direita ou direita para esquerda). Cabe ressaltar, que os operadores entre
linhas tm a mesma precedncia.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

31

Quadro 11 - Nveis de Precedncia de Operador


Operador

Descrio

()

Expresso de funo

Esquerda

++ --

Incremento/decremento

Esquerda

Negao

Direita

&

Endereo

Direita

Multiplicao

Esquerda

Diviso

Esquerda

Resto

Esquerda

Adio

Esquerda

Subtrao

Esquerda

<

Menor que

Esquerda

<=

Menor ou igual

Esquerda

>

Maior que

Esquerda

>=

Maior ou igual

Associa pela

Mais alta

Esquerda

==

Igual

Esquerda

!=

Diferente

Esquerda

&&

Conjuno (E lgico)

Esquerda

||

Disjuno (Ou lgico)

Esquerda

?:

Condicional

Direita

Atribuio

=, %=, +=, - =, *=, /=,


>>=, <<=, &=, ^=, \ =
,

Vrgula

Precedncia

Esquerda
Esquerda

Mais baixa

Fonte: adaptado de (PAPPAS; MURRAY, 1991)

32

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Fonte: SHUTTERSTOCK.COM

FUNES INTRNSECAS

As funes intrnsecas so frmulas matemticas prontas que podemos utilizar em nossos


programas. O Quadro 12 apresenta as principais funes da linguagem C, destacando o
comando associado, um exemplo e o que ela faz.
Quadro 12 - Funes intrnsecas da linguagem C
Funo

Exemplo

Objetivo

ceil

ceil(x)

Arredonda um nmero real para cima. Por exemplo, cel(2.3) 3.

cos

cos(x)

Calcula o cosseno de x. O valor de x deve estar em radianos.

exp

exp(x)

Obtm o logaritmo natural e elevado potncia x.

abs

abs(x)

Retorna o valor absoluto de x.

floor

floor(x)

Arredonda um nmero real para baixo. Por exemplo,


floor(2.3) 2.

log

log(x)

Retorna o logaritmo natural de x.

log10

log10(x)

Retorna o logaritmo de base 10 de x.

modf

z=modf(x,&y)

pow

pow(x,y)

Calcula a potncia de x elevado a y.

sin

sin(x)

Calcula o seno de x.

sqrt

sqrt(x)

Calcula a raiz quadrada de x.

tan

tan(x)

Calcula a tangente de x.

M_PI

M_PI

Retorna o valor de

Decompe o nmero real armazenado em x em duas partes:


y recebe a parte fracionria e z a parte inteira.

Fonte: Ascencio; Campos (2010)


ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

33

ATRIBUIO
O comando de atribuio usado para conceder valores ou operaes a variveis. O smbolo
utilizado para a atribuio = (sinal de igualdade). A sintaxe para atribuio dada por:
identificador = expresso
O identificador representa a varivel a qual ser atribudo um valor e o termo expresso o
que ser atribudo, podendo ser uma expresso aritmtica ou lgica. Alguns exemplos do uso
do comando de atribuio podem ser visualizados no Quadro 13.
Quadro 13 - Exemplos de atribuio

Note que na linguagem C os caracteres so representados entre apstrofos () e as cadeias


de caracteres entre aspas ().

34

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Fonte: SHUTTERSTOCK.COM

ENTRADA DE DADOS

A entrada de dados permite receber os dados digitados pelo usurio. Os dados recebidos so
armazenados em variveis. Na linguagem C existem diversas funes para entrada de dados,
algumas delas so cin, gets e scanf (Quadro 14) (ASCENCIO; CAMPOS, 2010).
Os comandos gets e scanf armazenam toda a cadeia de caracteres at que seja pressionada
a tecla ENTER. J o comando cin armazena os caracteres at que seja encontrado um espao
em branco.
Quadro 14 - Exemplos de entrada de dados

Fonte: adaptado de (ASCENCIO; CAMPOS, 2010)

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

35

A funo scanf a mais utilizada, sendo sua sintaxe dada por:


scanf (expresso de controle, lista de argumentos);
O argumento expresso de controle deve ser escrito entre aspas e contm os especificadores
de formato (Quadro 15) que indicam como os dados digitados devem ser armazenados. No
argumento lista de variveis, as variveis devem ser separadas por vrgulas e cada uma delas
deve ser precedida pelo operador de endereo (&). As usadas para receber valores por meio
da funo scanf devero ser passadas pelos seus endereos. O operador de endereo indica
o endereo da posio de memria para a varivel (ROCHA, 2006).
Na leitura de cadeias de caracteres (strings) no se utiliza o operador de endereo (&), pois o
identificar do vetor j o endereo do primeiro elemento do vetor.
Quadro 15 - Especificadores de formato
Cdigo

Significado

%c

Leitura de um nico caractere

%d

Leitura de um nmero decimal inteiro.

%i

Leitura de um decimal inteiro.

%u

Leitura de um decimal sem sinal.

%e

Leitura de um nmero em ponto flutuante com sinal opcional.

%f

Leitura de um nmero em ponto flutuante com ponto opcional.

%g

Leitura de um nmero em ponto flutuante com expoente opcional.

%o

Leitura de um nmero em base octal.

%s

Leitura de uma string.

%x

Leitura de um nmero em base hexadecimal.

%p

Leitura de um ponteiro.

Fonte: adaptado de (ROCHA, 2006)

36

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Tomemos como exemplo, ler uma varivel que armazena a idade, o uso da funo scanf deve
ser realizado do seguinte modo:
scanf (%d, &idade);
Para utilizar os comandos de entrada de dados necessrio incluir a biblioteca stdio.h,
utilizando o comando #include <stdio.h>;

SADA DE DADOS
A sada de dados permite mostrar dados aos usurios. Na linguagem C utilizamos a funo
printf para exibir resultados do processamento e mensagens. A sintaxe desta funo :
printf (expresso de controle, lista de argumentos);
O argumento expresso de controle pode conter mensagens que sero exibidas na tela e os
especificadores de formato que indicam o formato que os argumentos devem ser impressos.
A lista de argumentos pode conter identificadores de variveis, expresses aritmticas ou
lgicas e valores constantes.
Alm dos especificadores de formato podemos utilizar cdigos especiais na sada de dados.
Esses cdigos so apresentados no Quadro 16.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

37

Quadro 16 - Cdigos especiais


Cdigo Significado
\n

Nova linha

\t

Tab

\b

Retrocesso

Aspas

\\

Contrabarra

\f

Salta pgina de formulrio

\0

Nulo

Fonte: adaptado de (PAPPAS; MURRAY, 1991)

O programa (Figura 6) apresenta alguns exemplos de uso da funo printf. Para facilitar o
entendimento verifique o que exibido em vdeo para cada uma das instrues.

Figura 6 - Entendendo a funo printf Cdigo

38

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

A sada obtida com a execuo do programa da Figura 6 apresentada na Figura 7. Como


podemos observar as mensagens foram impressas em tela sem quebra de linha. Para imprimir
cada mensagem em uma linha devemos utilizar o comando especial (\n). Este cdigo pode ser
visualizado na Figura 8.

Figura 7 - Entendendo a funo printf Sada


Ao comparar os cdigos da Figura 6 e Figura 8 podemos observar que foi inserido o cdigo
especial \n na funo printf. Esse cdigo responsvel por posicionar o cursor em uma nova
linha. Com isto, temos que a sada a impresso de cada mensagem em uma linha, como
pode ser visualizado na Figura 9.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

39

Figura 8 - Entendendo a funo printf - Cdigo

Figura 9 - Entendendo a funo printf - Sada

40

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Se voc ficou com dvidas quanto ao funcionamento do printf, fique tranquilo!!! Veremos mais
casos de aplicao desta funo.

Fonte: SHUTTERSTOCK.COM

CONSTRUINDO UM PROGRAMA

Vamos elaborar um programa que leia nome, idade e altura de uma pessoa e exiba nome,
idade, altura e ano de nascimento da pessoa. Para facilitar o entendimento sobre o problema
vamos estrutur-lo em trs partes: Entrada Processamento e Sada.
Na entrada de dados temos que obter os dados de nome, idade e altura. Cada um desses
dados precisa ser armazenado em uma varivel e na leitura deles utilizaremos a funo scanf.
Como processamento temos que calcular o ano em que a pessoa nasceu que ser dado pelo
ano atual menos a idade da pessoa. E como sada devemos enviar para a tela o nome, idade,
altura e ano de nascimento. Para mostrar essas informaes no vdeo utilizaremos a funo
printf.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

41

Agora que entendemos o problema podemos partir para a construo do programa. Voc se
recorda da estrutura bsica de um programa em C? Nosso programa deve ter uma funo
main e as instrues tm que estar ente os colchetes.
Os valores obtidos na entrada de dados precisam ser armazenados em variveis. Qual o
tipo de cada varivel? O nome uma cadeia de caracteres, deste modo precisamos de uma
varivel do tipo char. A varivel altura do tipo float e idade do tipo int.
O Quadro 17 apresenta o cdigo para o programa acima descrito.

42

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 17 - Programa em C

#include <stdio.h> /* insere o conteudo do arquivo stdio.h */


main()
{ /* declaracao das variaveis */
int idade, ano;
float altura;
char nome[30];
/*entrada de dados */
printf (Digite o seu nome: ); /*mensagem ao usuario */
scanf (%s, nome); /* leitura do nome */
printf (Digite a idade:); /*mensagem ao usuario */
scanf (%d, &idade); /* leitura da idade */
printf (Digite a altura: );/*mensagem ao usuario */
scanf (%f, &altura); /* leitura da altura*/
/* processamento */
ano = 2012 - idade; /*calculo do ano de nascimento */
/*saida de dados */
printf ( \nO nome e : %s, nome);
printf ( \nA altura e : %f, altura);
printf ( \nA idade e : %d, idade);
printf (\nO ano de nascimento e : %d , ano);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

43

Os resultados da execuo do programa podem ser visualizados na Figura 10. Observe


que inicialmente os dados foram obtidos do usurio e, em seguida, apresentados. Na sada
de dados as variveis do tipo float podem ser formatadas em relao ao nmero de casas
decimais a ser apresentado. Ao imprimir uma varivel do tipo float utilizando a funo printf
o padro completar o nmero com zeros direita, at que fique com seis casas decimais
(Figura 8).

Figura 10 - Programa em C - Sada


No entanto, podemos formatar de um modo diferente usando junto com o especificador de
formato o nmero de casas decimais que desejamos. O Quadro 18 apresenta o mesmo
programa com formatao para a impresso da varivel altura com 2 casas decimais. Na
funo printf ao utilizar o especificador de formato inserimos um ponto e o nmero de casas
decimais desejado.

44

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 18 - Programa em C

#include <stdio.h> /* insere o conteudo do arquivo stdio.h */


main()
{ /* declaracao das variaveis */
int idade, ano;
float altura;
char nome[30];
/*entrada de dados */
printf (Digite o seu nome: ); /*mensagem ao usuario */
scanf (%s, nome); /* leitura do nome */
printf (Digite a idade:); /*mensagem ao usuario */
scanf (%d, &idade); /* leitura da idade */
printf (Digite a altura: );/*mensagem ao usuario */
scanf (%f, &altura); /* leitura da altura*/
/* processamento */
ano = 2012 - idade; /*calculo do ano de nascimento */
/*saida de dados */
printf ( \nO nome e : %s, nome);

printf ( \nA altura e : %.2f, altura);
printf ( \nA idade e : %d, idade);
printf (\nO ano de nascimento e : %d , ano);
return (0);

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

45

A Figura 11 apresenta o resultado obtido com a formatao da sada para a varivel real altura.

Figur a 11 - Programa em C - Sada Formatada

CONSIDERAES FINAIS
Nesta unidade, voc deu os primeiros passos no aprendizado sobre a Linguagem de
Programao C, conhecendo as caractersticas, pontos fortes e fracos, e como o cdigo que
escrevemos se torna um programa executvel.
Conhecemos a estrutura bsica de um programa em C, que possui uma funo main, que
chamado quando o programa executado. Vimos que o contedo da funo delimitado por
chaves e o contedo entre elas executado de modo sequencial. Alm disso, estudamos que
ao final das instrues devemos inserir a funo return (0), que o programa terminou sem
erros e que todos os comandos terminam com ponto e vrgula.
Aprendemos como documentar nossos cdigos inserindo comentrios os quais so escritos
entre /* */ e podem ter mais de uma linha. Entendemos as regra para a nomeao de
identificadores.
Estudamos os sete tipos bsicos de dados (char, int, float, double, enum, void e pointer),
operadores e funes intrnsecas disponveis na linguagem C. Em relao aos tipos de dados
vimos que eles podem gerar outros tipos a partir da aplicao dos modificadores unsigned,
short e long.

46

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Entendemos como realizar a atribuio, entrada de dados e sada de dados. O comando usado
para atribuio representado por = . A entrada de dados realizada por meio da funo
scanf. E, para mostrar dados ao usurio utilizamos a funo de sada printf. Nas funes de
entrada e sada de dados estudamos como utilizar os especificadores de formato e cdigos
especiais. Por fim, colocamos em prtica a construo de um programa utilizando os conceitos
aprendidos no decorrer desta unidade.

Para conhecer um pouco mais sobre o histrico da linguagem C, acesse o texto disponvel em: <http://
pt.wikipedia.org/wiki/C_%28linguagem_de_programa%C3%A7%C3%A3o%29>.
Para entender como instalar o Turbo C no Windows Vista e Seven, acesse o vdeo disponvel em:
<http://www.youtube.com/watch?v=3FXAwCv6amU>.

A linguagem C case sensitive.

ATIVIDADE DE AUTOESTUDO
1. Marque com um X os identifi cadores incorretos.

( ) idade

( ) media idade

( ) 2nome

( ) nome*r

( ) x2

( ) 012

( ) media_peso%
( ) aluno_nota

( ) endereco+cep
( )A

( ) /fone
( ) 1234P

2. Escreva um programa que leia o nome de uma pessoa e escreva a seguinte mensagem
Bem-vindo disciplina de Algoritmos e Lgica de Programao II, Fulano.
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

47

3. Escreva um programa que l um nmero positivo inteiro e apresente o quadrado e a raiz


quadrada deste nmero.
4. Escreva um programa que recebe quatro nmeros inteiros, calcula e apresenta a mdia
aritmtica entre eles. Observao: no esquea de formatar o valor da mdia no momento
de apresent-lo, utilize duas casas decimais.
5. Escreva um programa que dado o raio de um crculo calcule sua rea e o permetro. A rea
a superfcie do objeto, dada por
e o permetro a medida do contorno do
objeto dado por P
. Dica: utilize as funes intrnsecas vistas na unidade.
6. Identifique os erros no programa abaixo.
Quadro 19 - Programa em C

#include <stdio.h> /* insere o conteudo do arquivo stdio.h


main()
{ /* declaracao das variaveis */
int num1, num2, total
/*entrada de dados */
printf (Digite o primeiro numero: ); /*mensagem ao usuario */
scanf (%d, num1); /* leitura do primeiro numero */
printf (Digite o segundo numero:); /*mensagem ao usuario */
scanf (%d, &num2); /* leitura do segundo numero*/
/* processamento */
total = num1 + num2 /*calculo do ano de nascimento */
/*saida de dados */
printf (\n A soma dos nmeros e : %d , soma);
return (0);
}

48

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

EXERCCIOS DE FIXAO
1. Escreva um programa que leia um nmero inteiro e apresente seu antecessor e seu sucessor.
Quadro 20 - Programa em C

#include <stdio.h>
main ()
{
int num, ant, suc;
printf( Digite o numero:);
scanf (%d, &num);
ant = num - 1;
suc = num +1;
printf(\n O antecessor e: %d, ant);
printf(\n O sucessor e: %d, suc);
return (0);
}
Quadro 21 - Programa em C

#include <stdio.h>
main ()
{
int num;
printf( Digite o numero:);
scanf (%d, &num);
printf(\n O antecessor e: %d, num -1);
printf(\n O sucessor e: %d, num+1);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

49

2. Elabore um programa que receba quatro notas e calcule a mdia aritmtica entre elas.
Quadro 22 - Programa em C

#include <stdio.h>
main ()
{
float n1, n2, n3, n4, media;
printf( Digite a nota 1:);
scanf (%f, &n1);
printf( Digite a nota 2:);
scanf (%f, &n2);
printf( Digite a nota 3:);
scanf (%f, &n3);
printf( Digite a nota 4:);
scanf (%f, &n4);
media = (n1 + n2+ n3+ n4)/4;
printf( A media e: %.2f, media);
return (0);
}

50

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

3. Faa um programa que receba o valor de um depsito e o valor da taxa de juros, calcule e
apresente o valor do rendimento e o valor total (valor do depsito + valor do rendimento).
Quadro 23 - Programa em C

#include <stdio.h>
main ()
{
float deposito, taxa, rendimento, total;
printf( Informe o valor do deposito:);
scanf (%f, &deposito);
printf(\n Informe a taxa de juros:);
scanf (%f, &taxa);
rendimento = deposito * (taxa/100);
total = deposito + rendimento;
printf(\n O rendimento e: %.2f, rendimento);
printf(\n O total e: %.2f, total);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

51

4. Escreva um programa que receba dois nmeros, calcule e apresente um elevado ao outro.
Quadro 24 - Programa em C

#include <stdio.h>
#include <math.h>
main ()
{
float num1, num2, total;
printf( Informe o primeiro numero:);
scanf (%f, &num1);
printf(\n Informe o segundo numero:);
scanf (%f, &num2);
total = pow(num1, num2);
printf(\n %.2f elevado a %.2f e: %.2f, num1, num2, total);
return (0);
}

52

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

5. Elabore um programa que calcule a rea de um trapzio.


Quadro 25 - Programa em C

#include <stdio.h>
main ()
{
float base1, base2, altura, area;
printf( Informe o valor da base maior:);
scanf (%f, &base1);
printf(\n Informe o valor da base menor:);
scanf (%f, &base2);
printf(\n Informe o valor da altura:);
scanf (%f, &altura);
area = ((base1 + base2) * altura)/2;
printf(\n A area do trapezio e: %.2f, area);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

53

ALBANO, R. S. Programao em Linguagem C. Editora Cincia Moderna, 2010.

Sinopse: a linguagem C utilizada na rea de programao. O livro Programao em linguagem C


oferece mais de 200 cdigos-fontes, distribudos entre exemplos e exerccios de fi xao. indicado
para alunos de cursos de graduao, tcnicos ou cursos livres. Alm disso, os autodidatas podero
utilizar este livro, j que o mesmo abrange de forma sequencial a fase introdutria da linguagem de
programao C at a sua fase intermediria. Esta obra contm vrios exerccios executados passo a
passo que permitem que o leitor possa acompanhar o desenvolvimento de maneira til e efi caz. Desta
forma, o prprio leitor poder implementar cada exerccio medida que vai lendo o livro. O mesmo
apresenta-se estruturado de forma que, sempre ao fi nal de cada captulo, sejam apresentados exerccios de reviso abrangendo cada contedo estudado, com o objetivo de avaliar e consolidar os conhecimentos adquiridos. Salientando que todos os exerccios possuem resoluo contida no fi nal do livro.

54

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

UNIDADE II

ESTRUTURA CONDICIONAL
Professora Me. Gislaine Camila Lapasini Leal

Objetivos de Aprendizagem
Conhecer a estrutura condicional simples.
Conhecer a estrutura condicional composta.
Conhecer a estrutura case.
Elaborar algoritmos utilizando estrutura condicional.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Estrutura condicional
Estrutura condicional simples
Estrutura condicional composta
Estrutura case

INTRODUO
Nesta unidade, voc estudar a estrutura condicional conhecendo a estrutura condicional
simples, composta e estrutura case. Com os conhecimentos adquiridos na unidade I
conseguamos construir programas sequenciais, isto , que a partir da entrada, os dados eram
processados e apresentvamos algumas informaes na sada.
Na estrutura condicional podemos impor condies para a execuo de uma instruo ou
conjunto de instrues, isto , podemos criar condies que permitem desviar o fluxo de
execuo de um programa. Para construir essas condies utilizaremos os conceitos de
variveis e expresses vistos na unidade I. Estudaremos a estrutura condicional simples
que nos permite tomar uma deciso. A estrutura condicional composta que a partir de uma
expresso, podemos seguir dois caminhos, um quando o resultado do teste verdadeiro e
outro quando o resultado falso. E a estrutura case que uma generalizao da estrutura
condicional composta em que pode haver uma ou mais condies a serem testadas e cada
uma delas pode ter uma instruo diferente associada.
Ao estudar cada estrutura condicional veremos um exemplo e construiremos algoritmos para
visualizar a aplicao dos conceitos estudados.
Ao final desta unidade estaremos aptos a construir programas com desvio de fluxo, aumentando
assim, o leque de problemas que podemos solucionar.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

57

Fonte: SHUTTERSTOCK.COM

ESTRUTURA CONDICIONAL

A estrutura condicional fundamental para qualquer linguagem de programao, uma vez


que sem elas o fluxo seria seguido sequencialmente, sem nenhum desvio, ou seja, instruo
a instruo. A estrutura condicional possibilita o desvio do fluxo do programa, sendo tambm
denominada de estrutura de seleo ou estrutura de controle (MANZANO e OLIVEIRA, 1997;
ASCENCIO e CAMPOS, 2010).
A estrutura condicional consiste em uma estrutura de controle de fluxo que permite executar
um ou mais comandos se a condio testada for verdadeira ou executar um ou mais comandos
se for falsa (LOPES; GARCIA 2002).
Nas sees seguintes estudaremos as estruturas condicionais da Linguagem C.

ESTRUTURA CONDICIONAL SIMPLES


Na estrutura condicional simples o comando s ser executado se a condio for verdadeira.
Uma condio uma comparao que possui dois valores possveis: verdadeiro ou falso
(ASCENCIO; CAMPOS, 2010).

58

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

A sintaxe do comando :

if (<condio>)
{
<instrues para condio verdadeira>;
}
A estrutura condicional simples tem por finalidade tomar uma deciso. De modo que
se a condio que est sendo testada for verdadeira so executadas todas as instrues
compreendidas entre { }. Ao trmino da execuo, o algoritmo segue o primeiro comando aps
}. Se a condio que est sendo testada for falsa o algoritmo executa a primeira instruo
aps o }, no executando as instrues compreendidas entre {}.
Em C obrigatrio o uso de chaves quando existe mais de um comando a executar. No
podemos esquecer de inserir o ; ao final de cada instruo.
Agora que conhecemos a sintaxe da estrutura condicional simples vamos construir nosso
primeiro programa em C com desvio de fluxo. O problema consiste em obter um nmero
inteiro e se este for par imprimir sua raiz quadrada.
O Quadro 26 apresenta o programa em C para o problema descrito acima. Lembre-se que os
textos compreendidos entre /* */ correspondem a comentrios e no executados.
Note que neste programa inserimos o contedo da biblioteca stdio.h e math.h. A biblioteca
math.h prpria para clculos matemticos e inclui funes, tais como: potncia, raiz quadrada,
funes trigonomtricas e outras.
Em relao s variveis foram declaradas duas variveis num e raiz. O nmero inteiro obtido do
usurio armazenado na varivel num e o resultado do clculo da raiz quadrada deste nmero
armazenado na varivel raiz. O teste lgico realizado na estrutura condicional simples (if)

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

59

consiste em verificar se o valor do resto da diviso do nmero lido por dois igual a zero. Se
este valor for verdadeiro executado o conjunto de instrues delimitado por { }, isto , temos
a execuo da instruo de atribuio do valor da raiz quadrada do nmero varivel raiz,
seguido da impresso de uma mensagem ao usurio informando o resultado. Se o valor do
teste lgico for falso executada a linha com o comando return (0).
Quadro 26 - Programa em C

/* Estrutura condicional simples em C */


#include <stdio.h> /* esta instrucao insere o conteudo do arquivo stdio.h */
#include <math.h> /*insere o conteudo do arquivo math, que tem a funcao
sqrt, calcula da raiz quadrada */
main () /* todo programa em C deve possuir essa linha */
{ /* delimita o inicio das instrucoes */
int num;
float raiz;
printf( Digite um numero inteiro:);
scanf (%d, &num);
if (num % 2 == 0 )
{
raiz = sqrt(num);
printf (A raiz quadrada e: %.3f, raiz);
}
return (0); /* este retorno indica que nao houve erro */
} /*delimite o fim do conjunto de instrucoes da funcao main */
Vamos analisar o resultado da simulao do programa para os valores 18 (Figura 12) e
15 (Figura 13), respectivamente. Como 18 um nmero par o resultado do teste lgico

60

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

verdadeiro, com isto temos a impresso do valor da raiz quadrada, no caso 4.243. Observe
que o valor apresentado possui trs casas decimais devido formatao definida no comando
printf (%.3f).

Figura 12 - Programa em C - Sada


No caso do valor 15, o resultado do teste lgico falso. Deste modo, as instrues
compreendidas entre { } no so executadas, portanto temos a execuo do return (0).

Figura 13 - Programa em C - Sada


ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

61

ESTRUTURA CONDICIONAL COMPOSTA


Na estrutura condicional composta realizada a avaliao de uma nica expresso lgica. Se
o resultado dessa avaliao for verdadeiro executado a instruo ou o conjunto de instrues
compreendido entre o comando entre as chaves aps o if. Se o resultado da avaliao for falso
executado a instruo ou o conjunto de instrues entre chaves aps o else.
A sintaxe da estrutura condicional composta :

if (<condio>)
{
<instrues para condio verdadeira>;
}
else
{
<instrues para condio falsa>;
}
Para facilitar o entendimento quanto ao funcionamento da estrutura condicional composta
vamos construir um programa para identificar se um nmero par ou mpar. Se o nmero
for par devemos apresentar sua raiz quadrada e se for mpar devemos apresentar o nmero
elevado ao quadrado.
No Quadro 27 apresentado um programa em C que verifica se o nmero par ou mpar. Em
relao s variveis foram declaradas trs variveis num, quadrado e raiz. O nmero inteiro
obtido do usurio armazenado na varivel num.
O teste lgico realizado na estrutura condicional verifica se o valor do resto da diviso do
nmero lido por dois igual a zero. Se este valor for verdadeiro executado o conjunto de
instrues aps o if delimitado por { }, isto , temos a execuo da instruo de atribuio do

62

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

valor da raiz quadrada do nmero varivel raiz, seguido da impresso de uma mensagem
ao usurio informando o resultado. Se o valor do teste lgico for falso executado o conjunto
de instrues aps o else delimitado por { } em que calculado o valor de num ao quadrado.
Quadro 27 - Programa em C

/* Estrutura condicional composta em C */


#include <stdio.h> /* esta instrucao insere o conteudo do arquivo stdio.h
*/
#include <math.h> /*insere o conteudo do arquivo math, que tem a funcao
sqrt que efetua o calculo da raiz quadrada */
main () /* todo programa em C deve possuir essa linha */
{ /* delimita o inicio das instrucoes */
int quadrado, num;
float raiz;
printf( Digite um numero inteiro:);
scanf (%d, &num);
if (num % 2 == 0 )
{
raiz = sqrt(num);
printf (O numero e par);
printf (\nA raiz quadrada e: %.3f, raiz);
}
else
{
quadrado = num * num;
printf (O numero e impar);
printf (\nO numero ao quadrado e: %d, quadrado);
}
return (0); /* este retorno indica que nao houve erro */
} /*delimite o fim do conjunto de instrucoes da funcao main */

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

63

Tomemos como exemplo os valores 15 (Figura 14) e 16 (Figura 15), respectivamente. Vamos
analisar o resultado da execuo do programa para o valor 15. Na avaliao do teste lgico
temos que o resto da diviso de 15 por 2 no igual a zero, isto , o resultado do teste lgico
falso. Com isto, temos a execuo do conjunto de instrues aps o else. O resultado da
execuo apresentado na Figura 14.

Figura 14 - Programa em C - Sada


Ao analisar o nmero 16 temos que o resultado do teste lgico verdadeiro. Deste modo,
executado o conjunto de instrues aps o if, como pode ser visto na Figura 15.

64

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Figura 15 - Programa em C - Sada

Fonte: SHUTTERSTOCK.COM

ESTRUTURA CASE

A estrutura case consiste em uma generalizao do if, em que somente uma condio era
avaliada e dois caminhos poderiam ser seguidos, um para o resultado da avaliao ser
verdadeiro e outro para falso. Na estrutura case pode haver uma ou mais condies a serem
avaliadas e um comando diferente associado a cada uma delas, isto , uma construo de

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

65

mltiplas possibilidades de deciso que compara o resultado de uma expresso com uma
srie de valores constantes (LOPES; GARCIA, 2002).
A estrutura case utilizada quando temos situaes mutuamente exclusivas, ou seja, em que
se uma instruo for executada as demais no sero. Para este tipo de situao recomenda-se
o uso de um comando seletivo (ASCENCIO; MOURA, 2010).
A sintaxe dessa estrutura :

switch (<varivel>)
{

case <valor 1> : <instrues>;
break;

case <valor 2> : <instrues>;
break;

case <valor 3> : <instrues>;
break;

default: <instrues>;
}
Nesta estrutura, o comando switch avalia o valor da varivel para decidir qual case ser
executado. Cada case representa um possvel valor da varivel, que obrigatoriamente deve
ser do tipo char, unsigned char, int, unsigned int, long ou unsigned long. Para impedir a
execuo das instrues definidas nos demais cases deve-se utilizar o comando break. Se
o valor da varivel no coincidir com aqueles especificados nos cases so executadas as
instrues do default (ASCENCIO; CAMPOS, 2010).
Lopes e Garcia (2002) destacam que a estrutura case bastante utilizado na construo de
menus, tornando-os mais claros.

66

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Para ilustrar o funcionamento da estrutura case vamos construir um programa que permita
ao usurio escolher que operao (1 soma, 2 subtrao, 3 multiplicao e 4 diviso)
deseja realizar com dois nmeros. Precisamos de duas variveis para armazenar cada um dos
nmeros, uma para armazenar a operao selecionada pelo usurio e outra para armazenar o
resultado da operao. Deste modo, temos a declarao de trs variveis do tipo float (num1,
num2 e resultado) e uma varivel do tipo int (op).
A entrada de dados consiste na leitura dos dois nmeros e da operao desejada. Como
processamento temos que identificar a operao selecionada, utilizando a estrutura case, e
efetu-la. A sada de dados a impresso do resultado da operao. O programa em C
apresentado no Quadro 28.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

67

Quadro 28 - Programa em C
/* Estrutura case em C */
#include <stdio.h> /* esta instrucao insere o conteudo do arquivo stdio.h */
main () /* todo programa em C deve possuir essa linha */
{ /* delimita o inicio das instrucoes */
float num1, num2, resultado;
int op;
printf( Digite o primeiro numero:);
scanf (%f, &num1);
printf(\n Digite o segundo numero:);
scanf (%f, &num2);
printf(\nEscolha a operacao: \n 1 - Soma \n 2 - Subtracao \n 3 - Multiplicacao
\n 4 - Divisao \n );
scanf (%d, &op);
switch (op)
{
case 1 : resultado = num1 + num2;

printf ( A soma e : %.3f, resultado);

break;
case 2 : resultado = num1 - num2;

printf ( A subtracao e : %.3f, resultado);

break;
case 3 : resultado = num1 * num2;

printf ( A multiplicacao e : %.3f, resultado);

break;
case 4 : resultado = num1 / num2;

printf ( A divisao e : %.3f, resultado);

break;
default : printf(\n Opcao invalida);
}
return (0); /* este retorno indica que nao houve erro */
} /*delimite o fim do conjunto de instrucoes da funcao main */

68

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

O resultado obtido na execuo do programa para cada uma das operaes


ilustrado nas Figuras 16, 17, 18 e 19.

Figura 16 - Programa em C - Sada

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

69

Figura 17 - Programa em C - Sada

Figura 18 - Programa em C - Sada

70

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Figura 19 - Programa em C - Sada

Voc j se perguntou como ficaria um programa para o mesmo problema sem


utilizar a estrutura case? Podemos resolver de outra forma? O problema pode
ser resolvido utilizando a estrutura condicional composta, como pode ser visto
no Quadro 29.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

71

Quadro 29 - Programa em C
#include <stdio.h> /* esta instrucao insere o conteudo do arquivo stdio.h */
main () /* todo programa em C deve possuir essa linha */
{ /* delimita o inicio das instrucoes */
float num1, num2, resultado;
int op;
printf( Digite o primeiro numero:);
scanf (%f, &num1);
printf(\n Digite o segundo numero:);
scanf (%f, &num2);
printf(\nEscolha a operacao: \n 1 - Soma \n 2 - Subtracao \n 3 - Multiplicacao
\n 4 - Divisao \n );
scanf (%d, &op);
if (op == 1) {
resultado = num1 + num2;
printf ( A soma e : %.3f, resultado);
}
else {
if (op == 2) {

resultado = num1 - num2;

printf ( A subtracao e : %.3f, resultado);
}
else {

if (op == 3) {

resultado = num1 * num2;

printf ( A multiplicacao e : %.3f, resultado);
}
else
{

resultado = num1 / num2;

printf ( A divisao e : %.3f, resultado);
}
}
}
return (0); /* este retorno indica que nao houve erro */
} /*delimite o fim do conjunto de instrucoes da funcao main */

72

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Neste ponto voc pode se questionar quando utilizar cada uma das estruturas. Para auxiliar a
compreenso das estruturas condicionais so apresentadas algumas diretrizes no Quadro 30.
Quadro 30 - Estruturas condicionais
Quando um bloco deve ser executado apenas se uma condio for
verdadeira.

if

Quando uma condio implica a execuo de um ou outro bloco.

if...else

Em situaes que h duas condies mutuamente exclusivas.


Para testar uma expresso que gere valores discretos.

switch...case

Quando o nmero de possibilidades de escolha for razoavelmente


grande e finito.

O Quadro 31 apresenta o algoritmo para o problema de receber dois nmeros e escolher a


operao aritmtica desejada utilizando a estrutura condicional simples. Note que no h uma
regra que nos diga qual estrutura utilizar. Em muitos casos podemos utilizar qualquer uma das
estruturas.
Neste ponto voc deve estar se perguntando qual a diferena entre os programas apresentados
no Quadro 28, Quadro 29 e Quadro 31. Os trs programas so solues para o problema
descrito, o que os diferencia a eficincia. A eficincia pode ser analisada em funo do
nmero de operaes, no caso comparaes que o programa deve realizar.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

73

Quadro 31 - Programa em C

#include <stdio.h> /* esta instrucao insere o conteudo do arquivo stdio.h */


main () /* todo programa em C deve possuir essa linha */
{ /* delimita o inicio das instrucoes */
float num1, num2, resultado;
int op;
printf( Digite o primeiro numero:);
scanf (%f, &num1);
printf(\n Digite o segundo numero:);
scanf (%f, &num2);
printf(\nEscolha a operacao: \n 1 - Soma \n 2 - Subtracao \n 3 Multiplicacao \n 4 - Divisao \n );
scanf (%d, &op);
if (op == 1) {
resultado = num1 + num2;
printf ( A soma e : %.3f, resultado);
}
if (op == 2) {
resultado = num1 - num2;
printf ( A subtracao e : %.3f, resultado);
}
if (op == 3) {
resultado = num1 * num2;
printf ( A multiplicacao e : %.3f, resultado);
}
if (op ==4) {
resultado = num1 / num2;
printf ( A divisao e : %.3f, resultado);
}
return (0); /* este retorno indica que nao houve erro */
} /*delimite o fim do conjunto de instrucoes da funcao main */

74

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Observe que ao utilizar a estrutura condicional simples (Quadro 31) todos os testes lgicos
sero realizados. Por exemplo, se a opo informada for a soma temos que o valor da
varivel op 1. A primeira condio ser testada e o resultado ser verdadeiro e as linhas
compreendidas entre { } sero executadas. A partir da os demais testes lgicos tambm sero
avaliados e as instrues no sero executadas por que o resultado ser falso. Ao utilizar a
estrutura condicional composta ou a estrutura case temos um menor nmero de testes lgicos
para ser avaliado.
Ao analisar o cdigo da estrutura condicional composta (Quadro 29) e estrutura case (Quadro
28) podemos notar que mais fcil compreender o funcionamento do programa utilizando a
estrutura case, pois o cdigo mais claro. Fique tranquilo!! Com a realizao das atividades
prticas voc conseguir definir com mais facilidade quando melhor utilizar cada uma das
estruturas.

CONSIDERAES FINAIS
Nesta unidade, voc aprendeu a construir programas em C utilizando a estrutura condicional.
Com essa estrutura possvel elaborar programas em que a execuo de uma instruo ou
um conjunto de instrues est atrelado avaliao de um teste lgico.
Estudamos a estrutura condicional simples, a estrutura condicional composta e a estrutura
case. Vimos que o uso da estrutura condicional simples realizado em situaes em que um
conjunto de instrues deve ser executado apenas se uma condio for verdadeira. A sintaxe
dessa estrutura dada por:

if (<condio>)
{
<instrues para condio verdadeira>;
}

Aprendemos que na estrutura condicional composta realizada a avaliao de uma nica


expresso lgica, no entanto temos dois caminhos para seguir. Se o resultado desta avaliao
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

75

for verdadeiro executado a instruo ou o conjunto de instrues compreendido entre o


comando entre as chaves aps o if. Se o resultado da avaliao for falso executado a
instruo ou o conjunto de instrues entre chaves aps o else. A sintaxe desta estrutura :

if (<condio>)
{
<instrues para condio verdadeira>;
}
else
{
<instrues para condio falsa>;
}
Conhecemos a estrutura case que compara o resultado de uma expresso com uma srie
de valores constantes, em que pode haver uma ou mais condies a serem avaliadas e um
comando diferente associado a cada uma delas. Vimos que esta estrutura deve ser utilizada
em situaes mutuamente exclusivas e sua sintaxe :

switch (<varivel>)
{







}

case <valor 1> : <instrues>;


break;
case <valor 2> : <instrues>;
break;
case <valor 3> : <instrues>;
break;
default: <instrues>;

Vimos que em alguns casos as estruturas condicionais so intercambiveis, isto , podemos


resolver um mesmo problema utilizando a estrutura condicional simples, a estrutura condicional
composta e a estrutura case. Entendemos que a diferena associada ao uso de cada uma delas

76

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

est relacionada eficincia do programa, a qual pode ser avaliada em funo do nmero de
operaes realizadas. Por fim, construmos um programa utilizando a estrutura condicional e
trabalhamos a construo de expresses.
Ao longo desta unidade construmos programas utilizando as funes de entrada e sada de
dados vistas na unidade I e colocamos em prtica o uso das estruturas condicionais. Se voc
ficou com alguma dvida, analise os exerccios de fixao. Mas lembre-se, para que voc fixe
os conceitos importante que voc faa as atividades de autoestudo.

Para saber um pouco mais sobre a estrutura condicional em C acesse: <http://pt.wikibooks.org/wiki/


Programar_em_C/Estudo#Branching_-_IF>.

A estrutura case s pode ser utilizada em situaes mutuamente exclusivas.

ATIVIDADE DE AUTOESTUDO
1. Escreva um programa que receba cinco nmeros inteiros e apresente o maior e o menor.
2. Faa um programa que leia um nmero e informe se ele divisvel por 3 e por 7.
3. Construa um programa que dado um nmero inteiro informe o ms correspondente.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

77

4. Elabore um programa que receba o salrio de um funcionrio e o cdigo do cargo e apresente o cargo, o valor do aumento e o novo salrio. A Tabela abaixo apresenta os cargos.
Cdigo

Cargo

Percentual do aumento

Servente

40%

Pedreiro

35%

Mestre de Obras

20%

Tcnico de Segurana

10%

5. Faa um programa que receba o cdigo do estado de origem da carga de um caminho, o


peso da carga em toneladas e o cdigo da carga.
Cdigo estado

Percentual Imposto

20

15

10

Cdigo da carga

Preo por quilo

10 a 20

180

21 a 30

120

31 a 40

230

Calcule e apresente: o peso da carga em quilos, o preo da carga, o valor do imposto e o valor
total da carga (preo da carga mais imposto).

78

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

EXERCCIOS DE FIXAO
1. Escreva um programa que leia um nmero inteiro e apresente seu antecessor e seu sucessor.
Quadro 32 - Programa em C

#include <stdio.h>
main ()
{
int num, ant, suc;
printf( Digite o numero:);
scanf (%d, &num);
ant = num - 1;
suc = num +1;
printf(\n O antecessor e: %d, ant);
printf(\n O sucessor e: %d, suc);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

79

2. Faa um programa que leia um nmero e informe se ele divisvel por 5.


Quadro 33 - Programa em C

#include <stdio.h>
main ()
{
int num;
printf( Informe o numero:);
scanf (%d, &num);
if (num % 5 == 0)
printf(\n O numero %d e divisivel por 5, num);
else
printf(\n O numero %d nao e divisivel por 5, num);
return (0);
}
3. Elabore um programa que receba o nome e a idade de uma pessoa e informe o nome, a
idade e o valor da mensalidade do plano de sade. A Tabela abaixo apresenta os valores
de mensalidade.

80

At 18 anos

R$ 50,00

De 19 a 29 anos

R$ 70,00

De 30 a 45 anos

R$ 90,00

De 46 a 65 anos

R$ 130,00

Acima de 65 anos

R$ 170,00

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 34 - Programa em C
#include <stdio.h>
main ()
{
char nome[30];
int idade;
printf( Informe o nome:);
scanf (%s, nome);
printf(\n Informe a idade:);
scanf (%d, &idade);
if ( idade <= 18) {
printf (\n Nome %s :, nome);
printf (\n Idade %d:, idade);
printf (\n O valor do plano e: R$50,00);
}
else
{
if ((idade >=19) && (idade <=29))
{
printf (\n Nome %s :, nome);
printf (\n Idade %d:, idade);
printf (\n O valor do plano e: R$70,00);
}
else
{
if ((idade >=30) && (idade <=45))
{
printf (\n Nome %s :, nome);
printf (\n Idade %d:, idade);
printf (\n O valor do plano e: R$90,00);
}
else
{
if ((idade >=46) && (idade <=65))
{
printf (\n Nome %s :, nome);
printf (\n Idade %d:, idade);
printf (\n O valor do plano e: R$130,00);
}
else
{
printf (\n Nome %s :, nome);
printf (\n Idade %d:, idade);
printf (\n O valor do plano e: R$170,00);
}
}
}
}
return (0);
}
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

81

4. Construa um programa que receba a idade de uma pessoa e identifique sua classe eleitoral: no eleitor (menor que 16 anos de idade), eleitor obrigatrio (entre 18 e 65 anos) e
eleitor facultativo (entre 16 e 18 anos e maior que 65 anos).
Quadro 35 - Programa em C

#include <stdio.h>
main ()
{
int idade;
printf(\n Informe a idade:);
scanf (%d, &idade);
if (idade < 16)
{
printf (Nao eleitor);
}
else
{
if ((idade < 18) || (idade > 65))
{
printf (Eleitor facultativo);
}
else
{
printf ( Eleitor obrigatorio);
}
}
return (0);
}

82

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

5. De acordo com uma tabela mdica, o peso ideal est relacionado com a altura e o sexo.
Elabore um algoritmo que receba altura e sexo de uma pessoa e calcule e imprima o seu
peso ideal, sabendo que:

Para homens

(72.7 x altura) -58

Para mulheres

(62.1 x altura) -44.7

Quadro 36 - Programa em C

#include <stdio.h>
main ()
{
float altura, peso;
char sexo;
printf(\n Informe o sexo (M/F):);
scanf(%c, &sexo);
printf(\n Informe a altura:);
scanf (%f, &altura);
if ((sexo== F) || (sexo==f))
{
peso= (62.1 * altura) - 44.7;
}
else
{
peso =(72.7 *altura)-58;
}
printf (\n O sexo e: %c, sexo);
printf (\n A altura e : %.2f, altura);
printf (\n O peso ideal e : %.2f, peso);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

83

6. Faa um programa que informe a quantidade total de calorias a partir da escolha do usurio
que deve informar o prato tpico e a bebida. A Tabela de calorias encontra-se abaixo.
Prato

84

Bebida

Italiano 750 cal

Ch 30 cal

Japons 324 cal

Suco de laranja 80 cal

Salvadorenho 545 cal

Refrigerante 90 cal

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 37 - Programa em C

#include <stdio.h>
main ()
{
int op;
float total;
total = 0;
printf (\n 1 - Italiano 2 - Japones 3 - Salvadorenho);
printf(\n Informe o prato desejado:);
scanf(%d, &op);
switch (op)
{
case 1 : total = total + 750;
break;
case 2: total = total + 324;
break;
case 3: total = total + 545;
break;
}
printf(\n 1 - Cha 2 - Suco de laranja 3 - Refrigerante:);
printf(\n Informe a bebida desejada:);
scanf(%d, &op);
switch (op)
{
case 1 : total = total + 30;
break;
case 2: total = total + 80;
break;
case 3: total = total + 90;
break;
}
printf (\n O total de calorias e : %.2f, total);
return (0);
}
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

85

ALBANO, R. S. Programao em Linguagem C. Editora Cincia Moderna, 2010.

Sinopse: a linguagem C utilizada na rea de programao. O livro Programao em linguagem C


oferece mais de 200 cdigos-fontes, distribudos entre exemplos e exerccios de fi xao. indicado
para alunos de cursos de graduao, tcnicos ou cursos livres. Alm disso, os autodidatas podero
utilizar este livro, j que o mesmo abrange de forma sequencial a fase introdutria da linguagem de
programao C at a sua fase intermediria. Esta obra contm vrios exerccios executados passo a
passo que permitem que o leitor possa acompanhar o desenvolvimento de maneira til e efi caz. Desta
forma, o prprio leitor poder implementar cada exerccio medida que vai lendo o livro. O mesmo
apresenta-se estruturado de forma que, sempre ao fi nal de cada captulo, sejam apresentados exerccios de reviso abrangendo cada contedo estudado, com o objetivo de avaliar e consolidar os conhecimentos adquiridos. Salientando que todos os exerccios possuem resoluo contida no fi nal do livro.

86

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

UNIDADE III

ESTRUTURAS DE REPETIO
Professora Me. Gislaine Camila Lapasini Leal

Objetivos de Aprendizagem
Estudar as estruturas de repetio controladas e condicionais.
Construir programas utilizando estruturas de repetio.

Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Estrutura de Repetio
Estrutura FOR
Estrutura WHILE
Estrutura DO WHILE
Problema 1
Problema 2

INTRODUO
Nesta unidade voc estudar a construo de programas com a repetio de um trecho
de cdigo. A repetio permite executar um conjunto de instrues quantas vezes forem
necessrias sem ter que precisar reescrever trechos de cdigos idnticos.
Aprenderemos como utilizar as estruturas de repetio com laos contados e laos condicionais.
O uso de laos contados restrito a situaes em que sabemos previamente quantas vezes
as instrues precisam ser executadas. Na linguagem C a estrutura de repetio com lao
contado o for.
Nos laos condicionais no sabemos previamente o nmero de execues e atrelamos a
repetio a uma condio. Trataremos os casos com condio no incio e no final do lao,
estudando as estruturas: while e do while.
Para facilitar o aprendizado construiremos algoritmos utilizando cada uma dessas estruturas.
Ao final desta unidade voc estar apto a construir programas com estruturas de repetio
e poder responder s seguintes questes: como repetir um trecho de cdigo um nmero
determinado de vezes? Como repetir um trecho de cdigo com base em uma condio? Que
estrutura de repetio mais adequada para cada problema? Quando utilizar estruturas de
repetio encadeadas?

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

89

Fonte: SHUTTERSTOCK.COM

ESTRUTURA DE REPETIO

H situaes em nossos programas que precisamos repetir um determinado trecho de cdigo


ou todo o cdigo um determinado nmero de vezes. Nestes casos, utilizaremos uma estrutura
de repetio que nos permite criar um loop para efetuar o processamento de um trecho de
cdigo quantas vezes for necessrio. Na literatura essas estruturas de repetio (loop) so,
tambm, denominadas de laos de repetio e malhas de repetio (MANZANO; OLIVEIRA,
1997).
A vantagem da estrutura de repetio que no precisamos reescrever trechos de cdigo
idnticos, reduzindo assim o tamanho do algoritmo. Alm disso, podemos determinar repeties
com nmero de vezes varivel (LOPES; GARCIA, 2002).
Nas estruturas de repetio o nmero de repeties pode ser fixo ou estar relacionado a
uma condio. Isto , os laos de repetio podem ser classificados em laos contados e
laos condicionais. O lao contado utilizado quando conhecemos previamente o nmero
de iteraes que precisa ser realizado. J em um lao condicional este nmero de iteraes

90

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

desconhecido e para controlar o loop utilizamos a estrutura condicional (ASCENCIO;


CAMPOS, 2010).
Na linguagem C utilizamos o comando for para laos contados e os comandos while e do
while para laos condicionais. Nas sees seguintes estudaremos cada uma destas estruturas
de repetio da linguagem C, destacando sua sintaxe e aplicao.

ESTRUTURA FOR
uma estrutura do tipo lao contado, isto , utilizada para um nmero definido de repeties.
Devemos utilizar essa estrutura quando sabemos previamente o nmero de vezes que o trecho
de cdigo precisa ser repetido. A sintaxe desta estrutura :

for ( i= valor inicial; condio;


incremento ou decremento de i);
{
<instrues>;
}
Na primeira parte temos a inicializao da varivel i, que tem como funo controlar o nmero
de repeties do lao. Essa inicializao executada em primeiro lugar e uma nica vez. A
segunda parte consiste em uma expresso relacional que, ao assumir valor falso, determinar
o fim da repetio. A terceira parte responsvel por atualizar (incrementar ou decrementar) o
valor da varivel utilizada para controlar a repetio. A atualizao executada ao fim de cada
iterao (ASCENCIO; CAMPOS, 2010).
Quando temos a execuo de apenas uma linha de comando podemos suprimir as chaves.
Neste caso, o compilador entender que a estrutura de repetio finaliza quando for encontrado
o primeiro ;.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

91

Para facilitar o entendimento vamos construir um programa que efetua a leitura de um nome e
o imprime dez vezes na tela. Como sabemos, o nmero de iteraes que deve ser realizado
utilizamos a estrutura for, em que temos a inicializao da varivel i com valor 1, a expresso
relacional que controla a execuo do lao i<=10 e o incremento da varivel i em uma unidade
a cada execuo do lao.
No Quadro 38 apresentado o programa em C que recebe um nome e o imprime dez vezes.
Note que a linha da instruo for no possui ponto e vrgula e que a expresso relacional atua
enquanto a expresso for verdadeira. Se utilizarmos como condio i == 10 o lao no ser
executado nenhuma vez. Faa esse teste.
Quadro 38 - Programa em C

#include <stdio.h>
main ()
{
char nome[30];
int i ;
printf(\n Informe o nome:);
scanf(%s, nome);
for (i=1; i<=10; i++)
{
printf(\n %s, nome);
}
return (0);
}
O resultado da simulao do programa (Quadro 38) apresentado na Figura 20.

92

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Figura 20 - Programa em C - Sada


Como temos a execuo de uma nica instruo podemos suprimir as chaves, conforme
programa apresentado no Quadro 39.
Quadro 39 - Programa em C

#include <stdio.h>
main ()
{
char nome[30];
int i ;
printf(\n Informe o nome:);
scanf(%s, nome);
for (i=1; i<=10; i++)
printf(\n %s, nome);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

93

Lembre-se, s podemos suprimir as chaves nas situaes em que queremos executar apenas
uma instruo.

ESTRUTURA WHILE
A estrutura while uma estrutura do tipo lao condicional, isto , o loop baseia-se na anlise
de uma condio. Essa estrutura utilizada quando temos um nmero indefinido de repeties
e se caracteriza por realizar um teste condicional no incio. Como o teste condicional
executado no incio, podem ocorrer casos em que as instrues da estrutura de repetio
nunca sejam executadas. Isso acontece quando o teste condicional da estrutura resulta em
falso logo na primeira comparao (ASCENCIO; CAMPOS, 2010).
A sintaxe da estrutura while :

while (condio);
{
<instrues>;
}
Os comandos delimitados pelas chaves so executados enquanto a condio for verdadeira.
Vamos analisar o funcionamento desta estrutura utilizando o exemplo apresentado na seo
anterior, receber um nome e imprimi-lo dez vezes.
Na estrutura while temos que representar o critrio de parada (dez iteraes) utilizando uma
condio. Para tanto, definimos uma varivel que ir controlar o nmero de repeties. Essa
varivel precisa ser inicializada fora da estrutura de repetio e incrementada no interior do
lao. No Quadro 40 apresentado o programa.

94

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 40 - Programa em C

#include <stdio.h>
main ()
{
char nome[30];
int i ;
printf(\n Informe o nome:);
scanf(%s, nome);
i = 0;
while (i != 10)
{
printf(\n %d - %s, i, nome);
i++;
}
return (0);
}
A Figura 21 ilustra o resultado da execuo do programa, em que o lao repetido at que a
expresso relacional (i != 10) se torne falsa.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

95

Figura 21 - Programa em C - Sada


Neste ponto voc pode estar se questionando por que a varivel i no foi inicializada com
o valor um ao invs de zero. Voc j sabe o porqu? Quando o valor de i igual a 10 as
instrues contidas no interior do lao no so executadas, pois a expresso relacional resulta
em falso. Deste modo, teramos a impresso do nome apenas nove vezes. Se quisermos
inicializar a varivel i em um temos que alterar a expresso relacional para i != 11.

ESTRUTURA DO WHILE
A estrutura do while uma estrutura do tipo lao condicional, isto , o loop baseia-se na
anlise de uma condio. Essa estrutura utilizada quando temos um nmero indefinido de
repeties e precisamos que o teste condicional seja realizado aps a execuo do trecho de
cdigo. Nesse tipo de estrutura, o trecho de cdigo executado pelo menos uma vez, pois o
teste condicional realizado no fim (ASCENCIO; CAMPOS, 2010).

96

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

A sintaxe dessa estrutura dada por:

do
{
<instrues>;
}
while (condio);
A diferena entre a estrutura while e do while o momento em que o teste condicional
analisado. No primeiro caso, temos a anlise da condio e a execuo do trecho de cdigo
apenas se o resultado do teste for verdadeiro. No segundo caso temos a execuo do trecho e
depois a anlise da condio, o que implica que o trecho de cdigo ser executado no mnimo
uma vez.
Para esclarecer o funcionamento da estrutura apresentado no Quadro 41 o programa para o
problema descrito na seo anterior utilizando a estrutura do while.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

97

Quadro 41 - Programa em C

#include <stdio.h>
main ()
{
char nome[30];
int i ;
printf(\n Informe o nome:);
scanf(%s, nome);
i = 0;
do
{
printf(\n %d - %s, i, nome);
i++;
}
while (i != 10);
return (0);
}
Se voc ficou com dvidas quanto ao funcionamento desta estrutura, fique tranquilo!! Veremos
mais aplicaes.

PROBLEMA 1
O problema consiste em ler um conjunto de nmeros inteiros e contar a quantidade de nmeros
pares e mpares. A leitura dos nmeros deve ser realizada at que seja lido o valor zero.
A entrada de dados consiste na leitura de nmeros inteiros repetidas vezes, at que o valor

98

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

zero seja digitado. O processamento contar a quantidade de nmeros pares e mpares. E a


sada informar quantos dos nmeros lidos na entrada so pares e quantos so mpares. No
Quadro 42 apresentado um programa para este problema utilizando a estrutura while e no
Quadro 43 utilizando a estrutura do while.
Quadro 42 - Programa em C

#include <stdio.h>
main ()
{
int par, impar, num;
par = 0;
impar = 0;
printf (\n Informe o numero:);
scanf (%d, &num);
while (num !=0)
{
if (num % 2 == 0)
par++;
else
impar++;
printf (\n Informe o numero:);
scanf (%d, &num);
}
printf (\n A quantidade de par e : %d, par);
printf (\n A quantidade de impar e : %d, impar);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

99

Fonte: SHUTTERSTOCK.COM

Note que como a estrutura while realiza o teste no incio, temos que efetuar a leitura do
nmero antes do lao de repetio e no interior do lao tambm. O que aconteceria se no
tivssemos a leitura do nmero dentro do lao de repetio? Nesse caso teramos um lao
infinito, pois a condio num != 0 sempre resultaria em verdadeiro.
Na estrutura do while a leitura do nmero realizada apenas no interior da estrutura de
repetio, pois o teste realizado ao final. Observe que se o primeiro nmero fornecido
pelo usurio for igual a zero as instrues internas ao lao sero executadas, pois o teste
realizado pelo menos uma vez. Deste modo, teremos como sada a quantidade um para o
nmero de pares.

100 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 43 - Programa em C

#include <stdio.h>
main ()
{
int par, impar, num;
par = 0;
impar = 0;
do
{
printf (\n Informe o numero:);
scanf (%d, &num);
if (num % 2 == 0)
par++;
else
impar++;
}
while (num !=0);
printf (\n A quantidade de par e : %d, par);
printf (\n A quantidade de impar e : %d, impar);
return (0);
}
Agora que voc j estudou como utilizar as estruturas de repetio baseadas em lao
condicional, execute os dois programas e compare as sadas.
Fique atento!! No interior da estrutura de repetio while e do while precisamos ter uma
instruo que altere o valor da expresso relacional. Caso contrrio, o lao entrar em loop,
sendo executado infinitamente.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

101

PROBLEMA 2
O problema consiste em auxiliar um professor no fechamento das notas de uma turma. Para
tanto, deve ser construdo um programa que leia o cdigo do aluno, o nmero de notas da
disciplina e as notas. Calcule a mdia final de cada aluno e informe o nmero de alunos
aprovados e reprovados. Para ser aprovado o aluno precisa obter mdia maior ou igual a 6. O
programa encerrado quando informado o cdigo de aluno 0.
A entrada de dados consiste em ler o nmero de notas, o cdigo do aluno e as notas. O
processamento consiste em a partir do nmero de notas informado para a disciplina efetuar a
repetio da leitura de notas, som-las e calcular a mdia aritmtica do aluno. Se a mdia for
maior ou igual a seis devemos incrementar a varivel que controla o nmero de aprovados,
seno temos que incrementar a varivel que controla o nmero de reprovados. Como sada
temos o nmero de alunos aprovados e reprovados.
No Quadro 44 temos a resoluo do problema utilizando a estrutura do while e no Quadro 45
com a estrutura while.

102 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 44 - Programa em C

#include <stdio.h>
main ()
{
float nota, soma, media;
int cod, i, nnota, naprovado, nreprovado;
naprovado = 0;
nreprovado = 0;
printf(\n Informe o numero de notas da disciplina:);
scanf(%d, &nnota);
do
{
printf (\n Informe o codigo do aluno:);
scanf (%d, &cod);
soma = 0;
if (cod != 0)
{
for (i=1; i<=nnota; i++)
{
printf(Informe a %d nota do aluno:, i);
scanf(%f, &nota);
soma = soma + nota;
}
media = soma/nnota;
if (media >=6)
naprovado ++;
else
nreprovado ++;
}
}
while (cod !=0);
printf (\n O numero de aprovados e : %d, naprovado);
printf (\n O numero de reprovados e : %d, nreprovado);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

103

Observe que ao utilizar a estrutura do while precisamos inserir uma condio que verifique
se o cdigo informado diferente de zero, pois como o teste condicional executado ao final
teramos a execuo de todas as instrues de leitura de notas.

104 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 45 - Programa em C

#include <stdio.h>
main ()
{
float nota, soma, media;
int cod, i, nnota, naprovado, nreprovado;
naprovado = 0;
nreprovado = 0;
printf(\n Informe o numero de notas da disciplina:);
scanf(%d, &nnota);
printf (\n Informe o codigo do aluno:);
scanf (%d, &cod);
while (cod != 0)
{
soma = 0;
for (i=1; i<=nnota; i++)
{
printf(Informe a %d nota do aluno:, i);
scanf(%f, &nota);
soma = soma + nota;
}
media = soma/nnota;
if (media >=6)
naprovado ++;
else
nreprovado ++;
printf (\n Informe o codigo do aluno:);
scanf (%d, &cod);
}
printf (\n O numero de aprovados e : %d, naprovado);
printf (\n O numero de reprovados e : %d, nreprovado);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

105

Na construo utilizando a estrutura while foi realizada a leitura do cdigo do aluno antes
da estrutura de repetio, pois a condio testada no incio do lao. Alm disso, a leitura
deve ser realizada no interior da estrutura para que o valor da expresso relacional possa ser
alterado, seno teramos um lao infinito.
Observe que utilizamos encadeamento de estrutura de repetio, isto , uma estrutura de
repetio dentro da outra. No primeiro caso, o encadeamento utilizou as estruturas do while e
for e no segundo caso while e for.
Ao utilizar encadeamento tome cuidado para que todas as instrues da construo interna
estejam embutidas na construo externa (MANZANO e OLIVEIRA, 1997; LOPES e GARCIA,
2002).

CONSIDERAES FINAIS
Nesta unidade, voc aprendeu a construir algoritmos utilizando estruturas de repetio, que
permitem a execuo de um trecho de cdigo repetidas vezes. As estruturas de repetio
tambm so chamadas de lao de repetio.
Estudamos os laos de repetio contados e os laos condicionais. Nos laos de repetio
contados conhecemos a estrutura for que utilizada nos casos em que sabemos quantas
vezes o trecho de cdigo precisa ser repetido. A sintaxe da estrutura for :

for ( i= valor inicial; condio;


incremento ou decremento de i);
{
<instrues>;
}
Nos laos de repetio condicionais vimos as estruturas while e do while. A estrutura while
utilizada quando no sabemos previamente o nmero de repeties que deve ser executado e
impomos uma condio que realizada no incio. A sintaxe da estrutura while :

106 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

while (condio);
{
<instrues>;
}
A estrutura do while utilizada quando temos um nmero indefinido de repeties, no entanto,
o teste lgico realizado no final. A sintaxe desta estrutura :

do
{
<instrues>;
}
while (condio);
Estudamos que as estruturas baseadas em laos condicionais so mais flexveis e que
podem ser substitudas uma pela outra, isto , podemos resolver um problema com algoritmo
utilizando a estrutura while ou com a estrutura do while. Destaca-se que a estrutura for pode
ser substituda pelo uso de estruturas baseadas em laos condicionais.
Ao longo desta unidade construmos algoritmos utilizando todos os conceitos aprendidos e,
tambm, discutimos as particularidades de cada estrutura de repetio enfatizando a forma de
uso de cada uma delas.

As estruturas while e do while podem ser substitudas uma pela outra, alm de poderem substituir
perfeitamente a estrutura for.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

107

Para saber um pouco mais sobre as estruturas de repetio em C, acesse: <http://pt.wikibooks.org/


wiki/Programar_em_C/Estudo#LOOP-_WHILE>.

ATIVIDADE DE AUTOESTUDO
1. Faa um programa que leia nmeros inteiros at que seja informado o valor 0. Apresente a
mdia dos valores, o maior e o menor valor e a quantidade de nmeros pares e mpares.
2. Construa um programa que leia o nmero de termos da srie e imprima o valor de S.

3. Elabore um programa que imprima a tabuada do 1 ao 10.


4. Faa um programa que apresenta a soma de todos os nmeros inteiros mpares entre 200
e 500.
5. Construa um programa que apresente todos os nmeros divisveis por 3 e por 7 que sejam
menores que 30.
6. Elabore um programa que leia uma frase e o nmero de vezes que deseja imprimi-la.
7. Faa um programa que leia um conjunto de pedidos e calcule o total da compra. O pedido
possui os seguintes campos: nmero, data (dia, ms e ano), preo unitrio e quantidade. A
entrada de pedidos encerrada quando o usurio informa zero como nmero do pedido.
8. Elabore um programa que receba a idade, peso, sexo e o estado civil de vrias pessoas e
imprima a quantidade de pessoas casadas, solteiras, separadas e vivas. Apresente a mdia de idade e de peso. O algoritmo fi naliza quando for informado o valor zero para idade.
9. Construa um programa que possibilite calcular a rea total de uma residncia (sala, cozinha, banheiro, quartos etc.). O programa deve solicitar a entrada do nome, a largura e o
comprimento de um determinado cmodo at que o nome do cmodo seja FIM. O programa deve apresentar o valor total acumulado da rea residencial.

108 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

EXERCCIOS DE FIXAO
1. Faa um programa que leia um nmero inteiro e calcule o seu fatorial.
Quadro 46 - Programa em C

#include <stdio.h>
main ()
{
int num,i, fat;
printf (\n Informe o numero:);
scanf (%d, &num);
fat = 1;
for (i=1; i <= num; i++)
fat = fat * i;
printf (\n O fatorial e : %d, fat);
return (0);
}
2. Elabore um programa que apresente todos os nmeros divisveis por 3 que sejam menores
que 100.
Quadro 47 - Programa em C

#include <stdio.h>
main ()
{
int i;
for (i=3; i<=100; i=i+3)
{
printf (\n %d, i);
}
return (0);
}
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

109

3. Construa um programa que receba um nmero inteiro maior que 1 e verifique se ele
primo.
Quadro 48 - Programa em C

#include <stdio.h>
main ()
{
int num, i, qtdade;
printf(\n Informe o numero: );
scanf(%d, &num);
qtdade = 0;
for (i=1; i<=num; i++)
{
if (num % i == 0)
qtdade ++;
}
if (qtdade == 2)
printf (\n O numero e primo.);
else
printf (\n Nao e primo.);
return (0);
}
4. A prefeitura est coletando informaes sobre o salrio e o nmero de filhos dos habitantes. A leitura de dados realizada at que seja informado o valor -1 para o salrio. Apresente a mdia de salrio da populao, a mdia de filhos e o maior salrio.

110 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 49 - Programa em C

#include <stdio.h>
main ()
{
int filhos, npessoas;
float salario, somas, somaf, msalario;
npessoas = 0;
somaf = 0;
somas = 0;
msalario = 0;
printf (\n Informe o salario:);
scanf (%f, &salario);
printf (\n Informe o numero de filhos:);
scanf (%d, &filhos);
while (salario != -1)
{
npessoas++;
if (salario > msalario)
msalario = salario;
somaf = somaf + filhos;
somas = somas + salario;
printf (\n Informe o salario:);
scanf (%f, &salario);
printf (\n Informe o numero de filhos:);
scanf (%d, &filhos);
}
printf (\n A media de salarios e : %.2f, somas/npessoas);
printf (\n A media de filhos e : %.2f, somaf/npessoas);
printf (\n O maior salario e : %.2f, msalario);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

111

5. Escreva um programa que receba a idade e altura de vrias pessoas, calcule e apresente a
mdia de altura e idade das pessoas. A entrada de dados encerrada quando for digitado
o valor 0 para a idade.
Quadro 50 - Programa em C

#include <stdio.h>
main ()
{
int idade, npessoas;
float altura, somaa, somai;
char sexo;
somaa = 0;
somai = 0;
npessoas = 0;
printf (\n Informe a idade:);
scanf (%d, &idade);
printf (\n Informe a altura:);
scanf (%f, &altura);
while (idade != 0)
{
npessoas ++;
somai = somai + idade;
somaa = somaa + altura;
printf (\n Informe a idade:);
scanf (%d, &idade);
printf (\n Informe a altura:);
scanf (%f, &altura);
}
printf (\n A media de altura e : %.2f, somaa/npessoas);
printf (\n A media de idade e : %.2f, somai/npessoas);
return (0);
}

112 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

6. Em uma avaliao de um produto o cliente responde sua opinio (1 satisfatrio; 2 indiferente; 3 insatisfatrio). Faa um programa que leia a idade e opinio e apresente: o
nmero de clientes que respondeu satisfatrio, a mdia de idade dos clientes que opinaram
como satisfatrio e o nmero de quem respondeu insatisfatrio. O programa se encerra
quando for digitado o valor 0 para idade.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

113

Quadro 51 - Programa em C
#include <stdio.h>
main ()
{
int idade, npessoas, npessoasi, npessoass, opiniao;
float somai, media;
npessoas = 0;
npessoass = 0;
npessoasi = 0;
somai = 0;
printf (\n Informe a idade:);
scanf (%d, &idade);
do
{
printf (\n Informe a opiniao:);
scanf (%d, &opiniao);
}
while ((opiniao != 1) && (opiniao!=2) && (opiniao!=3));
while (idade != 0)
{
npessoas ++;
if (opiniao == 1)
{
somai= somai + idade;
npessoass ++;
}
else
{
if (opiniao == 3)
{
npessoasi ++;
}
}
printf (\n Informe a idade:);
scanf (%d, &idade);
do
{
printf (\n Informe a opiniao:);
scanf (%d, &opiniao);
}
while ((opiniao != 1) && (opiniao!=2) && (opiniao!=3));
}
media = (somai/npessoass);
printf (\n O numero de pessoas insatisfeitas e : %d, npessoasi);
printf (\n O numero de pessoas satisfeitas e: %d, npessoass);
printf (\n A media de idade das pessoas satisfeitas e : %.2f, media);
return (0);
}

114 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

OLIVEIRA, U. Programando em C. Editora Cincia Moderna, 2008.


Sinopse: descreve a linguagem C do modo como foi defi nida pelo padro ANSI. Para auxiliar no
aprendizado da programao em C, o livro faz uma introduo com exemplos para os programadores
iniciantes na linguagem. Os exemplos so programas completos que, alm de ensinar a linguagem,
ilustram algoritmos, estruturas de dados e tcnicas de programao importantes. As principais rotinas
de I/O so apresentadas e inclui um utilssimo Manual de Referncia C.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

115

UNIDADE IV
VETORES, STRINGS, MATRIZES E ESTRUTURAS
Professora Me. Gislaine Camila Lapasini Leal

Objetivos de Aprendizagem
Estudar o conceito de vetores.
Conhecer mtodos de ordenao e pesquisa em vetores.
Entender o conceito de strings e como manipul-las.
Estudar o conceito de matrizes e suas aplicaes.
Entender e aplicar estruturas (structs).

Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Vetores
Ordenao de Vetores
Pesquisa em Vetores
Strings
Matrizes
Estruturas (structs)
Problema

INTRODUO
Nesta unidade voc estudar estruturas de dados homogneas (vetores e matrizes), strings e
estruturas de dados heterogneas (structs).
As estruturas de dados homogneas permitem a representao de diversas informaes do
mesmo tipo, sendo divididas em unidimensionais (vetores) e multidimensionais (matrizes).
Veremos como atribuir valores, realizar a leitura e entrada de dados utilizando vetores e
matrizes. Em relao aos vetores aprenderemos como realizar a classificao e a pesquisa
por um determinado elemento.
Estudaremos as cadeias de caracteres (strings), como declarar e manipul-las. Veremos
as estruturas de dados heterogneas, structs, que agregam informaes de diversos tipos.
Abordando, especificamente, como realizar atribuio, entrada, sada de dados e vetores de
structs.
Ao trmino desta unidade voc saber construir programas utilizando vetores, matrizes,
strings e structs. Entender, tambm, qual a importncia desses conceitos e como utiliz-los
em aplicaes prticas.

VETORES
Um vetor consiste em um arranjo de elementos armazenados na memria principal,
sequencialmente, todos com o mesmo nome. um conjunto de variveis de um mesmo tipo de
dado as quais so acessadas e referenciadas por meio de ndices (LOPES; GARCIA, 2002).
Em C os vetores so identificados pela existncia de colchetes aps o nome da varivel no
momento da declarao. O valor contido nos colchetes representa o nmero de posies do
vetor (LOPES; GARCIA, 2002).

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

119

A declarao de um vetor dada por:


tipo_da_varivel nome_da_varivel [tamanho];
Um vetor de inteiros declarado do seguinte modo, por exemplo:
int vetorA[20];
Neste caso, temos um vetor de inteiros denominado vetorA o qual possui 20 posies,
conforme ilustra a Figura 22. Esse tipo de declarao faz com que seja reservado um espao
na memria suficientemente grande para armazenar o nmero de clulas especificadas em
tamanho.

Fonte: SHUTTERSTOCK.COM

Figura 22 - Vetor

Fique atento!! Em C a numerao inicia sempre em zero, ou seja, os ndices utilizados para
identificar as posies comeam em zero e vo at o tamanho do vetor menos uma unidade.
Podemos acessar cada componente de um vetor por meio de ndices associados ao
identificador do vetor. Este ndice pode ser referenciado diretamente ou por meio de uma

120 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

expresso que resulte em um valor inteiro (ROCHA, 2006).


Em nossos programas devemos verificar se os valores atribudos a um ndice esto dentro
dos limites definidos na declarao, pois o compilador no faz essa verificao, o que pode
ocasionar em erros durante a execuo do programa.
No Quadro 52 apresentado um exemplo de manipulao de vetores em que possvel
visualizar como realizada a leitura e como so mostrados os elementos de um vetor.
Quadro 52 - Programa em C

#include <stdio.h>
main ()
{
int vetorA[10];
int i;
for (i=0;i<10;i++)
{
printf(\n Digite o %d elemento do vetor:, i);
scanf(%d, &vetorA[i]);
}
printf (\n Vetor preenchido);
for (i=0;i<10;i++)
{
printf(\n O elemento na posicao %d e: %d, i, vetorA[i]);
}
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

121

No exemplo acima, observe que o inteiro i inicializado em 0 tanto para a operao de


atribuio quanto para a exibio dos elementos do vetor, pois a numerao de ndices de um
vetor sempre inicia em 0. Tanto a operao de leitura quanto a exibio realizada por meio
de um lao de repetio.
O resultado da execuo do programa apresentado na Figura 23. O que aconteceria se
lssemos mais de 10 elementos? O programa tentar ler normalmente, mas os escrever em
uma parte no alocada de memria, o que pode resultar em diversos erros durante a execuo
do programa.

Figura 23 - Programa em C - Sada

122 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

No Quadro 53 temos um exemplo de manipulao de vetores em que a leitura e a exibio


extrapolam o valor definido para o vetor. Copie o cdigo abaixo e compile. Note que a
compilao efetuada com sucesso, isto , o compilador no verifica se estamos manipulando
o vetor fora dos limites definidos na declarao.
Quadro 53 - Programa em C

#include <stdio.h>
main ()
{
int vetorA[10];
int i;
for (i=0;i<15;i++)
{
printf(Digite o %d elemento:, i);
scanf(%d, &vetorA[i]);
}
printf (\n Vetor preenchido);
for (i=0;i<15;i++)
{
printf(%d - , vetorA[i]);
}
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

123

A Figura 24 ilustra o resultado da execuo do programa (Quadro 53). Note que a leitura foi
realizada normalmente. Na sada de dados ocorreu um erro. Portanto, atente para os limites
do vetor no momento de manipul-lo.

Figur a 24 - Programa em C - Sada

124 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Fonte: SHUTTERSTOCK.COM

ORDENAO EM VETOR

A ordenao o processo de rearranjar os elementos de acordo com um critrio especfico


com o objetivo de facilitar a localizao (WIRTH, 1999). Na literatura existem diversos mtodos
de ordenao, sendo o mtodo da bolha (Bubble Sort) o mais conhecido.
O mtodo da bolha consiste em percorrer o vetor repetidas vezes, comparando os elementos
vizinhos. Se eles esto fora de ordem, efetuada uma troca de posio.
No Quadro 54 temos um exemplo de ordenao utilizando o mtodo da bolha. O primeiro lao
de repetio (for) efetua a leitura dos dez elementos do vetor. Em seguida, temos dois laos
de repetio (for) aninhados, os quais so responsveis por percorrer o vetor comparando os
elementos vizinhos (i e j) e se eles esto desordenados efetuada a troca de posio. Por fim,
o terceiro lao exibe os elementos do vetor j ordenados.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

125

Quadro 54 - Programa em C

#include <stdio.h>
main ()
{
int vetorA[10];
int i, j, troca;
for (i=0;i<10;i++)
{
printf(Digite o %d elemento:, i);
scanf(%d, &vetorA[i]);
}
for (i=0; i<9; i++)
{
for (j=i+1; j<10;j++)
{
if (vetorA[i] > vetorA[j])
{

troca = vetorA[i];

vetorA[i] = vetorA[j];

vetorA[j] = troca;
}
}
}
printf (\n VETOR ORDENADO E \n);
for (i=0;i<10;i++)
{
printf(%d -, vetorA[i]);
}
return (0);
}

126 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

A Figura 25 mostra a sada obtida na execuo do programa (Quadro 54).

Figura 25 - Programa em C - Sada

PESQUISA EM VETOR
Em muitas situaes temos que pesquisar por um determinado elemento em um vetor. Quando
temos um grande nmero de elementos, realizar a pesquisa manual um processo invivel.
Existem mtodos que nos permitem verificar a existncia de um valor dentro de um vetor
(MANZANO; OLIVEIRA, 1997).
Estudaremos a pesquisa sequencial que consiste em percorrer o vetor a partir do primeiro
elemento, sequencialmente, at o ltimo realizando testes lgicos verificando se o elemento
do vetor, posio a posio, igual ao elemento procurado. A pesquisa se encerra quando o
elemento for encontrado ou quando todo o vetor foi percorrido e o elemento no foi encontrado
(WIRTH, 1999).

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

127

A implementao da pesquisa sequencial apresentada no Quadro 55. Agora que voc


conhece o funcionamento e a implementao da pesquisa sequencial, execute o programa a
seguir e analise o resultado de sua sada.

128 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 55 - Programa em C

#include <stdio.h>
main ()
{
int vetorA[10];
int i, acha, busca;
for (i=0;i<10;i++)
{
printf(Digite o %d elemento:, i);
scanf(%d, &vetorA[i]);
}
printf(Informe o elemento que deseja buscar:);
scanf(%d, &busca);
i = 0;
acha = 0;
while ((acha == 0) && (i < 10))
{
if (vetorA[i] == busca)
{
acha = 1;
}
else
{
i++;
}
}
if (acha == 1)
printf (O elemento %d foi encontrado na posicao %d., busca, i);
else
printf (O elemento nao foi encontrado.);
return (0);
}
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

129

STRINGS
A string consiste em uma cadeia de caracteres, um agregado de caracteres, terminando com
o caractere especial \0, que indica o fim da string. A declarao de uma string dada por:
char nome_string[tamanho];
Note que no h um tipo string em C, mas sim um vetor tipo char. Como ao final da string
armazenado o \0 temos que declarar a string sempre com uma posio a mais do que o
nmero de caracteres que desejamos. Alm disso, devemos lembrar que as constantes strings
aparecem entre aspas e no necessrio acrescentar o \0, isso realizado pelo compilador
(ROCHA, 2006).
A linguagem C no possui um operador que atue com operandos do tipo string. Deste modo,
a manipulao de strings realizada por meio de funes. No Quadro 56 so apresentadas
algumas funes para manipulao de strings.

130 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 56 - Funes para manipulao de strings

retorna a diferena em ASCII entre os dois primeiros


caracteres diferentes, ou zero para igualdade.

armazena em x os n primeiros caracteres de y.

l caracteres at encontrar o de nova linha (\n) que


gerado quando se pressiona a tecla [enter].

Fique tranquilo quanto ao modo de utilizar essas funes, veremos exemplos utilizando cada
uma delas.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

131

O Quadro 57 apresenta um programa que l um nome completo utilizando a funo gets e


exibe o comprimento da string. O tamanho da string obtido com a funo strlen.
Quadro 57- Programa em C

#include <stdio.h>
#include <string.h>
main ()
{
char nome[80];
int tamanho;
printf (\n Digite o seu nome completo:);
gets(nome);
tamanho = strlen(nome);
printf (\n O comprimento do nome e: %d, tamanho);
return (0);
}

132 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

A Figura 26 ilustra a sada obtida com a execuo do programa (Quadro 55).

Figura 26 - Programa em C - Sada

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

133

O programa do Quadro 58 demonstra o uso das funes strcat, strstr, strupr e strlwr.
Quadro 58 - Programa em C.

#include <stdio.h>
#include <string.h>
main ()
{
char nome[80], sobrenome[80];
printf (\n Digite o seu nome:);
gets(nome);
printf (\n Digite o seu sobrenome:);
gets(sobrenome);
strcat(nome, sobrenome);
printf(\n Apos concatenar as strings temos que nome e %s:, nome);
if (strstr(sobrenome, nome) == 0)
{
printf (\n Agora o sobrenome esta contido na variavel nome);
}
strlwr(nome);
printf(\n O nome em minusculo e: %s, nome);
strupr(nome);
printf(\n O nome em maiusculo e: %s, nome);
return (0);
}
O resultado da execuo do programa (Quadro 58) mostrado na Figura 27. Ao concatenar
as duas strings o nome e sobrenome ficaram juntos. O que devemos fazer para que fique com

134 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

um espao entre o nome e o sobrenome? Antes de concatenar o valor da varivel sobrenome


devemos concatenar um espao em branco e, em seguida, concatenar o sobrenome.

Figura 27 - Programa em C - Sada


Note que quando utilizamos as funes para manipulao de string devemos inserir o contedo
da biblioteca <string.h>.

MATRIZES
Uma matriz um tipo de dado formado por uma sequncia de variveis do mesmo tipo, com o
mesmo nome e alocadas sequencialmente na memria. O acesso aos elementos da matriz
utilizando ndices os quais podem ser referenciados diretamente ou por meio de uma expresso
que resulte em um valor inteiro. Para cada dimenso da matriz devemos ter um ndice.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

135

A sintaxe para declarao de uma matriz dada por:


tipo_da_varivel nome_da_varivel [tamanho][tamanho]...;
Como exemplo de declarao de matrizes temos:
int matriz[2] [3];
Neste caso, temos a declarao de uma matriz de inteiros composta por duas linhas e trs
colunas.
Nas operaes de atribuio, leitura e escrita devemos utilizar o nmero de repeties relativo
ao tamanho das dimenses. Isto , uma matriz de duas dimenses deve ser controlada por dois
laos de repetio, de trs dimenses trs laos e assim por diante (MANZANO; OLIVEIRA,
1997).
O programa do Quadro 59 exemplifica a leitura e impresso de elementos de uma matriz.

136 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 59 - Programa em C

#include <stdio.h>
main ()
{
int matrizA[2][10];
int i, j;
for (i=0;i<2;i++)
{
for (j=0;j<10;j++)
{
printf(\n Digite o %d %d elemento da matriz:, i, j);
scanf(%d, &matrizA[i][j]);
}
}
for (i=0;i<2;i++)
{
for (j=0;j<10;j++)
{
printf(\nO elemento da posicao %d %d e: %d, i, j, matrizA[i][j]);
}
}
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

137

ESTRUTURAS
Ao utilizar vetores e matrizes conseguamos manipular uma grande quantidade de dados por
meio de um acesso indexado, no entanto tnhamos a limitao de que todos os elementos
deveriam ser do mesmo tipo. Em diversas situaes nos deparamos com o fato de ter que
armazenar informaes relacionadas entre si, mas de tipos distintos (ROCHA, 2006).
A estrutura permite agregar diversas informaes, que podem ser de diferentes tipos.
Possibilita gerar novos tipos de dados, alm dos definidos pelas linguagens de programao
(ASCENCIO; CAMPOS, 2010).
Em uma estrutura o acesso aos elementos no realizado por meio de sua localizao, mas
sim por meio do nome do campo que se pretende acessar. Cada informao da estrutura
denominada de campo, os quais podem ser de diferentes tipos.
A sintaxe para declarao de uma estrutura :

struct nome_da_estrutura
{

tipo_de_dado do campo 1;

tipo_de_dado do campo 2;

...

tipo_de_dado do campo n;
};
A partir da definio da estrutura o programa pode considerar que existe um novo tipo de
dado a ser utilizado (nome_da_estrutura). Esse novo tipo de dado capaz de armazenar
informaes que podem ser de tipos distintos (ASCENCIO; CAMPOS, 2010).

138 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Consideremos como exemplo a definio de uma estrutura que armazena a ficha de um


produto, conforme ilustra a Figura 28. As informaes a serem armazenadas so o cdigo do
produto, a descrio, o preo e o saldo em estoque, as quais representam os campos que a
estrutura deve conter.

Figura 28 - Ficha de produto


A declarao da estrutura para a ficha do produto :

struct produto
{

int codigo;

char descricao[50];

float preco;

int saldo;
};
Essa declarao indica que o programa poder utilizar um novo tipo de dado que contm
quatro informaes. Ascencio e Campos (2010) destacam que a struct s pode ser utilizada
dentro do bloco em que foi definida. Isto , uma struct definida dentro das chaves que delimitam
a funo main s poder ser utilizada por variveis que tambm estejam neste bloco. Para que

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

139

a struct seja acessvel de qualquer parte do programa temos que defini-la fora da funo main,
preferencialmente aps os includes.
Para utilizar uma struct temos que declarar uma varivel deste tipo do seguinte modo:
nome_da_estrutura nome_da_varivel;
No caso da ficha de produto teramos a seguinte declarao:
produto ficha;
Essa declarao nos indica que temos uma varivel denominada ficha que do tipo produto.
Nas operaes de atribuio, leitura e escrita utilizamos o nome da varivel struct e seu campo
correspondente separado por um caractere . (ponto).
No Quadro 60 temos um programa que exemplifica as operaes leitura e escrita utilizando
struct. Observe que inicialmente temos a declarao da struct aps a diretiva include e no
interior da funo main temos a declarao de uma varivel do tipo produto. O acesso a cada
um dos campos realizado por meio do nome da varivel mais o caractere ponto e o nome
do campo.

140 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 60 - Programa em C

#include <stdio.h>
struct produto
{
int codigo;
char descricao[50];
float preco;
int saldo;
};
main ()
{
produto ficha;
printf(\n Digite o codigo do produto:);
scanf(%d, &ficha.codigo);
printf(\n Digite a descricao do produto:);
scanf(%s, ficha.descricao);
printf(\n Digite o preco do produto:);
scanf(%f, &ficha.preco);
printf(\n Digite o saldo do produto:);
scanf(%d, &ficha.saldo);
printf(\n Codigo : %d, ficha.codigo);
printf(\n Descricao : %s, ficha.descricao);
printf(\n Preco : %.2f, ficha.preco);
printf(\n Saldo : %d, ficha.saldo);
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

141

Fonte: SHUTTERSTOCK.COM

O exemplo anterior ilustra a leitura e escrita da ficha de um produto. E se quisermos armazenar


a ficha de 10 produtos, precisamos criar 10 variveis do tipo produto? No, podemos criar um
vetor de struct.
O Quadro 61 exemplifica o uso de um vetor de struct com operaes de leitura e escrita.

142 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 61 - Programa em C

#include <stdio.h>
#include <iostream.h>
struct produto
{
int codigo;
char descricao[50];
float preco;
int saldo;
};
main ()
{
produto ficha [10];
int i;
for (i=0; i<10; i++)
{
printf(\n Digite o codigo do produto:);
cin >> ficha[i].codigo;
printf(\n Digite a descricao do produto:);
gets(ficha[i].descricao);
printf(\n Digite o preco do produto:);
cin >> ficha[i].preco;
printf(\n Digite o saldo do produto:);
cin >> ficha[i].saldo;
}
for (i=0; i<10;i++)
{
printf (\n PRODUTO %d, i+1);
printf( Codigo : %d, ficha[i].codigo);
printf( Descricao : %s, ficha[i].descricao);
printf( Preco : %.2f, ficha[i].preco);
printf( Saldo : %d, ficha[i].saldo);
}
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

143

PROBLEMA
O problema consiste em elaborar um cadastro para 20 livros contendo as seguintes informaes:
cdigo, ttulo, autor, rea, ano e editora. Desenvolver um menu com as seguintes opes:
1. Cadastrar os livros.
2. Imprimir as informaes dos livros.
3. Pesquisar livros por cdigo.
4. Ordenar os livros por ano.
5. Sair do programa.
No Quadro 62 temos o programa para o problema acima descrito. Na soluo empregamos
o conceito de struct para criar a ficha do livro, vetor de struct para armazenar as informaes
dos 20 livros, o mtodo de pesquisa sequencial para efetuar a busca de um livro por cdigo e
o mtodo de ordenao da bolha para classificar os livros de acordo com o ano.

144 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 62 - Programa em C

#include <stdio.h>
#include <iostream.h>
#include <conio.h>
struct livro
{
int codigo;
char titulo[50];
char autor[30];
char area[30];
int ano;
char editora[30];
};
main ()
{
livro ficha [20];
livro troca;
int busca, i, j, acha, op;
op = 0;
while (op !=5)
{
printf(\n 1 - Cadastrar os livros);
printf(\n 2 - Imprimir os livros cadastrados);
printf(\n 3 - Pesquisar livros por area);
printf(\n 4 - Ordenar os livros por ano);
printf(\n 5 - Sair);
printf(\n Digite a opcao desejada: );
scanf(%d, &op);
if (op == 1)
{
clrscr();
for (i=0; i<20; i++)
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

145

{
printf(Digite o codigo do livro %d:, i+1 );
cin >> ficha[i].codigo;
printf(Digite o titulo do livro: );
cin >> ficha[i].titulo;
printf(Digite o nome do autor: );
cin >> ficha[i].autor;
printf(Digite a area do livro: );
cin >> ficha[i].area;
printf(Digite o ano : );
cin >> ficha[i].ano;
printf(Digite o nome da editora: );
cin >> ficha[i].editora;
}
}
else
{
if (op == 2)
{
clrscr();
for (i=0; i<20; i++)
{
printf(\n CODIGO: %d, ficha[i].codigo );
printf(\n TITULO: %s, ficha[i].titulo);
printf(\n AUTOR: %s, ficha[i].autor);
printf(\n AREA: %s, ficha[i].area);
printf(\n ANO: %d, ficha[i].ano);
printf(\n EDITORA: %s, ficha[i].editora);
}
}
else
{
if (op == 3)

146 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

{
clrscr();
printf(Digite o codigo que deseja buscar :);
scanf (%d, &busca);
i = 0;
acha =0;
while ((i<20) && (acha == 0))
{
if (ficha[i].codigo == busca)
acha = 1;
else
i++;
}
if (acha ==1)
{
printf(\n CODIGO: %d, ficha[i].codigo );
printf(\n TITULO: %s, ficha[i].titulo);
printf(\n AUTOR: %s, ficha[i].autor);
printf(\n AREA: %s, ficha[i].area);
printf(\n ANO: %d, ficha[i].ano);
printf(\n EDITORA: %s, ficha[i].editora);
}
else
printf(\n Registro nao encontrado);
}
else
{

if (op ==4)
{
clrscr();
for (i=0;i<19;i++)
{
for (j=i+1;j<20;j++)
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

147

{

if (ficha[i].ano > ficha[j].ano)

{

troca = ficha[i];

ficha[i]= ficha[j];

ficha[j] = troca;

}
}
}
for (i=0; i<20;i++)
{
printf(\n CODIGO: %d, TITULO: %s, ANO: %d, ficha[i].
codigo, ficha[i].titulo, ficha[i].ano);
}
}
}
}
}
}
return (0);
}
Observe que utilizamos a funo clrscr(). Essa funo responsvel por limpar o texto
corrente da tela. Para utiliz-la em nossos programas temos que dar um include no arquivo
conio.h.
importante que voc execute este programa e analise o seu funcionamento, pois na
construo do programa utilizamos todos os conceitos vistos no decorrer desta unidade. Se
voc ainda ficou com dvidas, analise os exerccios de fixao.

148 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

CONSIDERAES FINAIS
Nesta unidade voc aprendeu a construir programa utilizando vetores, strings, matrizes e
estruturas. Vimos que vetores e matrizes so estruturas de dados homogneas que agrupam
diversas informaes, do mesmo tipo, em uma nica varivel. O acesso a essas estruturas
indexado, de modo que nos vetores temos um nico ndice e no caso de matrizes o nmero de
dimenses determina o nmero de ndices.
Aprendemos como efetuar classificao e pesquisa em vetores. O mtodo de classificao
estudado foi o Bubble Sort, que varre o vetor repetidas vezes, comparando os elementos
vizinhos. Se eles esto fora de ordem, efetuada uma troca de posio. Esse mtodo
utilizado quando queremos rearranjar o vetor segundo algum critrio. No que se refere
pesquisa, vimos o mtodo de pesquisa sequencial que nos permite verificar se um dado
elemento encontra-se no vetor ou no.
Estudamos o conceito de strings, como efetuar leitura e escrita e conhecemos funes que
permitem concatenar, comparar, copiar, armazenar, imprimir, converter para um valor numrico
e outros. Em relao s strings no podemos esquecer de declar-la com uma posio a mais
que o nmero de caracteres que desejamos armazenar, pois ao final inserido o \0 que
indica o fim da string.
Trabalhamos a definio de novos tipos de dados utilizando estruturas (structs), que so
capazes de armazenar informaes de tipos diferentes. Estudamos como manipular estas
estruturas e como construir vetores de estruturas.
No decorrer desta unidade revisamos os conceitos vistos nas unidades anteriores,
principalmente as estruturas de repetio, pois elas so utilizadas nas operaes de atribuio,
leitura e escrita. Por fim, construmos programas envolvendo todos os conceitos abordados.

Para saber um pouco mais sobre ordenao pelo mtodo da bolha, acesse os vdeos disponveis em:
<http://www.youtube.com/watch?v=PDeTKL68jyE&feature=related>
<http://www.youtube.com/watch?v=rCKbfdvnhxI&feature=related>.
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

149

Para saber um pouco mais sobre a declarao e construo de structs, acesse: <http://pt.wikibooks.
org/wiki/Programar_em_C/Estruturas>.

As constantes strings aparecem sempre entre aspas e devemos acrescentar o caractere de fi m de


string \0 (ROCHA, 2006).

ATIVIDADE DE AUTOESTUDO
1. Faa um programa que leia dois vetores A e B e apresente a diferena entre os elementos.
2. Escreva um programa que leia um vetor A e o apresente em ordem decrescente.
3. Elabore um programa que leia uma palavra e se a palavra tiver nmero mpar de caracteres, imprima todas as suas consoantes.
4. Faa um programa que leia uma palavra e o nmero de vezes que se deseja imprimi-la.
5. Construa um programa que recebe duas matrizes inteiras de ordem 5 e imprima a soma e
a diferena entre elas.
6. Faa um programa que efetua a leitura dos nomes de 5 alunos e tambm de suas quatro
notas bimestrais. Calcule a mdia de cada aluno e apresente os nomes classifi cados em
ordem crescente de mdia.
7. Elabore um programa para efetuar o cadastro de 20 livros e imprimi-los. O cadastro deve
conter as seguintes informaes: ttulo, autor, editora, edio e ano.
8. Faa um programa para efetuar o cadastro de 30 contatos. O cadastro deve conter as
seguintes informaes: nome, telefone e e-mail. Apresente todos os cadastros.

150 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

EXERCCIOS DE FIXAO
1. Escreva um programa que leia um vetor com 30 elementos inteiros e escreva-os em ordem
contrria a da leitura.
Quadro 63 - Programa em C

#include <stdio.h>
main ()
{
int vetorA[30];
int i;
for (i=0;i<30;i++)
{
printf(Digite o %d elemento:, i);
scanf(%d, &vetorA[i]);
}
for (i=29;i>=0;i--)
{
printf(\n %d, vetorA[i]);
}
return (0);
}

2. Faa um programa que leia dois vetores A e B, com 20 nmeros inteiros. Efetue a soma dos
dois vetores em um vetor C e imprima o vetor C em ordem crescente.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

151

Quadro 64 - Programa em C

#include <stdio.h>
main ()
{
int vetorA[30], vetorB[30], vetorC[30];
int i, j, troca;
for (i=0;i<30;i++)
{
printf(Digite o %d elemento do vetor A:, i);
scanf(%d, &vetorA[i]);
printf(Digite o %d elemento do vetor B:, i);
scanf(%d, &vetorB[i]);
vetorC[i] = vetorA[i] + vetorB[i];
}
for (i=0;i<29;i++)
{
for (j=i+1; j<30; j++)
{
if (vetorC[i] > vetorC[j])
{
troca = vetorC[i];
vetorC[i] = vetorC[j];
vetorC[j] = troca;
}
}
}
for (i=0;i<30;i++)
{
printf(%d - , vetorC[i]);
}
return (0);
}

152 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

3. Faa um programa que leia um nome e apresente as letras que se encontram nas posies
pares.
Quadro 65 - Programa em C

#include <stdio.h>
#include <string.h>
main ()
{
char nome[30];
int tam, i;
printf (\n Digite o nome:);
gets(nome);
tam = strlen(nome);
for (i=0;i<tam; i++)
{
if (i % 2 == 0)
printf (\n %c, nome[i]);
}
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

153

4. Construa um programa que leia uma palavra e a escreva de trs para frente.
Quadro 66 - Programa em C

#include <stdio.h>
#include <string.h>
main ()
{
char nome[30];
int tam, i;
printf (\n Digite o nome:);
gets(nome);
tam = strlen(nome);
for (i=tam;i>=0; i--)
{
printf (%c, nome[i]);
}
return (0);
}

154 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

5. Faa um programa que leia uma palavra e a imprima quantas vezes forem o nmero de
caracters.
Quadro 67 - Programa em C

#include <stdio.h>
#include <string.h>
main ()
{
char nome[30];
int tam, i;
printf (\n Digite o nome:);
gets(nome);
tam = strlen(nome);
for (i=0;i<tam; i++)
{
printf (\n %s, nome);
}
return (0);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

155

6. Construa um programa que efetue a leitura de quatro notas de vinte alunos, calcule a mdia
de cada aluno e a mdia da turma.
Quadro 68 - Programa em C

#include <stdio.h>
main ()
{
float media[20];
float notas[20] [4];
float somat, mediat, soma;
int i, j;
somat = 0;
mediat =0;
for (i=0;i<20;i++)
{
soma = 0;
for (j=0; j<4; j++)
{
printf(Informe a nota %d do aluno %d:, j+1, i+1);
scanf(%f, &notas[i][j]);
soma = soma + notas[i][j];
}
media[i] = soma/4;
somat= somat + media[i];
}
mediat = somat/20;
for (i=0; i<20;i++)
{
printf(\n A media do aluno %d e %.2f:, i, media[i]);
}
printf (\n A media da turma e : %.2f, mediat);
return (0);
}

156 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

7. Construa um programa que leia informaes (matrcula, nome, setor e salrio) de 20 funcionrios. Deve ser permitido executar quantas consultas o operador desejar, em que ele
digita a matrcula e apresentado o setor e o salrio. Se a matrcula digitada no existir,
informar o usurio.
Quadro 69 - Programa em C

#include <stdio.h>
#include <iostream.h>
struct funcionario
{
int matricula;
char nome[50];
char setor[30];
float salario;
};
main ()
{
funcionario ficha [20];
int busca, i, acha;
char op;
for (i=0; i<20; i++)
{
printf(\n Digite a matricula do funcionario:);
cin >> ficha[i].matricula;
printf(\n Digite o nome:);
gets(ficha[i].nome);
printf(\n Digite o setor:);
cin >> ficha[i].setor;
printf(\n Digite o salario:);
cin >> ficha[i].salario;
}
do
{
printf(Deseja realizar busca (S/N):);
cin >> op;
}
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

157

while ((op != S) && (op!=s) && (op !=n) && (op !=N));
while ((op==S) || (op==s))
{
printf(\n Informe a matricula que deseja buscar:);
cin >> busca;
i = 0;
acha = 0;
while ((i<20) && (acha==0))
{
if (ficha[i].matricula == busca)
acha = 1;
else
i++;
}
if (acha ==1)
{
printf (\n O setor e: %s, ficha[i].setor);
printf (\n O salario e: %.2f, ficha[i].salario);
}
else
{
printf (\n Matricula nao cadastrada);
}
do
{
printf(Deseja realizar busca (S/N):);
cin >> op;
}
while ((op != S) && (op!=s) && (op !=n) && (op !=N));
}
return (0);
}

158 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

HERBERT, S. C Completo e Total. Editora Makron, 3. ed, 1997.

Sinopse: C Completo e Total, 3 est dividido em cinco partes, cada uma abordando um aspecto
importante de C. Parte 1 - Apresenta uma discusso detalhada da linguagem C, incluindo palavras-chave, tipos de dados, operadores, funes, ponteiros, E/S, alocao dinmica e muito mais. Parte
2 - Apresenta uma extensa descrio das funes de biblioteca por categoria. Abrange as funes defi nidas pelo padro ANSI e muitas extenses comuns, como as chamadas de arquivos Unix, grfi cos
e as funes de interface com o sistema operacional. Parte 3 - Mostra como aplicar C, concentrando-se em algoritmos teis e aplicaes interessantes da linguagem C. Parte 4 - Trata do ambiente de
desenvolvimento C, incluindo efi cincia, portabilidade, depurao e interface com o cdigo assembler.
Parte 5 - Desenvolve um interpretador C, com vrios e diversifi cados exemplos que esclarecem cada
conceito apresentado neste livro e que o diferenciam de qualquer outra obra de referncia sobre C.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

159

UNIDADE V
FUNES E ARQUIVOS

Professora Me. Gislaine Camila Lapasini Leal

Objetivos de Aprendizagem
Conhecer e desenvolver funes.
Estudar a passagem de parmetros por valor e por referncia.
Entender o conceito de recursividade.
Trabalhar com manipulao de arquivos em C.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Funes
Escopo de Variveis
Passagem de Parmetros
Passagem de Parmetros por Valor
Passagem de Parmetros por Referncia
Prottipo de Funes
Recursividade
Arquivos

INTRODUO
Chegamos ltima unidade da disciplina de Algoritmos e Lgica de Programao II. Nesta
unidade, voc aprender a construir programas utilizando o conceito de modularizao e a
manipular arquivos.
Para aplicar o conceito de modularizao estudaremos a construo de funes na linguagem
C, destacando sua sintaxe e modo de aplicao. Ao trabalhar com funes precisaremos
entender o conceito de escopo de variveis, compreender o que so variveis locais e variveis
globais e como elas influenciam nossos programas.
Estudaremos como construir funes que recebem parmetros e como podemos realizar a
passagem desses parmetros (por valor ou por referncia). Veremos como construir funes
recursivas. Conheceremos o conceito de arquivos e como manipul-los utilizando operaes
de que possibilitem consultar, inserir, modificar e eliminar dados.
Ao final desta unidade voc saber construir programas utilizando funes e poder responder
a questes do tipo: quando utilizar uma funo? Quando declarar uma varivel local ou global?
Quando utilizar prottipo de uma funo? Como deve ser realizada a passagem de parmetros?
Como acessar um arquivo? Como percorrer um arquivo?

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

163

Fonte: SHUTTERSTOCK.COM

FUNES

Para solucionar problemas complexos e abrangentes, em geral, temos que dividir o problema
em subproblemas mais simples e especficos e com isto, dividimos sua complexidade e
facilitamos o processo de resoluo. Esse processo de decomposio denominado de
refinamento sucessivo ou abordagem top-down (FORBELLONE; EBERSPACHER, 2005).
No particionamento dos problemas complexos utilizamos sub-rotinas para resolver cada
subproblema, permitindo assim a modularizao. A linguagem C possibilita a modularizao
por meio de funes.
Uma funo uma sub-rotina que tem como objetivo desviar a execuo do programa principal
para realizar uma tarefa especfica e retornar um valor. So estruturas que possibilitam ao
usurio separar seus programas em blocos (ASCENCIO; CAMPOS, 2010).
Um programa em C um conjunto de funes que so executadas a partir da execuo de uma
funo denominada main(). Cada funo pode conter declaraes de variveis, instrues e
ou at mesmo outras funes.
O objetivo de uma funo realizar alguma subtarefa especfica, isto , podemos escrever

164 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

funes para a entrada de dados, processamento e sada de dados.


A sintaxe de uma funo dada por:

tipo_de_retorno nome_da_funo (declarao_de_parmetros)


{
corpo_da_funo
}
Em que:
tipo_de_retorno: indica o tipo de varivel que a funo retornar.
declarao_de_parmetros: especificao das variveis de entrada da funo. Devemos
especificar o tipo de cada uma das variveis.
corpo_da_funo: conjunto de instrues que realizam a subtarefa, isto , instrues que
realizam o processamento dos dados de entrada e geram a sada de dados.
Em nossas funes utilizamos o comando return, o qual responsvel por encerrar funo
e retornar o valor informado. Lembre-se: o valor informado no comando return deve ser
compatvel com o tipo declarado para a funo.
No Quadro 70 temos um programa que utiliza uma funo denominada soma() para efetuar
a leitura, processamento e sada de dados. A funo foi declarada como int e no apresenta
parmetros de entrada. Na funo principal (main) temos a chamada para a funo soma, a
qual realiza a entrada de dois valores numricos, os soma e exibe o resultado. Observe que
as variveis foram declaradas no interior da funo soma, logo estudaremos o escopo das
variveis, a voc entender a diferena entre declarar a varivel dentro da funo ou fora dela.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

165

Quadro 70 - Programa em C

#include <stdio.h>
#include <conio.h>
int soma ()
{
float num1, num2, total;
printf(Digite o primeiro numero :);
scanf (%f, &num1);
printf(Digite o segundo numero :);
scanf (%f, &num2);
total = num1+num2;
printf (A soma e %.2f, total);
return (0);
}
main ()
{
clrscr();
soma();
return (0);
}
A linguagem C possui o tipo void. Esse tipo quer dizer vazio e nos permite escrever funes
que no retornam nada e no possuem parmetros. A sintaxe de uma funo que no retorna
nada dada por:
void nome_da_funo (declarao_de_parmetros)

166 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Um exemplo utilizando o tipo void apresentado no Quadro 71. Observe que em funes do
tipo void no utilizamos o comando return, pois no temos valor de retorno. Alm disso, note
que inserimos o tipo void para a funo main.
Quadro 71 - Programa em C

#include <stdio.h>
#include <conio.h>
void soma ()
{
float num1, num2, total;
printf(Digite o primeiro numero :);
scanf (%f, &num1);
printf(Digite o segundo numero :);
scanf (%f, &num2);
total = num1+num2;
printf (A soma e %.2f, total);
}
void main ()
{
clrscr();
soma();
}
Na seo seguinte estudaremos o escopo das variveis.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

167

ESCOPO DE VARIVEIS
O escopo de uma varivel relacionado a sua visibilidade em relao s sub-rotinas de um
programa. As variveis declaradas no interior de uma funo so chamadas de variveis
locais, pois podem ser utilizadas apenas dentro da funo. Ao final da execuo da funo
essas variveis so destrudas e seus contedos so perdidos (ASCENCIO; CAMPOS, 2010).
As variveis globais so aquelas declaradas fora das funes. Elas esto acessveis em
qualquer parte do programa e so destrudas apenas ao final da execuo do programa

Fonte: SHUTTERSTOCK.COM

(ASCENCIO; CAMPOS, 2010).

O que acontece se declararmos todas as variveis como global? Esse tipo de varivel ocupa
memria durante toda a execuo do programa e o torna mais difcil de ser entendido. Deste
modo, devemos evitar ao mximo o uso desse tipo de varivel.

168 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

PASSAGEM DE PARMETROS
As funes com passagem de parmetros so aquelas que recebem valores no momento
em que so chamadas. O Quadro 72 apresenta um programa utilizando a passagem de
parmetros.
A funo soma do tipo float e possui dois parmetros n1 e n2, os quais tambm so do tipo
float. Note que a entrada de dados realizada na funo main, em que temos as operaes de
leitura. Aps a leitura realizada uma chamada funo soma, passando como parmetros
num1 e num2. A funo soma realiza a operao de adio dos dois valores obtidos como
parmetro e retorna o total.
Como a funo soma retorna um valor do tipo float sua chamada foi realizada diretamente
em uma instruo de atribuio. Isto significa que o valor retornado pela funo atribudo
diretamente para a varivel resposta.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

169

Quadro 72 - Programa em C

#include <stdio.h>
#include <conio.h>
float soma (float n1, float n2)
{
float total;
total = n1+ n2;
return (total);
}
void main ()
{
float num1, num2, resposta;
clrscr();
printf(Digite o primeiro numero :);
scanf (%f, &num1);
printf(Digite o segundo numero :);
scanf (%f, &num2);
resposta = soma(num1, num2);
printf (A soma e %.2f, resposta);
}
Na passagem de parmetros temos que os valores das variveis num1 e num2 foram copiados
para as variveis n1 e n2, respectivamente. Na passagem de parmetros h distino entre
parmetros reais e parmetros formais. Os parmetros reais so os valores obtidos na entrada
de dados e os formais so os parmetros exigidos na funo. Com isto, temos que num1 e
num2 so os parmetros reais e n1 e n2 so parmetros formais.
A passagem de parmetro ocorre quando realizada a substituio dos parmetros formais

170 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

pelos reais no momento da execuo da funo. A passagem de parmetros pode ser realizada
por valor ou por referncia, a seguir veremos cada uma delas.

PASSAGEM DE PARMETROS POR VALOR


A passagem de parmetro por valor caracterizada pela no alterao do valor do parmetro
real quando o parmetro formal manipulado na funo. Isto , qualquer alterao na varivel
local da funo no afetar o valor do parmetro real correspondente. Na passagem de
parmetros por valor a funo trabalha com cpias dos valores passados no momento de sua
chamada (MANZANO e OLIVEIRA, 1997; ASCENCIO e CAMPOS, 2010).
No Quadro 73 apresentado um programa em C que recebe um nmero inteiro, calcula o seu
dobro e exibe.
Quadro 73 - Programa em C

#include <stdio.h>
#include <conio.h>
int calcdobro (int x)
{
x = x * x;
return x;
}
void main ()
{
int x, resposta;
clrscr();
printf(Digite um numero inteiro :);
scanf (%d, &x);
resposta = calcdobro(x);
printf (O dobro do numero %d e %d, x, resposta);
}
O parmetro formal da funo calcdobro sofre alteraes no interior da funo, mas a varivel
x da funo main permanece inalterada, como pode ser visto na Figura 29.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

171

Figura 29 - Programa em C - Sada

PASSAGEM DE PARMETROS POR REFERNCIA


Na passagem de parmetro por referncia os parmetros passados para a funo consistem
em endereos de memria ocupados por variveis. O acesso a determinado valor realizado
por apontamento do endereo. Na passagem por referncia o valor do parmetro real alterado
quando o parmetro formal manipulado dentro da funo (ASCENCIO; CAMPOS, 2010).
A passagem de parmetros por referncia exemplificada no programa do Quadro 74.

172 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 74 - Programa em C

#include <stdio.h>
#include <conio.h>
int calcdobro (int *x)
{
*x = *x * (*x);
return *x;

Fonte: SHUTTERSTOCK.COM

}
void main ()
{
int x, resposta;
clrscr();
printf(Digite um numero inteiro :);
scanf (%d, &x);
resposta = calcdobro(&x);
printf (O dobro do numero %d e %d, x, resposta);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

173

Observe que na chamada da funo calcdobro temos que passar o endereo de memria
ocupado pela varivel x. Isto realizado pelo operador & que obtm o endereo de memria
de uma varivel. Note, tambm, que as operaes realizadas no interior da funo so sobre
ponteiros, deste modo temos que inserir o caractere * antes do nome das variveis. E ao final,
o que muda em relao execuo?
A Figura 30 ilustra a sada obtida com a execuo do programa. Podemos observar que ao
utilizar a passagem de parmetros por referncia temos a alterao do valor da varivel x, que
inicialmente tinha o valor 5 e ao final da execuo da funo calcdobro ficou com o valor 25.
Por que isto acontece?

Figura 30 - Programa em C - Sada


Por que no temos uma cpia do valor de x na passagem de parmetros e sim o seu endereo
de memria. Com isto, temos que a alterao realizada sobre x, conforme Figura 30.

174 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Fonte: SHUTTERSTOCK.COM

PROTTIPO DE FUNES

Voc observou que at o momento todas as nossas funes foram escritas antes da funo
main? Podemos inserir nossas funes aps a funo main? Em qualquer programa podemos
escrever as funes antes ou aps a funo main. No entanto, se optarmos por escrev-las
depois da funo main temos que utilizar prottipo de funes.
O prottipo de uma funo uma linha igual ao cabealho da funo acrescido de ponto e
vrgula que deve ser escrito antes da funo main. Esta linha responsvel por informar ao
compilador que outras funes devero ser encontradas ao trmino do main (ASCENCIO;
CAMPOS, 2010).
A sintaxe do prottipo de uma funo dada por:
tipo_de_retorno nome_da_funo (declarao_de_parmetros);

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

175

O programa da Figura 31 apresenta um exemplo de programa com uma funo escrita depois
da funo main. Para que o compilador reconhea esta funo temos que aplicar o conceito
de prottipo de uma funo, em que declaramos o cabealho da funo calcdobro seguido de
ponto e vrgula antes da funo main (conforme Figura 31).

Figura 31 - Programa em C

RECURSIVIDADE
Do mesmo modo que em outras linguagens, em C possvel elaborar uma funo que chama
a si mesma, isto , uma funo recursiva. A recursividade um mecanismo que permite uma
funo chamar a si mesma direta ou indiretamente. Uma funo recursiva quando possui
uma chamada a si prpria (ZIVIANE, 2004).
Ao construir funes recursivas devemos nos certificar de que h um critrio de parada, o qual
determinar o momento que a funo ir parar de fazer chamadas a si mesmo, impedindo que
entre em um loop.

176 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

No Quadro 75 temos a implementao da funo recursiva para clculo do fatorial utilizando


a linguagem C.
Quadro 75 - Programa em C

#include <stdio.h>
#include <conio.h>
int fatorial (int x)
{
if (x == 0)
return 1;
else
return x*(fatorial(x-1);
}
void main ()
{
int num, resposta;
clrscr();
printf(Digite um numero inteiro :);
scanf (%d, &num);
resposta = fatorial(num);
printf (O fatorial e %d, resposta);
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

177

O Quadro 76 apresenta a funo recursiva para o clculo da srie de Fibonacci.


Quadro 76 - Programa em C

#include <stdio.h>
#include <conio.h>
int fibonacci (int x)
{
if ((x == 0) || (x==1))
return x;
else
return fibonacci(x-2) + fibonacci(x-1);
}
void main ()
{
int num, resposta;
clrscr();
printf(Digite um numero inteiro :);
scanf (%d, &num);
resposta = fibonacci(num);
printf (O fibonacci e %d, resposta);
}

ARQUIVOS
Os arquivos so utilizados no armazenamento de uma grande quantidade de informaes
por um grande perodo de tempo. Um arquivo pode ser lido ou escrito por um programa,
sendo constitudo por uma coleo de caracteres (arquivo texto) ou bytes (arquivo binrio)

178 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

(ASCENCIO; CAMPOS, 2010).


A biblioteca stdio.h oferece suporte utilizao de arquivos. Essa biblioteca fornece funes
para manipulao de arquivos, define novos tipos de dados a serem usados especificamente
com arquivos, como o tipo FILE (ASCENCIO; CAMPOS, 2010).
Uma varivel do tipo ponteiro FILE identifica um arquivo no disco e direciona para ele todas as
operaes. A declarao deste tipo de varivel dada por:
FILE *arq, *pont;
Para abrir um arquivo utilizamos a funo fopen(), a qual abre um arquivo e retorna o ponteiro
associado a ele. Sua sintaxe :
FILE *p;
p = fopen(nome_do_arquivo, modo_de_abertura);
Em que:
p: varivel que armazena o endereo inicial de memria ocupado por um arquivo;
nome_do_arquivo: nome do arquivo que se deseja abrir;
modo_da_abertura: representa como o arquivo ser aberto.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

179

Quadro 77 - Modos para abertura de arquivos

Fonte: adaptado de (ASCENCIO; CAMPOS, 2010)

A funo fopen() quando utilizada no modo escrita, cria o arquivo especificado. Se esse no
existir ou se j existe um arquivo com o mesmo nome, ser sobreposto por um novo arquivo
vazio. O resultado da funo fopen() o endereo de memria ocupado pelo arquivo ou NULL
quando ocorre algum erro e o arquivo no aberto (ROCHA, 2006; ASCENCIO e CAMPOS,
2010).
Para fechar um arquivo utilizamos a funo fclose(), que possui a seguinte sintaxe:
fclose(arq);
Em que o argumento arq a referncia para o arquivo. A funo fclose() retorna um valor
inteiro. Um retorno igual a zero indica que o arquivo foi fechado corretamente.
A escrita de um caractere em uma arquivo realizada por meio da funo fputc(), que possui
a seguinte sintaxe:
fputc(char ch, FILE *arq);

180 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

em que:
ch: corresponde ao caractere que ser escrito no arquivo;
arq: referncia do arquivo em que o caractere ser escrito.
A operao de leitura de um caractere realizada utilizando a funo fgetc(). Sua sintaxe :
int fgetc(FILE *arq);
Se a execuo desta funo for bem-sucedida, o caractere ser armazenado em uma varivel
do tipo int ou char.
A escrita de uma cadeia de caracteres realizada por meio da funo fputs(), que apresenta
a seguinte sintaxe:
fputs(char *cadeia, FILE *arq);
O argumento cadeia armazena a cadeia de caracteres que ser escrito no arquivo e o
argumento arq a referncia para o arquivo em que a cadeia ser escrita.
Na leitura de uma cadeia de caracteres utilizamos a funo fgets(), cuja sintaxe :
fgets(char *cadeia, int tam, FILE *arq);
Onde:
cadeia: armazena a cadeia de caracteres obtida do arquivo;
tam: indica que a quantidade mxima de caracteres lidos ser tam-1;
arq: referncia para o arquivo.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

181

Se quisermos gravar qualquer tipo de dado no arquivo podemos utilizar a funo fwrite(). Sua
sintaxe dada por:
fwrite(void *mem, size_t qtd_bytes, size_t cont, FILE *arq);
Em que:
mem: representa a varivel que armazena o contedo a ser gravado;
qtd_bytes: total de bytes a ser gravado no arquivo;
cont: nmero de blocos de tamanho qtd_bytes que ser armazenado;
arq: referncia para o arquivo.
Se a execuo da funo for bem-sucedida seu retorno ser igual ao valor de cont, isto , o
nmero de gravaes realizadas. Se ocorrer algum erro o retorno ser menor que cont.
Para efetuar a leitura de qualquer tipo de caractere de um arquivo utilizamos a funo fread(),
que apresenta a seguinte sintaxe:
fread(void *mem, size_t qtd_bytes, size_t cont, FILE * arq);
Onde:
mem: representa a varivel que receber o contedo lido;
qtd_bytes: tamanho do bloco que ser lido em bytes;
cont: nmero de blocos que ser lido;
arq: referncia para o arquivo.
De modo anlogo, a funo fwrite(), se sua execuo for bem-sucedida, o retorno ser igual
ao nmero de leituras, isto , o valor de cont. Seno, o valor ser menor que cont.

182 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

No Quadro 78 so apresentadas algumas funes para manipulao de arquivos.


Quadro 78 - Funes para manipulao de arquivos
Obejtivo

Funo

Sintaxe

feof()

feof(arq);

rewind()

rewind(FILE *arq);

remove()

remove(char *nomearq);

rename()

rename(char *nome_atual, char


Altera o nome de um arquivo.
*nome_novo)

Verifica se o fim do arquivo foi atingido.


Um valor de retorno igual a zero indica que o
fim do arquivo ainda no foi atingido.
Posiciona o cursor no incio do arquivo.
Apaga um arquivo.

Fique tranquilo!!! Veremos o funcionamento destas funes. O Quadro 79 apresenta um


programa que exemplifica a manipulao de arquivos. realizada a operao de abertura
do arquivo, verificao de erro, leitura de um caractere e fechamento de arquivo. A leitura de
caractere realizada at que seja digitado o caractere f. Execute o cdigo a seguir e ao final,
abra o arquivo com nome arquivo.txt e verifique o seu contedo.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

183

Quadro 79 - Programa em C

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main()
{
FILE *arq;
char letra;
arq = fopen(C:\\arquivo.txt, w);
if (arq == NULL)
{
printf (\n O arquivo nao foi aberto. Ocorreu um erro!);
}
else
{
printf (\n Digite um caractere: );
cin >> letra;
while ((letra != f) && (letra !=F))
{
fputc(letra, arq);
if (ferror(arq))
{

printf(\n Erro na gravacao !!);

else
{

printf (\n Gravacao efetuada com sucesso!! );

printf (\n Digite outro caractere: );


cin >> letra;
}
}
fclose(arq);
}

184 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

No Quadro 80 temos um exemplo de manipulao de arquivo com a gravao


de cadeias de caracteres at que seja informada a palavra fim.
Quadro 80 - Programa em C

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
void main()
{
FILE *arq;
char palavra[50];
arq = fopen(C:\\arquivo.txt, w);
if (arq == NULL)
{
printf (\n O arquivo nao foi aberto. Ocorreu um erro!);
}
else
{
printf (\n Digite uma palavra: );
gets(palavra);
while ((stricmp(palavra,fim) != 0))
{
fputs(palavra, arq);
if (ferror(arq))
{

printf(\n Erro na gravacao !!);

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

185

else
{

printf (\n Gravacao efetuada com sucesso!! );

printf (\n Digite uma palavra: );


gets(palavra);
}
}
fclose(arq);
}
Um exemplo de operao de leitura de um arquivo texto apresentado no Quadro 81. A leitura
do arquivo realizada at que seja encontrado o fim do arquivo. De modo que so efetuadas
leituras com 50 caracteres.

186 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

Quadro 81 - Programa em C

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
void main()
{
FILE *arq;
char frase[50];
arq = fopen(C:\\teste.txt, r);
if (arq == NULL)
{
printf (\n O arquivo nao foi aberto. Ocorreu um erro!);
}
else
{
while (!feof(arq))
{
fgets(frase, 50, arq);
if (ferror(arq))
{

printf(Erro na leitura do arquivo);


}
else
{


printf(\n Leitura realizada com sucesso. A cadeia e : %s ,
frase);
}
}
}
fclose(arq);
}
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

187

Observe que quando queremos realizar a leitura ou escrita de um arquivo devemos utilizar as
funes de abertura, verificao de erro e fechamento. Em relao abertura do arquivo no
podemos esquecer de modificar o modo de acesso de acordo com o que desejamos realizar.
Nos programas do Quadro 79 e Quadro 80 a abertura do arquivo foi realizada utilizando o
modo de acesso de gravao (w) e no Quadro 81 foi realizada utilizando o modo de acesso
apenas de leitura (r). Podemos abrir um arquivo para realizar leitura e escrita? Sim, basta
identificar o modo de acesso como r+. Para relembrar os modos de acesso a arquivos verifique
o Quadro 77.

CONSIDERAES FINAIS
Nesta unidade voc aprendeu como modularizar os programas utilizando funes. Vimos
que as funes so sub-rotinas que nos permitem desviar a execuo do programa principal
para realizar uma tarefa especfica e retornam um valor. Alm disso, estudamos que um
programa em C um conjunto de funes que so executadas a partir da execuo da funo
denominada main() e que cada funo pode conter declaraes de variveis, instrues e/ou
at mesmo outras funes.
Aprendemos que a sintaxe de uma funo dada por:

tipo_de_retorno nome_da_funo (declarao_de_parmetros)


{
corpo_da_funo
}
Ainda em relao a funes vimos o uso do comando return, responsvel por encerrar funo
e retornar o valor informado, sendo que no comando deve ser compatvel com o tipo declarado
para a funo.
Conhecemos o conceito de escopo de variveis e vimos que as variveis podem ser locais ou
globais. Sendo que uma varivel local aquela que est acessvel apenas dentro da funo,
enquanto que uma varivel global acessvel de qualquer parte do programa.
Estudamos a passagem de parmetros por valor e por referncia. Na passagem de parmetros

188 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

por valor no h alterao do valor do parmetro real, pois a funo trabalha com cpias dos
valores passados no momento de sua chamada. J na passagem de parmetros por referncia,
esses valores so alterados, pois os parmetros passados so endereos de memria.
Abordamos o conceito de prottipo de uma funo, que informa ao compilador que outras
funo devero ser encontradas ao trmino do main. Este conceito nos permite escrever
funes depois da funo main.
Estudamos o conceito de recursividade e construmos programas para as funes recursivas
de clculo de fatorial e srie de Fibonacci.
Por fim, trabalhamos com a manipulao de arquivos realizando operaes de leitura e escrita.
Aprendemos como abrir arquivos, quais os modos de operao, como verificar erros durante
a abertura, como realizar leitura e escrita de caractere e cadeia de caracteres e construmos
programas para colocar em prtica os conceitos vistos.

HERBERT, S. C Completo e Total. Editora Makron, 3. ed, 1997.

Sinopse: C Completo e Total, 3 est dividido em cinco partes, cada uma abordando um aspecto
importante de C. Parte 1 - Apresenta uma discusso detalhada da linguagem C, incluindo palavras-chaves, tipos de dados, operadores, funes, ponteiros, E/S, alocao dinmica e muito mais. Parte
2 - Apresenta uma extensa descrio das funes de biblioteca por categoria. Abrange as funes defi nidas pelo padro ANSI e muitas extenses comuns, como as chamadas de arquivos Unix, grfi cos
e as funes de interface com o sistema operacional. Parte 3 - Mostra como aplicar C, concentrando-se em algoritmos teis e aplicaes interessantes da linguagem C. Parte 4 - Trata do ambiente de
desenvolvimento C, incluindo efi cincia, portabilidade, depurao e interface com o cdigo assembler.
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

189

Parte 5 - Desenvolve um interpretador C, com vrios e diversifi cados exemplos que esclarecem cada
conceito apresentado neste livro e que o diferenciam de qualquer outra obra de referncia sobre C.

Para saber um pouco mais sobre a construo de funes e passagem de parmetros, acesse: <http://
pt.wikibooks.org/wiki/Programar_em_C/Fun%C3%A7%C3%B5es>.

A Linguagem C no permite que vetores e matrizes sejam passados na ntegra como parmetros de
uma funo. Deve-se passar apenas o endereo da posio inicial, isto indica que um vetor ou matriz
podem ser passados para uma funo apenas por referncia (ASCENCIO; CAMPOS, 2010).

ATIVIDADE DE AUTOESTUDO
1. Faa um programa que verifi ca se um determinado nmero positivo ou negativo.
2. Elabore uma funo que receba dois nmeros positivos por parmetro e retorne a soma
dos N nmeros inteiros existentes entre eles.
3. Escreva uma funo que receba um caractere e retorne 1 se for uma consoante e 0 se for
vogal.
4. Faa um programa com uma funo que apresente o somatrio dos N primeiros nmeros
pares, defi nidos por um operador. O valor de N ser informado pelo usurio.
5. Construa uma funo que receba um nome e retorne o nmero de vogais.
6. Elabore um programa que receba o valor da cotao do dlar, o valor em reais e apresente
o valor em dlares.

190 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

7. Construa um programa que permita ao usurio gravar 10 palavras em um arquivo e, em


seguida, efetue a leitura do arquivo.

EXERCICIOS DE FIXACO
1. Escreva um programa utilizando funo que converta uma dada temperatura lida em
Celsius para Fahrenheit.
Quadro 82 - Programa em C

#include <stdio.h>
#include <conio.h>
float convertet (float celsius);
void main ()
{
float celsius, resposta;
clrscr();
printf(Informe a temperatura em graus Celsius :);
scanf (%f, &celsius);
resposta = convertet(celsius);
printf (A temperatura %.2f em Fahreneit e %.2f, celsius, resposta);
}
float convertet (float celsius)
{
float temp;
temp = celsius * 1.8 + 32;
return temp;
}

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

191

2. Escreva um programa utilizando funo que recebe o peso de um peso em quilogramas e


converte para libras.
Quadro 83 - Programa em C

#include <stdio.h>
#include <conio.h>
float convertep (float peso);
void main ()
{
float peso, resposta;
clrscr();
printf(Informe o peso em quilogramas :);
scanf (%f, &peso);
resposta = convertep(peso);
printf (O peso %.2f em libras e %.2f, peso, resposta);
}
float convertep (float peso)
{
peso = peso * 2.68;
return peso;
}

192 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

3. Faa uma funo que receba como parmetro um vetor com 10 nmeros inteiros e retorne-os ordenado em forma crescente.
Quadro 84 - Programa em C

#include <iostream.h>
#include <conio.h>
void ordena(int v[])
{
int i, j, aux;
for (i=0;i<9;i++)
{
for (j=i+1; j<10;j++)
{
if (v[i] > v[j])
{
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
}
}
}
void main()
{
int i, vet[10];
clrscr();
for (i=0;i<10;x++)
{
printf(Informe o elemento %d do vetor , i);
cin >> vet[i]
}
ordena(vet);
printf (\n Vetor ordenado);
for (i=0;i<10;i++)
{
printf(%d , vet[i]);
}
}
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

193

4. Elabore uma funo que receba uma string e retorne a quantidade de consoantes.
Quadro 85 - Programa em C

#include <stdio.h>
#include <conio.h>
#include <string.h>
int conta(char nome[])
{
int i, tam, qtd;
tam = strlen(nome);
nome = strupr(nome);
qtd = 0;
for (i=0;i<tam;i++)
{
if ((nome[i] != A) && (nome[i] !=E) && (nome[i] !=I) && (nome[i]
!=O) && (nome[i] != U) && (nome[i] != ))
qtd ++;
}
return qtd;
}
void main()
{
int total;
char nome[30];
clrscr();
printf(Informe o nome: );
gets(nome);
total = conta(nome);
printf(\n A quantidade de consoantes do nome %s e %d, nome, total);
}

194 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

CONCLUSO
Caro(a) aluno (a), chegamos ao final de nossa disciplina de Algoritmos e Lgica de Programao
II, em que voc aprendeu os conceitos bsicos da Linguagem de Programao C.
Na Unidade I vimos o histrico da Linguagem C, suas caractersticas e como o cdigo de um
programa convertido em um arquivo executvel. Conhecemos a estrutura bsica de um
programa em C, que dada por:

#include <stdio.h>
main()
{
conjunto de instrues;
}
Aprendemos que todo programa possui uma funo main, que chamada quando o programa
executado, como inserir comentrios em nossos cdigos e as regras para a nomeao dos
identificadores. Conhecemos os tipos bsicos de dados (char, int, float, double, enum, void
e pointer), operadores e funes intrnsecas disponveis na linguagem C. Vimos, tambm, que
os tipos de dados bsicos podem gerar outros tipos a partir da aplicao dos modificadores
unsigned, short e long. Trabalhamos como realizar atribuio, entrada e sada de dados.
Vimos que a atribuio realizada pelo sinal de igualdade (=), a funo para entrada de dados
o scanf e a sada o printf. Alm disso, estudamos como utilizar os especificadores de
formato e cdigos especiais.
A Unidade II abordou a construo de programas utilizando a estrutura condicional, isto ,
programas com desvio fluxo. Estudamos a estrutura condicional simples, a estrutura condicional
composta e a estrutura case. Aprendemos que a estrutura condicional simples utilizada em
situaes em que um conjunto de instrues deve ser executado apenas se uma condio
for verdadeira. Vimos que na estrutura condicional composta realizada a avaliao de uma
nica expresso lgica, no entanto temos dois caminhos para seguir, um para o resultado
verdadeiro e outro para falso. A sintaxe desta estrutura :

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

195

if (<condio>)
{
<instrues para condio verdadeira>;
}
else
{
<instrues para condio falsa>;
}
Vimos que esta estrutura case deve ser utilizada em situaes mutuamente exclusivas e sua
sintaxe :

switch (<varivel>)
{

case <valor 1> : <instrues>;

break;

case <valor 2> : <instrues>;

break;

case <valor 3> : <instrues>;

break;

default: <instrues>;
}
Colocamos em prtica a construo de programas utilizando cada uma das estruturas
condicionais.
Na Unidade III vimos como construir algoritmos utilizando estruturas de repetio, que
permitem a execuo de um trecho de cdigo repetidas vezes. Estudamos a estrutura for que
utilizada quando sabemos quantas vezes o trecho de cdigo precisa ser repetido. A sintaxe
da estrutura for :

196 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

for ( i= valor inicial; condio; incremento ou


decremento de i);
{
<instrues>;
}
Vimos que a estrutura while utilizada quando no sabemos previamente o nmero de
repeties que deve ser executado e impomos uma condio que realizada no incio. A
sintaxe da estrutura while :

while (condio);
{
<instrues>;
}
Aprendemos que a estrutura do while utilizada quando temos um nmero indefinido de
repeties, no entanto o teste lgico realizado no final. A sintaxe desta estrutura :

do
{
<instrues>;
}
while (condio);
A Unidade IV apresentou os conceitos relacionados a vetores, strings, matrizes e estruturas.
Estudamos que os vetores e matrizes so estruturas de dados homogneas que agrupam
diversas informaes, do mesmo tipo, em uma nica varivel e o acesso a essas estruturas
indexado. Aprendemos como efetuar classificao e pesquisa em vetores. Estudamos como
efetuar leitura e escrita de strings e conhecemos funes que permitem concatenar, comparar,
copiar, armazenar, imprimir, converter para um valor numrico e outros. Trabalhamos
a definio de novos tipos de dados utilizando estruturas (structs), que so capazes de
armazenar informaes de tipos diferentes. Estudamos como manipular essas estruturas e
ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

197

como construir vetores de estruturas.


Por fim, na Unidade V, aprendemos a construir programas modulares com o uso de funes,
cuja sintaxe :

tipo_de_retorno nome_da_funo (declarao_de_parmetros)


{
corpo_da_funo
}
Estudamos o conceito de escopo de variveis e a passagem de parmetros por valor e por
referncia. Vimos que na passagem de parmetros por valor no h alterao do valor do
parmetro real e que na passagem de parmetros por referncia esses valores so alterados.
Abordamos a construo de programas utilizando prottipo de uma funo, recursividade e
manipulao de arquivos.
Nestas cinco unidades consolidamos o aprendizado dos conceitos inicias da Linguagem de
Programao C.
Muito sucesso a voc!
Professora Camila

198 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

REFERNCIAS
ASCENCIO, A. F. G.; CAMPOS, E. A. V. Fundamentos da programao de computadores.
5. ed. So Paulo: Prentice Hall, 2010.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lgica de Programao. 3. ed. So Paulo:
Makron Books, 2005.
GUIMARES, A. M.; LAGES, N. A. C. Algoritmos e Estruturas de Dados. Rio de Janeiro:
LTC, 1994.
KERNINGHAN, B. W.; RITCHIE, D. M. C Programming Language. 2. ed. Prentice Hall
Software Series, 1988.
LOPES, A.; GARCIA, G. Introduo Programao. Rio de Janeiro: Elsevier, 2002.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Estudo dirigido de algoritmos. 3. ed. So Paulo:
rica, 1997.
PAPPAS, C. H.; MURRAY, W. H. Turbo C++ Completo e Total. So Paulo: Makron, McGrawHill, 1991.
ROCHA, A. A. Introduo Programao Usando C. Editora FCA, 2006.
WIRTH, N. Algoritmos e Estruturas de Dados. Rio de Janeiro: Editora LTC, 1999.
ZIVIANE, N. Projeto de Algoritmos com implementaes em Pascal e C. 2. ed. So Paulo:
Pioneira Thomson Learning, 2004.

ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

199

You might also like