Buscar

Trabalho CeC++

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO
 Centro de Tecnologias e Ciências
 Faculdade de Engenharia
 Departamento de Engenharia de Sistemas e Computação
 
Rachel Reuters da Silva
Características das Linguagens de Programação: C/C++
Rio de Janeiro
2013
Rachel Reuters da Silva
Características das Linguagens de Programação: C/C++
	Trabalho apresentado ao Curso de Engenharia Elétrica, da Universidade do Estado do Rio de Janeiro, como requisito parcial para a disciplina de Características das Linguagens de Programação.
Orientador: Prof. Dr.Oscar Farias
 Rio de Janeiro
2013
Autorizo, apenas para fins acadêmicos e científicos, a reprodução total ou parcial desta dissertação. 
 
 Assinatura: Data: 
 ___________________________________________ _________
 
Rachel Reuters da Silva
 Características das Linguagens de Programação: C/C++
	
	Trabalho apresentado ao Curso de Engenharia Elétrica, da Universidade do Estado do Rio de Janeiro, como requisito parcial para obtenção do grau da disciplina Características das Linguagens de Programação.
Aprovado em: ________________________________________________
Banca Examinadora: ___________________________________________
 ___________________________________________
 Prof. Dr. Oscar Farias
 Faculdade de Engenharia da UERJ
 
 Rio de Janeiro
2013
RESUMO
Este trabalho objetiva uma análise abrangente das características de uma das mais importantes Linguagens de Programação da atualidade: C/C++. Serão estudados nesta apresentação os seguintes tópicos: Evolução Histórica, Paradigmas de Programação, Sintaxe e Semântica, Variáveis, Expressões, Comandos, Tipos de Dados, Escopo, Abstração de Dados e Tratamento de Exceções. 
PALAVRAS-CHAVE: C ; C++ ; Programação.
1	INTRODUÇÃO
Esta pesquisa tem a finalidade de apresentar uma ampla visão de C/C++ que, de acordo com o indicador de popularidade das Linguagens de Programação TIOBE [ranking publicado no mês de Novembro do ano de 2012 no site http://www.tiobe.com], estão entre as cinco mais utilizadas no mundo.
Inicialmente, o principal objetivo da linguagem C era o desenvolvimento do Sistema Operacional Unix [http://www.cprogramming.com/]. Foi base para diversas outras linguagens como C++, que será abordada nesse trabalho, C# entre outras. 
2	REFERÊNCIA HISTÓRICA 
2.1	Contexto Histórico de C 
	A linguagem C foi inventada e implementada pela primeira vez por Dennis Ritchie em uma máquina DEC PDP-11, em 1972, usando o sistema operacional UNIX. A linguagem C é o resultado do processo de desenvolvimento iniciado com a linguagem BCPL, que também influenciou a invenção da linguagem B. Em 1973, com a adição do tipo struct, a maioria do núcleo do Unix foi reescrito em C. 
Em 1978, Brian Kernighan e Dennis Ritchie publicaram a primeira edição do livro “The C Programming Language” que serviu como uma especificação informal da linguagem, e ainda hoje é o livro mais importante de C.
Ao fim da década de 1970, a linguagem C começou a substituir a linguagem BASIC como a linguagem de programação de microcomputadores mais usada. E durante a década de 1980, foi adaptada para uso no PC IBM, e a sua popularidade começou a aumentar significativamente.
Flexível e poderosa, a linguagem C tem sido utilizada na criação de alguns dos mais importantes produtos de software dos últimos anos. Porém, a linguagem encontra seus limites quando o tamanho de um projeto ultrapassa um tamanho de programa entre 25.000(vinte e cinco mil) e 100.000 (cem mil) linhas, tornando-se problemático o gerenciamento, tendo em vista que é difícil compreendê-lo como um todo. 
2.2	C++, a evolução de C
Para resolver o problema de tamanho extensivo e dificuldade de gerenciamento, Bjarne Stroustrup, em 1980, trabalhando nos laboratórios da Bell®, em Murray Bill, New Jersey, acrescentou várias extensões à linguagem C e chamou inicialmente esta nova linguagem de “C com classes”. Em 1983, o nome mudou para C++.
O objetivo principal de Bjarne era implementar uma versão distribuída do núcleo Unix. Alguns dos desafios incluíam simular a infraestrutura da comunicação entre processos num sistema distribuído ou de memória compartilhada e escrever drivers para tal sistema. A linguagem Simula 67 possuía características bastante úteis para o desenvolvimento de software, mas era muito lenta para uso prático. Bjarne começou a acrescentar elementos do Simula 67 no C, especialmente os recursos de criação e manipulação de objetos. Outras linguagens também serviram de inspiração para o nascimento de C++, entre elas ALGOL 68, Ada, CLU e ML.
 Em 1985 foi lançada a primeira edição do livro “The C++ Programming Language”, contendo referências para a utilização da linguagem, já que ainda não era uma norma oficial. Em 1990 foi lançado o livro “The Annotated C++ Reference Manual”, que foi base para o futuro padrão. 
	
	
3	AMBIENTE DE PROGRAMAÇÃO
3.1	IDE: DevC++
	Dev-C++® é um Ambiente de Desenvolvimento Integrado para programação na linguagem C/C++. Ele usa a Mingw do GCC (GNU Compiler Collection®) como seu compilador. O programa cria executáveis nativos no Win32, console ou GUI. Dev-C++ também pode ser usado juntamente com o Cygwin. Dev-C++ é gratuito e de código aberto e é totalmente escrito em Delph®. [http://www.baixaki.com.br/download/dev-c-.htm]
	Foi escolhida esta ferramenta devido a sua maior praticidade de instalação e configuração no Sistema Operacional em execução, Windows. Também foram testados: Eclipse-cpp-Juno® , CodeBlocks®, Netbeans® e MinGW Developer Studio®.
3.2	Instalando e criando um novo projeto com DevC++
Ao instalar a ferramenta, selecionar a opção FULL, como mostra a Figura 1 abaixo.
Figura 1
Concluindo a instalação, selecionar a opção executar Dev-C++® como mostra a Figura 2.
Figura 2
A IDE irá ser carregada, como mostra a Figura 3 abaixo.
Figura 3
Para iniciar um novo Projeto, selecionar a opção File -> New -> Project , como mostra a Figura 4 abaixo.
Figura 4
 Em seguida, na nova janela, selecionar Empty Project, criando um nome para ele e escolher a opção de linguagem desejada (C ou C++), como mostrado na figura 5.
Figura 5
Para criar um novo arquivo dentro do Projeto criado, selecione com o botão direito no Projeto e escolha New File, como mostrado na Figura 6 abaixo.
Figura 6
3.3	Compilando e Executando no DevC++
O primeiro programa, como de costume, será o Hello World em C:
#include <stdio.h>
int main()
{
printf("Hello World");
 system("pause");
 return 0;
}
Após digitar o código, para executá-lo, é necessário, primeiramente, compila-lo, como mostra a Figura 7 abaixo. 
Figura 7
Em seguida será preciso salvar o arquivo como mostra a Figura 8.
Figura 8
Em seguida, o compilador irá informar que o seu programa foi compilado sem erros e está pronto para ser executado, como mostra a Figura 9 abaixo.
Figura 8
Finalmente, o programa está pronto para ser executado, selecionando a opção Run. O programa foi executado, como mostrado na Figura 9 abaixo.
Figura 9
4	PARADIGMAS DE PROGRAMAÇÃO
	“A classificação de linguagens em paradigmas é uma consequência de decisões de projeto que têm impacto na forma segundo a qual uma aplicação real é modelada do ponto de vista computacional.” (SILVA Edilberto. Paradigmas da Programação.) 
4.1	Paradigmas característicos de C
	A Linguagem C constitui-se dos seguintes paradigmas: estruturado, imperativo e procedural.
4.1.1	Programação Estruturada de C
Na programação estruturada, a estruturação está baseada em um pequeno número de estruturas de controle:
• controle sequencial;
• controle de decisão;
• controle de seleção múltipla;
• controle de iteração do tipo enquanto-faça;
• controle de iteração do tipo repita-enquanto.
Pode-se estabelecer o Princípioda Programação Estruturada (Hehl, 1986):“Qualquer algoritmo pode ser escrito combinando-se blocos formados pelas estruturas de controle acima”. (MARTHA, Luiz Fernando. Fundamentos de Programação Estruturada em C)
Um exemplo de decisão em C:
if (a > b)
{
 z = a;
}
else
{
 z = b;
}	
4.1.2	Programação Imperativa de C
	Programação imperativa descreve a computação como ações, enunciados ou comandos que mudam o estado (variáveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos são uma sequência de comandos para o computador executar.
Exemplo em C:
float potencia(double val, unsigned pow)
{ double ret_val = 1.0;
 unsigned i;
 for(i = 0; i < pow; i++)
 ret_val *= val;
return(ret_val);
}
4.1.3	Programação Procedural de C
	A Programação Procedural constitui-se de chamadas a procedimentos, rotinas, subrotinas, métodos, ou funções.
Exemplo em C:
#include <stdio.h>
int main()
{
	potencia(5, 3)
 return 0;
}
4.2	Paradigmas característicos de C++
A Linguagem C++ foi desenvolvida para aceitar diversos paradigmas. O seu diferencial com relação a Linguagem C é permitir a Programação Orientada a Objetos (POO). 
4.2.1	Programação Orientada a Objetos em C++
A programação orientada a objetos implementa um conjunto de classes que definem os objetos presentes no software. Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.
Exemplo em C++:
class Passaro 
{
public:
 virtual void MostraNome()
 {
 std::cout << "um passaro";
 }
 virtual ~Passaro() {}
};
 
class Cisne: public Passaro 
{ 
public:
 void MostraNome()
 {
 std::cout << "um cisne"; 
 }
};
 
int main()
{
 Passaro* passaro = new Cisne;
 
 passaro->MostraNome(); 
 
 delete passaro;
}
5	SINTAXE E SEMÂNTICA
5.1	Escopo de Variáveis
Escopo é o nível em que um dado pode ser acessado. É um contexto que delimita os valores e expressões as quais estão associados. O tipo de escopo vai determinar quais tipos de entidades este pode conter e como estas são afetadas, em outras palavras, a sua semântica. Normalmente, o escopo é utilizado para definir o grau de ocultação da informação, isto é, a visibilidade e acessibilidade às variáveis em diferentes partes do programa. 
Tanto C quanto C++ são Case-Sensitive, isto é, há diferença entre maiúsculas e minúsculas.
5.1.1	Escopo de C
	As variáveis em C podem ser declaradas basicamente de três maneiras: dentro de uma função, fora de uma função, e como parâmetro de uma função. Essas maneiras de declaração fazem com que as variáveis sejam chamadas de locais, globais ou parâmetros formais, respectivamente. 
5.1.2	Escopo de C++
	Um diferencial da Linguagem C++ é a implementação do operador de escopo. É permitido declarar variáveis de escopo global e local com mesmo nome, para isso utiliza-se o operador de resolução de escopo simbolizado por :: 
Exemplo:
#include<iostream.h>
#include<conio.h>
int x=3;		// variável de escopo global
	
int main()
{
 int x=0;		// variável de escopo local
 cout << "utilização da variável de escopo global: "<< ::x << endl;
 cout << "utilização da variável de escopo local : "<< x << endl;
return 0;
}
5.2	Palavras Reservadas
5.2.1	Em C
A lista de palavras reservadas está definida na Tabela 1 abaixo:
	auto
	double
	int
	long
	break
	else
	long
	switch
	case
	enum
	register
	typedef
	char
	extern
	return
	union
	const
	float
	short
	unsigned
	continue
	for
	signed
	void
	default
	goto
	sizeof
	volatile
	do
	if
	static
	while
Tabela 1
5.2.2	Em C++
A lista de palavras reservadas está definida na Tabela 2 abaixo:
	alignas (since C++11)
alignof (since C++11)
and
and_eq
asm
auto(1)
bitand
bitor
bool
break
case
catch
char
char16_t(since C++11)
char32_t(since C++11)
class
register
reinterpret_cast
wchar_t
while
virtual
void
	enum
explicit
export
extern
false
float
for
friend
goto
if
inline
int
long
mutable
namespace
new
xor
xor_eq
volatile
unsigned
using(1)
union
	return
short
signed
sizeof
static
static_assert(since C++11)
static_cast
struct
switch
template
this
thread_local(since C++11)
throw
true
try
typedef
typeid
typename
or_eq
private
protected
public
	compl
const
constexpr(since C++11)
const_cast
continue
decltype(since C++11)
default(1)
delete(1)
do
double
dynamic_cast
else
noexcept(since C++11)
not
not_eq
nullptr (since C++11)
operator
or
Tabela 2
5.3	Tipos de Dados Primitivos
5.3.1	Em C
	Os tipos básicos de dados em C são: char, int, float, double e void, como mostrado na Tabela 3, com seus respectivos intervalos e tamanhos. Uma característica peculiar da Linguagem C é de não possuir um tipo string. Para utilizar strings em C é necessário declarar uma variável como sendo um vetor de caracteres. Outra característica incomum em C é que não possui tipo boolean, para criar uma variável lógica basta associar os valores de 0 ou 1 para ela.
Tabela 3
5.3.2	Em C++
	Os tipos básicos de dados em C++ são: char, int, float, double, void, boolean e wchar_t, como mostrado na Tabela 4, com seus respectivos tamanhos e descrições. 
	Tipo
	Descrição
	Tamanho
	bool
	Valores Aceitos true ou false
	1 byte ou 8 bits
	char
	Intervalos de -128 a 127
	1 byte ou 8 bits
	int
	Intervalos de -2.147.483.648 a 2.147.483.647
	4 bytes ou 32 bits
	float
	Intervalos de 1,2e-38 até 3,4e+38.
	4 bytes ou 32 bits
	double
	Intervalos de 2,2e-308 a 1,8e+308
	8 bytes ou 64 bits
	long
	Intervalos de -2.147.483.648 a 2.147.483.647
	4 bytes ou 32 bits
	wchat_t
	Intervalos de -32.768 a 32.767
	4 bytes ou 32 bits
Tabela 4
#include <iostream.h>
#include <stdlib.h>
int main(){
 cout << "bool " << sizeof(bool) << endl;
 cout << "char " << sizeof(char) << endl;
 cout << "int " << sizeof(int) << endl;
 cout << "float " << sizeof(float) << endl; 
 cout << "long " << sizeof(long) << endl;
 cout << "double " << sizeof(double) << endl;
 cout << "wchar_t " << sizeof(wchar_t) << endl;
 return 0;}
5.3.3	Modificadores de tipos
Com a exceção do tipo void os tipos básicos de dados podem ter vários modificadores precedendo-os. Um modificador é usado para alterar o significado do tipo base para adequá-los melhor às necessidades da situação. São eles: signed, unsigned, long, short. As combinações possíveis são mostradas na Tabela 5 abaixo.
	Sequência
	Bytes ocupados
	Faixa (ou intervalo)
	short int
signed int
signed short int
wchat_t
signed wchar_t
	
2
	
-32.768 a 32.767
	unsigned short int
unsigned wchar_t
	2
	0 a 65.535
	int
long int
signed long int
	
4
	
-2.147.483.648 
até 2.147.483.647
	unsigned int
unsigned long int
	4
	0 a 4.294.967.295
	char
signed char
	1
	-128 a 127
	unsigned char
	1
	0 a 255
	bool
	1
	true ou false
	float
	4
	1,2e-38 a 3,4e+38
	double
long float
	8
	2,2e-308 a 1,8e+308
Tabela 5
5.4	Regras de Precedência e Associatividade de C/C++
As Linguagens possuem uma série de regras de precedência de operadores, para que o compilador saiba decidir corretamente qual operador será executado primeiro, em uma expressão com vários operadores. Essas regras seguem basicamente as regras algébricas. Além disso, é possível o uso de parênteses para forçar o compilador a executar uma parte de uma expressão antes das outras.
Além das regras de precedência, existem também certas regras de associatividade para determinados operadores que possuem o mesmo nível de precedência, como por exemplo os operadores de divisão e multiplicação. Quando o compilador encontra dois operadores com o mesmo nível de precedência em uma expressão, ele verifica se estes operadores possuem associatividade esquerda-para-direita ou direita-para-esquerda. Associatividade esquerda-para-direita significa que se estes dois operadores agirem sobre um mesmo operando, o operador da esquerda será aplicado primeiro. Da mesma forma, associatividade direita-para-esquerda significa que na mesma situação, o operador da direitaserá aplicado primeiro. Por exemplo, os operadores divisão e multiplicação possuem associatividade esquerda-para-direita.
As regras citadas acima estão relacionadas na Tabela 6 abaixo.
	Precedência
	Operador
	Associatividade
	Explicação
	1
	(expressão)
	
	Agrupamento
	2
	()
	E-D
	Chamada de função
	
	++
	
	Operador de incremento, pósfixado
	
	--
	
	Operador de decremento, pósfixado
	3 (todos unários)
	!
	D-E
	Negação lógica
	
	~
	
	Negação Bitwise
	
	+
	
	Mais unário (sinal positivo)
	
	-
	
	Menos unário (sinal negativo)
	
	++
	
	Operador de incremento, pré-fixado
	
	--
	
	Operador de decremento, pré-fixado
	
	&
	
	Endereço
	
	*
	
	Conteúdo de endereço
	
	()
	
	Modelador de tipo "(tipo) nome"
	
	sizeof
	
	Tamanho em bytes
	
	new
	
	Alocação Dinâmica de memória
	
	new []
	
	Alocação Dinâmica de matriz
	
	delete
	
	Liberação Dinâmica de memória
	
	delete []
	
	Liberação Dinâmica de matriz
	4 (todos binários)
	*
	E-D
	Multiplicação
	
	/
	
	Divisão
	
	%
	
	Resto de divisão
	5 (todos binários)
	+
	E-D
	Adição
	
	-
	
	Subtração
	6
	<<
	E-D
	Shift para esquerda
	
	>>
	
	Shift para direita
	7
	<
	E-D
	Menor que
	
	<=
	
	Menor que ou igual a
	
	>=
	
	Maior que ou igual a
	
	>
	
	Maior que
	8
	==
	E-D
	Igual a
	
	!=
	
	Não igual a
	9 (binário)
	&
	E-D
	Bitwise AND
	10
	^
	E-D
	Bitwise XOR (OR exclusivo)
	11
	|
	E-D
	Bitwise OR
	12
	&&
	E-D
	AND Lógico
	13
	||
	E-D
	OR Lógico
	14
	=
	D-E
	Atribuição simples
	
	*=
	
	Multiplicação e atribuição
	
	/=
	
	Dividir e atribuição
	
	%=
	
	Achar resto da divisão e atribuição
	
	+=
	
	Adição e atribuição
	
	-=
	
	Subtração e atribuição
	
	&=
	
	Bitwise AND e atribuição
	
	^=
	
	Bitwise XOR e atribuição
	
	|=
	
	Bitwise OR e atribuição
	
	<<=
	
	Shift para esquerda e atribuição
	
	>>=
	
	Shift para direita e atribuição
	15
	:?
	D-E
	Condicional
	16
	,
	E-D
	Combina duas expressões em uma só
Tabela 6
 5.5	Códigos de Barra Invertida
As linguagens C e C++ fornecem constantes-caractere com a barra invertida, úteis para caracteres que não são facilmente inseridos através do teclado. Estes códigos são mostrados na Tabela 7 abaixo.
	Código
	Significado
	Código
	Significado
	\b
	Retrocesso
	\f
	Alimentação de formulário
	\n
	Nova linha
	\r
	Retorno de carro
	\t
	Tabulação horizontal
	\"
	Aspas
	\'
	Apóstrofo
	\0
	Nulo
	\\
	Barra invertida
	\v
	Tabulação vertical
	\a
	Sinal sonoro
	\N
	Constante octal
	\xN
	Constante hexadecimal
	
	
	\v 
	Tabulação vertical 
	
	
Tabela 7
 5.6	Chamada por Valor X por Referência
A diferença entre chamada por valor e chamada por referência é que, usando a chamada por valor, as funções recebem uma cópia do valor de um parâmetro. Já na chamada por referência, as funções recebem o endereço de memória da variável, isto é, as funções podem alterar o valor armazenado na posição de memória específica. 
Em C, há apenas a chamada por valor. Já em C++, foi implementada a chamada de função por referência.
5.7	Bibliotecas de Execução
5.7.1	Bibliotecas de C
A Linguagem C consiste de 24 (vinte e quatro) bibliotecas, cada uma contendo uma ou mais declarações de funções, tipos de dados e macros. Em comparação com linguagens como Java ®, esta biblioteca padrão é minúscula. Ela fornece um conjunto básico de operações matemáticas, manipulação de cadeias de caracteres, conversão de tipos de dados e entrada e saída de arquivo e da tela. Não contém um conjunto padrão de containers como a biblioteca padrão do C++ (parte chamada Standard Template Library), nem suporta interface gráfica do utilizador. 
	Biblioteca
	Descrição
	<assert.h>
	Macro para ajudar na detecção de erros lógicos e outros tipos de erros em versões de depuração de um programa.
	<complex.h>
	Conjunto de funções para manipular números complexos.
	<ctype.h>
	Funções usadas para classificar caracteres pelo tipo ou para converter entre caixa alta e baixa independentemente da codificação.
	<errno.h>
	Teste de códigos de erro reportados pelas funções de bibliotecas.
	<fenv.h>
	Controle de ponto flutuante.
	<float.h>
	Constantes de propriedades específicas de implementação da biblioteca de ponto flutuante, como a menor diferença entre dois números de ponto flutuante distintos (_EPSILON), a quantidade máxima de dígitos de acurácia (_DIG) e a faixa de números que pode ser representada (_MIN, _MAX).
	<inttypes.h>
	Conversão precisa entre tipos inteiros.
	<iso646.h>
	Programação na codificação de caracteres ISO 646.
	<limits.h>
	Constantes de propriedades específicas de implementação da biblioteca de tipos inteiros, como a faixa de números que pode ser representada (_MIN, _MAX).
	<locale.h>
	Constantes para setlocale() e assuntos relacionados.
	<math.h>
	Funções matemáticas comuns em computação.
	<setjmp.h>
	Macros setjmp e longjmp, para saídas não locais.
	<signal.h>
	Tratamento de sinais.
	<stdarg.h>
	Acesso dos argumentos passados para funções com parâmetro variável.
	<stdbool.h>
	Definição do tipo de dado booleano.
	<stdint.h>
	Definição de tipos de dados inteiros.
	<stddef.h>
	Diversos tipos e macros úteis.
	<stdio.h>
	Manipulação de entrada/saída.
	<stdlib.h>
	Diversas operações, incluindo conversão, geração de números pseudo-aleatórios, alocação de memória, controle de processo, sinais, busca e ordenação.
	<string.h>
	Tratamento de cadeia de caracteres.
	<tgmath.h>
	Funções matemáticas.
	<time.h>
	Conversão de tipos de dado de data e horário.
	<wchar.h>
	Manipulação de caractere wide, usado para suportar diversas línguas.
	<wctype.h>
	Classificação de caracteres wide.
Tabela 7
5.7.2	Bibliotecas de C++
A biblioteca padrão do C++ fornece vários containers genéricos, funções que utilizam e manipulam tais containers, funções-objeto, cadeias de caracteres e streams genéricos, suporte para algumas facilidades da linguagem e funções de uso geral, como funções matemáticas.
Os containers genéricos são uma implementação de elementos conhecidos em estrutura de dados. Diferentes containers compartilham uma mesma interface, o acesso é o mesmo. 
Ela também incorpora a biblioteca padrão do C. No entanto, as biblioteca padrão do C sofreram uma adequação para pertencerem também ao espaço de nomes std: retirou-se o sufixo .h dos nomes dos arquivos de cabeçalho, e adicionou-se o prefixo c para indicar que pertence à linguagem C.
A lista de Containers está relacionada na Tabela 9 abaixo.
	Cabeçalho
	Descrição
	<bitset>
	manipulação de arranjo de bits, algo parecido com vector<bool> 
	<deque> 
	manipulação de lista duplamente encadeada
	<list> 
	manipulação de lista simplesmente encadeada
	<map> 
	manipulação de conjunto associativo ordenado
	<queue> 
	manipulação de lista FIFO
	<set> 
	manipulação de conjunto
	<stack> 
	manipulação de lista LIFO
	<vector> 
	manipulação de arranjo
Tabela 9
A lista de Uso Geral está relacionada na Tabela 10 abaixo.
	Cabeçalho
	Descrição
	<string> 
	manipulação de cadeia de caracteres
	<algorithm> 
	algoritmos genéricos
	<functional> 
	 funções-objeto
	<iterator> 
	declaração de iterador
	<locale> 
	manipulação de diversas convenções culturais do utilizador, como a representação de números, moeda e datas, para efeitos de internacionalização
	<memory> 
	funções para o gerenciamento de memória
	<stdexcept> 
	especialização de <exception>, fornece relatórios sobre exceções
	<utility> 
	operações com pares de elementos (comparação e construção)
Tabela 10
A lista de Streams e Input/Output estão relacionados na Tabela 11 abaixo.
	Cabeçalho
	Descrição
	<fstream> 
	manipulação de fluxo de dados em arquivo
	<ios> 
	declaração mais geral de fluxo de dados
	<iostream> 
	manipulação de fluxo de dados padrão do sistema (entrada padrão, saída padrão e saída de erros padrão)
	<iosfwd> 
	declaração dos fluxos de dados presentes na linguagem
	<iomanip> 
	manipulação da apresentação e do processamento de fluxos de dados
	<istream> 
	manipulação de entrada de dados
	<ostream> 
	manipulação de saída de dados
	<sstream> 
	manipulação de fluxo de dados em cadeias de caracteres
	<streambuf> 
	manipulaçãode buffers de fluxo de dados
Tabela 11
A lista de Funcionalidades numéricas está relacionada na Tabela 12 abaixo.
	Cabeçalho
	Descrição
	<complex> 
	manipulação de número complexo
	<numeric> 
	operações com conjuntos numéricos
	<valarray> 
	arranjo de valores mutáveis
Tabela 12
A lista de Suporte está relacionada na Tabela 13 abaixo.
	Cabeçalho
	Descrição
	<exception> 
	manipulação de exceção
	<limits> 
	manipulação de limites numéricos dos tipos embutidos na linguagem
	<new> 
	manipulação de alocação e desalocação de memória
	<typeinfo> 
	auxílio para o RTTI do C++
Tabela 13
5.8	Comandos especiais
5.8.1	Especificador de Formato
	Ao imprimir na tela ou capturar de um output, é necessário uma prévia especificação do tipo a qual está se manipulando. A Tabela 14 abaixo relaciona os comandos:
	Especificador
	Valor
	%d
	inteiro
	%o
	inteiro em formato octal
	%x
	inteiro em formato hexadecimal
	%X
	
	%u
	unsigned int
	%ld
	long int
	%f
	float
	%c
	char
	%e
	float em formato exponencial
	%E
	
	%g
	float. C escolhe melhor  maneira de exibição entre normal e exponencial
	%G
	
	%s
	string
	%p
	endereço de um ponteiro
	%n
	quantos caracteres a função printf exibiu
Tabela 14
5.8.2	Entrada e saída de dados em C
A saída de dados é proporcionada pela função printf. Ela faz parte do arquivo de cabeçalho stdio.h, assim esta biblioteca deve ser incluída no programa para a utilização desta função.
#include <stdio.h>
int main()
  { 	 int n=10;
        printf("O valor de n é %d\n",n);
	return 0;
 }
A entrada de dados é feita com a função scanf. Sua sintaxe é: scanf("EF",&VARIÁVEL); onde EF é um especificador de formato e VARIÁVEL é variável onde o dado entrado será armazenado.
#include <stdio.h> 
int main()
  {
    int n;
    scanf("%d",&n);
    printf("O número é: %d \n",n);
    return 0;
  }
5.8.3	Entrada e saída de dados em C++
A saída de dados é proporcionada pela função cout<<. Ela faz parte do arquivo de cabeçalho <iostream>, assim esta biblioteca deve ser incluída no programa para a utilização desta função.
#include <iostream>
using namespace std;
int main()
{
  cout << "Imprimindo o famoso HELLO WORLD!!!"<<endl;
 return 0;
}
A entrada de dados é proporcionada pela função cin>>. Ela faz parte do arquivo de cabeçalho <iostream>, assim esta biblioteca deve ser incluída no programa para a utilização desta função.
#include <iostream>
using namespace std;
int main()
{
  int Num1;
  cin >> Num1;
 cout << "o número é: "<<Num1<<endl;
  return 0;
}
Comandos IF e Else
O IF é um desvio condicional, isto é, é uma estrutura de fluxo onde o programa analisa uma condição e caso esta condição seja verdadeira executa alguns comandos, caso esta condição seja falsa executa os comandos do ELSE. Tanto em C como em C++ é realizada da mesma forma.
#include <stdio.h>
int main ()
{
	int num;
	printf ("Digite um numero: ");
	scanf ("%d",&num);
	if (num==10)
      	{
      	 printf ("\n Voce acertou!");
      	}
	else 
      	{
      	printf ("\n Voce errou!");
      	}
	return 0;
}
5.8.5	Switch e Case em C e C++
	Tanto em C quanto em C++ o uso do switch case é equivalente. É uma forma de estrutura seletiva. Dentro dos switch há o case. Ou seja, é quase um if com várias possibilidades, mas com diferenças:
1ª diferença: Os cases não aceitam operadores lógicos. Portanto, não é possível fazer uma comparação. Isso limita o case a apenas valores definidos.
2ª diferença: O switch executa seu bloco em cascata. Ou seja, se a variável indicar para o primeiro case e dentro do switch tiver 5 cases, o switch executará todos os outros 4 cases a não ser que utilizemos o comando para sair do switch: BREAK. 
#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
 int a, b, c, operacao;
 cout <<"Digite o 1o valor: ";
 cin >> a;
 cout <<"Digite o 2o valor: ";
 cin >> b;
 cout <<"Que operacao deseja realizar?\n \t1. Adicao\t2.Subtracao\t3.Multiplicacao\t4.Divisao\n\n=>"; 
 cin >> operacao;
 switch (operacao){
 case 1:
 c=a+b;
 cout <<a<<" + "<<b<<" = "<<c<<"\n\n";
 break;
 case 2:
 c=a-b;
 cout <<a<<" - "<<b<<" = "<<c<<"\n\n";
 break;
 case 3:
 c=a*b;
 cout <<a<<" * "<<b<<" = "<<c<<"\n\n";
 break;
 case 4:
 c=a/b;
 cout <<a<<" / "<<b<<" = "<<c<<"\n\n";
 break;
 }
 return 0;
}
Estrutura de Repetição FOR em C e C++
Tanto em C e C++ o comando FOR é implementado da mesma maneira. O comando FOR precisa de uma variável para controlar os loops (voltas), essa variável deverá ser inicializada e forma de incremento ou decremento. Ou seja, for precisa de três condições:
FOR (inicialização ; até quando irá ser executado ; incremento ou decremento).
#include <iostream>
#include <cstdlib>
using namespace std;
int main (void)
{
 int x;
 for (x=1; x<=100; x++)
 cout << x <<"\t"; 
return 0;
}
Estrutura de Repetição WHILE em C e C++
Uma outra forma de iteração em C/C++ é o WHILE. O While executa uma comparação com a variável. Se a comparação for verdadeira, ele executa o bloco de instruções ou apenas a próxima linha de código logo abaixo.
#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
 int par=0;
 cout <<"Os numeros pares de 0 a 100 sao:\n\n";
 while (par<=100)
 {
 cout <<par<<"\t";
 par+=2; //o mesmo que par=par+2
 }
 system ("pause");
 return 0;
}
5.9	Criando Funções em C e C++
	Funções são usadas para criar pequenos pedaços de códigos separados do programa principal. Funções são como variáveis, então, cria-se uma função indicando o tipo de retorno (saída) que será int, float, etc... nomeia-se a função em seguida os argumentos. 
Tipo de Retorno Nome da Função (Argumentos) { }
#include <iostream>
#include <cstdlib>
using namespace std;
void mensagem () 
{
 cout <<"Ola! Eu sou uma funcao.\n";
}
int main ()
{
 mensagem ();
 return 0;
}
5.10	Endereçamento de memória
	Tanto em C como em C++, o endereçamento de memória é realizado através de ponteiros. Quando declaramos uma variável e executamos o programa, o sistema operacional se encarrega de alocar o espaço necessário para o tipo de dado e "marca" aquele espaço de memória com um nome, que é o nome da variável. O papel do ponteiro é guardar este endereço.
#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
 int var1 = 100;
 int *ptr1;
 ptr1 = &var1;
 cout << "O valor contido no endereco de memoria ";
 cout << ptr1 <<" e "<< *ptr1 << endl;
 return 0;
}
5.11	Structs em C
	Um registro é uma coleção de várias variáveis, possivelmente de tipos diferentes. Na linguagem C, registros são conhecidos como structs .
struct dma {
 int dia;
 int mes;
 int ano; 
 }; 
 struct dma x; //Cria uma struct dma chamada x
 struct dma y; //Cria uma struct dma chamada y
6	PROGRAMAÇÃO ORIENTADA A OBJETOS: C++
6.1	Declarando uma classe
Uma classe é um molde a partir do qual pode-se criar abstrações, isto é, objetos. Em C++ quando não se especifica o modificador de acesso, a variável é tomada como private por default. Dentro de uma classe pode-se definir diversos modos de visibilidade de variáveis e funções. São eles:
private 
public 
protected 
class Bola
{
int x, y;
BallColor color;
int raio;
}
6.2	Criando métodos e construtores
	Para uma maior segurança do interior da classe, utiliza-se o encapsulamento. Para modificar os atributos desta classe é necessário criar métodos e para inicializar uma instância desta mesma classe usa-se um construtor. Todos os métodos, os construtores e o destrutor devem ser públicos. 
Os construtores são métodos que devem possuir o mesmo nome da classe e são chamados sempre que um novo objeto da classe é criado. 
class Bola
{
int x, y;
string color;
int raio;
 
 public: 
 Bola (int x1, int y1, string c, int r)
 {
 x = x1; 
 y = y1; 
 color = c;
 raio = r;
 }
voidmove(int x_step, int y_step)
 {
 x += x_step;
 y += y_step;
 }
int getX()
 {
 return x;
 }
int getY()
 {
 return y;
 }
 
string getColor()
 {
 return color;
 }
int getRaio()
 {
 return raio;
 }
void setColor(BallColor c)
 {
 color = c;
 }
void setRaio(int r)
 {
 raio = r;
 }
}
6.3	Instanciando uma classe e chamando métodos
A criação de objetos é o processo de criar a estrutura lógica dos mesmos na memória. Neste momento todo o processo de construção dos objetos é efetivado. Assim, toda vez que declaramos um objeto estamos instanciando-o, ou seja, estamos criando uma instância da classe. 
Ao realizar uma chamada a um método precisa informar o nome do objeto a que está se fazendo referência e especificar os parâmetros exigidos pelo método.
int main()
{
Bola Ball(2,2,"verde",1);
cout << " raio: "<<Ball.getRaio()<<endl;
 
return 0;
}
6.4	Palavra reservada THIS
Em todo método não static, a palavra reservada this é um ponteiro para o objeto sobre o qual o método está executando. Todos os métodos de uma classe são sempre chamados associados a um objeto. Durante a execução de um método, os campos do objeto são manipulados normalmente, sem necessidade de referência ao objeto.
struct A { 
 int i; 
 A& inc(); 
}; 
A& A::inc() 
{ 
 i++; 
 return *this; 
} 
int main() 
{ 
 int j;
 A obj1, obj2; 
 obj1.i = 0; 
 obj2.i = 100; 
 for (j=0; j<10; j++) 
 printf("%d\n", (obj1.inc().i)); 
 
 system ("pause");
 return 0;
}
6.5	Herança
Herança é o recurso que torna o conceito de classe mais poderoso. Em C++, o termo herança somente se aplica às classes. Uma herança permite que se construa e estenda continuamente classes desenvolvidas anteriormente, sem nenhum limite. Começando da classe mais simples, pode-se derivar classes cada vez mais complexas.
class Caixa { 
 public: 
 int altura, largura; 
 void Altura(int a) 
 void Largura(int l) 
}; 
class CaixaColorida : public Caixa { 
 public: 
 int cor; 
 void Cor(string c)
};
6.6	Polimorfismo
O polimorfismo descreve a capacidade de um código C++ se comportar de diferentes formas dependendo do contexto em tempo de execução. Este recurso permite trabalhar em um nível de abstração bem alto ao mesmo tempo que facilita a incorporação de novos pedaços em um sistema já existente. Em C++ o polimorfismo se dá através da conversão de ponteiros (ou referências) para objetos.
class A { 
 public: void f(); 
}; 
class B : public A { 
 public: void f(); 
}; 
void chamaf(A* a) { a->f(); } 
int main() 
{ 
 B b; 
 chamaf(&b); 
 return 0;
}
REFERÊNCIAS BIBLIOGRÁFICAS
Departamento de Automação e Sistemas –DAS Sistemas Industriais Inteligentes, Curso de Linguaguem Computacional C/C++, Florianópolis, 2002 (Apostila)
Faculdade de Ciências Aplicadas de Cascavel –FACIAP Curso de Ciência da Computação, Linguagem C/C++,Cascavel, 2004 (Apostila)
FRIGERI, A.H., COPSTEIN, B. & PEREIRA, C.E. ,Curso de C++ , Porto Alegre, 1996 (Apostila)
JAMSA, Kris & KLANDER, Lars, Programando em C/C++ “A Bíblia”, Makron Books, São Paulo, 1999
KERNIGHAN, B.W. & RITCHIE, D.M., The C Programming Language, Prentice Hall,London, 2009, 2ª Edição
MARTHA, Luiz Fernando. Artigo publicado através do sítio http://www.tecgraf.puc-rio.br/ftp_pub/lfm/CIV2801ProgramC.pdf
Prof. Heloísa. “Programação Estruturada Paradigmas de Linguagens de Programação”. Trabalho publicado através do sítio http://www2.dc.ufscar.br/~heloisa/PLP2009/ ProgEstr1.pdf, 1º. Sem. 2009
BORGES, Renato & CLÍNIO, André. Curso de Programação III – Introdução a POO. Material disponibilizado no sítio http://www.scribd.com/doc/2059942/Apostila-de-C
Apostila do curso de Ciência da Computação da UNIPAN: Linguagem C/C++ , Cascavel PR 2004. Material consultado a partir do sítio http://www.scribd.com/doc/23407801/Apostila-Completa-sobre-C-C-em-Portugues
NETO,Samuel Dias. Tutorial de Linguagem C – intermediário. Material consultado a partir do sítio http://homepages.dcc.ufmg.br/~joaoreis/Site%20de%20tutoriais/c_int/index.htm
Tutorial de C/C++ disponibilizado no sítio http://www.tiexpert.net/programacao/c/
RICARTE, Ivan Luíz Marques. Apostila Programação Orientada a Objetos com C++ (http://www.dca.fee.unicamp.br/cursos/POOCPP/),1995, UNICAMP
CESTA, Andre Augusto. Tutorial "C++ COMO UMA LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS.", 1996, UNICAMP
BARROS, Tiago. Apostila “Do C ao C++ Uma abordagem da Engenharia de Software”,2002

Continue navegando