1. C++ – Programação Básica
1 Introdução
Os programas de computador, ou softwares – processadores de texto, planilhas,
navegadores Internet, e até mesmo o sistema operacional Windows – são arquivos
cujas instruções dizem ao computador como realizar determinadas tarefas.
No ambiente Windows, os arquivos com as extensões EXE e COM contêm comandos
que o computador pode executar. Em outras palavras, esses arquivos de programas
dão ao computador, normalmente uma após a outra, instruções específicas para que
ele realize determinada tarefa.
Para criar programas, usa-se uma linguagem de programação, dita de alto nível, como
o C++, e especifica-se as instruções que o computador deve executar. Em seguida,
por meio de um programa especial chamado compilador, converte-se as instruções de
programação na linguagem de máquina (binária) que o computador compreende.
Nas seções a seguir, serão apresentados os elementos constituintes da linguagem de
programação C++ e a sua sintaxe básica.
2 Tipos de Dados
2.1 Definição de Dados
São informações, que podem ser números ou caracteres, com os quais o programa
opera.
2.2 Definição de Variáveis
Representam localizações de memória onde são armazenados valores que podem ser
modificados pelo programa.
2.3 Variáveis em C++
2.3.1 Nome das variáveis
Pode conter letras, números e caractere de sublinhado. Porém :
• 1º caractere NÃO pode ser número
ex.: br_01
_br01
01_br (NÃO é permitido)
• letras maiúsculas é diferente de letras minúsculas (convenção : minúsculas)
ex.: A1 é diferente de a1
• não podemos usar palavras reservadas
ex.: int, float, if, else, etc...
Francisco Adell Péricas 1
2. 2.3.2 Tipos Básicos
char apenas 1 caractere alfanumérico (ex.: ´f´) 1 byte
short nºs inteiros (ex.: 123) 2 bytes
int nºs inteiros (ex.: 1245234) 4 bytes
long nºs inteiros (ex.: 1245234) 4 bytes
float nºs fracionários com precisão simples (ex.: 7.5) 4 bytes
double nºs fracionários com precisão dupla (ex.: 3.4E100) 8 bytes
2.3.3 Declaração de Variáveis
Sintaxe:
tipo nome_variável;
Ex.:
int x, y;
float f;
2.3.4 Inicialização de Variáveis
Sintaxe:
nome_variável = valor;
Ex.:
x = y = 10;
f = 3.5;
2.3.5 Declaração e Inicialização de Variáveis
Sintaxe:
tipo nome_variável = valor;
Ex.:
int x =10, y =10;
float f = 3.5;
2.4 Definição de Constantes
Representam localizações na memória, de dados que não podem ser alterados
durante a execução do programa.
2.5 Constantes em C++
2.5.1 Nome das variáveis
Por convenção sempre MAIÚSCULAS
Francisco Adell Péricas 2
3. 2.5.2 Declaração e Inicialização de Constantes
Sintaxe:
#define NOME_CONSTANTE valor
Ex.:
#define PI 3.14159
#define MAX 500
3 Operadores
3.1 Operador de Atribuição ( = )
Sintaxe:
nome_variável = expressão;
Ex.:
y = 2; // atribui o valor 2 a y
x = 4 * y + 3; // atribui o valor da expressão a x
CUIDADO: Conversão de Tipos em Atribuições
Regra: O valor do lado direito de uma atribuição é convertido no tipo do lado
esquerdo.
ex.:
int x;
float f;
x = f = 3.5; // resulta em f = 3.5 e x = 3
f = x = 3.5; // resulta em f = 3.0 e x = 3
3.2 Operadores Aritméticos
3.2.1 Operadores Unários (atuam sobre apenas um operando)
- (menos unário) multiplica o operando por (-1)
++ (incremento) incrementa o operando em uma unidade
-- (decremento) decrementa o operando em uma unidade
Ex.: x = 2;
y = 4*(x) + 3;
Ao substituirmos (x) pela expressão, teremos:
++x incrementa o valor de x antes de usá-lo (portanto usaremos x = 3 e teremos y = 15)
x++ incrementa o valor de x depois de usá-lo (portanto usaremos x = 2 e teremos y = 11)
--x decrementa o valor de x antes de usá-lo (portanto usaremos x = 1 e teremos y = 7)
x-- decrementa o valor de .x depois de usá-lo (portanto usaremos x = 2 e teremos y = 11)
Francisco Adell Péricas 3
4. 3.2.2 Operadores Binários (atuam sobre dois operandos)
+ adição
- subtração
* multiplicação
/ divisão
% mod - fornece o resto da divisão de 2 nºs inteiros
& E binário
| OU binário
! NÃO binário
Ex.: 10 % 2 = 0
11 % 2 = 1
3.2.3 Precedência
1. ++, --
2. *, /, %
3. +, -
Para alterar a precedência basta colocar a expressão entre parênteses. Quando dois
operandos têm o mesmo nível de precedência, eles são avaliados da esquerda para a
direita.
Ex.:
(x + y) / 2 // será feito 1º a soma e depois a divisão
x/y* 2 // será feito 1º a divisão e depois a multiplicação
3.3 Operadores de Atribuição Compostos
Sintaxe:
expressão_1 operador = expressão_2
é equivalente a
expressão_1 = expressão_1 operador expressão_2
Ex.:
x=x*5 x *= 5
a =a +1 a += 1 ou a++
x=x/b x /= b
y=y–1 y -= 1 ou --y
3.4 Operadores Relacionais
3.4.1 Operadores
São usados para comparar expressões. Resultam em falso ou verdadeiro.
== igual – comparação: compara se 2 valores são iguais
> maior que
< menor que
>= maior ou igual
Francisco Adell Péricas 4
5. <= menor ou igual
!= diferente
Ex.:
4 == 3 // resulta em falso
3>2 // resulta em verdadeiro
3.4.2 Precedência
1. <, <=, >, >=
2. != , ==
3.5 Operadores Lógicos
Permitem relacionar duas ou mais expressões.
&& e - resulta em verdadeiro se ambas expressões forem verdadeiras
|| ou - resulta em verdadeiro se pelo menos uma expressão for verdadeira
! não - resulta em verdadeiro se a expressão for falsa
Ex.:
(5 > 2) && (3 != 2) // resulta em verdadeiro – ambos verdadeiros
(5 < 2) && (3 != 2) // resulta em falso – apenas 1 verdadeiro
(5 < 2) && (3 == 2) // resulta em falso – ambos falsos
(3 >= 2) | | (4 != 2) // resulta em verdadeiro – ambos verdadeiros
(3 >= 2) | | (4 == 2) // resulta em verdadeiro – pelo menos 1 verdadeiro
(3 <= 2) | | (4 == 2) // resulta em falso – ambos falsos
!(4 == 2) // resulta em verdadeiro – pois a expressão é falsa
!(4 != 2) // resulta em falso – pois a expressão é verdadeira
4 Controle de Fluxo
4.1 Instrução if...else
Executa condicionalmente um grupo de instruções, dependendo do valor de uma
expressão.
Fluxograma:
condição? condição?
V F V
F
comando 1 comando 1 comando 1
comando 2 comando 2 comando 2
... ... ...
Francisco Adell Péricas 5
6. Sintaxes:
if (condição)
{
[comandos]
}
if (condição)
{
[comandos]
}
else
{
[comandos]
}
Comentários:
• Executando um bloco if, a condição é testada. Se a condição for verdadeira,
as instruções seguintes são executadas. Se a condição for falsa, a condição
else (se houver) será executada.
5 Estruturas de Repetição
5.1 Instrução for
Repete um grupo de instruções um número específico de vezes.
Fluxograma:
inic.
condição?
incr. F
V
comando 1
comando 2
...
Sintaxe:
for ([inicialização]; [condição]; [incremento])
{
[comandos]
[break;]
[comandos]
}
Comentários:
• Qualquer número de instruções break pode ser posicionado em qualquer lugar
do loop como meio alternativo de sair.
Francisco Adell Péricas 6
7. • Você pode aninhar loops for posicionando um dentro do outro. Dê um nome de
variável exclusivo como seu contador a cada loop. A construção a seguir é
correta:
for (I = 1; I <= 10; I++)
{
for (J = 1; J <= 10; J++)
{
for (K = 1; K <= 10; K++)
{
...
}
}
}
5.2 Instrução while
Executa uma série de instruções desde que uma determinada condição seja
verdadeira.
Fluxograma:
condição?
V
F
comando 1
comando 2
...
Sintaxe:
while (condição)
{
[comandos]
}
Comentários:
• Se a condição for verdadeira, todos os comandos serão executados. Então o
controle retorna para a instrução while e a condição é novamente verificada.
Se a condição ainda for verdadeira, o processo é repetido. Se não for
verdadeira, a execução continua com a instrução seguinte ao bloco de
comandos.
• Os loops while podem ser aninhados a qualquer nível.
Dica: A instrução while fornece um meio mais estruturado e flexível para executar um
loop.
5.3 Instrução do...while
Francisco Adell Péricas 7
8. Repete um bloco de instruções enquanto uma condição é verdadeira ou até que ela
se torne verdadeira.
Fluxograma:
comando 1
comando 2
...
V
condição?
F
Sintaxe:
do
{
[comandos]
[break;]
[comandos]
} while (condição)
Comentários:
• Qualquer número de instruções break pode ser posicionado em qualquer lugar
em do…while como alternativa para sair de um do…while.
• Quando usada dentro de instruções do…while aninhadas, break transfere o
controle para o loop que está aninhado em um nível acima do loop onde ocorre
break.
6 Funções
6.1 Funções da Biblioteca
Há uma lista imensa de funções que estão disponíveis a partir das bibliotecas dos
compiladores. Para utilizar-se delas é preciso acessar a ajuda destas bibliotecas ou
guias de referência de C++ para se ter a forma de utilização das funções e classes
disponíveis.
A seguir será apresentado as principais funções de entrada e saída de dados
utilizadas no C++.
6.1.1 cout
Esta função imprime dados na tela e o arquivo de cabeçalho a ser incluído: iostream.h
Ex.:
float x = 1.25;
int y = 1;
Francisco Adell Péricas 8
9. char z = ‘a’;
cout << “FLOAT = “ << x << “ INT = ” << y << “ CHAR = “ << z << endl;
Saída na tela:
FLOAT = 1.25 INT = 1 CHAR = a
O manipulador endl é utilizado para passar o cursor para a próxima linha. O manipulador flush
é utilizado para esvaziar o buffer de saída, apresentando o seu conteúdo imediatamente. O
manipulador setprecision(n) define um determinado número de dígitos de precisão para ponto
flutuante.
Para formatar as saídas, utilizam-se alguns métodos adicionais, os quais estão disponíveis no
arquivo de cabeçalho iomanip.h
cout.width(10); // define uma largura de 10 caracteres
cout.width(0); // retorna a saída para largura padrão
cout.fill(‘0’); // preenche os campos de uma largura de impressão com 0s
6.1.2 cin
Esta função lê dados do teclado e o arquivo de cabeçalho a ser incluído: iostream.h
Ex.:
float x;
int y;
char z;
cin >> x >> y >> z;
Entrada de dados da tela:
1.25 1 a
Para ler linhas inteiras pelo teclado, utiliza-se o método adiciona cin.getline( buff, len, delim),
o qual está disponível no arquivo de cabeçalho iomanip.h
cin.getline(buffer, 25); // lê uma linha de até 25 caracteres do teclado até ENTER
cin.getline(buffer, 20, ‘x’); // lê uma linha de até 20 caracteres do teclado até ‘x’
6.1.3 ofstream
Esta classe abre um arquivo para escrita e o arquivo de cabeçalho a ser incluído: fstream.h
Ex.:
float x = 1.25;
int y = 1;
ofstream tfile(“arq.txt”);
tfile << “FLOAT = “ << x << “ INT = ” << y << endl;
Cria o arquivo arq.txt no diretório corrente com o seguinte conteúdo:
FLOAT = 1.25 INT = 1
Francisco Adell Péricas 9
10. 6.1.4 ifstream
Esta classe abre um arquivo para leitura e o arquivo de cabeçalho a ser incluído: fstream.h
Ex.:
char buff[250];
istream tfile(“arq.txt”);
while (!tfile.eof())
{
tfile.getline(buff, 250);
cout << buff << endl;
}
Lê o arquivo arq.txt do diretório corrente e apresenta-o na tela.
FLOAT = 1.25 INT = 1
6.2 Funções definidas pelo usuário
É uma seção de código independente e autônoma, escrita para desempenhar uma tarefa
específica. Deve conter protótipo e definição da função.
6.2.1 Protótipo da função
Sintaxe:
tipo_retorno nome_função(tipo_arg nome1, ...., tipo_arg nomen);
• tipo_retorno – tipo de variável que a função retornará. Pode ser char, int, float,
double e void (se não retornar nada).
• nome_função – descreve o que a função faz.
• tipo_arg – tipo e nome das variáveis que serão passados para a função. Pode
ser char, int, float.
• nomen – double, void.
Sempre termina com; (ponto e vírgula) e vem nas componentes iniciais.
6.2.2 Definição da função
Sintaxe:
tipo_retorno nome_função(tipo_arg nome1, ...., tipo_arg nomen)
{
comandos;
}
• tipo_retorno – tipo de variável que a função retornará. Pode ser char, int, float,
double e void (se não retornar nada).
• nome_função – descreve o que a função faz.
• tipo_arg – tipo e nome das variáveis que serão passados para a função. Pode
ser char, int, float.
Francisco Adell Péricas 10
11. • nomen – double, void.
É a função propriamente dita. A 1ª linha é idêntica ao protótipo com exceção do ;
(ponto e vírgula). O corpo da função deve estar entre { } (chaves).
7 Matrizes
7.1 Vetores
Vetores nada mais são que matrizes unidimensionais. Vetores são uma estrutura de
dados muito utilizada. É importante notar que vetores, matrizes bidimensionais e
matrizes de qualquer dimensão são caracterizadas por terem todos os elementos
pertencentes ao mesmo tipo de dado. Para se declarar um vetor pode-se utilizar a
seguinte forma geral:
tipo_da_variável nome_da_variável [tamanho];
Quando o C++ vê uma declaração como esta ele reserva um espaço na memória
suficientemente grande para armazenar o número de células especificadas em
tamanho. Por exemplo, declarando:
float exemplo [20];
O C++ irá reservar 4x20=80 bytes. Estes bytes são reservados de maneira contígua.
Na linguagem C a numeração começa sempre em zero. Isto significa que, no exemplo
acima, os dados serão indexados de 0 a 19. Para acessá-los escreve-se:
exemplo[0]
exemplo[1]
.
.
.
exemplo[19]
Mas ninguém o impede de escrever:
exemplo[30]
exemplo[103]
Por quê? Porque o C++ não verifica se o índice utilizado está dentro dos limites
válidos. Este é um cuidado que deve-se tomar. Se o programador não tiver atenção
com os limites de validade para os índices ele corre o risco de ter variáveis sobre-
escritas ou de ver o computador travar.
7.2 Matrizes bidimensionais
A forma geral da declaração de uma matriz bidimensional é muito parecida com a
declaração de um vetor:
tipo_da_variável nome_da_variável [altura][largura];
Francisco Adell Péricas 11
12. É muito importante ressaltar que, nesta estrutura, o índice da esquerda indexa as
linhas e o da direita indexa as colunas. Quando vamos preencher ou ler uma matriz no
C++ o índice mais à direita varia mais rapidamente que o índice à esquerda. Mais uma
vez é bom lembrar que, na linguagem C++, os índices variam de zero ao valor
declarado, menos um; mas o C++ não verifica isto para o usuário. Manter os índices
na faixa permitida é tarefa do programador.
7.3 Matrizes multidimensionais
O uso de matrizes multidimensionais na linguagem C++ é simples. Sua forma geral é:
tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN];
Uma matriz N-dimensional funciona basicamente como outros tipos de matrizes. Basta
lembrar que o índice que varia mais rapidamente é o índice mais à direita.
7.4 Inicialização de Matrizes
Podemos inicializar matrizes, assim como podemos inicializar variáveis. A forma geral
de uma matriz como inicialização é:
tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN] = {lista_de_valores};
A lista de valores é composta por valores (do mesmo tipo da variável) separados por
vírgula. Os valores devem ser dados na ordem em que serão colocados na matriz.
Abaixo vemos alguns exemplos de inicializações de matrizes:
float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };
int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
O primeiro demonstra inicialização de vetores. O segundo exemplo demonstra a
inicialização de matrizes multidimensionais, onde matrx está sendo inicializada com 1,
2, 3 e 4 em sua primeira linha, 5, 6, 7 e 8 na segunda linha e 9, 10, 11 e 12 na última
linha. Repare que devemos incluir o ; no final da inicialização.
7.5 Inicialização sem especificação de tamanho
Podemos, em alguns casos, inicializar matrizes das quais não sabemos o tamanho a
priori. O compilador C++ vai, neste caso verificar o tamanho do que você declarou e
considerar como sendo o tamanho da matriz. Isto ocorre na hora da compilação e não
poderá mais ser mudado durante o programa, sendo muito útil, por exemplo, quando
vamos inicializar uma matriz e não queremos contar quantos elementos serão
necessários. Por exemplo:
int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 };
Repare que o artifício para realizar a inicialização sem especificação de tamanho é
não especificar o tamanho! No exemplo o valor não especificado será 5.
Francisco Adell Péricas 12
13. 8 Strings
Strings são vetores de caracteres (chars). As strings são o uso mais comum para os
vetores. Devemos apenas ficar atentos para o fato de que as strings têm o seu último
elemento como um '0'. A declaração geral para uma string é:
char nome_da_string [tamanho];
Devemos lembrar que o tamanho da string deve incluir o '0' final. A biblioteca padrão
do C++ possui diversas funções que manipulam strings. Estas funções são úteis pois
não se pode, por exemplo, igualar duas strings desta forma:
string1=string2; // NÃO faça isto
Fazer isto é um desastre. As strings devem ser igualadas elemento a elemento.
A seguir serão apresentadas algumas funções básicas para manipulação de strings.
As funções apresentadas nestas seções estão no arquivo cabeçalho string.h.
8.1 Funções de Manipulação de Strings
8.1.1 strcpy
Sua forma geral é:
strcpy (string_destino,string_origem);
A função strcpy() copia a string-origem para a string- destino.
8.1.2 strcat
A função strcat() tem a seguinte forma geral:
strcat (string_destino,string_origem);
A string de origem permanecerá inalterada e será anexada ao fim da string de destino.
8.1.3 strlen
Sua forma geral é:
strlen (string);
A função strlen() retorna o comprimento da string fornecida. O terminador nulo não é
contado. Isto quer dizer que, de fato, o comprimento do vetor da string deve ser um a
mais que o inteiro retornado por strlen().
8.1.4 strcmp
Francisco Adell Péricas 13
14. Sua forma geral é:
strcmp (string1,string2);
A função strcmp() compara a string 1 com a string 2. Se as duas forem idênticas a
função retorna zero. Se elas forem diferentes a função retorna não-zero.
8.2 Matrizes de strings
Matrizes de strings são matrizes bidimensionais. Uma string é na realidade um vetor.
Portanto um vetor de strings será uma lista de vetores. Esta estrutura é uma matriz
bidimensional de caracteres. Podemos ver a forma geral de uma matriz de strings
como sendo:
char nome_da_variável [num_de_strings][compr_das_strings];
Para acessar uma string individual é só usar apenas o primeiro índice:
nome_da_variável [índice]
8.3 Inicialização de Strings
Podemos inicializar strings, assim como podemos inicializar matrizes. Abaixo vemos
alguns exemplos de inicializações de strings:
char str [10] = { 'J', 'o', 'a', 'o', '0' };
char str [10] = "Joao";
char str_vect [3][10] = { "Joao", "Maria", "Jose" };
No primeiro exemplo vê-se como inicializar uma string e, no segundo exemplo, um
modo mais compacto de inicializar uma string. O terceiro exemplo combina as duas
técnicas para inicializar um vetor de strings. Repare que devemos incluir o ; no final da
inicialização.
8.4 Inicialização sem especificação de tamanho
Da mesma forma que ocorre com matrizes, podemos, em alguns casos, inicializar
strings das quais não sabemos o tamanho a priori. O compilador C++ vai, neste caso
verificar o tamanho do que você declarou e considerar como sendo o tamanho da
matriz. Isto ocorre na hora da compilação e não poderá mais ser mudado durante o
programa, sendo muito útil, por exemplo, quando vamos inicializar uma string e não
queremos contar quantos caracteres serão necessários. Por exemplo:
char mess [] = "Linguagem C: flexibilidade e poder.";
No exemplo, a string mess terá tamanho 36. Repare que o artifício para realizar a
inicialização sem especificação de tamanho é não especificar o tamanho!
Francisco Adell Péricas 14
15. 9 Estrutura de um Programa em C++
Um programa em C++ é composto pelos seguintes elementos:
• Cabeçalho: contém arquivos de cabeçalho, declaração de constantes,
protótipos de funções e de classes e variáveis globais
• Funções: contém variáveis locais e definições das funções
• Função main( ): contém variáveis locais e instruções do programa
Francisco Adell Péricas 15