if
e de selecção if else
gdb no editor XEmacs//Inclusão de ficheiros de interface de bibliotecas e módulos (a explicar mais tarde):#include <iostream>
//Directiva de utilização do espaço nominativostd(a explicar mais tarde):using namespace std;
int main(){...//Aqui é onde se escreve o programa.}
Nota: Todas as frases
precedidas de // ou entre /* e */ são
comentários, sendo ignorados pelo compilador.
tipo nome = valor;//definição de uma variável.tipo nome(valor); //idem.
tipo nome; //definição de uma variável sem inicialização.
double y = 2.1; //definição de uma variável do tipodoubledenominadaye//com valor inicial 2,1.
int x; //definição de uma variável do tipointdenominadaxe//não inicializada (contém lixo).
x = 2; //atribuição do valor 2 à variávelx(não é uma inicialização).
| Tipo | Descrição | Gama de valores (típica) | Número de Bits (típico) |
|---|---|---|---|
bool |
valor booleano | true e false |
8 |
int |
número inteiro | -231 a 231-1
(-2147483648 a 2147483647) |
32 |
float |
número decimal
(com vírgula) |
1.17549435 × 10-38 a
3.40282347 × 1038 (e negativos) |
32 |
char |
caractere
(usa código ISO Latin1) |
Qualquer caractere. Exemplos: 'a', 'A', '1', '!', '*',
etc. |
8 |
short [int] |
número inteiro | -215 a 215-1 (-32768 a 32767) | 16 |
unsigned short [int] |
número inteiro positivo | 0 a 216-1 (0 a 65535) | 16 |
unsigned [int] |
número inteiro positivo | 0 a 232-1 (0 a 4294967295) | 32 |
long [int] |
número inteiro | a mesma que int |
32 |
unsigned long [int] |
número inteiro positivo | a mesma que unsigned int |
32 |
double |
número decimal
de precisão dupla |
2.2250738585072014 × 10-308
a
1.7976931348623157 × 10308 (e negativos) |
64 |
long double |
número decimal
de precisão tripla |
3.36210314311209350626e × 10-4932 a 1.18973149535723176502 × 104932 (e negativos) | 96 |
Notas:
char) são interpretados como números
inteiros em C++. Assim, quer em Linux sobre processadores Intel quer
no Windows NT, a gama dos códigos vai de -128 a 127, isto é,
os char são interpretados como números inteiros com
sinal.int podem ser escritos de uma forma
abreviada: os [] indicam a parte opcional na especificação
do tipo.long double
tem 64 bits.O resultado da execução das linhas acima é:
char caractere = 'a';++caractere; //o mesmo quecaractere = caractere + 1.cout << "O caractere seguinte é: " << caractere << endl;cout << "O seu código é: " << int(caractere) << endl;
Adicionou-se uma unidade ao código do caractere
O caractere seguinte é: b
O seu código é: 98
'a' (97)
de modo que a variável caractere passou a conter o código
do caractere 'b' (98).
Importante: Isto é
válido porque, no código usado em Linux (ASCII), as letras
do alfabeto possuem códigos sucessivos (quer em maiúsculas
quer em minúsculas).
(Experimente fazer o mesmo para o caractere 'z' ou para o caractere
'Z'
e veja o resultado.)
'a' //do tipochar, representa o código do caractere 'a'.100 //do tipoint, valor 100 (em decimal).100.0 //do tipodouble(e nãofloat).100.0F //do tipofloat.100.0L //do tipolong double.1.3e230 //do tipodouble, valor 1,3 × 10230.
const
imediatamente após o tipo, o valor da variável passa a ser
fixo, não podendo ser modificado. Nesse caso deixa de se ter
uma variável: passa a ser uma constante. Como é
óbvio, as constantes têm de ser inicializadas durante a definição.
O nome genérico para variáveis e constantes é instância.
int const x = 2;char const cifrão = ´$´;
+(soma)-(subtracção)*(multiplicação)/(divisão inteira)%(resto da divisão inteira [módulo])
>(maior)<(menor)>=(maior ou igual)<=(menor ou igual)==(igual)!=(diferente)
notnegação (ou!)andconjunção (ou&&)ordisjunção (ou||)
Importante: Repare-se bem na diferença entre=(atribuição)+=(x += yé equivalente ax = x + y)-=(x -= yé equivalente ax = x - y)*=(x *= yé equivalente ax = x * y)/=(x /= yé equivalente ax = x / y)%=(x %= yé equivalente ax = x % y)
= (atribuição)
e == (comparação, igual).
Nota: Mais tarde se verá que as "equivalências" acima não são rigorosamente equivalentes...
Nota: Em rigor estas "equivalências" não são verdadeiras. Ver as folhas teóricas para mais pormenores.++(x++e++xsão equivalentes ax = x + 1)--(x--e--xsão equivalentes ax = x - 1)
Importante: Os operadores bit-a-bit devem ser utilizados apenas sobre valores de tipos aritméticos inteiros sem sinal.complnegação (ou~)bitandconjunção (ou&)bitordisjunção (ou|)xordisjunção exclusiva (ou^)<<(deslocamento para a esquerda [atenção! não confundir com a inserção num canal!])>>(deslocamento para a direita [atenção! não confundir com a extracção de um canal!])
cout)int a = 10; cout << "Vou escrever um número a seguir a esta frase: " << a << endl;
cin)Importante: Ao ser executada uma operação de leitura como acima, o computador interrompe a execução do programa até que seja introduzido algum valor no teclado.cin >> a;
if
e de selecção if elseif(expressão_booleana)
instrução_controlada1
else
instrução_controlada2 if(expressão_booleana) {
... // instruções a executar se a expressão booleana for
verdadeira.
} else {
... // instruções a executar se a expressão booleana for
falsa.
}ou, usando instruções compostas (ou blocos de instruções),
if(expressão_booleana)instrução_controladaSe a expressão booleana for falsa continua o programa.
//
if(expressão_booleana) {
... // instruções a executar
se a expressão booleana for verdadeira.
}
// Se a expressão booleana for falsa continua o programa.As instruções
if(x > 0)cout << "x é positivo." << endl;else {cout << "x é negativo ou zero (não-positivo)." << endl;}
if else podem ser encadeadas.
Por exemplo,
Mas nesse caso é usual usar uma indentação diferente para o código C++ de modo a deixar mais clara a sequência de instruções alternativas,
if(x > 0) {cout << "x é positivo." << endl;} elseif(x < 0)cout << " x é negativo " << endl;
Nota: Quando existe apenas uma instrução dentro de um dos blocos a executar podem ser omitidas as chavetas, como é o caso do
if(x > 0) {cout << "x é positivo." << endl;} else if(x < 0)cout << " x é negativo " << endl;
else e do segundo
if.
Nota: O bloco else
pode não existir, caso não se pretenda executar nenhuma instrução
quando a expressão booleana for falsa, como é o caso do segundo
if.
Importante: Por vezes pode
ser ambíguo a que if diz respeito um dado else.
A regra é que o else pertence ao if mais interior
(mais "próximo"). A indentação utilizada não
influencia a interpretação do compilador, embora possa induzir
o programador em erro. Por exemplo, o código
não faz o que é suposto, pois é equivalente a
if(x >= 0)if(x > 0)cout << "x é positivo." << endl;elsecout << "x é negativo." << endl;
Para que o código faça o que se pretendia é necessário envolver o
if(x >= 0) {if(x > 0)cout << "x é positivo." << endl;elsecout << "x é negativo." << endl;}
if mais interior em chavetas de modo a impossibilitar
a sua associação com o else, i.e.,
Nota: Uma instrução
if(x >= 0) {if(x > 0)cout << "x é positivo." << endl;} elsecout << "x é negativo." << endl;
if
sem else é sempre equivalente a uma instrução
if else
em que a instrução controlada pelo
else é
a instrução nula (que só possui o terminador
;).
Ou seja,
é equivalente a
if(x > 0)cout << "x é positivo" << endl;
if(x > 0)cout << "x é positivo" << endl;else;
whilewhile serve
para repetir a instrução instrução_controlada
enquanto
se verificar a condição dada pela expressão_booleana.while(expressão_booleana)
instrução_controladawhile(expressão_booleana)
{
instruções
}Importante: Uma instrução pode ser composta (bloco de instruções), i.e., uma sequência de instruções envolvida por chavetas.
int n = 11;int i = 0;while(i != n) {cout << i << ' ';++i;}
forfor serve,
normalmente, para repetir um conjunto de instruções um número
determinado de vezes.ou
for(inicialização; expressão_booleana; progresso)instrução_controlada
for(inicialização; expressão_booleana; progresso) {instruções}
Ciclo para mostrar no ecrã os inteiros de 0 a 9 (inclusive) construído de três formas diferentes.
while:
int i = 0;while(i != 10) {cout << i << ' ';++i;}cout << endl;
for:
ou
for(int i = 0; i != 10; ++i)cout << i << ' ';cout << endl;
int i = 0;for(; i != 10; ++i)cout << i << ' ';cout << endl;
gdb no editor XEmacsDebug do XEmacs (ou pressione <ctrl-c
d>) e indique o nome do ficheiro executável (o nome do executável
é o nome do ficheiro sem a extensão
.C).
Principais comandos do depurador:
(b)reak main: pára a execução na primeira
linha do programa para podermos ver a sua execução linha
a linha (para "traçar" o programa). É possível
inserir pontos de paragem (breakpoints) noutros locais do programa
usando o comando b número_da_linha ou o botão
Stop.(r)un: executa o programa desde o início até
ao fim ou até ao primeiro ponto de paragem encontrado.(n)ext (ou botão Step Over): executa a próxima
linha de programa (a que está assinalada).(s)tep (ou botão Step Into): entra dentro
da rotina que está prestes a ser executada.(c)ontinue: continua a execução do programa
até ao fim ou até ao próximo ponto de paragem.(p)rint nome_de_uma_variável (ou botão p=):
mostra o valor actual de uma variável.(disp)lay nome_de_uma_variável: mostra o valor
da variável indicada após cada comando dado ao depurador.(q)uit : Termina a execução do depurador.