




























































































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
Programação em C++
Tipologia: Notas de estudo
1 / 122
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































Curso em C++
Alan Robert Resende de Freitas
Departamento de Computação
Universidade Federal de Ouro Preto
Apostila disponível em: www.alandefreitas.com
Esta apostila se baseia no curso de programação lecionado na Universidade Federal de Ouro Preto. Em caso de erros na apostila, por favor, nos avise em [email protected]. Sabemos que a utilização de computadores é claramente uma vantagem em nossas vidas. O computador é um facilitador da nossa comunicação, do nosso planejamento e essa praticidade nos permite trabalhar menos e nos fornece diversão. Mas por que fazer nossos próprios programas? Uma resposta simples para isso é que tudo é uma questão de automatização. Existe uma citação de Bill Gates que exprime bem essa ideia.
“Sempre escolherei pessoas preguiçosas para realizar trabalhos difíceis, pois os mesmos buscam os caminhos mais fáceis para fazê- los”.(Bill Gates).
Sendo assim, você já parou para pensar em quantas tarefas repetitivas te- mos em nossas vidas? Em nossa profissão? Na família? Nós programadores costumamos ter ferramentas próprias para o dia-a-dia: calendários, lembretes, processadores de dados, e várias outras. A programação é necessária em tarefas avançadas de todas as áreas do co- nhecimento. Cálculo é uma delas. Muitos problemas matemáticos só puderam ser resolvidos por causa da capacidade dos computadores atuais. Todo ano, milhares de problemas novos e mais difíceis são solucionados. Outra vantagem de se saber programar é saber por que um computador pode falhar. Nós programadores, usualmente, reconhecemos o motivo de erros em programas. Isso só acontece porque já passamos pelos mesmos erros em nossos próprios programas. Além disso, a programação te ajuda a pensar e a quebrar problemas grandes em partes menores. O único limite no seu programa vai ser a sua imaginação. Uma ideia simples pode mudar a vida de milhões de pessoas.
A linguagem C++ foi desenvolvida por Bjarne Stroustrup quando traba- lhava para a Bell Labs, durante a década de 1980. Nesta época, o Unix, sistema operacional também desenvolvido pela Bell Labs, era desenvolvido na linguagem C. Era importante que fosse mantida compatibilidade entre a nova linguagem C++ e a antiga linguagem C. Então em 1983 o nome da linguagem foi alterado de “C com Classes”, C with Classes em inglês, para C++. Uma novidade importante da linguagem C++ é que ela contém uma biblioteca padrão de recursos que também foi sendo melhorada ao longo do tempo. Uma característica importante do C++ é ser considerada de médio nível. Isso que dizer que ela não é tão distante da linguagem da máquina, a língua
Tipos de dados Representação Exemplos Tipo lógico bool V ou F Números inteiros short < int < long ... -3, -2, -1, 0, 1, 2, 3 ... Números reais float < double 3.32, 4.78, 7.24, -3.14, 0. Caracteres char a, b, c, d, e, f ...#, $, [, ., \ ..
5.1.1 Primeiro programa em C++
Para criarmos nosso primeiro programa em C++ começaremos com este código.
1 # include < iostream > 2 3 int main (){ 4 std :: cout << " Olá mundo! " << std :: endl ; 5 return 0; 6 }
O comando apresentado na primeira linha, #include
É na terceira linha que se começa a função principal do nosso programa, chamada de main() em inglês. As chaves indicam onde começa e termina essa função. Logo em seguida vem o comando cout. Dizemos que cout é um objeto que faz saída de dados para o monitor. Esses dados são enviados para ele em cadeia com os operadores de inserção ( << ), que estão a sua direita. Para evitar um possível conflito entre os nomes, os recursos do C++ são divididos em espaços de nomes. O cout, por exemplo, é precedido de std e dois pontos seguidos (: :) para indicar que ele pertence ao espaço de nomes padrão da linguagem, conhecido também como standard.
Temos agora, na terceira linha, como o operador de inserção é então utilizado para enviar a frase “Olá, Mundo!” para cout. Cada letra desta frase é um dado do tipo char, que representa um caractere. As aspas ao redor da expressão “Olá, Mundo!” indicam que este é um con- junto de chars, e não uma palavra especial que é reservada da linguagem.
Além desta frase, uma quebra de linha após a frase é também enviada para cout. Essa quebra de linha é representada pelo comando endl, que também pertence a std. Saibam que todos os comandos em C++ DEVEM ser acompanhados de um ponto e vírgula indicando a onde termina aquele comando.
O comando return ( que significa retornar em inglês), indica que a função encerra naquele ponto, finalizando assim, o programa. Mas esse comando não só encerra como também retorna um valor do tipo int. O comando int, antes da definição main() indica que a própria função main irá retornar um int. Discutiremos o significado desse comando em lições futuras. Lembre-se que a função main é obrigatória em todos os programas.
Este é o resultado do programa acima:
Olá, Mundo!
5.1.2 Segundo programa em C++
1 # include < iostream > 2 3 using namespace std ; 4 5 int main (){ 6 cout << " Olá , Mundo " << endl ; 7 return 0; 8 }
Neste segundo programa em C++, indicamos que o espaço de nomes namespace std deve ser utilizado se nenhum espaço for mencionado. Eliminamos assim os vários stds e dois pontos seguidos (::) em nosso código. Como podem ver, as variáveis em C++ são organizadas em espaços de nomes para evitar conflito entre duas variáveis que tenham o mesmo identificador.
O programa acima irá mostrar na tela a seguinte mensagem:
Olá, Mundo!
5.1.3 Comentários
Em Alguns casos, um código pode se tornar muito complexo que nem o próprio programador consegue entendê-lo. Em casos como este, é bom deixar comentários para outros programadores.
5.1.4 Criando variáveis Os dados do nosso programa serão guardados em variáveis e para isso é necessário informar qual o tipo de dado de cada uma. Para cada variável, damos a ela um nome identificador que a referencia.
1 # include < iostream > 2 3 using namespace std ; 4 int main (){ 5 int numero ; // criando uma variável do tipo inteira com nome x 6 char letra ; // criando uma variável do tipo char com o nome letra 7 double num_real ; // criando uma variável do tipo double com nome num_ 8 bool teste ; // criando uma variável do tipo bool com nome teste 9 cout << " Este programa criou 4 variáveis! " << endl ; 10 return 0; 11 }
Neste exemplo, temos um programa onde 4 variáveis são criadas. A primeira delas (linha 5) irá guardar um número inteiro. Note que o nome que identifica a variável (numero) não contém acentos. Depois criamos uma variável (letra), para dados do tipo char. Em seguida, na linha 7, uma variável do tipo double, que pode armazenar números reais. E por fim na linha 8, uma variável do tipo bool, que pode guardar dados lógicos, como verdadeiro ou falso. Finalmente na próxima linha, este programa imprime uma mensagem sim- ples.
Este programa criou 4 variáveis!
Por enquanto, nosso programa não utilizou às variáveis criadas.
5.1.5 Identificadores Os identificadores são usados para dar nomes às variáveis ou funções que criamos. Estudaremos as funções mais adiante. O primeiro caractere de um identificador deve ser uma letra ou sinal de sublinha. Nomes como 8nome ou @nome não são válidos. As letras minúsculas e maiúsculas também são iden- tificadas de formas diferentes. Ou seja, para o C++, uma variável x minúsculo é diferente de uma variável X maiúsculo.
Os operadores são muito importantes em programação, pois eles alteram o valor das variáveis ou usam variáveis existentes para criarem novas.
5.2.1 Operador de atribuição
O operador representado pelo sinal de igualdade (=) em C++ não diz que dois valores são iguais. Ele na verdade, atribui o valor da direta à variável. Por isto, chamamos ele de operador de atribuição. Sendo assim, não confunda este operador de atribuição com um operador de igualdade. Ele transfere um valor a uma variável e esse valor pode ser utilizado posteriormente. Quando fazemos isto, o valor antigo da variável é perdido.
Neste código utilizaremos um operador de atribuição para dar um valor a uma variável.
Logo no início do código, criamos 2 variáveis que receberão seus valores através do fluxo de entrada. O comando que aparece na oitava linha imprime uma mensagem pedindo ao usuário que execute uma ação. Repare que não há o comando endl para passar para a próxima linha. cin, depois da oitava linha, é usado para obter um valor que virá do usuário pelo teclado. Por isto, o programa fica parado até que o usuário digite um valor e aperte a tecla Enter. Vamos supor que o valor 3.14 tenha sido digitado. Esse valor é, então, guardado na variável.
digite o primeiro numero: 3.
Vamos agora para o próximo passo na décima linha. O programa espera uma entrada de dados novamente e recebe o valor 2.7.
digite o segundo numero: 2.
Logo após, na linha 12, é atribuido à variável soma o valor numero1 somado com o valor numero2. Este é o fim do programa.
A soma dos numeros é 5.
5.2.3 Alterações possíveis Vejamos agora as alterações possíveis no programa. É possível termos uma lista separada por vírgulas para declaração das variáveis do mesmo tipo, como a acontece na quinta linha. Apesar de possível, é mais interessante fazer a declaração de variáveis separadamente, pois isso nos permite inserir comentários mais facilmente.
1 # include < iostream > 2 3 using namespace std ; 4 int main (){ 5 double numero1 , numero2 , soma ; 6 cout << " digite o primeiro numero : " ; 7 cin >> numero1 ; 8 cout << " digite o segundo numero : " ; 9 cin >> numero2 ; 10 soma = numero1 + numero2 ; 11 cout << " A soma dos numeros é " << soma << endl ; 12 return 0; 13 }
Uma segunda alteração possível é esta. Neste código, fizemos a adição dos dois números diretamente nos parâmetros do cout, na linha 11. Assim, utiliza- mos uma variável a menos. Após o comando com cout, o resultado da soma é descartado.
1 # include < iostream > 2 3 using namespace std ; 4 int main (){ 5 double numero1 , numero2 ; 6 cout << " digite o primeiro numero : " ; 7 cin >> numero1 ; 8 cout << " digite o segundo numero : " ; 9 cin >> numero2 ; 10 soma = numero1 + numero2 ; 11 cout << " A soma dos numeros é " << numero1 + numero2 << endl ; 12 return 0; 13 }
5.2.4 Operadores aritméticos Além do operador de atribuição, representado por um sinal de igualdade (=), existem também os operadores aritméticos. Esses são utilizados principalmente para tipos de dados que representam números. Já utilizamos um operador aritmético de soma, representado pelo próprio sinal de mais (+), no exemplo anterior. Os operadores aritméticos podem também ser utilizados para outros tipos de dados, tendo nestes casos outros significados. Como operador de adição você utiliza um sinal de mais (+). Para subtração, o sinal de menos (-). Para multiplicação, um asterisco (*). E para divisão, um sinal de barra da esquerda para a direita (/). Temos ainda um operador para o resto da divisão inteira, representado pelo símbolo de porcentagem (%). Tabela com todos os operadores artiméticos: Operador Comando Adição + Subtração - Multiplicação * Divisão / Resto da divisão inteira %
Fazemos o mesmo com o operador de subtração, de multiplicação e o de divisão. Repare que o resultado da divisão de 7 por 2 é 3 e não 3.5. Isto acontece porque r é uma variável do tipo int, que representa apenas números inteiros. Veja enfim, o operador de resto da divisão inteira, e esse é o fim de nosso programa.
Digite o primeiro numero 7 Digite o segundo numero 2 Adição dos numeros = 9 Subtração dos numeros = 5 Multiplicação dos numeros = 14 Divisão dos numeros = 3 Resto da divisão = 1
5.2.5 Operadores de atribuição aritméticos
Existem outros operadores de atribuição além do operador representado pelo sinal de igualdade. Esses outros operadores de atribuição são utilizados para abreviar expressões aritméticas e devem ser utilizados sempre que possível. Imagine qualquer instrução onde somamos uma variável c mais 2 e atribuímos o resultado à própria variável c. Isto pode ser convertido na forma c mais igual a dois (c += 2). Uma outra maneira em um caso mais geral é: considere qualquer comando onde atribuímos uma variável com uma constante à própria variável. Isto pode ser convertido em um comando com a variável, o operador, um sinal de igualdade e a expressão.
Quando usamos o operador de adição (+) e o de atribuição (=), no exemplo: x, operador de adição e atribuição e 6 (x += 6), temos uma expressão equivalente a: x, operador atribuição, x, sinal de adição e o 6 (x = x + 6). Ou seja, nos dois casos, x recebe seu próprio valor mais 2.
Quando utilizamos operador de subtração (-) e atribuição, no exemplo: x, operador de subtração e de atribuição e 3 (x -= 3), temos como significado que x recebe seu próprio valor menos 3.
Se utilizarmos o operador de multiplicação (*) e de atribuição temos: x, operador de multiplicação e de atribuição e 2 (x *= 2), o que significa que x receberá seu próprio valor multiplicado por 2.
Agora, se usarmos o operador de divisão (/) e de atribuição no exemplo: x, operador de divisão e de atribuição e 4 (x /= 4), temos como significado que x receberá seu próprio valor dividido por 4.
Por fim, quando utilizamos o operador de resto da divisão inteira (%) e atribuição temos o exemplo: x, operador resto da divisão inteira e de atribuição
e 7 (x %= 7). Isto quer dizer que x receberá o resto da divisão de seu próprio valor por 7. Tabela com todos os operadores de atribuição artméticos: Operador Exemplo Significado += x += 6 x = x + 6 -= x -= 3 x = x - *= x *= 2 x = x * 2 /= x /= 4 x = x / 2 %= x %= 7 x = x % 7
Neste exemplo, utilizamos os operadores de atribuição aritméticos.
1 # include < iostream > 2 3 using namespace std ; 4 int main (){ 5 int numero1 ; 6 int numero2 ; 7 int r ; 8 cout << " digite o primeiro numero : " ; 9 cin >> numero1 ; 10 cout << " digite o segundo numero : " ; 11 cin >> numero2 ; 12 numero1 += numero2 ; 13 cout << " Somando " << numero2 << " ->" << numero1 << endl ; 14 numero1 -= numero2 ; 15 cout << " Subtraindo " << numero2 << " ->" << numero1 << endl ; 16 numero1 *= numero2 ; 17 cout << " Multiplicando por " << numero2 << " ->" << numero1 << endl ; 18 numero1 /= numero2 ; 19 cout << " Dividindo por " << numero2 << " ->" << numero1 << endl ; 20 numero1 %= numero2 ; 21 cout << " Resto da divisão por " << numero2 << " ->" << numero1 << endl ; 22 return 0; 23 }
São criadas nossas variáveis nas linhas 5 e 6, em seguida, os valores são atribuídos a elas.
digite o primeiro numero 8 digite o segundo numero 3
Na linha 12, o comando (+=) equivale a dizer que numero1 recebe o próprio valor de numero1 mais o valor de numero2.
5.2.6 Operadores de incremento e decremento I Trabalharemos agora com os operadores de incremento e decremento, que são utilizados também para alterar o valor de variáveis. Estes operadores são usados para adicionar ou subtrair somente uma unidade do valor de uma variá- vel, respectivamente. O operador de incremento, é representado por dois sinais de adição seguidos (++), ele serve para incrementar em uma unidade, o valor de uma variável qualquer (x++). Como esta é uma operação comum, isto diminui o trabalho de dizermos que x recebe x mais 1 (x = x + 1), ou que x deve receber seu próprio valor mais 1.
5.2.7 Operadores prefixados ou de pós-incremento O operador prefixado pode ser representado colocando os dois sinais de adição ou subtração antes da variável (++x ou --x). Para cada caso, o operador e o nome da variável deve ser em sequência, sem espaços. Já o operador de pós-incremento ou pós-decremento pode ser representado pelo nome da variável seguido, sem espaços, de dois sinais de adição subtração (x++ ou x--). O operador prefixado incrementa o valor da variável antes de a usar. Apenas após o alteração, ela é utilizada com o valor modificado na expressão em que aparece. O operador de pós-incremento ou pós-decremento altera o valor da variável apenas depois que a mesma é utilizada na expressão em que aparece.
Quadro geral com os operadores de incremento e decremento: Significado Representação Utiliza e depois incrementa i++ Incrementa e depois utiliza ++i Utiliza e depois decrementa i-- Decrementa e depois utiliza --i
5.2.8 Operadores de increemento e decremento II Assim, para utilizar e depois incrementar usamos i mais mais (i++). Para incrementar e depois utilizar usamos mais mais i (++i). De modo análogo, para utilizar e depois decrementar usamos i menos menos (i--). Para decrementar e depois utilizar usamos menos menos i (--i). Neste exemplo, mostraremos a diferença entre os vários operadores de incre- mento e decremento.
1 # include < iostream > 2 3 using namespace std ; 4 5 int main (){ 6 int x ;
7 x = 0; 8 cout << " x = " << x ++ << endl ; 9 cout << " x = " << x << endl ; 10 cout << " x = " << ++ x << endl ; 11 cout << " x = " << x << endl ; 12 cout << " x = " << x - - << endl ; 13 cout << " x = " << x << endl ; 14 cout << " x = " << --x << endl ; 15 cout << " x = " << x << endl ; 16 return 0; 17 }
Iniciamos com a criação de uma variável x na sexta linha do código. Esta variável x será inicializada em seguida com zero.
Na oitava linha, utilizamos um operador de incremento em uma variável que está sendo enviada para um cout. Como utilizamos o operador de pós-incremento (x++), a variável será pri- meiramente utilizada no comando cout. Imprimindo assim, seu resultado na tela.
x = 0
Apenas após sua utilização, ela é incrementada e passa a ter valor 1. No comando seguinte, simplesmente imprimimos o valor da variável x, que agora vale 1.
x = 0 x = 1
Agora na décima linha, utilizamos um operador de incremento prefixado (++x), onde x é incrementado e depois utilizado. Primeiramente, x é incremen- tado passando a valer 2. Em seguida, seu valor é impresso na tela.
x = 0 x = 1 x = 2
Na linha seguinte imprimimos novamente o valor de x: