




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Este documento contém exemplos de código em c++, incluindo cálculos matemáticos, entrada e saída de dados, manipulação de arrays, funções e controle de fluxo. Além disso, fornece explicações sobre a sintaxe e semântica da linguagem.
Tipologia: Notas de aula
1 / 140
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































baseado em revisão sobre material de Profa^ Carmem Hara e Prof. Wagner Zola
Estas notas de aula apresentam os conceitos básicos da Linguagem C++ e se propõe a abordar apenas o que é importante para a compreensão básica de programas de computadores. Assim, conceitos de C++ como obje- tos, classes, templates e outros conceitos relacionados à programação orientada a objetos não são abordados aqui.
1 Programas C++
Essencialmente, um programa C++ consiste de uma ou mais partes chamadas funções^1. Além disso, um programa em C++ deve definir pelo menos uma função chamada main. Esta função marca o ponto de início de execução do programa. Programas C++ tem a seguinte estrutura geral:
#include
definição de constantes
funções
int main() { declaração de variáveis .... sentenças .... }
Cada instrução em C++ é chamada de sentença. Sentenças simples são terminadas com um ponto e vírgula. Usando chaves, podemos agrupar sentenças em blocos, chamados de sentenças compostas. Exemplos de sentenças incluem:
x = 3;
{ i = 3;
cout << i << endl;
i = i + 1; }
O corpo da função main() é um exemplo de sentença composta.
Uma variável é uma informação que você pode usar dentro de um programa C++. Esta informação está associada com um lugar específico da memória (isso é feito pelo compilador). O nome da variável e o endereço da memória onde a informação está armazenada estão associados. O nome e o endereço não mudam. Mas, o valor da informação pode mudar (o valor do que está dentro da caixa pode mudar, embora o
(^1) Na verdade, um programa C++ é composto pela definição de funções e de elementos estruturais denominados classes. Estes são tema de estudo em cursos avançados de programação orientada a objetos.
auto break case char const continue default do double else enum extern float for goto if int long main register return short signed sizeof static struct switch typedef union unsigned void volatile while Tabela 1: Palavras Reservadas da Linguagem C++
Os tipos básicos de dados existentes em C++ são:
Tipo de Dado Bits Faixa de Valores
char 8 -128 a 127 bool 8 true ou false int 32 -2.147.483.647 a 2.147.483. float 32 7 dígitos significativos double 64 15 dígitos significativos
Abaixo está um exemplo de um programa com diversas definições de variáveis:
int main() { int pera; char qualidade; float peso;
pera = 3; qualidade = ’A’; peso = 0.653; ... }
Quando variáveis são definidas, elas não possuem valores ainda. Nós damos valores às variáveis usando o operador de atribuição (=). Variáveis também podem ser inicializadas para conter valores quando são definidas. Usando esta forma, o program acima ficaria:
int main() { int pera = 3; char qualidade = ’A’; float peso = 0.653;
... }
Para resumir: quando um programa é executado, uma variável é associada com:
Em C++ , além de variáveis, nós podemos usar também números ou caracteres cujos valores não mudam. Eles são chamados de constantes. Constantes não são associados a lugares na memória. Assim como variáveis, constantes também têm tipos. Uma constante pode ser do tipo int, char, etc. Você nao tem que declarar constantes, e pode utilizá-las diretamente (o compilador reconhece o tipo pela maneira que são escritos). Por exemplo, 2 é do tipo int, e 2.0 é do tipo double. Por convenção, todas as constantes reais são do tipo double.
Um constante caracter é escrita entre apóstrofes, como em ’A’. Todas as letras, números e símbolos que podem ser impressos são escritos desta forma em C++. Às vezes precisamos de caracteres que não podem ser impressos, por exemplo, o caracter de “nova linha”, que não tem uma tecla específica no teclado. Neste caso, usa-se caracteres de escape. Tais caracteres são escritos não somente como um símbolo entre após- trofes, mas como um sequência de caracteres entre apóstrofes. Por exemplo, ’\n’ é o caracter para nova linha (uma sequência que inicia com a barra invertida é chamada de sequência de escape). Se quisermos representar o caracter de barra invertida, temos que escrever ’\’. Note que \n é o caracter de nova linha
Se quisermos que um programa C++ mostre alguns resultados, ou se quisermos que o programa peça ao usuário que entre com alguma informação, nós podemos usar os elementos cout e cin^2. Se você quiser usar estes elementos em seu programa, voce deve incluir as seguintes linhas no início do seu código fonte: (^2) cout e cin são na verdade objetos das classes ostream e istream. Mas este detalhe não é abordado nestas notas de aula. Será visto apenas o uso destes objetos como primitivas simples para Entrada e Saída de dados.
1.6.2 Lendo informação: cin
cin pode ser usado para ler valores digitados no teclado. Considere o seguinte programa:
#include
int main() { int idade;
cout << "Entre sua idade: "; cin >> idade
cout << "Voce tem " << idade << "anos." << endl; }
Este programa mostrará no monitor: Entre sua idade: e aguardará que um número seja digitado e a tecla ENTER. Depois disso, a variável idade conterá o valor digitado pelo usuário. Mais de um valor pode ser lido por um mesmo cin. Considere o seguinte exemplo:
#include
int main() { int dia, mes, ano;
cout << "Entre com a data do seu aniversario (dd mm aa): "; cin >> dia >> mes >> ano;
cout << "Voce nasceu em " << dia << "/" << mes << "/" << ano << endl; }
Este exemplo funciona exatamente como o exemplo anterior. Um único cin lê os 3 números quando estes números são separados por espaços (espaços em branco, tabulação, novas linhas). Então você pode teclar ENTER depois de cada número, ou colocar espaços ou tabulações entre os números. Os espaços são ignorados pelo cin.
/* Calcula o perímetro e a area de uma circunferencia de raio R (fornecido pelo usuario) */
/* Definir variaveis */ int Raio; float Perim, Area, PI; PI = 3.14159;
/* Obter Raio da circunferencia */ Escreva("Entre com o valor do raio:"); Leia(Raio);
/* Calcular Perimetro do Circulo */ Perim = 2 (^) * PI (^) * Raio;
/* Calcular Area da Circunferencia */ Area = PI * Raio (^) ** 2;
/* Exibir Resultados */ Escreva("O perimetro da circunferencia de raio", Raio, "eh", Perim); Escreva("e a area eh ",Area);
/* Terminar Programa */
FIM_ALGORITMO PERIMETRO_AREA
Programa em C++
/* programa que calcula o perímetro e a área de uma circunferência de raio R (fornecido pelo usuário) (^) */
#include
using namespace std;
#define PI 3.
int main( ) { /* Definir variaveis */ int Raio; float Perim, Area;
/* Obter Raio da circunferencia */ cout << "Entre com o valor do raio: "; cin >> Raio;
/* Calcular Perimetro do Circulo */ Perim = 2 * PI * Raio;
/* Calcular Area da Circunferencia */ Area = PI * pow(Raio, 2);
/* Exibir Resultados */ cout << "O perimetro da circunferencia de raio " << Raio << " eh " << Perim << endl; cout << "e a area eh " << Area << endl;
2 Operações Aritméticas e Expressões.
Operações Relacionais.
Em C++ , nós podemos executar operações aritméticas usando variáveis e constantes. Algumas operações mais comuns são:
/ divisão
% resto (módulo)
Estas operações podem ser usadas como mostram os exemplos abaixo, assumindo que as variáveis ne- cessárias já estão declaradas:
celsius = (fahrenheit - 32) (^) * 5.0 / 9.0;
forca = massa (^) * aceleracao;
i = i + 1;
2.1.1 Precedência de Operadores
Em C++ , assim como em álgebra, há uma ordem de precedência de operadores. Assim, em (2 + x)(3x^2 + 1), expressões em parêntesis são avaliadas primeiro, seguidos por exponenci- ação, multiplicação, divisão, adição e subtração. Da mesma forma, em C++ , expressões entre parêntesis são executadas primeiro, seguidas de (^) *, / e % (que tem todos a mesma precedência), seguido de + e - (ambos com a mesma precedência). Quando operações adjacentes têm a mesma precedência, elas são associadas da esquerda para a direita. Assim, a (^) * b / c (^) * d % e é o mesmo que ((((a (^) * b) / c) * d) % e).
2.1.2 A Operação de Resto (%)
Esta operação é usada quando queremos encontrar o resto da divisão de dois inteiros. Por exemplo, 22 dividido por 5 é 4, com resto 2 ( 4 × 5 + 2 = 22). Em C++ , a expressão 22 % 5 terá valor 2. Note que % só pode ser utilizados entre dois inteiros. Usando ele com um operando do tipo float causa um erro de compilação (como em 22.3 % 5).
2.1.3 Expressões e Variáveis
Expressões aritméticas podem ser usadas na maior parte dos lugares em que uma variável pode ser usada. O exemplo seguinte é válido:
int raio = 3 (^) * 5 + 1;
cout << "circunferencia = " << 2 * 3.14 * raio << endl;
Exemplos de lugares onde uma expressão aritmética NÃO pode ser usada incluem:
int yucky + 2 = 5;
cin >> oops (^) * 5;
Este exemplo é ilegal e causará erro de compilação.
Em C++ , há operadores que podem ser usados para comparar expressões: os operadores relacionais. Há seis operadores relacionais em C++ :
< menor que
maior que
<= menor ou igual que (≤)
= maior ou igual que (≥)
== igual a
!= não igual a ( 6 =)
Os resultados deste operadores é 0 (correspondendo a falso), ou 1 (correspondendo a verdadeiro). Va- lores como esses são chamados valores booleanos. Algumas linguagens de programação como Pascal tem um tipo de variável distinto para valores booleanos. Este não é o caso do C++ , onde valores booleanos são armazenados como variáveis numéricas tais como o int. Considere o seguinte programa:
int main() { int idade;
idade = 17; cout << "Pode tirar carteira de motorista? " << (idade >= 18) << endl; idade = 35; cout << "Pode tirar carteira de motorista? " << (idade >= 18) << endl; }
A saída deste programa será:
Pode tirar carteira de motorista? 0 Pode tirar carteira de motorista? 1
Na primeira linha, idade é 17. Logo, 17 >= 18 é falso, que é 0. Depois disso, idade é 35. Logo, 35 >= 18 é verdadeiro, que é 1. Note também que o operador de igualdade é escrito com “sinais de igual duplo”, ==, não =. Tenha cuidado com esta diferença, já que colocar = no lugar de == não é um erro sintático (não gera erro de compilação), e não significa o que você espera.
#include
int main() { int numero;
cout << "Entre com um numero inteiro: "; cin >> numero; cout << "\nPar? " << numero % 2 << endl; }
Exemplo 2: escreva um programa que leia 3 números inteiros e calcule a soma, média, e produto.
#include
int main() { int n1, n2, n3; int soma;
cout << "Entre com 3 numeros inteiros: "; cin >> n1 >> n2 >> n3; soma = n1 + n2 + n3; cout << "Soma = " << soma << endl; cout.setf (ios::fixed | ios::showpoint); // reais em ponto fixo cout.precision(2); // 2 casa decimais
// setw(8) fixa tamanho da representação em 8 digitos cout << "Media = " << setw(8) << soma / 3.0 << endl; cout << "Produto = " << (unsigned) n1 * n2 (^) * n3 << endl; }
Operador Associatividade
() esquerda para direita
3 Expressões como valores
Em C++ , todas as expressões são avaliadas. O resultado da avaliação é um valor e pode ser usado em quaisquer lugares.
Como você já sabe, expressões usando operadores aritméticos, relacionais e lógicos^3 são avaliados. O valor resultante é um número. Para os operadores relacionais e lógicos, este número pode ser 0 (que significa falso) ou 1 (que significa verdadeiro). Por exemplo: 3 + (^5) * 4 % (2 + 8) tem valor 3; 3 < 5 tem valor 1; x + 1 tem valor igual ao valor da variável x mais um; (x < 1) || (x > 4) tem valor 1 quando o va- lor da variável x é fora do intervalo [1,4], e 0 quando x está dentro do intervalo.
O formato do operador de atribuição é:
lvalue = expressao (1) Um lvalue (do inglês “left-hand-side value” - valor a esquerda) é um valor que se refere a um endereço na memória do computador. Até agora, o único “lvalue” válido visto no curso é o nome de uma variável. A maneira que a atribuição funciona é a seguinte: a expressão do lado direito é avaliada, e o valor é copiado para o endereço da memória associada ao “lvalue”. O tipo do objeto do “lvalue” determina como o valor da expressao é armazenada na memória. Expressões de atribuição, assim como expressões, têm valor. O valor de uma expressão de atribuição é dado pelo valor da expressão do lado direito do =. Por exemplo: x = 3 tem valor 3 ; x = y+1 tem o valor da expressão y+1. Como consequência do fato que atribuições serem expressões que são associadas da direita para es- querda, podemos escrever sentenças como:
i = j = k = 0;
Que, usando parênteses, é equivalente a i = (j = (k = 0)). Ou seja, primeiro o valor 0 é atri- buído a k, o valor de k = 0 (que é zero) é atribuído a j e o valor de j = (k = 0) (que também é zero) é atribuído a i. Uma característica muito peculiar de C++ é que expressões de atribuição podem ser usados em qualquer lugar que um valor pode ser usado. Porém você deve saber que usá-lo dentro de outros comandos produz um efeito colateral que é alterar o valor da variável na memória. Portanto, a execução de:
int quadrado, n = 2;
cout << "Quadrado de " << n << " eh menor que 50? " << ((quadrado = n * n) < (^3) Operadores lógicos && e || serão vistos na próxima aula.
4 Ordem sequencial de execução de sentenças
o comando condicional: if e if - else
A execução de um programa C++ começa com a função main(). Em todos os exemplos que vimos até este momento, sentenças são executadas sequencialmente. A ordem sequencial de execução de senteças pode ser alterada se certas condições forem satisfeitas durante a execução do programa. Isto é chamado desvio condicional. Todas as linguagens de programação oferecem comandos para o desvio condicional. O mais simples é a senteça if. Em C++ , ele tem o formato: if (expressao) corpododesvio O corpo do desvio, por sua vez, pode ser uma sentença simples ou composta (veja Seção 1.1). Quando uma sentença if é encontrada em um programa,
Figura 1: O comando if
Considere o seguinte exemplo que converte uma fração digitada pelo usuário (numerador e denomina- dor) em decimal e imprime o resultado:
#include
int main( ){
int a, b;
cout << "Entre com uma fracao (numerador and denominador): "; cin >> a >> b;
cout << "A fracao em decimal eh " << 1.0 * a / b << endl; }
No exemplo acima, escrevemos 1.0 * a / b, já que a e b são do tipo int, e portanto a / b é uma divisão de inteiros e a parte fracional do resultado seria truncado, o que certamente não é o que desejamos. Voce vê algo errado neste programa? Uma coisa a ser notada é que se o usuário digitar um denominador igual a 0 , nós teremos um erro de execução, já que o programa tentaria executar uma divisão por zero. O que é necessário fazer é testar se o denominador é igual a zero e dividir só no caso dele for diferente de zero. Poderíamos reescrever o programa acima da seguinte forma:
Exemplo 1:
#include
int main( ){
int a, b;
cout << "Entre com uma fracao (numerador e denominador): "; cin >> a >> b;
if (b != 0) cout << "A fracao em decimal eh " << 1.0 * a / b << endl; }
Exemplo 2: Programa que lê dois números e ordena o par caso o primeiro número digitado for maior que o segundo.
#include
int main( ){
int num1, num2, aux;
cout << "Entre com dois numeros inteiros: "; cin >> num1 >> num2;
if (num1 > num2) { aux = num1; num1 = num2; num2 = aux; cout << "Trocou \n"; }
cout << "Os numeros ordenados: " << num1 << " " << num2 << endl;
}
O programa do Exemplo 1 acima ficaria ainda melhor se ao invés de não fazer nada no caso do denomi- nador ser zero, imprimirmos uma mensagem de erro ao usuário, explicando o que há de errado. A sentença em C++ que permite fazermos isso é o if - else. O formato do if-else é:
using namespace std;
int main( ){
int num;
// obtem um numero do usuario cout << "Entre com um inteiro: "; cin >> num;
// imprime uma mensagem dizendo se o numero e par ou impar if (num % 2 == 0) cout << "O numero eh par.\n"; else cout << "O numero eh impar.\n";
}
É muito frequente utilizar o operador relacional == em expressões condicionais da sentença if. Por exem- plo:
int saldo = 2000;
if (saldo == 1) cout << "Voce esta quebrado! " << endl; else cout << "Seu saldo eh " << saldo << endl;
Como a sentença saldo = 2000 inicializa o valor da variável saldo com 2000 , a expressão saldo == 1 tem valor 0. Portanto, a senteça que segue o else será executada, e a mensagem
Seu saldo e 2000
será impressa. Agora, suponha que, devido a um erro, você tenha colocado = ao invés de ==:
int saldo = 2000;
if (saldo = 1) cout << "Voce esta quebrado! " << endl; else cout << "Seu saldo eh " << saldo << endl;
Agora, a expressão saldo = 1 tem valor 1. Portanto, a sentença que segue o if será executada, e a mensagem
Voce esta quebrado!
será impressa. Além disso, a atribuição causará um efeito colateral, e alterará o valor de saldo para 1. Tal uso do operador de atribuição não é ilegal, e não será detectado pelo compilador como erro. Portanto, tome cuidado com o uso de atribuição no lugar de igualdade. Tal erro é muito comum, e não é fácil de achar. Como regra geral, NÃO utilize atribuições dentro de outras sentenças.
5 Aninhando senteças if e if-else
Como era de se esperar, é possível colocar uma sentença condicional dentro de outra. Por exemplo, se quisermos imprimir uma mensagem apropriada caso um número seja positivo ou negativo e par ou ímpar, nós poderíamos escrever o seguinte:
#include
int main( ){
int num;
// Obtem um numero do usuario cout << "Entre com um inteiro: "; cin >> num;
// Imprime uma mensagem dizendo se o numero e positivo ou negativo, // positivo ou negativo. if (num >= 0) { if (num % 2 == 0) cout << "O numero e par e positivo\n"; else cout << "O numero e impar e positivo\n"; } else { if (num % 2 == 0) cout << "O numero e par e negativo\n"; else cout << "O numero e impar e negativo\n"; } }
O aninhamento de sentenças if-else sem usar chaves ({ e }) para delimitar o bloco de senteças a ser executado pode trazer efeitos indesejados. Há uma regra simples para determinar qual if está associado a qual else.
Regra de associação: Um else está associado com a última ocorrência do if sem else. O exemplo seguinte está errado porque associa o else ao if "incorreto":
#include
int main( ){