Você está na página 1de 64

UNIVERSIDADE ESTADUAL PAULISTA

JLIO DE MESQUITA FILHO


FACULDADE DE ENGENHARIA
DE ILHA SOLTEIRA

Departamento de Matemtica

Introduo Cincia da Computao


Curso de C++ Bsico

Discente: Leonardo Ito Perillo


Curso: Engenharia Eltrica
Orientador: Prof. Dr. Anirio Salles Filho

Ilha Solteira, 30 de Julho de 2010.

Sumrio
Uma Breve Histria do C++
Introduo Lgica de Programao
Compiladores
Tipos de Variveis
Alguns Comandos Bsicos
Comentrios no Programa
Operadores
Constante e Variveis
O comando Include e as Bibliotecas
Biblioteca <Math.h>
Controle de Fluxo de Execuo - Deciso
Controle de Fluxo de Execuo - Repetio
Arrays Unidimensionais Vetores

02
03
04
05
08
11
12
13
14
15
16
21
30

Referncias Bibliogrficas

Uma breve histria do C++


O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs, durante a dcada de
1980 com o objectivo implementar uma verso distribuda do ncleoUnix. Como o Unix era escrito
em C, dever-se-ia manter a compatibilidade, ainda que adicionando novos recursos. Alguns dos
desafios incluam simular a infraestrutura da comunicao entre processos num sistema distribudo ou
de memria compartilhada e escrever drivers para tal sistema. Stroustrup percebeu que a
linguagem Simula possua caractersticas bastante teis para o desenvolvimento de software, mas que
era muito lenta para uso prtico. Por outro lado, a linguagem BCPL era rpida, mas possua
demasiado baixo nvel, dificultando sua utilizao no desenvolvimento de aplicaes. A partir de sua
experincia de doutorado, comeou a acrescentar elementos do Simula no C.
O C foi escolhido como base de desenvolvimento da nova linguagem pois possua uma proposta
de uso genrico, era rpido e tambm portvel para diversas plataformas. Algumas outras linguagens
que tambm serviram de inspirao para o cientista da computao foram ALGOL
68, Ada, CLU e ML.
Ainda em 1983 o nome da linguagem foi alterado de C with Classes para C++. Antes
implementada usando um pr-processador, a linguagem passou a exigir um compilador prprio, escrito
pelo prprio Stroustrup. Novas caractersticas foram adicionadas, como funes virtuais, sobrecarga
de operadores e funes, melhorias na verificao de tipo de dado e estilo de comentrio de cdigo de
uma linha (//). Em 1985 foi lanada a primeira edio do livro The C++ Programming Language,
contendo referncias para a utilizao da linguagem, j que ainda no era uma norma oficial. A
primeira verso comercial foi lanada em outubro do mesmo ano. Em 1989 a segunda verso foi
lanada, contendo novas caractersticas como herana mltipla, classes abstratas, mtodos estticos,
mtodos constantes e membros protegidos, incrementando o suporte a orientao a objeto.
Assim como a linguagem, sua biblioteca padro tambm sofreu melhorias ao longo do tempo.
Sua primeira adio foi a biblioteca de E/S, e posteriormente a Standard Template Library (STL);
ambas tornaram-se algumas das principais funcionalidades que distanciaram a linguagem em relao a
C. Criada primordialmente na HP por Alexander Stepanov no incio da dcada de 1990 para explorar os
potenciais da programao genrica, a STL foi apresentada a um comit unificado
ANSI e ISO em 1993 convite de Andrew Koenig. Aps uma proposta formal na reunio do ano
seguinte, a biblioteca recebe o aval do comit.
Pode-se dizer que C++ foi a nica linguagem entre tantas outras que obteve sucesso como uma
sucessora linguagem C, inclusive servindo de inspirao para outras linguagens como Java,
a IDL de CORBA e C#.

Introduo Lgica de Programao


A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento
de sistemas e programas, ela permite definir a seqncia lgica para o desenvolvimento.Ento o que
lgica?
Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo.
Seqncia Lgica:
Estes pensamentos podem ser descritos como uma seqncia de instrues, que devem ser
seguidas para se cumprir uma determinada tarefa.
Seqncia Lgica so passos executados at atingir um objetivo ou soluo de um problema.
Instrues:
Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas
para a realizao ou emprego de algo.
Em informtica, porm, instruo a informao que indica a um computador uma ao
elementar a executar.Convm ressaltar que uma ordem isolada no permite realizar o processo
completo, para isso necessrio um conjunto de instrues colocadas em ordem seqencial lgica.
Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma
srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc...
evidente que essas instrues tem que ser executadas em uma ordem adequada no se pode
descascar as batatas depois de frit-las.
Dessa maneira, uma instruo tomada em separado no tem muito sentido para obtermos o
resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta.
Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo.
Em informtica, o que indica a um computador uma ao elementar a executar.

Compiladores
Um compilador um programa de sistema que traduz um programa descrito em uma linguagem
de alto nvel para um programa equivalente em cdigo de mquina para um processador. Em geral, um
compilador no produz diretamente o cdigo de mquina, mas sim um programa em linguagem
simblica (assembly) semanticamente equivalente ao programa em linguagem de alto nvel. O
programa em linguagem simblica ento traduzido para o programa em linguagem de mquina
atravs de montadores.
Para desempenhar suas tarefas, um compilador deve executar dois tipos de atividade. A
primeira atividade a anlise do cdigo fonte, onde a estrutura e significado do programa de alto nvel
so reconhecidos. A segunda atividade a sntese do programa equivalente em linguagem simblica.
Embora conceitualmente seja possvel executar toda a anlise e apenas ento iniciar a sntese,
em geral estas duas atividades ocorrem praticamente em paralelo.
Para apresentar um exemplo das atividades que um compilador deve desempenhar, considere o
seguinte trecho de um programa em C:

main()
{
Para o compilador, este segmento nada mais do que uma seqncia de caracteres em um
arquivo texto. O primeiro passo da anlise reconhecer que agrupamentos de caracteres tm
significado para o programa, por exemplo, saber que int uma palavra-chave da linguagem e que a e b
sero elementos individuais neste programa. Posteriormente, o compilador deve reconhecer que a
seqncia int a ,corresponde a uma declarao de uma varivel inteira cujo identificador recebeu o
nome a.
As regras de formao de elementos e frases vlidas de uma linguagem so expressas
na gramtica da linguagem. O processo de reconhecer os comandos de uma gramtica conhecido
como reconhecimento de sentenas.

Tipos de Variveis
Quando definimos uma varivel em C++, precisamos informar ao compilador o tipo da
varivel: um nmero inteiro, um nmero de ponto flutuante, um caractere, e assim por diante. Essa
informao diz ao compilador quanto espao deve ser reservado na memria para a varivel, e o tipo de
valor que ser armazenado nela.
As variveis mais utilizadas, em um curso de C++ bsico so:
Int
O tipo de dado int (inteiro) serve para armazenar valores numricos inteiros. Existem vrios
tipos de inteiros, cada um de um tamanho diferente (dependendo do sistema operacional e/ou
arquitetura do processador):
int, pode possuir 16 bits, 32 bits ou 64 bits
short int, deve possuir tamanho de no mnimo 16 bits e no pode ser maior que int.
long int, deve possuir tamanho mnimo de 32 bits.
long long int, deve possuir tamanho mnimo de 64 bits.
Exemplo de aplicao:

#include <iostream.h>
#include
<conio.h> main()
Note em nosso exemplo, que a idade da pessoa, obrigatoriamente deve ser um nmero inteiro,
por isso a escolha da varivel int.
Float
O tipo de dado float serve para armazenar nmeros de ponto flutuante, ou seja, com casas decimais
(Reais).Exemplo de aplicao:

#include <iostream.h>
#include
<conio.h> main()
No nosso simples exemplo, ter como sada o nmero 1,66667

Double
O tipo de dado double serve para armazenar nmeros de ponto flutuante de dupla preciso,
normalmente tem o dobro do tamanho do float e portanto o dobro da capacidade.
Exemplo de aplicao:

#include <iostream.h>
#include
J utilizando a varivel double, teremos um nmero mais significativo de sada, no caso, 1,6666
O Double utilizado quando necessitamos de uma aproximao maior e mais exata do resultado
O Double consome incrveis 8 bytes de memria para o seu armazenamento. Esse consumo
explicado pela alta preciso de seu nmero (cerca de 14 dgitos aps a vrgula)

Char
O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que o
programa reserva um espao de 8 bits na memria RAM ou em registradores do processador para
armazenar um valor (char de tamanho maior que 8 bits permitido pela linguagem, mas os casos so
raros.
Exemplo de aplicao:

#include <iostream.h>
#include
No nosso exemplo, pode-se guardar uma string com at 20 caracteres de comprimento, caso
exceda o nmero mximo de caracteres, ocasionar erro no compilador.
Caso fosse declarado apenas char nome, a varivel nome armazenaria apenas uma letra, por
exemplo, se o usurio digitasse um nome com 7 letras, a varivel apenas armazenaria a primeira letra
digitada.

Struct
Em C podem ser usadas estruturas (chamados de registros em outras linguagens de programao).
As estruturas so grupos de variveis organizadas arbitrariamente pelo programador.
Exemplo de aplicao:

#include <stdio.h>
#include
<conio.h> struct
pessoa;
Esta estrutura composta por 3 elementos de tipos diferentes. Depois de ser declarada uma
varivel do tipo struct x, onde x o nome da estrutura, para se acessar os diversos elementos deve-se
fazer x.elemento.

Alguns Comandos Bsicos

Em C++, a separao entre instrues especificada com um ponto-e-vrgula (no final de cada
instruo). A diviso do cdigo em linhas diferentes serve somente para torn-lo mais legvel e
esquemtico para seres humanos.
#include <iostream.h>
Comandos que comeam com um sinal de numerao (#) so diretivas do prprocessador. Elas no so linhas de cdigo executveis, mas indicaes para o compilador.
Nesse caso, o comando #include <iostream.h> diz ao pr-processador do compilador para
incluir o arquivo de cabealho padro iostream. Esse arquivo especfico inclui as declaraes da
biblioteca bsica de entrada-sada do C++, e est sendo usado porque suas funcionalidades
sero usadas mais tarde nesse programa.
#include <conio.h>
Esta biblioteca tem a finalidade de receber dados do teclado,ou outros dispositivos de
entrada, alm de tambm exibir dados na sada padro. Quando utilizamos a biblioteca
#include<conio.h>, temos a possibilidade de executar as funes getch() para ler as entradas
do teclado e kbhit() para testar se h buffers de teclado a serem lidos. muito til, e eu diria
at indispensvel o uso desta biblioteca para a programao.
main()
Essa linha corresponde ao incio da declarao da funo main. A funo main o
ponto pelo qual todos os programas em C++ iniciam a execuo. No faz diferena se estiver no
incio, no fim, ou no meio do cdigo seu contedo sempre o primeiro a ser executado
quando um programa inicia. Alm disso, pelo mesmo motivo, obrigatrio que todos os
programas em C++ tenham uma funo main.
Depois de main h um par de parnteses () porque uma funo. Em C++ todas as
funes so seguidas por um par de parnteses () que, opcionalmente, podem incluir argumento
dentro deles. O contedo da funo main segue imediatamente aps sua declarao formal e
coberto entre chaves ({}), como em nosso exemplo.
cout << Exemplo<<endl;
Essa instruo faz a coisa mais importante nesse programa. cout o dispositivo de sada
padro no C++ (geralmente o monitor), e a frase completa insere uma seqncia de caracteres
no dispositivo de sada.O cout declarado no arquivo de cabealho <iostream.h>, ento pra que
seja possvel utiliza-lo, esse arquivo precisa ser incluso.
Note que a frase termina com um caractere ponto-e-vrgula (Esse caractere significa o
fim da instruo e precisa ser includo aps toda instruo em qualquer programa em C++ )Um
dos erros mais comuns dos programadores de C++ devido ao fato de esquecerem de incluir
um ponto-e-vrgula; no final de cada instruo.

cin>>varivel;

O trabalho com a entrada padro no C++ feito aplicando-se o operador sobrecarregado


de extrao (>>) no comando cin. Isso precisa ser seguido pela varivel que ir guardar o dado
que ser lido
Declarando a varivel como desejada, ento espera por uma entrada do cin (teclado) para
que possa guard-la em um espao reservado da memria ROM.
O comando cin s pode processar a entrada do teclado depois que a tecla ENTER for
pressionada. Sendo assim, mesmo que voc pea um nico caractere, o cin no ir processar a
entrada at que o usurio pressione ENTER depois que o caractere tenha sido digitado.
Voc precisa sempre considerar o tipo da varivel que voc est usando para guardar o
valor extrado pelo cin. Se voc pedir um inteiro, voc receber um inteiro, se voc pedir um
caractere, voc receber um caractere, e se voc pedir uma string de caracteres, voc receber
uma string de caracteres.
return;
A instruo return faz com que a funo main() termine e retorne o cdigo que segue a
instruo, nesse caso o 0. Essa a maneira mais comum de terminar um programa que no
encontrou nenhum erro durante sua execuo. Como voc ver em exemplos seguintes, todos os
programas em C++ terminam com um comando parecido com esse.

Exemplo de aplicao:
Desenvolva um algoritmo que receba a massa e o volume de uma amostra qualquer e calcule
sua densidade.
Soluo:

#include<iostream.h>
#include<conio.h>
vol, utilizadas para a resoluo desse programa j foram explicadas e
Observefloat
que massa,
as estruturas
detalhadas.

10

Observao importante:
Sendo assim, voc deve ter notado que nem todas as linhas desse programa realizaram uma
ao. Havia linhas contendo apenas comentrios (aquelas iniciadas por //), linhas com instrues para o

11

pr-processador do compilador (aquelas iniciadas por #), tambm haviam linhas que iniciavam a
declarao de uma funo (nesse caso, a funo main) e, finalmente linhas com instrues (como a
chamada cout <<), todas essas ltimas foram includas dentro do bloco delimitado pelas chaves ({})
da funo main
O programa foi estruturado em linhas diferentes para que seja mais fcil l-lo, mas isso no
obrigatrio. Por exemplo, ao invs de:

#include <iostream.h>
Poderamos ter escrito: int main () { cout << " Exemplo"; return 0; } em apenas uma linha e isso
teria exatamente o mesmo significado.
Porm, as estruturas #include <iostream.h> e #include <conio.h> devem ser inseridas em
linhas diferentes, pois o compilador no consegue diferencia-las quando essas esto inseridas na mesma
linha.

Exerccios Propostos
1) Clculo da mdia de quatro nmeros inteiros dados.
2) Clculo do quadrado de um nmero dado.

3) Clculo da funo f(x,y) = 2x+3y , com x e y sendo nmeros reais dados.


4) Um bloco de concreto cai do topo de um prdio cuja altura X metros acima do solo. Determinar o
tempo de queda at o solo e a sua velocidade linear no instante em que atinge o solo. Despreze a
resistncia do ar e considere g=10 m/s2. ( S=So+Vot+at2/2 V=Vo+at).

5) Determine a mdia final de um aluno, dados as notas das provas (P1, P2) e dos trabalhos (T1, T2)
obedecendo ao seguinte critrio: Mdia = 0.2*(0,4*T1+0,6*T2)+0,4*(0,4*P1+0,6*P2)
6) Um veterinrio realizou uma compra para abastecer sua clnica. Os itens comprados e os respectivos
valores das unidades so: X coleiras (XR), Y casinhas de cachorro (YR), M camas para gatos (MR),
26/3 de sacos de rao (S), V vacinas contra raiva (VR). Determine o custo total da compra.
7) Dado um nmero inteiro A de quatro dgitos, obtenha dois outros nmeros B e C sendo B formado
pelos dois primeiros dgitos de A e C pelos dois ltimos dgitos.
Ex: A= 3421 B=34 e C=23
8) Dado um nmero inteiro A de trs dgitos obtenha a soma destes dgitos
Ex: A=872 soma=17

Comentrios no Programa
11

Comentrios so pedaos de cdigo-fonte descartados do cdigo pelo compilador. Eles no


fazem nada. O objetivo deles somente permitir que o programador insira notas ou descries dentro

12

do cdigo-fonte.
O C++ suporta duas maneiras para inserir comentrios:
// comentrio de linha
/* comentrio de bloco */
O primeiro deles, o comentrio de linha, descarta tudo desde onde o par de barras (//) achado
at o final daquela mesma linha. O segundo deles, o comentrio de bloco, descarta tudo entre os
caracteres /* e a prxima apario dos caracteres */, com a possibilidade de incluir diversas linhas.
Ns iremos adicionar comentrios ao nosso segundo programa:

/* programa para
analisar o valor de entrada
*/
#include <iostream.h>
Note que //associar valor e /* programa para analisar o valor de entrada*/ so os
comentrios inseridos pelo programador para melhor compreenso de seu programa. Alm disso,
outros programadores podem compreender o programa mais facilmente, alm de poder encontrar, caso
exista, possveis erros com mais exatido.

Operadores
Operadores Aritmticos
Operador
+
*
/
%
++
--

Ao
Soma
Subtrao ou troca de sinal
Multiplicao
Diviso
Resto da diviso inteira
Incremento
Decremento

Operadores Relacionais
Operador
>
>=
<
<=
==
!=

Ao
Maior que
Maior que ou igual a
Menor que
Menor que ou igual a
Igual a
Diferente de

Operadores lgicos
Operador
&&
||
!

Ao
AND
OR
NOT

Formatao dos tipos de dados na entrada e saida dos daos


Cdigo
%c
%s
%d
%f

Tipo de dados
char
String ou char[ ]
int
Double e Float

Operadores Lgicos Bit a Bit

Operador
&
|
^
~
>>
<<

Ao
AND Lgico
OR Lgico
XOR (OR exclusivo)
NOT
Shift Rigth
Shift Left

Constantes e Variveis
Restries para a atribuies de variveis
As constantes so valores que sero mantidos fixos pelo compilador
O nome das variveis deve comear com uma letra ou um sublinhado _.
Os demais caracteres podem ser letras, nmeros ou sublinhado.
O nome da varivel no pode ser igual a uma palavra reservada e aos nomes das
funes.
Tamanho mximo para o nome de uma varivel 32 caracteres.

Classificao de Constantes e Variveis


Locais
Podem ser usadas apenas na funo onde foi declarada, sendo inutilizveis para as
demais funes.
Globais
Podem ser usadas em qualquer lugar do programa

Modificador const
A linguagem C++ introduz um novo modificador chamado const, que tem comportamento
variado dependendo do local onde est sendo declarado. Sua funo, basicamente, estabelecer um
vnculo entre declarao e obrigatoriedade da coerncia no uso do smbolo declarado.
A princpio, quando declaramos uma constante com este modificador fazemos com que seja
obrigatrio o uso do smbolo de forma que o mesmo no possa ter seu valor alterado. Assim, se
fizermos:

const int x = 4;
O inteiro x no poder deixar de ter valor igual a 4. Qualquer tentativa de modificar o valor da
constante ao longo do programa ser reportada como erro pelo compilador.

O comando Include e as Bibliotecas

Como podemos ver, a linguagem C++ tem a capacidade de importar bibliotecas.


A importncia da biblioteca em C imensa, pois ela nos poupa de muita programao. Uma vez que a
funo j est pronta dentro da biblioteca, basta importar tal biblioteca e utilizar a funo que
queremos.
Por exemplo, se quisssemos mostrar uma mensagem na tela, voc no tem que produzir uma
funo inteira ou criar um comando novo, basta importar a biblioteca <iostream.h>, que possui a
finalidade de I/O (entrada e sada) de dandos. Quando o programa for compilado, o compilador ir
buscar nas bibliotecas exigidas pelo usurio tais funes para saber como utiliz-las no programa.
O papel do pr-processamento indicar, antes mesmo de compilar, os parmetros necessrios
para ser criado o arquivo executvel.
O pr-processamento indicado pelo caractere sharp (#) no inicio da linha e deve ser usado na
importao de bibliotecas ao programa que ser desenvolvido. A importao de uma biblioteca dada
pelo comando #include (incluir) seguido da biblioteca entre os sinais de menor (<) e maior (>).
O .h a extenso do arquivo da biblioteca que vem da palavra inglesa HEADER (cabealho).
Aps importarmos uma biblioteca por linha, no final dessa lista devemos demonstrar que tipo
de funes usaremos. Na grande maioria dos casos usaremos as funes padres de cada bibloteca.
Podemos fazer isso facilmente digitando a palavra reservada USING* indicando o espao de nome
(namespace) standard (std) , que quer dizer padro em ingls.
Como exemplo, importaremos uma biblioteca padro de entrada e sada de C++.

#include<iostream.h
As bibliotecas de C so diferentes das bibliotecas de C++. Apesar de muitos compiladores de
C++ suportarem as bibliotecas de C, nenhum compilador exclusivamente de C suporta bibliotecas de
C++.
Algumas bibliotecas do C++
<algorithm>
<fstream>
<functional>
<iostream>
<locale>
<map>
<set>
<sstream>
<string>
<vector>

Biblioteca <Math.h>

Existem vrios processos em um algoritmo que podemos simplesmente determinar como


operaes matemticas ou clculos sendo executados pelo nosso programa.
Levando para a questo realmente matemtica, em C++ existe uma biblioteca prpria para
clculos matemticos um pouco mais complexos, a biblioteca ao qual nos referimos a <math.h>
Com a biblioteca <math.h> podemos encontrar facilmente funes para calcular potncias, raz
quadrada, funes trigonomtricas para clculos que envolvem seno, co-seno e tangente, alm de
constantes para nmeros irracionais como, por exemplo, PI () e 2.
Simbologia
e
log2 e
log10 e
Ln2 (x)
Ln10 (x)

/2
/4
2

O que
Nmero de Euler
Logaritmo de e na base 2
Logaritmo de e na base 10
Logaritmo neperiano binrio
Logaritmo neperiano ou natural
Pi
Meio Pi
Quarto de Pi
Raiz quadrada de 2
Raiz quadrada de meio

Valor da constante no C++

2,7182818284590452354
1,4426950408889634074
0,43429448190325182765
0,69314718055994530942
2,30258509299404568402
3,14159265358979323846
1,57079632679489661923
0,78539816339744830962
1,41421356237309504880
0,70710678118654752440

Como podemos ver, todas as constantes so valores do tipo double. E isso se reflete nas
funes.
Trigonomtricas
sin (): Retorna o valor do seno. Recebe como argumento o valor dos graus em double.
cos (): Retorna o valor do co-seno. Recebe como argumento o valor dos graus em double.
tan (): Retorna o valor da tangente. Recebe como argumento o valor dos graus em double.
Logartmicas
log (): Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double.
log10 (): Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double.
Potncias
pow (): Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double, o
primeiro a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operao 210,
faramos pow (2, 10).
sqrt (): Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele deve extrair a
raiz.

Controle de Fluxo de Execuo Deciso


Os mtodos de tomada de deciso no C++, esto presentes para as tarefas mais corriqueiras que
o programa deve executar. Alm desta forma de controle de decises, C++ prov certas

funcionalidades relacionadas a objetos que modificam a forma como o cdigo estruturado e, por
consequncia, decidem como o programa deve se comportar em determinadas situaes. Examinemos
os mtodos bsicos e analisemos de forma simples as estruturas de deciso, para entender como isso
poder nos ajudar a tornar o cdigo mais bem construdo.
Estrutura IF/ELSE
Uma ao muito importante que o processador de qualquer computador executa, e que o torna
diferente de qualquer outra mquina, a tomada de deciso definindo o que verdadeiro e o que
falso.
Se quisermos fazer um bom programa, esse programa deve ser capaz de definir caminhos
diferentes de acordo com decises que o prprio programa toma. Para isso, precisamos de uma
estrutura seletiva da qual o nico valor possvel o bit 1 ou 0, resumindo: retornar o valor
VERDADEIRO ou FALSO.
Em C / C++, como em muitas linguagens de programao, quem faz isso o if, ou seja, se for
tal coisa, faa isso! Simples desse jeito.
O ELSE o que chamamos de caso contrrio, ou seja, se for falso execute o que est no ELSE.
Exemplificando: Se (IF) for tal coisa, faa isso! Caso contrrio (ELSE), faa aquilo, com essa
idia, selecionaremos apenas uma ao ou um nico conjunto de aes, no podendo realizar 2
condies diferentes.

1 condio:

if (condio)
2 condies:

if (condio)
3 condies:

if (condio 1)
N condies:

if (condio 1)

...
else if (condio (N-1))
possvel observar que podemos criar um programa com quantas condies queremos,
restringindo a cada condio, uma ao ou um conjunto de aes.
Um dos erros mais comuns criar condies redundantes, como mostra o seguinte exemplo:
Elabore um programa que diga qual ao, ou aes foram escolhidas:
a) Ao 1: caso o nmero seja maior ou igual a 2.
b) Ao 2: caso o nmero seja maior que 1.
c) Ao 3: caso no seja satisfeita nenhuma condio.

#include<iostream.h>
#include<conio.h
> main()
Observe que o erro encontra-se no uso do else if, com ele, exclumos possibilidades possveis
de respostas. Por exemplo, se digitarmos o nmero 3 no programa acima, o compilador nos dar como
sada apenas a primeira condio ("Ao 1 escolhida), onde na verdade temos duas respostas, pois
satisfaz a ao 1 e 2 simultaneamente.
Se substituirmos o if no lugar do else if, o compilador nos dar as 2 respostas possveis
("Ao 1 escolhida e "Ao 2 escolhida), com isso, corrigiramos o problema da redundncia do
nosso exemplo.
Com o uso apenas do if e do else possvel o compilador executar vrias condies que
ocorram simultaneamente.

Exemplos de Aplicao

1) Dados dois nmeros reais quaisquer, desenvolva um programa que diga se eles so iguais ou
diferentes.
Soluo:

#include<iostream.h>
#include<conio.h
> main()
2) Dado um nmero qualquer, determinar se este neutro, positivo ou negativo.
Soluo:

#include<iostream.h>
#include<conio.h
> main()
3) Elabore um programa que identifique se um nmero inteiro digitado par, impar ou nulo
Soluo:

#include<iostream.h>
#include<conio.h>

{cout<<" nulo "<<endl;}


else
Observao: Note atentamente a hierarquia das estruturas do terceiro exemplo.
4) Dado um nmero real qualquer, calcule sua raiz quadrada.
Soluo:

#include<iostream.h>
#include<conio.h>
Observe que o comando pow serve para realizar operaes com exponenciais.
No nosso caso: a = pow(n,0.5), estamos atribuindo varivel a, a seguinte expresso
exponencial n elevado a 0.5.
De forma genrica, no comando pow (A,B), teremos a funo exponencial, onde A a base e B
o expoente.

Exerccios Propostos
1) Dados trs valores distintos, coloc-los em ordem decrescente.

2) Fazer um algoritmo para resolver o seguinte problema: calcular a soma dos dgitos de um nmero inteiro de
quatro dgitos.Caso o nmero de entrada no possuir 4 dgitos, reportar erro ao usurio.

3) Dados os coeficientes de uma equao do segundo grau, verificar se a mesma possui razes reais, (iguais ou
diferentes). Escreva os valores das razes. Se as razes no forem reais emitir uma mensagem informando o fato.
4) O nmero 3025 tem a seguinte caracterstica: 30+25=55 => 55*55=3025. Fazer um algoritmo que l um
nmero inteiro de quatro algarismos e testa se ele tem ou no a caracterstica do 3025.

5) Dados trs valores distintos, coloc-los em ordem crescente, decrescente e calcular o valor mdio dos
mesmos.

20

6) Dada a funo f (x) a seguir, faa um programa que calcule f (x) para qualquer
valor de x: x2 2 se

x <-4

21

s
4 x
x<
5
se
e
7) Dados trs valores, X,Y e Z verificar se eles podem ser os comprimentos dos lados de um tringulo e,
se forem, verificar se um tringulo eqiltero (3 lados iguais), isscele (2 lados iguais) ou escaleno
(3 lados diferentes). Se ele no formarem um tringulo, escrever uma mensagem.
f (x)

x +5
- x3 +8

Condio de existncia: Se X<Y+Z e Y<X+Z e Z<X+Y


8) Fazer um algoritmo usando menu, que leia um nmero N real e fornea as seguintes opes:

1) Clculo da raiz de N ( o usurio deve digitar tambm o ndice da raiz)


2) Clculo da potncia N por p ( o usurio deve digitar p (o ndice da potncia))
3) Converter o nmero real para nmero inteiro
4) Calcular o resto da diviso de N por p ( o usurio deve digitar p )
5) Sair do programa
9) Dado um nmero, verifique se ele par ou mpar. Se for par, calcule a sua raiz quadrada, se for
impar calcule o seu quadrado.
10) Considere o problema de avaliao: dados uma nota feita a seguinte avaliao, elabore um
programa que informe ao usurio a situao do aluno em relao nota:
Nota invlida para 10 < nota < 0
Aprovado para 5 nota 10
Exame

para 3 nota <5

Reprovado

para 0 nota <3

11) Dados dois nmeros reais distintos, calcular se eles so iguais em mdulo.
12) Apresente um programa que solicite ao usurio o valor se x, calcule f(x) e mostre o resultado,

sendo
2x
s
x7
es 5 x <
f (x)
x
- +10
x
se
x <-5
7
5
e
13) Dado o salrio inicial de cada cargo, faa um programa que ajusta os salrios de funcionrios de
uma empresa. Se o funcionrio for tcnico (opo 1), o reajuste de 50%; se for gerente (opo 2), o
reajuste de 30% se for outro funcionrio (opo 3) de 10%.
14) Faa um programa que, dado x, determine o valor de y f (x) g(x) , sendo:

Controle de Fluxo de Execuo Repetio

As estruturas de repeties so muito importantes para a soluo de problemas na programao,


pois muitas vezes o mesmo procedimentos tm que ser executados mais de uma vez, ou um nmero de
vezes varivel.

Em C/C++, basicamente existem trs tipos de estrutura de repetio: for, while e do while.

Estrutura FOR
Para o for, como qualquer iterao (repetio), precisa de uma varivel para controlar os loops
(voltas). No for, essa varivel dever ser iniciada, indicando pelo seu critrio de execuo, e forma de
incremento ou decremento. Ou seja, o for precisa de trs condies. Vale salientar que essas condies
so separadas por ponto-e-vrgula.
O comando deve ser inserido no compilador da seguinte forma:

for (comando; condio; comando)


Um dos exemplos mais utilizados o clculo da potncia de um nmero onde o usurio informa
ao programa a base e o expoente. O programa deve fazer o nmero de interaes iguais o nmero x do
expoente. Considerando o nmero do expoente natural, positivo e maior que zero, temos o seguinte
programa:

#include<iostream.h>
#include<conio.h
> main()
Observe que em for (int i=0; i<x; i++ ), temos as trs condies dentro do parnteses.
int i=0
i<x
i++

Critrio de incio e declarao da varivel usada.


Critrio de parada para a varivel i.
++ mostra o incremento da varivel i, ou seja, aumentar de 1 em 1.

Isso far com que ocorra de 0 a (x-1) iteraes, que dar um total de x iteraes.

Exemplos de Aplicao
1) Elabore um programa que calcule o fatorial de um nmero dado.
Soluo:

#include<iostream.h>

#include<conio.h
> main()
{int n;
2) Um nmero dito perfeito quando a soma de seus divisores (exceto ele mesmo), ele
prprio. Exemplo 28, divisores = 14+7+4+2+1 =28. Elabore um programa que diga se o
nmero digitado perfeito ou no.
Soluo:

#include<iostream.h>
#include<conio.h>
#include<math.h
> main()

Estrutura WHILE
Uma outra forma de iterao (repetio) em C/C++ o WHILE.
O while executa uma comparao com a varivel. Se a comparao for verdadeira, ele executa
o bloco de instrues, quantas vezes for necessrio, at a comparao se tornar falsa.

Traduzindo para a lngua portuguesa, While significa enquanto, ou seja, enquanto a condio
for verdadeira, execute sua respectiva ao.
A estrutura do while parecida com a do if, no aspecto de possuir apenas uma condio:

while (condio)
Exemplos de Aplicao
1) Elabore um programa que imprima os termos de uma progresso aritmtica cujo primeiro termo 3
e a razo 5. Parar o processamento quando for impresso um termo maior que 100.

#include<iostream.h>
#include<conio.h
2) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando for
impresso um termo negativo.
15, 30, 60, 12, 24, 48, 9, 18, 36, 6, 12, 24, ...

#include<iostream.h>
#include<conio.h
> main()
Um dos erros mais freqentes, realizado por programadores desatentos, o loop-infinito, que
caracterizado por ocorrer infinitas iteraes na estrutura.
Exemplo de loop-infinito
Elabore um algoritmo que imprima os termos da serie abaixo, parando o processamento quando
for impresso um termo maior que 80.

5, 10, 6, 11, 7, 12, 8, 13, ...

#include<iostream.h>
#include<conio.h
> main()
Observe que o erro consiste na expresso n=n-r que deveria ser: n=n+r.
Na expresso n=n-r o valor de n ir diminuir com o passar das interaes, e sempre satisfar
a condio de ser menor ou igual a 80, fazendo que continue com as iteraes de modo infinito.
O compilador possivelmente acarretar um erro quando ocorrer o loop-infinito.
DO/WHILE
A estrutura de repetio DO/WHILE parte do princpio de que deve-se fazer algo primeiro e s
depois comparar uma varivel para saber se o loop ser executado mais uma vez.
A estrutura do/while parecida com a do while, no aspecto de possuir apenas uma condio, e
ambas so estruturas de repetio, porm o do/while, diferentemente do while, informa a condio ao
compilador apensa no final da estrutura.

do
Partindo do ponto de vista que o usurio ir digitar o valor da varivel durante o bloco do do
e s depois ser comparada no WHILE no final do bloco, isso pode ajudar muitas vezes em que
necessrio executar um loop, nem que seja uma vez.
Exemplo de Aplicao:
1) Faa um programa que analise se k maior que n, se isso for verdadeiro, e imprima todos os
valores de k a n, se k for igual a n calcule o fatorial de k, e caso k for menor que n, apenas
informe ao usurio.
Soluo:

#include <iostream.h>

{
int k,n;
cout<<"Digite o valor de
k"<<endl; cin>>k;
cout<<"Digite o valor de

Exerccios Propostos
1) Elabore um algoritmo que imprime ao usurio os termos de uma PG, de razo 2, onde o termo
inicial 4,5
2) Elabore um algoritmo que imprima os termos da srie abaixo. Parar o processamento quando
for impresso um termo maior que 100.
1, 2, 1 ,4 ,1 ,6, 1, 8, 1, 10 ...
3) Desenvolva um programa que diz se um nmero primo ou no
4) Elabore um algoritmo que imprima os termos da srie de FIBONACCI. Parar o processamento
quando for impresso um termo maior que 800.
0, 1, 1 ,2 ,3 ,5, 8, 13, 21 ...
5) Elabore um algoritmo que imprima os termos da srie abaixo. Parar o processamento quando
for impresso um termo maior que 100.
4, 8, 11, 13, 14, 18, 21, 23, 24, 28...
6) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando
for impresso um termo maior que 500.
1, 2, 3, 4, 8, 9, 10, 11, 22, 23, 24, 25, 50, 51, 52, 53, ...
7) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando
for impresso um termo maior que 70.
2, 6, 9, 11, 12, 11, 15, 18, 20, 21, 20, 24, 27, ...

5) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando
for impresso um termo maior que 40.
10, 8, 6, 4, 8, 12, 16, 14, 12, 10, 14,18, 22, ...
6) Uma quantia de R$ 500.000,00 foi depositada em um banco que paga 13% de juros ao ms. O
dinheiro fica no banco durante 20 anos. Elabore um algoritmo que imprima o montante:
a) a cada 3 meses, para os 3 primeiros anos;
b) a cada 2 anos, para os 4 anos seguintes;
c) a cada 3 meses, para os 6 ultimos anos;
7) Considere uma quantidade desconhecida de nmeros reais, positivos. Elabore um algoritmo
para ler esses nmeros e imprimir:
a) todos os valores cuja parte decimal for maior a 0,8
b) a quantidade de valores cuja parte decimal for menor ou igual a 0,5
8) Fazer um algoritmo que, dada uma seqncia de N nmeros reais, determine qual o maior e
qual o menor nmero da seqncia e determine a posio que eles ocupam na seqncia.
9) Faa um algoritmo que leia uma seqncia de nmeros quaisquer e calcula os quadrados dos
valores absolutos destes nmeros. Fornecer a opo de repetir a leitura do nmero com (0) para
sim e (1) para no.Utilizar teste inicial com entrada forada.
10)Fazer um algoritmo em forma de Menu que fornea as seguintes opes para o usurio:
A - Clculo da raiz do um nmero (mtodo de aproximaes sucessivas de Newton)
B - Clculo do fatorial de um nmero (utilizando agora a estrutura determinstica)
C- Determinar se um nmero primo
F- Determinar o quadrado do valor absoluto de um nmero
G- Determinar se um nmero perfeito
H - Sair do algoritmo
O algoritmo deve ler o nmero de forma conveniente para cada operao.
11)Dado um nmero inteiro de quatro algarismos imprimir o nmero formado pelos 2 primeiros
dgitos, o nmero formado pelos 2 ltimos dgitos e a soma desses dois ltimos. Por exemplo,
se for dado 5283 devero ser impressos 52, 83 e o resultado da soma: 52+83. Aps a leitura,
deve-se verificar se o nmero realmente formado por quatro algarismos. Se no for, a leitura
deve ser repetida at que seja digitado um nmero correto. Como critrio de parada utilize uma
entrada nula.
12)Faa um algoritmo que leia dois nmeros k e n e imprima os nmeros k, k+1, ... ,n ,at que k
seja maior que n.

Switch / Case
Uma outra forma de estrutura seletiva o switch. Dentro dos switch h o case (que significa
caso). Ou seja, quase que um if com vrias possibilidades, mas com algumas diferenas importantes.

Primeira diferena: Os cases no aceitam operadores lgicos. Portanto, no possvel fazer


uma comparao. Isso limita o case a apenas valores definidos.
Segunda diferena: O switch executa seu bloco em cascata. Ou seja, se a varivel indicar para
o primeiro case e dentro do switch tiver 5 cases, o switch executar todos os outros 4 cases a no ser
que utilizemos o comando para sair do switch. (Nos referimos ao BREAK).
Agora, que conhecemos diferenas importantes, vamos ver como proceder com o switch / case.
Primeiro o comando switch e entre parnteses a varivel na qual est guardado o valor que ser
avaliado pelo case. Ento, abre-se o bloco de dados. Dentro do bloco de dados colocamos o comando
case e logo aps um valor terminando a linha com dois pontos (:). Preste ateno no tipo de v arivel
que ser colocado, pois h diferenas entre um dado e outro. Por exemplo: 1 no a mesma coisa que
'1' e 'a' no a mesma coisa que 'A'.
Ento, estruturado os comando que sero executados pelo case. Estruturalmente, seria isso:

switch (varivel)
{case valor1:
Exemplo de Aplicao:
1) Elabore uma simples calculadora que realize as operaes de adio, subtrao,
multiplicao e diviso, utilizando a estrutura switch/case.
Soluo:

#include <iostream.h>
#include
<conio.h> main ()
{int a, b, c, operacao;

c=a*b;
cout <<a<<" * "<<b<<" =
Perceba que no final de cada case h um break. Porque se no houvesse, o switch continuaria
executando at o final. Por exemplo, no exerccio anterior, havia 4 casos (case), e escolhemos a
operao 2, caso no houvesse o break, o programa executaria os casos seguintes, no nosso caso, a
operao 3 e 4
Default
Default, do ingls padro, o case que ativado caso no tenha achado nenhum case definido.
Ou seja, o que aconteceria em ltimo caso. Vamos imaginar o seguinte cenrio: Seu programa pede
para que o usurio digite apenas duas opes (S ou N) para reiniciar o programa. Mas, propositalmente
ou por engano, o usurio digita uma opo totalmente diferente. E agora? O que seu programa deve
fazer? aqui que o default entra. Geralmente o default quando previsto um erro, uma entrada de
dado incorreta ou no de acordo com o contexto. O default tem seu papel parecido com o else, da
estrutura if/else, caso nenhuma condio for feita, far os comandos definidos no default.

#include <iostream.h>
#include <conio.h>
#include
<cstdlib> main()
{char

break;}}
Como podemos ver, h dois casos: S para reiniciar ou N para sair. Se por acaso algum digitar
algo diferente disso, executa-se o default, que informa que a opo escolhida invalida e repete a
pergunta se o usurio deseja sair do programa, at que seja digitada uma opo valida (S ou N). Como
a linguagem C/C++ case sensitive (diferencia maisculas de minsculas) usamos uma funo para
deixar a letra maiscula (toupper da biblioteca ctype). Agora, no importa o que o usurio digitar, pois
o programa est preparado para reagir qualquer entrada de dado.

Exerccios Propostos
1) Elabore um programa que receba do usurio um nmero entre 1 e 12, inclusive 1 e 12. Se
ele digitou o nmero 1 , mostre "O ms atual Janeiro". Se ele digitou o nmero 2, mostre
"O ms atual Fevereiro" .
2) Pea um nmero e informe de acordo com as condies : 1 Incluso
2 - Excluso
3 - Alterao
4 - Consulta
5 - Relatrio
Outros - Opo Invlida
3) Implemente a calculadora maluca, utilizando uma instruo switch-case para determinar a
operao que deve ser executada, conforme o usurio escolheu no menu de opes:
Considere que o usurio entre com valores estritamente positivos.
Opo 1: Subtrai o fatorial do primeiro pelo segundo ao quadrado.
Opo 2: Calcula a soma do cubo do primeiro com a metade do segundo.
Opo 3: Calcula a soma da raiz quadrada dos nmeros digitados.
Opo 4: Soma da diviso do primeiro pelo segundo com o segundo.
4) Criar um programa que receba por janela JoptionPane o valor de um produto e um
cdigo de aumento, segundo a tabela:
Cdigo
A
B
C
D
E

Aumento (%)
10
25
30
50
60

Arrays Unidimensionais Vetores


30

Vetores, tambm chamados arrays (ingls), so uma maneira de armazenar vrios dados num
mesmo nome de varivel atravs do uso de ndices numricos.

31

Por exemplo, se tivemos que criar 20 variveis do mesmo tipo que querem dizer a mesma coisa,
ns no criaramos -> int x1, x2, x3, x4, x5, ... ao invs disso, criaramos apenas uma varivel de vetor
para guardar todos os 20 nmeros de uma vez.
Declaramos vetores de maneira muito semelhante declarao de variveis normais. A nica
diferena que depois do nome da varivel deve ser informada a quantidade de elementos do vetor.
Para declarar um vetor qualquer, com cinco elementos inteiros, escrevemos:
Primeiro, o tipo de dado: int, float, double, ...
Segundo, o nome da varivel: usando as mesmas convenes de uma varivel comum. (array,
vetor, vet, ...)
E por fim, o tamanho necessrio do vetor escrito entre colchetes: [5], [10], [3]...
Ento, definimos a declarao de um vetor da seguinte maneira, por exemplo:

int vet [4];


Note que a quantidade de elementos de um vetor no pode ser alterada depois que o vetor for
declarado.
Todo vetor um espao linear na memria dividido de acordo com o tamanho que declaramos.
Portanto, se declaramos int vet [4], na memria representado da seguinte forma:

Criamos ento uma nica varivel com 4 espaos nos quais podem ser guardados nmeros
inteiros.Agora, para acessarmos um local especfico dessa memria devemos indicar entre colchetes a
posio desejada no vetor que chamamos de index.
O importante mesmo saber que no importa o tamanho do vetor, o index (nmero que indica a
posio) sempre comea em 0. Portanto, um vetor de tamanho 20 vai da posio 0 a 19, um vetor de
tamanho 180 vai da posio 0 a 179, um vetor de tamanho 4 vai da posio 0 a 3. , portanto, se o
nmero de elementos N, o ndice ou posio do ltimo elemento ser N 1.

Agora, se quisermos atribuir os valores 540 na posio 1 e 8456 na posio 3 faramos: vet
[1]=540; vet [3]=8456.

No podemos nunca nos esquecer que o limite do vetor sempre seu tamanho menos 1. Usando
o exemplo: vetor de tamanho 4, posio mxima 3 (pois 4-1=3). Ento, se atribuirmos um valor a
posio 4 ocorrer um erro. Resumidamente, jamais poderamos fazer vet [4]=200.

Erro freqente:
Analise a seguinte situao:

int vet[4];
Observe que o programador atribuiu varivel y, o valor do vetor numa posio inexistente,
ocasionando assim um grande erro, pois o compilador atribuir um valor desconhecido a varivel.
Exemplo de Aplicao:
Elabore um algoritmo que receba 10 valores distintos, e imprima eles na seqncia que
foi digitado e na ordem crescente.
Soluo:

#include<iostream.h>
#include<conio.h
> main()
{int vet[10],aux ,i,
No cdigo acima criamos um vetor de tamanho 5 e usamos uma iterao (repetio / loop) para
preencher todos os espaos do vetor e ento outra iterao para mostrar todos os valores guardados.
Para mudarmos as posies do vetor usamos uma varivel chamada i.

Exerccios Propostos

1) Elabore um algoritmo para ler uma sequncia de 20 valores inteiros positivos e armazen-los
em um vetor VET. Imprimir o vetor.
2) Dado um vetor, comparar todos os seus elementos um a um e ordena-los em ordem crescente e
decrescente.
3) Elabore um algoritmo para ler um vetor VET de 20 valores inteiros positivos e gerar dois outros
vetores VP e VI onde: VP conter apenas os valores pares de VET, e VI conter apenas os
valores mpares. Imprimir VET, VP e VI
4) Elabore um algoritmo para armazenar em um vetor KV todos os valores inteiros positivos desde
1 at 50. Transportar todos os elementos primos do vetor KV para um vetor PV. Imprimir
os dois vetores.
5) Elabore um algoritmo para ler um vetor V de 20 valores inteiros positivos, calcular e imprimir o
fatorial de todos os elementos pares do vetor, e calcular e imprimir a potncia de 5 de todos os
valores mpares do vetor.

6)

Construa um contador N que varie de 1 a 10 e construa um vetor A(N)=N2. Imprima N e

A(N)
7) Apresente um algoritmo que receba uma seqncia de 9 valores, atribua-os a um vetor e
imprima-os na seqncia contrria da que foi recebida.
8) Construa um programa que leia um Nmero (N) de nomes de pessoas e suas respectivas idades
e guarde esses dados em dois vetores distintos. Imprima o nome e a idade de cada pessoa na
mesma linha. Em seguida escolha um nmero (ndice do vetor) e imprima o nome e a idade da
pessoa correspondente a este nmero
9) Faa um algoritmo que leia dois vetores de mesma dimenso e realize a soma entre eles.
Ex: vetor1=( 2, 4, 10, 11, 8, 6) , vetor2 = ( 4, 3, 1, 2, 0, 1) , vetor resultante = (6, 7,11, 13, 8, 7)
10) Ler uma varivel de 15 elementos numricos e verificar se existem elementos iguais a 25. Se
existirem, escrever as posies em que esto armazenados.
11) Elabore e implemente um algoritmo que faa um cadastro de materiais de construo. Os itens
devem ser lidos e armazenados. Para cada item deve ser associado o nome do produto, um
cdigo e a quantidade existente em estoque. Depois escolha um cdigo e imprima o nome do
item e da quantidade existente correspondente a este cdigo.
12) Deseja-se publicar o nmero de acertos de cada aluno em uma prova em forma de testes. A
prova consta de 5 questes, cada uma com cinco alternativas identificadas por A, B,C, D e E.
Para isso so dados: o carto gabarito, o carto respostas para cada aluno, contendo o seu
nmero e as respostas. Faa um algoritmo que resolva o problema e imprima os resultados.
13) Faa um algoritmo que calcula a mdia das notas de 10 alunos e determine o nmero de alunos
que tiveram nota superior a mdia calculada; o aluno que teve a maior nota e o aluno que teve a

menor nota. Imprima uma lista com o nome dos alunos e a nota na ordem decrescente de notas
juntamente com seus respectivos nomes.
14) A FEIS deseja saber se existem alunos cursando, simultaneamente, as disciplinas ICC e clculo
numrico. Existem disponveis na unidade de entrada os nmeros de matrcula de ICC (mximo
60 alunos) e Clculo Numrico (mximo 80). Cada conjunto dos nmeros de matrcula dos
alunos de uma disciplina tem a matrcula fictcia 9999 no final. Formular um algoritmo que
imprima o nmero de matrcula dos alunos que esto cursando estas disciplinas
simultaneamente. Obs: O exerccio trata da ocorrncia de um elemento em um conjunto em
outro conjunto.
15) Implemente um programa que l 10 inteiros do teclado ou para quando dois inteiros
consecutivos sejam digitados. Aps a leitura o programa dever imprimir o maior, o menor, a
mdia e a soma dos nmeros digitados.
16) Tentando descobrir se um dado era viciado, um dono de cassino honesto o lanou n vezes.
Dados os n resultados dos lanamentos, determinar o nmero de ocorrncias em cada face.
17) Um usurio deseja obter todos os nmeros primos, em ordem crescente, de uma srie de 20
nmero aleatrios, no seriados.Elabore um programa que solucione esse problema, e imprima
a seqncia digitada pelo usurio, a seqncia dos nmeros primos em ordem crescente e a
seqncia dos nmeros no utilizados (no primos).
18) Faa um programa que utilize uma estrutura de repetio para ler 50 nmeros armazenando-os
em um vetor e calcule e exiba a mdia aritmtica deles. Em seguida o programa deve apresentar
todos os valores armazenados no vetor que sejam menores que a mdia.
19) Desenvolva um programa que leia um vetor unidimensional de 10 nmeros inteiro e exiba-o
verticalmente, trocando os elementos entre si, dois a dois, ou seja, os de ndices par com os de
ndice mpar.
20) Construa um programa que gere um vetor VI, que receba um nmero par de elementos e
multiplique os mesmos devolvendo o array resultante.
Por exemplo, o array de entrada com os valores {1, 23, 10, 5, 7, 11} resulta no array de sada
{23, 50, 77}.
21) Dados dois vetores x e y, ambos com n elementos, determinar ambos, so exatamente iguais.
22) Dada uma seqncia de n termos que contenha os nmeros reais(0.0, 1.5, -1.7, 2.3 e 3.0)
determinar os nmeros que compem a seqncia e o nmero de vezes que cada um deles
ocorre na mesma.
Exemplo: n = 8
Seqncia: [-1.7, 3.0, 0.0, 1.5, 0.0, -1.7, 2.3, -1.7]
Sada:-1.7 ocorre 3 vezes
3.0 ocorre 1 vez
0.0 ocorre 2 vezes
1.5 ocorre 1 vez

2.3 ocorre 1 vez

Exerccios Propostos

1) Dada uma matriz M(5,5), transportar para um vetor D apenas os elementos da diagonal da
matriz M, e para o vetor S os elementos da diagonal secundria. Imprimir a matriz e os vetores.
2) Elabore um algoritmo que leia dois vetores inteiros V1 e V2, de 8 elementos cada. Gerar uma
matriz M por linha, tal que: Os elementos do vetor V1 devem formar as linhas mpares da
matriz e elementos do vetor V2 devem formar as linhas pares da matriz. Imprimir os vetores e a
matriz gerada.
3) Fazer um algoritmo que, dado n, imprime as n primeiras linhas do tringulo de Pascal.
1
1
1
1
1
1
.
.

1
2
3
4
5

M(I,J) = 1 SE I=J
1
3
6
1
0

1
4
1
0

M(I,J) = 1 SE J=1
1
5

M(I,J) = M(I-1,J-1) + M(I-1,J)

4) Dizemos que uma matriz quadrada inteira um quadrado mgico se a soma dos elementos de
cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais
principal e secundria so todas iguais.
Exemplo: A matriz
8 0 7

4 5 6

3 10 2
um quadrado mgico.
Ann , verificar se A um quadrado mgico.
Dada uma matriz quadrada

5) Dizemos que uma matriz inteira A uma matriz de permutao se em cada linha e em cada
nn
coluna houver n 1 elementos nulos e um nico elemento igual a 1.
Exemplo: A matriz abaixo de permutao:

Observe que

0
1

1 0 0
0 1 0

0 0 0

1
0 0

2 1 0

1 2 0
0 1
0

no de permutao.
6) Dada uma matriz Ann , imprimir o nmero de linhas e o nmero de colunas nulas da matriz.
Exemplo: m 4 e n 4
1

4
0

0 2 3

0 5 6
0 0 0

0 0 0

tem 2 linhas nulas e 1 coluna nula.


7) Faa um algoritmo na forma de fluxograma e de programa que leia duas matrizes e realize a
soma entre elas. Ex: Considere matrizes A3x3 e B3x3 . Para realizar soma e subtrao de
matrizes elas devem ter mesma dimenso.
8) Faa um algoritmo em forma de menu que, dadas duas matrizes A e B, oferea as seguintes
opes:
1. Soma A+B
2. Transpostas de A e B
3. Produto elemento a elemento entre A e B (Ai,j)*B(i,j)
4. Produto matricial entre A e B (A*B)
5. Construir um vetor com os elementos pares e outro com os elementos impares da matriz A
6. Construir um vetor com os elementos primos da matriz B
7. Sair do programa
9) Construa uma matriz ALxC, onde os elementos A(i,j), i=1....L, j=1,....C, dado por A(i,j)=i+j
10) Crie um programa que leia uma matriz A. A partir de A crie uma matriz B idntica. Em seguida
faa com que os elementos da primeira linha de B sejam o dobro dos elementos da primeira
linha de A e os elementos da diagonal principal de B sejam todos nulos. Imprima A e B.
11) Faa um algoritmo em forma de menu que, dadas duas matrizes A e B, oferea as seguintes
opes:
A - Verificar se as matrizes A e B so simtricas A(i,j)=B(j,i)
B Verificar se os elementos das diagonais das duas matrizes so iguais
C Verificar quantos elementos nulos tem a matriz A
D Verificar quantos elementos pares tem a matriz B
E - Sair do programa
12) Dada uma tabela de 4 x 5 elementos, calcular a soma de cada linha e a soma de todos os
elementos.
13) Uma certa fbrica produziu dois tipos de motores M1 e M2 nos meses de janeiro,..., dezembro.
Fazer um algoritmo na forma que, a partir da produo mensal dos motores M1 e M2 e seus
respectivos custos e lucros, calcule o custo e o lucro em cada um dos meses e o custo e lucro
anuais.

14) Os elementos aij de uma matriz inteira Anxn representam os custos de transporte da cidade i para
a cidade j. Dados n itinerrios, cada um com k cidades, calcular o custo total para cada
itinerrio.
4 1 2 3
Exemplo

:
5 2 1 40
2 1 3 8

7
1
2
5

O custo do itinerrio 1 4 2 4 4 3 2 1 :
a14 + a42 + a24 + a44 + a43 + a32 + a21 = 3 + 1 + 40 + 5 + 2 + 1 + 5 = 57

Sub-rotina
1) Faa um algoritmo que receba a massa e o volume de uma amostra qualquer, atribua os
dados lidos a uma estrutura de dados Tamostra, passe essa estrutura como parmetro para
uma sub- rotina chamada Densidade() que calcule e retorne a densidade da amostra.
2) Faa um algoritmo que receba dois pontos cartesianos quaisquer, atribua os dados lidos a
duas variveis do tipo Tponto, passe esses dois pontos para uma sub-rotina Distancia() que
retorne a distncia entre estes pontos.
3) Faa um algoritmo que receba os dados de um crculo, atribua os dados lidos a uma
varivel do tipo Tcirculo, passe essa varivel a uma sub-rotina rea() que retorne a rea
do crculo.
4) Faa um algoritmo que receba os dados de um ponto e um crculo, atribua os dados lidos a
uma varivel do tipo Tponto e outra do tipo Tcirculo, respectivamente, passe essas
variveis a uma sub-rotina Contido() que retorne verdadeiro se o ponto estiver contido no
crculo.
5) Elabore um algoritmo que utilizando sub-rotina, calcula a mdia aritmtica de 3 provas de
um aluno e retorna ao programa principal, se o aluno foi ou no aprovado (aprovado
quando nota for superior ou igual a 5,0).

Exerccios de reviso

1) Construa um algoritmo para entrar com um nmero de 1 a 10 e imprimi-lo o nmero de vezes


correspondente ao seu valor.,
2) Desenvolva um algoritmo que calcule as razes de uma equao do segundo grau. Utilize o
mtodo de Baskara, fornecendo ao algoritmo os coeficientes A,B e C.
3) Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer no plano
P(x1,y1) e Q(x2,y2), calcule a distancia entre eles.
4) Construa um algoritmo que calcule a quantidade de litros do combustvel gastos em uma
viagem utilizando-se um automvel que faz 12 km/L. Para realizar esse clculo, o usurio
dever fornecer o tempo gasto da viagem e a velocidade mdia durante a mesma.O algoritmo
dever apresentar como resultado os valores da velocidade mdia, tempo gasto na viagem,
distncia percorrida e a quantidade de litros utilizada na viagem.
5) Especifique um algoritmo para uma sub-rotina que receba como parmetro um valor real
qualquer, calcule o valor da F(x) = -x3 +8, para o parmetro recebido, e retorne o valor
calculado.
6)

Dado a funo F(x) da questo 5, faa um algoritmo que calcule F(x) para N valores igualmente
espaados entre Xinicial at Xfinal.

7) Dado a funo F(x) da questo 5, faa um algoritmo que calcule F(x) para valores entre Xinicial e
Xfinal. ,com intervalo definido pelo usurio.
8) Faa um algoritmo para uma sub-rotina que receba trs nmeros quaisquer e retorne o maior
deles.
9) Desenvolva um algoritmo que receba uma quantidade indefinida de notas e apresente as
informaes a seguir no final da seqncia de notas. O algoritmo dever encerrar a seqncia de
leitura quanto identificar que valor recebido no uma nota vlida (valor negativo ou maior que
10)
i. Quantidade de notas da seqncia;
ii. Mdia aritmtica de todas as notas da seqncia;
iii. Maior nota da seqncia;
iv. Menor nota da seqncia;
v. Percentual de notas maiores ou iguais a 5;
vi. Percentual de notas inferiores a 5;
10) Refaa o algoritmo anterior para uma quantidade definida de notas, previamente informada pelo
usurio.
11) Escreva um algoritmo, utilizando sub-rotina, que retorne funo principal, o volume de um
cilindro, dado o raio e altura do mesmo.
12) Escreva um algoritmo que leia dois nmeros reais e um caractere, que represente a operao a
ser realizada (+, -, * e /). O algoritmo deve apresentar o resultado final da operao, ou
uma mensagem de erro para o caso da diviso de um nmero por zero, ou uma mensagem de
erro caso no seja escolhida uma das quatro operaes aritmticas bsicas.

13) Considerando o ndice de massa corporal humana (IMC) dado pela razo do peso ( P ), em
quilogramas, pela estatura ( E ) ao quadrado, em metros quadrados. Apresente um algoritmo
que solicite ao usurio os dados necessrios, e com no mximo 5 estruturas de condio,
apresente ao usurio sua classificao, de acordo com a tabela a seguir:
IMC
At 14,5
Acima de 14,5 at 20
Acima de 20 at 25
Acima de 25 at 30
Acima de 30 at 40
Acima de 40

Classificao
Desnutrio
Abaixo do peso
Peso Normal
Sobrepeso
Obeso
Obeso Mrbido

14) Dados trs nmeros naturais, em qualquer seqncia, verificar se eles formam os lados de um
tringulo retngulo.
15) Construa um algoritmo que receba um nmero N inteiro e calcule o fatorial de (2N-1).
16) Construa um algoritmo para uma sub-rotina que receba como parmetro a posio de um
elemento da seqncia de Fibonacci e retorne o elemento da seqncia correspondente
posio.
17) Faa um algoritmo para uma sub-rotina que receba um nmero N inteiro, calcule e retorne N! ,
se N for 0, enviar ao usurio uma mensagem que pela definio, o fatorial de 0 vale 1.
18) Faa um algoritmo que leia uma matriz A(4x4). A partir de A obtenha uma matriz B de modo
que: primeira coluna de B: elementos so o seno dos elementos de A; segunda coluna de B:
elementos so os co-senos dos elementos de A; terceira coluna de B: elementos so as razes
dos elementos de A; quarta coluna de B: elementos so o fatorial dos elementos de A. Imprima
A e B.
19) Faa um programa que leia duas matrizes e realize a soma entre elas, passando primeira mente a
um teste se suas dimenses so compatveis para realizar tal operao.
20) Apresente um algoritmo que receba uma seqncia de 9 valores, atribua-os a um vetor e
imprima-os na seqncia contrria da que foi recebida.
21) Considere algoritmo em forma de programa que l uma seqncia de nmeros inteiros
positivos, de no mximo 100 elementos. O algoritmo constri e imprime quatro vetores:
a) um vetor V constitudo dos elementos lidos.
b) um vetor Q que armazena o quadrado dos elementos lidos
c) um vetor R que armazena a raiz quadrada dos elementos lidos
d) um vetor D que armazena o resto da diviso dos elementos lidos por 2
22) Faa um pseudocdigo, um fluxograma e um programa Fortran que leia um Nmero (N) de
nomes de pessoas e suas respectivas idades e guarde esses dados em dois vetores distintos.
Imprima o nome e a idade de cada pessoa na mesma linha. Em seguida escolha um nmero
(ndice do vetor) e imprima o nome e a idade da pessoa correspondente a este nmero.

40

23) Dado um vetor V de n elementos, com n>10 e n impar, imprimir o vetor comeando do termo
v[0] at o Vmdio.
Exemplo: Caso V tenha 13 elementos, devemos imprimir os termos de 0 a 7
24) Desenvolva um programa que leia uma matriz de 4x4 de elementos inteiros. Depois percorra e
mostre em forma de matriz. Depois percorra e some o elementos da diagonal principal
25) Desenvolva um programa que leia (preencha) uma matriz 5X6. Mostre todos os elementos. Leia
um nmero. Mostre, agora, quais so os elementos da matriz que so mltiplos deste nmero
lido.
26)

Referncias Bibliogrficas

http://www.gsmfans.com.br/index.php?topic=67407.0
http://pt.wikipedia.org/wiki/C%2B%2B
Lista de exerccio Prof. Alexandre Ribeiro FEIS
Lista de exerccio Prof. Anirio Salles Filho FEIS
Lista de exerccio Profa. Erica Regina Marani Daruichi Machado FEIS
Apostila: Introduo Cincia da Computao e Teoria e Desenvolvimento de Algoritmos,
Profa. Erica M. Daruichi Machado FEIS
Curso Bsico de Lgica de Programao, Unicamp - Centro de Computao DSC, Autor: Paulo
Srgio de Moraes
http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html
http://www.linhadecodigo.com.br/Artigo.aspx?id=1114
http://www.vivaolinux.com.br/artigo/Substituindo-a-biblioteca-conio.h-no-Linux-usando-ncursescurses.h/
http://allanlima.wordpress.com/
http://pt.wikipedia.org/wiki/C_(linguagem_de_programao)
http://www.apostilando.com/download.php?cod=3149&categoria=C%20e%20C++
http://pt.wikibooks.org/wiki/Programar_em_C%2B%2B
http://www.tiexpert.net/programacao
http://pt.wikibooks.org/wiki/Programar_em_C/Vetores
http://pt.wikipedia.org/wiki/C%2B%2B