Académique Documents
Professionnel Documents
Culture Documents
LABORATRIO DE
PROGRAMAO
Laboratrio de
Programao
COORDENADORES DE CURSOS
ADMINISTRAO Antonella Maria das Chagas Sousa
ADMINISTRAO PBLICA Fabiana Rodrigues de Almeida Castro
CINCIAS BIOLGICAS Maria da Conceio Prado de Oliveira
FILOSOFIA Zoraida Maria Lopes Feitosa
FSICA Miguel Arcanjo Costa
LETRAS PORTUGUS Jos Vanderlei Carneiro
LETRAS INGLS Lvia Fernanda Nery da Silva
MATEMTICA Joo Bencio de Melo Neto
PEDAGOGIA Vera Lcia Costa Oliveira
QUMICA Milton Batista da Silva
SISTEMAS DE INFORMAO Leonardo Ramon Nunes de Sousa
C.D.D. 001.5
A responsabilidade pelo contedo e imagens desta obra do autor. O contedo desta obra foi licenciado temporria e gratuita-
mente para utilizao no mbito do Sistema Universidade Aberta do Brasil, atravs da UFPI. O leitor se compromete a utilizar
ocontedo desta obra para aprendizado pessoal, sendo que a reproduo e distribuio ficaro limitadas ao mbito interno
dos cursos. A citao desta obra em trabalhos acadmicos e/ou profissionais poder ser feita com indicao da fonte. A cpia
deste obra sem autorizao expressa ou com intuito de lucro constitui crime contra a propriedade intelectual, com sanses
previstas no Cdigo Penal.
Nosso objetivo neste livro pr em prtica os conceitos vistos
em Algoritmos e Programao I. Durante toda o livro teremos muitos
exemplos, exerccios resolvidos e exerccios propostos com o objetivo de
estimular voc a colocar a mo na massa ao implementar os algoritmos
descritos.
Todas as atividades aqui propostas devem ser realizadas, a fim
de propiciar a voc cada vez mais confiana na resoluo de problemas
atravs de algoritmos computacionais, constituindo-se, assim, uma
disciplina de fundamental importncia na continuidade do curso de
Bacharelado em Sistemas de Informao.
Nossa primeira unidade est voltada para os conceitos iniciais,
como preparao do ambiente de programao (Eclipse + MinGW ou
GNU C) e primeiros exemplos de entrada e sada, utilizando a linguagem
de programao C. Logo em seguida, na unidade 2, iremos pr em prtica
os comandos de seleo e de repetio. Na unidade 3, revisaremos os
conceitos de vetores e matrizes, formas de declarao que nos permitem
criar vrios elementos do mesmo tipo, sequencialmente. A unidade 4
aborda o conceito de estruturas, como declar-las e a melhor forma de
utiliz-las em nossos programas. Por fim, na unidade 5, colocaremos
em prtica os conceitos de funes e procedimentos, como forma de
modularizar nosso programa e facilitar o entendimento e implementao
do mesmo.
Este material foi preparado visando abordar estes conceitos da
melhor forma possvel, sempre pensando no aluno distncia e nesta
particular forma de ensino. Procuramos colocar os exemplos de forma
bastante explicativa, a fim de que voc possa implementar os exemplos
e resolver os exerccios mesmo na ausncia de Internet para eventuais
pesquisas.
Ento, isso. Aproveite o livro para praticar bastante. Mos
obra.
Bons Estudos!
UNIDADE 1
09 PRIMEIROS PASSOS
UNIDADE 2
35 COMANDOS DE SELEO E DE REPETIO
Comandos de Seleo......................................................................... 35
Comandos de Repetio...................................................................... 52
UNIDADE 3
57 VETORES E MATRIZES
Vetores................................................................................................ 73
Strings ou Cadeias de caracteres (Vetores de char)............................78
Matrizes............................................................................................... 84
UNIDADE 4
09 ESTRUTURAS
Estruturas............................................................................................ 95
Declarao de tipos de dados estruturas............................................ 97
Vetores de Estruturas........................................................................ 101
Estruturas de Estruturas.................................................................... 104
UNIDADE 5
09 FUNES E PROCEDIMENTOS
Funes............................................................................................. 111
Criando Funes................................................................................ 112
Procedimentos.................................................................................. 114
Passagem de parmetros.................................................................. 116
Prottipo de funes......................................................................... 126
Recursividade.................................................................................... 128
UNIDADE 01
Primeiros Passos
10 UNIDADE 01
PRIMEIROS PASSOS
Primeiros passos
Instalao do Compilador C
Para instalarmos o MinGW seguiremos os seguintes passos
especificados nas telas mostradas nas figuras a seguir:
LABORATRIO DE PROGRAMAO 11
Figura 1. Tela inicial de instalao do MinGW
A Figura 1 mostra a tela inicial de instalao do MinGW. A partir
dela vamos continuar com nossa instalao, pressionando no boto
next.
12 UNIDADE 01
Prosseguindo, veremos a tela da Figura 3, que mostra a licena
de uso do MinGW. Para continuarmos a instalao, devemos aceitar os
termos da licena clicando em aceito (I agree).
Aps escolhermos a verso seremos redirecionados para a
tela da Figura 5, na qual devemos escolher quais componentes sero
instalados. Por padro, selecionada a opo MinGW base tools, que
instalar todo o ferramental necessrio para desenvolvermos em C.
Podemos selecion-la e continuarmos pressionando next.
LABORATRIO DE PROGRAMAO 13
Figura 6. Instalao do MinGW: Escolha da pasta
Na tela acima (Figura 6) devemos escolher a pasta onde ser
instalado o compilador. Basta escolhermos uma pasta qualquer, ou
aceitarmos a sugesto do instalador (C:\MinGW) e continuarmos
pressionando next.
14 UNIDADE 01
Figura 8. Instalao do MinGW completada
Feito isso, o Linux se encarregar de baixar da Internet os
arquivos necessrios e instal-los em nosso computador. Ser solicitada
uma senha para a instalao do aplicativo, quando devemos informar a
LABORATRIO DE PROGRAMAO 15
mesma senha usada para efetuar login no sistema. (Em alguns ambientes
Linux o compilador C vem instalado por padro. Para verificarmos isso
basta tentar executar o comando gcc em um terminal. Se o seu Linux
reconhecer o comando e retornar um erro do tipo: no input files, significa
que voc j o possui, caso contrrio execute o comando mostrado
anteriormente).
Instalao do Eclipse
http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/
heliosr
Nesta pgina podemos encontrar na barra lateral direita os
endereos para baixarmos verses especficas para cada sistema
operacional. Seguem os endereos especficos:
1) Windows 32 bits:
http://www.eclipse.org/downloads/download.php?file=/technology/epp/
downloads/release/helios/R/eclipse-cpp-helios-win32.zip
2) Windows 64 bits:
http://www.eclipse.org/downloads/download.php?file=/technology/epp/
downloads/release/helios/R/eclipse-cpp-helios-win32-x86_64.zip
3) Linux 32 bits:
http://www.eclipse.org/downloads/download.php?file=/technology/epp/
downloads/release/helios/R/eclipse-cpp-helios-linux-gtk.tar.gz
4) Linux 64 bits:
http://www.eclipse.org/downloads/download.php?file=/technology/epp/
downloads/release/helios/R/eclipse-cpp-helios-linux-gtk-x86_64.tar.gz
16 UNIDADE 01
Feito isso, estamos com tudo pronto para comearmos a criar
nossos primeiros programas em C usando o ambiente que acabamos de
instalar.
LABORATRIO DE PROGRAMAO 17
Se tudo correu bem, estamos aptos a criar nosso primeiro algoritmo
em C usando o ambiente Eclipse + MinGW ou GCC.
Criando um projeto
18 UNIDADE 01
Nessa janela (Figura 13) vamos configurar nosso projeto.
Primeiramente, devemos dar um nome a nosso projeto, no campo Project
name. Na localizao do projeto, o eclipse j sugere uma pasta com
o mesmo nome que colocamos no projeto dentro do workspace que
escolhemos. Iremos aceitar essa sugesto de modo a organizar nossos
projetos.
Devemos selecionar tambm o tipo de projeto. Por padro, est
selecionado Empty Project, que significa projeto vazio, no entanto,
utilizaremos a opo Hello World ANSI C Project para criao do nosso
projeto. Esta opo cria um arquivo com a implementao do clssico
Hello World, que simplesmente mostra uma mensagem de ol na tela. O
campo de seleo Toolchains s possui a opo MinGW GCC, pois s
temos este compilador instalado neste caso.
Feito isso, clicamos no boto Finish e nosso primeiro projeto ser
criado. A seguinte tela (Figura 14) ser mostrada.
LABORATRIO DE PROGRAMAO 19
Figura 15. Arquivo criado automaticamente pelo eclipse
Neste arquivo so usados os comandos bsicos de C para
implementar um algoritmo que escreva a mensagem !!!Hello World!!! na
tela. Detalhando cada linha, temos o contedo a seguir:
Para que possamos executar nosso programa, primeiro
necessrio compil-lo, ou seja, gerar o executvel correspondente ao
cdigo fonte digitado. Via eclipse podemos fazer isso de duas maneiras:
clicando no menu Project e selecionando a opo Build All ou atravs
do atalho de teclado Ctrl+B. Depois de compilado podemos executar
nosso programa atravs do boto da barra de ferramentas destacado na
figura a seguir (Figura 16).
20 UNIDADE 01
Figura 16. Executar projeto no eclipse
LABORATRIO DE PROGRAMAO 21
A rigor, este exemplo bem parecido com o que foi mostrado
anteriormente. No entanto, est mais condizente com o que vimos em
nossa disciplina anterior de Algoritmos e Programao I. A explicao,
linha por linha, deste cdigo est logo abaixo. Temos apenas um comando
de sada de dados. Vejam que bastante semelhante ao exemplo anterior.
Lembra disso?
possvel, ainda, passar parmetros capazes de imprimir
caracteres especiais, necessrios, especialmente, para formatarmos a
22 UNIDADE 01
sada do nosso programa. Por exemplo: \n (quebra de linha), \t (tabulao),
\\ (escreve a barra), entre outros.
Execuo:
Entrada de dados
LABORATRIO DE PROGRAMAO 23
ir executar. Para isso, usaremos a funo scanf, que possui sintaxe
bem parecida com o printf e serve para lermos um valor do teclado e
armazenarmos em uma varivel.
24 UNIDADE 01
Linha 8 fflush(stdout);: Comando que manda escrever imediatamente
na tela;
Linha 9 scanf(%d, &idade);: Leitura de um valor inteiro (%d) do
teclado e armazenamento em idade;
Linha 10 printf(Sua idade %d, idade);: Escrita de uma mensagem
de retorno com o valor da varivel lida;
Linha 11 return 0;: Retorno da funo principal;
Linha 12 }: Fechamento do corpo da funo principal.
LABORATRIO DE PROGRAMAO 25
Vale ressaltar que este problema s ocorre no console do eclipse
para Windows, portanto, se estivermos executando nossos exemplos
em ambiente Linux ou em outros terminais que no o do eclipse para
Windows, este comando se faz desnecessrio. Portanto, se quisermos
usar o console do eclipse para Windows devemos sempre colocar o
comando fflush(stdout) aps os comandos de escrita (printf) em nossos
programas.
Declarao de variveis
Muitas vezes necessrio armazenar algum valor durante a
execuo de nossos programas. Valores esses que, possivelmente, sero
usados mais frente em algum clculo. Para isso, usamos o conceito
de variveis: uma varivel uma posio da memria do computador
onde podemos armazenar um valor para utilizao no nosso programa.
Para usarmos uma varivel, primeiramente precisamos declar-la, ou
seja, informar ao computador que aquela varivel existe. O formato de
declarao de variveis em C :
tipo_da_varivel nome_da_varivel; ou
tipo_da_varivel nome_varivel_1, nome_varivel_2, ..., nome_varivel_n;
26 UNIDADE 01
b) No se devem utilizar caracteres especiais. Ex: var*, var#, mdia
(invlidas);
c) No se pode colocar espao ou hfen. Ex: valor total, valor total
(invlidas);
i. Utilize, nesses casos, underline. Ex: valor_total
d) Procure utilizar nomes que lembrem o significado da varivel.
Ex: para uma varivel que ir armazenar a mdia: float media.
LABORATRIO DE PROGRAMAO 27
mesma. Vejamos a explicao desse cdigo linha por linha:
Expresses
28 UNIDADE 01
Operador Significado
+ Soma
- Subtrao
* Multiplicao
/ Diviso (inteira ou real)
% Resto da diviso inteira
Tabela 3. Operadores aritmticos
Operador Smbolo
Igual =
Maior >
Menor <
Maior ou Igual >=
Menor ou Igual <=
Diferente |=
Tabela 4. Operadores relacionais
Operador Smbolo
Conjuno - E &&
Disjuno - OU II
Negao - NO !
Tabela 5. Operadores lgicos
LABORATRIO DE PROGRAMAO 29
Execuo:
3. Faa um programa que crie trs variveis para receber as trs notas
de um aluno e calcule e imprima a mdia desse aluno.
4. Faa um programa que receba sua idade e escreva sua idade daqui a
10 anos.
5. Faa um programa que calcule o resultado da expresso: (537 - 285)
* 10 + (3 * (72 - 17)).
6. Faa um programa que receba um nmero inteiro e calcule o resto da
diviso por 2.
7. Faa um programa que receba o nome e o sobrenome de uma pessoa
e imprima o nome completo em uma linha.
8. Faa um programa que receba um nmero e exiba seu sucessor e
antecessor.
9. Faa um programa que calcule a quantidade de dinheiro gasto por um
fumante dados: a quantidade de anos que ele fuma, o preo da carteira
e o nmero de cigarros por dia.
10. Faa um programa que calcule a rea e o volume do cilindro.
11. Faa um programa que resolva uma equao do primeiro grau (ax +
b = 0).
12. Faa um programa que receba uma temperatura em Celcius e imprima
30 UNIDADE 01
a correspondente converso para Farenheit e Kelvin.
13. Sabendo que lato composto por 70% de cobre e 30% de zinco,
faa um programa que calcule a quantidade de cobre e zinco para uma
determinada quantidade de lato informada pelo usurio.
14. Faa um programa que imprima uma caixa, uma oval, uma seta e um
losango usando asteriscos da seguinte forma:
LABORATRIO DE PROGRAMAO 31
UNIDADE 02
Comandos de Seleo
e de Repetio
comandos de seleo
e de repetio
Comandos de Seleo
Comando de seleo if
LABORATRIO DE PROGRAMAO 35
comando possui a seguinte sintaxe:
if (condio) comandos;
Figura 23 B. Exemplo de if
Veja a explicao linha por linha da aplicao da Figura 23.B:
36 UNIDADE 02
Linha 11 printf(Voc maior de idade. Tem %d anos., idade);: Escrita
de mensagem. Esse comando s ser executado se o valor de idade for
maior que 18;
Linha 12 return 0: Valor de retorno da funo principal (main);
Linha 13 }: Fechamento do programa.
LABORATRIO DE PROGRAMAO 37
Figura 26 A. Segundo exemplo de if
38 UNIDADE 02
Figura 27. Resultado da execuo com idade = 13
LABORATRIO DE PROGRAMAO 39
delimitadores { e }. Isso melhora a legibilidade do cdigo. Abaixo temos
o resultado da execuo desse programa para os trs casos possveis:
40 UNIDADE 02
Execuo:
LABORATRIO DE PROGRAMAO 41
6. Faa um programa que receba trs nmeros e imprima o menor deles.
7. Faa um programa que receba dois nmeros e os imprima em ordem
crescente.
8. Faa um programa que leia um nmero e verifique se ele par ou
mpar.
9. Faa um programa que leia quatro nmeros e imprima a soma dos que
forem par.
10. Faa um programa que receba um ano e verifique se ele bissexto.
Um ano bissexto se for divisvel por quatrocentos ou se ele for divisvel
por quatro mas no por cem.
42 UNIDADE 02
Podemos perceber que o algoritmo ficou mais simples e
representativo. O primeiro teste ficou igual, apenas verificando se a
mdia maior ou igual a sete. Se for, apenas escreve Aprovado e a
execuo do programa passa para a prxima linha depois da estrutura
if-else que corresponde linha 19.
Se esta condio no for verdadeira, ou seja, se a mdia for menor
do que sete, o programa entra no bloco do else e ir verificar se a mdia
maior ou igual a quatro. Se for escreve Prova final e passa para a
instruo logo aps o if-else interno, linha 18. Se essa condio no for
verdadeira, a execuo ir entrar no else do if-else interno, ir mostrar
Reprovado e continuar a execuo tambm logo aps o if-else interno,
na linha 18.
As figuras a seguir mostram o resultado da execuo desse
programa para cada um dos trs casos analisados:
LABORATRIO DE PROGRAMAO 43
Esse nosso teste teve apenas trs casos diferentes, mas no caso
de existirem mais condies a serem testadas, nosso cdigo tende a ficar
cada vez mais bagunado. Vejamos o exemplo a seguir:
44 UNIDADE 02
Assim, as diferenas desse exemplo para o anterior so nas
linhas 12, 14 e 16, onde juntamos a clusula else com o prximo if,
dando ao nosso cdigo mais expressividade e legibilidade. Nota-se ainda
que, usando essa estrutura, necessrio finalizarmos com uma ltima
clusula else (sem if), que casar quando todas as condies anteriores
forem falsas, assim como est exemplificado na linha 18.
Se alguma das condies for verdadeira, ser executado o bloco
de comandos correspondente quela clusula e depois o controle ser
passado para fora de toda a estrutura if-else-if, na linha 21. Por exemplo,
se as condies das linhas 10 e 12 forem falsas e a da linha 14 for
verdadeira, ser executado o comando prinft da linha 15 e o prximo
comando a ser executado ser o da linha 21. O resultado dessa execuo
est na Figura 38.
LABORATRIO DE PROGRAMAO 45
Execuo:
46 UNIDADE 02
(possui um ngulo obtuso maior que 90 graus).
8. Faa um programa que leia um nmero e imprima se ele par ou
mpar.
9. Utilize a estrutura if para fazer um programa que retorne o nome
de um produto a partir do cdigo do mesmo. Considere os seguintes
cdigos:
a. 001: Parafuso;
b. 002: Porca;
c. 003: Prego;
d. Para qualquer outro cdigo indicar: diversos!
O comando switch
switch (varivel) {
case contante_1: comandos_1;
break;
case contante_2: comandos_2;
break;
...
default: comandos_default;
break;
}
LABORATRIO DE PROGRAMAO 47
Com este comando, passamos a varivel que queremos testar e,
dependendo do seu valor, o programa ir executar um caso diferente.
Apesar do poder dessa estrutura, temos algumas limitaes, como, por
exemplo: no se podem passar expresses para serem testadas, apenas
variveis simples. Os tipos de variveis que podem ser testadas so
somente int e char, no sendo possvel passar float, double ou string, por
exemplo.
Cada caso indicado pela palavra-chave case, seguida do valor
de teste e de dois pontos (:). Aps os dois pontos sero colocados os
comandos correspondentes a cada caso. Ao final dessa sequncia de
comandos, necessrio que coloquemos o comando break, pois ele
quebrar a execuo e redirecionar o fluxo para fora do switch. Sendo
assim, o break que informa at onde vo os comandos de cada opo,
no sendo necessrios delimitadores para cada caso (apenas para o
prprio comando switch).
Ao final de todos os casos, podemos especificar um caso default,
que funcionar da mesma forma que um else em uma sequncia de
if-else-if. Ou seja, se nenhum dos casos da estrutura switch for casar
com o valor da varivel de entrada, o programa entrar no caso default
e executar as instrues ali especificadas. Para esse caso, no
necessrio colocarmos o comando break finalizando o mesmo, visto que
ele ser sempre o ltimo caso, no entanto, para melhorar a legibilidade de
nossos programas, o ideal no nos esquecermos de coloc-lo, mesmo
nesse caso.
Vejamos o exemplo (Figura 39) para entendermos o funcionamento
desta estrutura:
48 UNIDADE 02
Nesse exemplo pedimos para o usurio entrar com um nmero
identificando o tipo de veculo. Tipo 1 corresponde a carro de passeio
(linha 12), nesse caso o pedgio ser de R$ 0,50 (linha 13). O tipo 2
corresponde a nibus (linha 15), para eles o pedgio ser de R$ 1,00
(linha 16). No ltimo caso, tipo 3, temos caminho (linha 18), com
pedgio de R$ 2,00 (linha 19). Se nenhum desses valores for recebido, o
sistema retornar a mensagem veculo desconhecido (linha 21).
Ao final, linha 24, imprimimos a mensagem valor do seu pedgio:
R$ e o valor selecionado logo em seguida. Atentem para a formatao
do valor para sada na linha 24 (%.2f), nesse caso estamos indicando
que ser impresso um valor real (f) com duas casas decimais (.2). Abaixo
temos as sadas do programa para cada uma das opes escolhidas
(Figura 40, 41, 42 e 43).
LABORATRIO DE PROGRAMAO 49
Figura 43. Resultado da execuo para tipo de veculo 8
50 UNIDADE 02
imprimir ms invlido.
Execuo:
LABORATRIO DE PROGRAMAO 51
9. Utilize a estrutura switch para fazer um programa que retorne o nome
de um produto a partir do seu cdigo. Considere os seguintes cdigos:
a. 001: Parafuso;
b. 002: Porca;
c. 003: Prego;
d. Para qualquer outro cdigo indicar: diversos!
10. Faa um programa que receba um cdigo equivalente s 27 unidades
federativas brasileiras e imprima o nome e a capital correspondente.
Receba nmeros de 1 a 27, considerando os estados organizados em
ordem alfabtica.
Comandos de Repetio
O comando for
52 UNIDADE 02
Quando a condio for falsa, a repetio terminar e o programa passar
para a prxima instruo, logo aps o for. Veremos o funcionamento na
prtica no exemplo a seguir (Figura 45):
LABORATRIO DE PROGRAMAO 53
incremento. Vejamos o exemplo:
54 UNIDADE 02
Execuo:
LABORATRIO DE PROGRAMAO 55
11. Faa um programa que receba um nmero e verifique se ele primo
ou no.
O comando while
56 UNIDADE 02
Neste programa, as linhas 9, 10 11, 12, 13 e 14 iro se repetir
atravs do comando while. Essa repetio terminar no momento em
que a varivel nmero assumir o valor -1. Isso acontecer quando, na
linha 11, o usurio inserir o valor adequado. Enquanto no houver essa
entrada, a repetio ir continuar.
importante observar ainda que, quando a entrada for -1, esse
valor no deve ser considerado para os clculos, ou seja, para a soma
dos nmeros inseridos pelo usurio. Desta forma, precisamos colocar
um comando if na linha 12 que s autorizar o clculo a ser atualizado
se o valor de numero for diferente de -1. Abaixo (Figura 50) temos um
exemplo de sada para este programa:
LABORATRIO DE PROGRAMAO 57
escreva na tela uma contagem que comece no primeiro nmero lido,
escreva os nmeros seguintes colocando apenas um nmero em cada
nova linha da tela, at chegar ao valor final indicado. Exemplo de tela de
sada:
Entre com o nmero inicial da contagem: 5
Entre com o nmero final da contagem: 9 5 6 7 8 9
4. Fazer um programa que calcule e imprima o fatorial de um nmero
fornecido pelo usurio, usando o comando while. Repetir a execuo
do programa tantas vezes at o usurio responder no (Lembrando o
clculo do fatorial: n! = n * n-1 * n-2 * ... * 2 * 1. Por exemplo: 5! = 5 * 4 *
3 * 2 * 1 = 120). Exemplo de tela de sada:
Entre com um nmero: 5
O fatorial de 5 120
Outro nmero (sim/no)? no.
5. Ler o nome de um aluno e suas duas notas A e B, e aps calcular
a mdia ponderada entre estas notas (A tem peso 1 e B tem peso 2).
Repetir este procedimento para uma turma composta por trs alunos,
usando o comando while.
6. Alterar o programa anterior de maneira que possamos trabalhar com
turmas compostas por um nmero varivel de alunos. Aps calcular e
imprimir a mdia de um aluno, exibir uma mensagem perguntando ao
usurio se existem mais alunos (resposta: sim / no). Se tiver mais
alunos, continuar o procedimento de leitura das notas e o clculo da
mdia at que o usurio responda no.
7. Alterar o programa anterior de maneira a validar as notas fornecidas
pelo usurio (notas devem ser valores positivos entre 0.0 e 10.0). Indicar
ao usurio se a nota fornecida invlida e pedir para fornecer uma
nova nota, repetindo este processo at que o usurio informe uma nota
correta. Usar uma varivel de controle booleana (flag) dentro do lao
while de leitura da nota, e gerar uma sada conforme o exemplo de tela
de sada abaixo.
Entre com o nome do aluno: Joo da Silva
Entre com a nota A: 15.3
ERRO: Nota invlida! Digite novamente a nota.
Entre com a nota A: 5.0
Entre com a nota B: 6.0
O aluno Joo da Silva tem uma mdia: 5.66
Continuar (sim/no)? no
58 UNIDADE 02
8. Escrever um programa que calcule todos os nmeros divisveis por certo
valor indicado pelo usurio (o resto da diviso por este nmero deve ser
igual a zero), compreendidos em um intervalo tambm especificado pelo
usurio. O usurio deve entrar com um primeiro valor correspondente ao
divisor e aps ele vai fornecer o valor inicial do intervalo seguido do valor
final deste intervalo. Exemplo:
Entre com o valor do divisor: 3
Incio do intervalo: 17
Final do intervalo: 29
Nmeros divisveis por 3 no intervalo de 17 a 29: 18 21 24 27.
9. Seu Manoel tem um comrcio e precisa de um programa que lhe
apresente o total de produtos vendidos e o valor total de vendas. Faa um
programa que leia a quantidade de cada produto e seu valor e apresente
esses resultados (Continuar inserindo valores at que o usurio digite a
-1).
10. (Resolvido) Escreva um programa que imprima na tela a srie de
Fibonacci at um nmero dado. Esta srie comea com dois nmeros 1s
e os prximos nmeros so obtidos pela soma dos dois anteriores.
Ex: 1 1 2 3 5 8 13 21 34 55.
Execuo:
LABORATRIO DE PROGRAMAO 59
O comando do-while
do {
} while(condio);
Nesta estrutura de controle a repetio ser controlada pela
condio colocada depois do fechamento do bloco iniciado pelo do.
Dessa forma, a condio s testada depois da execuo dos comandos
contidos no bloco e, caso seja verdadeira, a repetio continuar, caso
seja falsa, a repetio ir parar e o programa continuar sua execuo
logo aps o comando do-while. Com isso, vemos que os comandos
devem ser executados pelo menos uma vez, mesmo se a condio for
falsa. Vejamos o exemplo a seguir (Figura 51):
60 UNIDADE 02
sada ser apenas o nmero 0, pois aps o primeiro passo da repetio,
o valor de nmero ser -1 e a repetio terminar. Vejamos a sada desse
programa na Figura 52:
Atravs desse exemplo podemos perceber a diferena de
funcionamento do while para o do-while. Se tivssemos usado o comando
while, como mostra a Figura 53 a seguir, a repetio no seria executada,
pois a condio seria falsa e o programa no executaria os comandos
dentro do while.
LABORATRIO DE PROGRAMAO 61
Podemos, ainda, usar esses dois comandos para implementar
o mesmo algoritmo. Vejamos, na Figura 55, uma implementao do
exemplo de while (Figura 49) usando o comando do-while. Nesse caso, o
resultado da execuo ser exatamente o mesmo de quando foi usado a
estrutura while.
62 UNIDADE 02
Com isso, o que podemos perceber que os comandos while e do-
while podem ser intercambiveis, dependendo da aplicao que estamos
pretendendo fazer. Na verdade, poderamos fazer este mesmo algoritmo
tambm com a estrutura for (tente como exerccio), produzindo a mesma
sada. Sendo assim, qualquer programa que necessite de repeties
pode ser feito usando qualquer das trs estruturas de repetio vistas
aqui.
No entanto, como vimos nesta unidade, cada comando tem os
casos onde mais indicado utiliz-lo. Portanto, devemos estar atentos
a isso para que a sequncia lgica de nossos algoritmos fique a mais
simples possvel (for para repetio nmero definido, while para repetio
sem nmero definido e com teste antes e do-while para repetio sem
nmero definido e com teste depois).
LABORATRIO DE PROGRAMAO 63
Execuo:
64 UNIDADE 02
Extra: comandos break e continue
O comando break
LABORATRIO DE PROGRAMAO 65
O comando continue
Vejamos agora esse mesmo exemplo trocando o comando
continue pelo break, para notarmos a diferena de um para o outro.
66 UNIDADE 02
Figura 60. Exemplo trocando continue pelo break
LABORATRIO DE PROGRAMAO 67
Execuo:
68 UNIDADE 02
7. Entrar com um nmero (n) e imprimir na tela o valor de H de tal modo
que:
H=1+1/2+1/3+1/4+...+1/n
8. Entrar com um nmero (n) e imprimir na tela o valor de H de tal modo
que:
H=1-1/2+1/3+1/4+...+1/n
9. Repare a seguinte caracterstica do nmero 3025: 30 + 25 = 55 e 55**2
= 3025.
Criar um programa que possa ler vrios nmeros inteiros de 4 algarismos, um
de cada vez, e diga se o nmero apresenta a mesma caracterstica (repare que
3025/100=30 com resto 25). O algoritmo para quando for lido um valor menor
que 1000 ou maior que 9999.
10. Criar um programa que recebe vrios nmeros e imprima o produto
dos mpares e a soma dos pares.
11. Desafio - um marciano chegou a uma floresta e se escondeu atrs de
uma das 100 rvores quando viu um caador. O caador s tinha cinco
balas em sua espingarda. Cada vez que ele atirava, e no acertava,
claro, o marciano dizia: estou mais direita ou mais esquerda. Se o
caador no conseguir acertar o marciano, ele ser levado para marte.
Implementar este jogo para dois jogadores, em que um escolhe a rvore
onde o marciano ir se esconder e o outro tenta acertar.
LABORATRIO DE PROGRAMAO 69
UNIDADE 03
Comandos de Seleo
e de Repetio
comandos de seleo
e de repetio
Vetores
tipo nome_da_varivel[quantidade_de_posies]
LABORATRIO DE PROGRAMAO 73
Com a declarao de um vetor, criamos uma sequncia de
elementos no qual podemos armazenar vrios valores e acess-los
facilmente da seguinte maneira:
nome_da_varivel[posio]
74 UNIDADE 03
Figura 64. Reescrita do exemplo usando for
LABORATRIO DE PROGRAMAO 75
Figura 66. Utilizao do for para preenchimento do vetor
Vejamos que na linha 8, o for que usamos para preencher
exatamente igual ao de escrita. Na linha 9 usamos os ndices i do vetor
para pedir cada posio ao usurio. Somamos com 1 para que no comece
em 0, mas em 1. Na linha 11 fazemos a leitura dos valores para o vetor,
passando para o scanf a posio do vetor (&idade[i]). Um possvel resultado
para a execuo deste programa encontra-se na Figura 67 abaixo.
76 UNIDADE 03
vetor, o programa deve percorr-lo e imprimir apenas os valores mpares
que foram armazenados.
4. Faa um programa que preencha 2 vetores, com 5 elementos cada.
Como resultado, o programa deve apresentar um vetor com os elementos
dos dois vetores intercalados. Vejamos um exemplo a seguir:
Vetor 1: [5, 8, 10, 3, 1]
Vetor 2: [4, 2, 9, 7, 6]
Vetor Resultado: [5, 4, 8, 2, 10, 9, 3, 7, 1, 6].
5. (Resolvido) Faa um programa que receba 10 valores para um vetor e
o imprima ao contrrio.
Execuo:
LABORATRIO DE PROGRAMAO 77
7. Faa um programa que receba dois vetores de 5 elementos cada e
retorne um vetor resultado contendo a soma das posies correspondentes
dos vetores de entrada. Por exemplo:
Vetor 1: [5, 8, 10, 3, 1]
Vetor 2: [4, 2, 9, 7, 6]
Vetor Resultado: [9, 10, 19, 10, 7].
8. Faa um programa que leia um vetor de 10 elementos. Logo em seguida
leia um valor a ser encontrado nesse vetor. Pesquise o valor no vetor e
retorne a posio onde o valor est localizado. Se no for encontrado
escreva a mensagem: valor no encontrado.
Vetor: [10, 8, 4, 2, 7, 12, 19, 21, 37, 18]
Valor a ser procurado: 18
Resultado: Encontrado na posio: 9.
9. Leia dois vetores: R de 5 elementos e S de 10 elementos. Gerar
um vetor X de 15 elementos cujas 5 primeiras posies contenham os
elementos de R e as 10 ltimas posies os elementos de S. Escrever
o vetor X.
10. Faa um programa que receba 10 valores em um vetor e os coloque
em ordem crescente. Sero necessrios dois percorrimentos sobre os
elementos desse vetor, para pesquisar cada elemento e depois para
verificar se so menores que os j verificados. Veja a seguir:
para i de 0 at tamanho[vetor] - 1
para j de i at tamanho[vetor]
se vetor[i] > vetor[j]
aux = vetor[i]
vetor[i] = vetor[j]
vetor[j] = aux
char nome_da_variavel[quantidade_de_posies]
78 UNIDADE 03
A quantidade de posies deve ser tal qual possa comportar a
palavra que queremos armazenar, ou seja, esse valor quantidade_de_
posies especificado indica o tamanho mximo da nossa string - 1.
Tamanho subtrado de 1, porque devemos sempre deixar uma posio
a mais, visto que ao final de toda string haver sempre o caractere nulo,
como na representao a seguir (Figura 68).
LABORATRIO DE PROGRAMAO 79
Nesse exemplo declaramos nossa string na linha 6 e usamos a
funo gets para ler um valor do tipo string e armazenar nessa varivel.
Por isso temos que passar nossa varivel para a funo gets, para que
ele possa atribuir o valor lido do teclado varivel especificada em sua
declarao.
Um possvel resultado para a execuo deste programa est logo
abaixo na Figura 70:
Execuo:
80 UNIDADE 03
2. Faa um programa que receba seu nome e sobrenome em variveis
separadas e imprima seu nome completo numa s linha.
3. Faa um programa que receba um nome e o imprima ao contrrio.
4. Faa um programa que receba um nome e conte quantos caracteres
possui a palavra recebida.
5. Faa um programa que receba duas strings, percorra as duas
comparando cada um dos seus elementos e, ao final, imprima se as duas
so iguais ou no.
Funes de string
#include <string.h>
Comparao entre
duas strings (0: iguais;
strcmp (string1, string2) strcmp(nome, endereo)
diferente de 0 caso
contrrio)
Cpia do contedo de
strcpy(string1, string2) strcpy(nome, endereo)
string2 em string1
Concatena 2 string:
strcat(string1, string2) junta string2 no final de strcat(nome, endereo)
string1
LABORATRIO DE PROGRAMAO 81
extremamente importante para a programao lidar com strings,
pois elas so a base de qualquer arquivo e principalmente controles
de rotina (por exemplo: rotinas e procedimentos de banco de dados, o
SQL; endereamento de arquivos; modificao de configuraes...). A
seguir, Figura 71, temos um exemplo com todas as funes bsicas de
manipulao de string vistas at aqui:
82 UNIDADE 03
1. (Resolvido) Faa um programa que receba um nome e compare com
o seu. Se for igual escreva NOME CORRETO, caso contrrio, escreva
NOME INCORRETO.
Execuo:
LABORATRIO DE PROGRAMAO 83
caracteres separados por um conjunto qualquer de espaos em branco.
8. Escreva um programa em C para ler um caractere e logo aps um
nmero indeterminado de frases. Para cada frase informada imprimir
o nmero de ocorrncias do caractere na frase. O programa deve ser
encerrado quando a frase digitada for a palavra "fim".
9. Faa um programa que leia uma string do teclado e diga se ela
palndromo. Uma string palndromo quando pode ser lida tanto de
trs pra frente quanto de frente para trs e possui exatamente a mesma
sequncia de caracteres. Ex.: ASA, SUBI NO ONIBUS. Desconsidere os
espaos.
10. Faa um programa que receba 3 nomes e os coloque em ordem
alfabtica. Dica: use a funo strcmp.
Matrizes
Podemos definir uma matriz como uma extenso dos vetores para
mais dimenses. Ou ainda, redefinir um vetor como sendo uma matriz
unidimensional. Sendo assim, a definio de matriz a mesma de vetor,
uma estrutura que armazena uma sequncia de valores do mesmo tipo.
No entanto, as matrizes podem ter 2, 3 ou mais dimenses. A declarao
de uma matriz feita da maneira a seguir:
tipo nome_da_varivel[posies1][posies2]...[posiesn]
84 UNIDADE 03
Nesse exemplo temos uma matriz bidimensional declarada na
linha 6, com 4 linhas e 3 colunas: o primeiro nmero indica a quantidade
de linhas e o segundo a quantidade de colunas. Para iniciar essa matriz,
usamos dois comandos iterativos for aninhados nas linhas 8 e 9 (um
dentro do outro), sendo que um servir para percorrer as linhas e o outro,
dentro de cada linha, para percorrer as colunas. Para acessar cada
posio usamos uma estrutura idntica a de vetores, com a diferena de
colocarmos as 2 componentes, j que se trata de uma matriz:
nome_da_variavel[linha][coluna]
LABORATRIO DE PROGRAMAO 85
Esta forma de iniciao pode ser usada tambm para vetores,
onde, logicamente, teremos apenas uma componente ao invs de duas.
Se tivssemos uma matriz tridimensional teramos trs componentes e
assim por diante. A seguir, Figura 75, temos uma possvel sada para o
exemplo de utilizao de matrizes visto.
86 UNIDADE 03
Figura 77. Utilizao de vetores de matrizes
LABORATRIO DE PROGRAMAO 87
string se d apenas por um ndice.
88 UNIDADE 03
Execuo:
LABORATRIO DE PROGRAMAO 89
5.Faa um programa que receba uma matriz e verifique se ela uma
matriz simtrica. Uma matriz simtrica significa que ela igual sua
transposta.
6.Faa um programa que receba uma matriz 5x5 e verifique se essa matriz
triangular. Uma matriz triangular possui todos os elementos abaixo ou
acima da diagonal principal so iguais a zero.
7.Faa um programa que receba uma matriz 3x3 e calcule seu
determinante. O determinante de uma matriz 3x3 calculado atravs de
suas diagonais, conforme a figura a seguir:
90 UNIDADE 03
11.Faa um programa que receba cinco nomes em uma matriz de strings
e os exiba, todos na mesma linha, concatenados atravs de um for (ou
while, ou do-while).
12.Faa um programa que receba dez nomes em uma matriz de strings e
outra string seq em separado. Imprima as palavras pertencentes matriz
que contenham a string seq recebida. Por exemplo, a string atestada
contm a string testa, ento deve ser impressa.
13.Faa um programa que receba dez nomes em uma matriz de strings
e imprima os nomes que forem repetidos.
14.Faa um programa que receba dez nomes em uma matriz de strings
e os imprima em ordem alfabtica.
15.Faa um programa que contenha duas matrizes, uma com as trs
notas de cada aluno e outra com os nomes dos alunos de determinada
turma. Ao final imprima o relatrio da turma com os nomes de cada aluno,
seguido das respectivas notas, da mdia e do resultado final, sendo
aprovado (AM) para mdia >= 7, prova final (EF) para 4 <= mdia < 7 e
reprovado (RP) para mdia < 4. Por exemplo:
LABORATRIO DE PROGRAMAO 91
Nessa unidade vimos como agrupar diversos dados em uma
mesma estrutura, os vetores (e matrizes) por meio dos quais podemos
armazenar, em sequncia, diversos elementos do mesmo tipo e,
posteriormente, acess-los de forma simples e rpida. Abordamos um
vetor especial, o vetor de char, tambm chamado de string, atravs
do qual podemos manipular cadeias de caracteres na linguagem de
programao C.
92 UNIDADE 03
UNIDADE 04
Estruturas
ESTRUTURAS
Estruturas
struct nome_da_estrutura {
tipo_do_membro1 nome_do_membro1;
tipo_do_membro2 nome_do_membro2;
...
tipo_do_membro2 nome_do_membro2;
} variveis_estrutura;
LABORATRIO DE PROGRAMAO 95
Figura 80. Declarao de struct para armazenar uma data
Nas linhas de 5 a 8 declaramos nossa estrutura. A partir dessa
declarao, podemos criar variveis que armazenem dados com esses
trs campos. Para fazermos isso, colocamos logo frente da declarao
da struct, aps a chave de fechamento, o nome das variveis que
queremos declarar. A partir da varivel podemos ter acesso aos campos
atravs do operador ponto (.). Se declararmos uma varivel de nome
hoje e tipo data, o acesso aos campos se d atravs das chamadas hoje.
dia, hoje.mes, hoje.ano.
A utilizao de estruturas possibilita o isolamento dos membros,
ou seja, para cada varivel do tipo data que criarmos, cada uma ter seus
prprios valores para dia, ms e ano, possibilitando um gerenciamento
organizado e evitando a mistura dos valores. Vejamos na Figura 81 um
exemplo de declarao e uso de variveis desse tipo.
96 UNIDADE 04
Aqui declaramos duas variveis do tipo de nossa estrutura data:
hoje e amanh (linha 9). Na funo main possvel verificar a chamada
aos membros dessa estrutura. Nas linhas 12, 13 e 14 atribumos valores
para os membros da varivel hoje. Nas linhas 15, 16 e 17 fazemos o
mesmo para os membros da varivel amanh. J nas linhas 18 e 19
fazemos uma chamada aos atributos para escrevermos seus valores
na tela. Atravs da sada desse programa vista abaixo (Figura 82),
verificamos que cada varivel possui seus prprios dados, e uma no
interfere no contedo da outra.
Percebemos, atravs dos exemplos anteriores, que h uma
pequena limitao nessa forma de utilizao. Todas as variveis que
precisarmos do tipo da estrutura devem ser declaradas no momento da
especificao da estrutura. Para contornarmos isso, podemos declarar
um tipo de dados atravs da palavra-chave typedef, da seguinte forma:
LABORATRIO DE PROGRAMAO 97
Figura 83. Criao de um tipo de dados
98 UNIDADE 04
Usando a definio de tipo, o nome que precede a definio da
estrutura, logo aps a chave de fechamento (tipoData, na linha 9), ser
o nome que usaremos para nos referenciar a este tipo. Sendo assim,
podemos declarar variveis em qualquer lugar do nosso programa
atravs do nome especificado (tipoData), como foi feito na linha 12.
Poderamos ainda separar a definio da estrutura da declarao
do tipo. No exemplo abaixo (Figura 85) temos a definio feita dessa
forma.
LABORATRIO DE PROGRAMAO 99
1. (Resolvido) Faa um programa que defina uma estrutura com os
dados de um carro, a saber: modelo (string), fabricante (string), ano
(inteiro), quantidade de portas (inteiro), potncia do motor (float), tipo
de combustvel (string), vidro eltrico (bool), trava eltrica (bool), ar
condicionado (bool), direo hidrulica (bool).
100 UNIDADE 04
b. Mostrar pessoa: com escrita na tela de todos os dados
correspondentes pessoa cadastrada;
c. Alterar pessoa: escolha um dos campos a serem alterados
na pessoa cadastrada e coloque um novo valor nesse campo,
mostrando depois todos os campos para que se possa verificar o
valor alterado.
3. Faa um programa que contenha uma estrutura aluno com os seguintes
membros: nome do tipo string, matrcula do tipo string, nota1 do tipo float,
nota2 do tipo float e nota3 do tipo float. Seu programa dever receber
todos os dados de um aluno e ao final exibir o relatrio do mesmo da
seguinte forma:
Aluno nome de matrcula matrcula, possui notas: nota1, nota2 e nota3.
Sendo assim, est (aprovado|reprovado|de prova final), com mdia media
4. Crie um programa que contenha uma estrutura retngulo com os
seguintes membros: base de tipo float e altura de tipo float. Seu programa
dever pedir para o usurio entrar com os dados de base e altura e
imprimir a rea desse retngulo.
5. Faa um programa que contenha as definies de registros para os
seguintes dados: (OBS: cada item corresponder a uma estrutura).
a. Um veculo novo de uma concessionria de automveis;
b. Um eletrodomstico de uma loja;
c. Um prato em um restaurante.
6. Defina um tipo de registro para armazenar dados de um voo, como por
exemplo os nomes das cidades de origem e de destino, datas e horrios
de partida e datas e horrios de chegada. Seu programa dever conter:
a. Uma opo para cadastrar o voo, lendo todos os dados que o
usurio digitar;
b. Uma opo para alterar o voo cadastrado, alterando apenas o
dado escolhido pelo usurio para alterao;
c. Uma opo para mostrar todos os dados do voo cadastrado.
Vetores de Estruturas
102 UNIDADE 04
Figura 87. Utilizao de vetores como campos de estruturas
Estruturas de Estruturas
Temos a possibilidade, ainda, de introduzir membros nas
estruturas que so tambm estruturas. Por exemplo, se quisermos que a
estrutura aluno tenha um membro data de nascimento, usando a estrutura
mostrada no incio desta unidade, podemos fazer este agrupamento da
seguinte maneira (Figura 91):
104 UNIDADE 04
Figura 91. Uso de estruturas de estruturas
Execuo:
106 UNIDADE 04
2. Crie uma estrutura para representar os dados de um funcionrio, com
matrcula de tipo inteiro, nome de tipo string, estado civil de tipo string,
endereo do tipo string, cargo de tipo string, salrio de tipo float e data de
nascimento de tipo data. O tipo data deve ser definido como uma estrutura
com os membros dia, ms e ano de tipo inteiro. Com essa estrutura faa
as seguintes operaes:
a. Crie um vetor de 20 posies para armazenar o cadastro de
funcionrios de uma empresa fictcia;
b. Crie uma varivel fim que demarcar a ltima posio atualmente
preenchida em seu cadastro de funcionrios;
c. Faa com que o programa apresente um menu onde o usurio
possa escolher entre as funes de cadastrar funcionrio, excluir
funcionrio, alterar funcionrio, buscar funcionrio, listar todos os
funcionrios e sair.
d. O usurio dever poder escolher qualquer das opes, qualquer
quantidade de vezes. Somente ao escolher a opo sair o programa
deve ser finalizado;
e. Quando a opo cadastrar funcionrio for escolhida, leia todos
os dados de um funcionrio e o inclua na primeira posio livre do
vetor. A varivel fim deve ser aumentada de um.
f. Se j houver vinte funcionrios cadastrados (limite do nosso vetor),
o programa dever mostrar a mensagem Impossvel cadastrar.
Vetor cheio;
g. Quando a opo excluir funcionrio for escolhida, o programa
dever solicitar a posio que o usurio deseja excluir. Caso a opo
esteja preenchida com um funcionrio no vetor, todos os elementos,
a partir daquela posio para frente devem ser puxados uma
posio para trs, para refletir a excluso. A varivel fim deve ser
Na unidade trs estudamos vetores e matrizes, construes
homogneas da linguagem C, ou seja, s podamos armazenar valores
do mesmo tipo. Nessa unidade introduzimos o conceito de estruturas,
atravs das quais armazenamos dados de tipos diferentes na mesma
construo. Vimos que, aliando estruturas ao uso de vetores ou matrizes,
podemos alar nossos programas a um nvel bem mais complexo e com
manipulao de dados mais simples, na mesma construo, ao invs de
criarmos vrios vetores.
108 UNIDADE 04
UNIDADE 05
Funes e
Procedimentos
funes e
procedimentos
Funes
Criando funes
112 UNIDADE 5
preciso que primeiro tenhamos declarado as mesmas. Sendo assim, toda
funo deve ser declarada antes da funo main.
Para chamarmos uma funo, basta evocarmos o nome que
usamos para cri-la, seguido da lista de parmetros entre parnteses.
Como, em nosso caso, ainda no teremos parmetros, basta colocar os
parnteses vazios. Vejamos o exemplo a seguir na Figura 93:
Temos uma funo chamada dez (linha 5) que deve retornar algum
valor do tipo inteiro. Devido a isso, na funo main, atribuiremos esse
resultado a uma varivel do mesmo tipo (linha 13) para capturarmos o
valor retornado pela funo. A partir disso, essa varivel assumir o valor
10 e poderemos us-la no decorrer do programa.
Como resultado da execuo desse programa, a funo ser
chamada, sero impressos os dois textos das linhas 6 e 7 e, por fim, ser
retornado o valor 10 pela funo. Na linha 13, o valor da varivel x, que,
nesse caso, o valor retornado pela funo, ser impresso. Podemos ver
esse resultado da execuo na Figura 94.
Procedimentos
114 UNIDADE 5
A diferena est no fato de que um procedimento no retorna valor
algum. Por causa disso, em um procedimento no teremos o comando
return. E para indicarmos que ser um procedimento e no uma funo,
usamos um tipo especial que dir ao programa que a funo no tem
retorno. Esse tipo o void.
Sendo assim, o formato de declarao padro de um procedimento
o seguinte:
void nome_do_procedimento ( ) {
}
Passagem de parmetros
116 UNIDADE 5
Vejamos que, nesse caso, nossa funo est bem mais compacta.
Esta a grande vantagem de programarmos utilizando funes. Cada
item que quisermos implementar, em separado, pensamos em funes de
forma a simplificar a programao e facilitar o entendimento. O resultado
da execuo desse programa pode ser visto na Figura 99:
118 UNIDADE 5
programa dever ter funes (ou procedimentos) que executem as
seguintes tarefas:
a. Receber todos os dados de uma pessoa;
b. Escrever na tela todos os dados de uma pessoa;
c. Apagar todos os dados lidos da pessoa (ou seja, inserir vazios
nos valores string e zeros nos valores numricos);
d. Verificar se a pessoa com os dados colocados maior de idade
(mais de 18 anos);
e. Faa um menu para que o usurio possa escolher qual das
operaes quer escolher.
10. Faa um programa que contenha uma funo que receba trs valores
e retorne o menor entre eles.
11. Faa um programa que contenha uma funo que receba uma string
e retorne quantas consoantes existem na string recebida.
12. Faa um programa que contenha uma funo que receba uma string e
retorne outra string com todas as letras substitudas pela correspondente
maiscula.
13. Faa um programa que contenha uma funo que receba um valor
inteiro e retorne o nmero com seus dgitos invertidos. Por exemplo, dado
o nmero 4892, a funo deve retornar o valor 2984.
14. Faa um programa que contenha duas funes que recebam dois
inteiros e retornem: uma o mdc e outra o mmc entre os nmeros recebidos.
15. Faa um programa que contenha uma funo que receba um nmero
e verifique se ele primo ou no.
Variveis locais
Variveis locais so variveis declaradas dentro de funes
especficas. Por causa disso, essas variveis so visveis apenas dentro
daquela funo, ou seja, s podem ser usadas na prpria funo. Variveis
Variveis globais
120 UNIDADE 5
Figura 102. Uso de variveis globais
Os valores que colocamos como entrada de nossas funes
podem ser passadas de duas formas: por valor ou por referncia. Vamos
analisar cada uma delas.
122 UNIDADE 5
Passagem de parmetros por valor
124 UNIDADE 5
e no um inteiro, propriamente dito, devemos passar um endereo de
memria. Para isso, usamos o operador &, da mesma forma que usamos
no scanf, para indicar o endereo de memria da varivel e no somente
a varivel.
O resultado da execuo deste programa pode ser visto na Figura
108:
Prottipo de funes
Conforme explicado anteriormente, todas as funes precisam
ser declaradas antes de serem utilizadas. No entanto, normalmente,
a primeira funo que implementamos a prpria main, de forma a
mantermos nosso cdigo organizado e identificarmos facilmente qual a
funcionalidade principal do nosso programa. Somente aps a main viro
nossas funes personalizadas.
No entanto, precisamos usar as funes que implementaremos,
126 UNIDADE 5
a partir de agora, aps a funo main. Para que nossas funes sejam
reconhecidas dentro da main, declaramos apenas o prottipo das funes
antes da funo principal. Dessa forma, elas sero reconhecidas e
podemos us-las na principal, mesmo sem termos implementado ainda.
Para declarar o prottipo de uma funo, basta escrevermos o
cabealho da funo com os mesmos parmetros que ela ter, seguida
de ponto e vrgula. Colocamos somente essa assinatura antes da main,
e depois dela implementamos a funo propriamente dita. Vejamos
exemplo usado anteriormente com a declarao do prottipo (Figura
109):
Recursividade
128 UNIDADE 5
Para usar a recursividade basta chamarmos uma funo, como j
vnhamos fazendo, s que agora dentro do bloco de comandos da prpria
funo que est sendo definida. Essa caracterstica especialmente til
quando a funo que estamos implementando definida em termos dela
mesma.
Vamos pensar na funo fatorial: como sabemos, o fatorial de um
nmero N o valor N multiplicado pelo fatorial de N-1. Ou seja, a funo
fatorial eminentemente recursiva. Vejamos como ficaria sua definio
na linguagem de programao C (Figura 112):
fatorial(5) =
5 * fatorial(4) =
130 UNIDADE 5
Execuo:
132 UNIDADE 5
f. Quando a opo cadastrar aluno for escolhida, leia todos os
dados de um aluno e o inclua na primeira posio livre do vetor. A
varivel fim deve ser aumentada de um
g. Se j houver vinte alunos cadastrados (limite do nosso vetor), o
programa dever mostrar a mensagem Impossvel cadastrar. Vetor
cheio.
h. Quando a opo excluir aluno for escolhida, o programa dever
solicitar a posio que o usurio deseja excluir. Caso a opo esteja
preenchida com um aluno no vetor, todos os elementos, a partir
daquela posio para frente devem ser puxados uma posio
para trs, para refletir a excluso. A varivel fim deve ser reduzida
de um. Caso contrrio, dever ser exibida a mensagem Impossvel
excluir. Posio invlida.
i. Quando a opo alterar aluno for escolhida, o usurio dever
escolher a posio a alterar. Caso esta posio esteja preenchida
com os dados de um aluno, o programa dever mostrar os dados
atuais e pedir para o usurio digitar novamente todos os dados
para aquele aluno. Caso contrrio, dever mostrar a mensagem
Impossvel alterar. Posio no preenchida.
j. Quando a opo buscar aluno for escolhida, o programa dever
solicitar ao usurio o nome a procurar. Aps isso, o programa ir
buscar, entre os aluno cadastrados, um com nome procurado (ou
parte dele). Caso encontre, dever mostrar todos os dados desse
aluno. Caso contrrio, dever exibir a mensagem Aluno no
encontrado.
l. Quando a opo listar todos os alunos for selecionada, o programa
deve exibir todos os dados de todos os alunos cadastrados at o
momento. Se nenhum funcionrio estiver cadastrado, dever exibir
a mensagem Nenhum funcionrio cadastrado.
m. Quando a opo listar alunos de determinada disciplina for
selecionada, o programa deve solicitar ao usurio o nome de uma
disciplina e procurar e mostrar, entre os alunos cadastrados, os
que estejam naquela disciplina. Liste todos os alunos com as
respectivas notas, mdias e resultados finais (AM para mdia >= 7,
EF para 7 > mdia >= 4 e RN para mdia < 4). Caso no encontre
nenhum, mostrar a mensagem Nenhum aluno encontrado para a
disciplina procurada.
n. Quando a opo listar alunos aprovados for selecionada, o
programa dever procurar os alunos cadastrados que possuem
134 UNIDADE 5
Exerccios de Introduo a algoritmos. Disponvel por www em: http://
www.guj.com.br/posts/list/120244.java, acesso em 10 de agosto de 2010,
s 22:00.
Possui graduao em
bacharelado em Cincia da
Computao pela Universidade
Federal do Piau (2006) e
mestrado em Engenharia de
Sistemas e Computao pela
Universidade Federal do Rio de
Janeiro (2009). Tem experincia na
rea de Cincia da Computao,
com nfase em Computao
Grfica e Programao, atuando
principalmente nos seguintes
temas: Algoritmos e Programao, Estruturas de Dados, Computao
Grfica, Programao em GPU, Programao para a Web, entre outros.
Atualmente professor efetivo da Universidade Federal do Piau, lotado
no Campus Senador Helvdio Nunes de Barros, em Picos.