Buscar

Aula 25.08.2014 As expressões em C

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 101 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 101 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 101 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

PROGRAMAÇÃO 
IMPERATIVA 
Utilizando a linguagem C 
Faculdade de Ciências da Universidade Agostinho Neto 
 
Ano Lectivo 2014 
 
Dikiefu Fabiano, fabiano@fc.uan.ao 
João José da Costa, joao.costa@fc.uan.ao 
 
 
Conceitos básicos 
“Para memorizar” 
Faculdade de Ciências da Universidade 
Agostinho Neto 
“O conhecimento quando compartilhado não se divide, mas se 
multiplica. O conhecimento quando utilizado não se gasta, mas se 
renova.” 
Anónimo 
 
2 
1. Conceitos básicos 
—  Um programa é uma sequência de código, organizado de 
tal forma que permita resolver um determinado 
problema. 
—  Código-fonte é o conjunto de instruções de um 
programa em forma de texto compreensível pelo ser 
humano, normalmente interpretado como o programa. 
—  Código-Objecto é a tradução do código-fonte de um 
programa em código de máquina que o computador 
pode ler e executar directamente. 
Faculdade de Ciências da Universidade 
Agostinho Neto 3 
—  Compiladores/ Interpretadores São programas 
inteligentes que operam sobre o código-fonte de um 
determinado programa. 
—  Os termos compiladores e interpretadores referem-se à 
maneira como um programa é executado. 
Faculdade de Ciências da Universidade 
Agostinho Neto 4 
1. Conceitos básicos 
—  Um interpretador lê o código-fonte do programa uma 
linha por vez e executa a instrução específica contida 
nessa linha. 
—  Um compilador lê o programa inteiro e converte-o em 
um código-objecto, que é uma tradução do código-fonte 
do programa em uma forma que o computador possa 
executar directamente. 
Faculdade de Ciências da Universidade 
Agostinho Neto 5 
1. Conceitos básicos 
Linguagens de Programação 
 
Pode-se dividir genericamente, as linguagens de programação 
em dois grandes grupos: 
 
1.  Linguagens de Baixo nível 
2.  Linguagens de Alto nível 
 
1. Conceitos básicos 
—  Linguagens de baixo nível 
 
são linguagens voltadas para a máquina, i.e., são escritas 
usando as instruções do microprocessador. (Assembly) 
—  Vantagens: 
◦  Programas são executados com maior velocidade de 
processamento. 
◦  ocupam menos espaço na memória. 
—  Desvantagens: 
◦  pouca portabilidade, isto é, um código gerado para um tipo de 
processador não serve para outro. 
◦  não são estruturados (torna programação difícil) 
Faculdade de Ciências da Universidade 
Agostinho Neto 7 
1. Conceitos básicos 
—  Linguagens de Alto nível 
 
São linguagens voltadas para o ser humano. Em geral 
utilizam sintaxe estruturado tornando seu código mais 
legível. Necessitam de compiladores ou interpretadores 
para gerar instruções de microprocessador. (Ex: C, Pascal, 
Basic, LISP, CLIPPER, etc.) 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 8 
1. Conceitos básicos 
—  Linguagens de Alto nível (Cont.) 
 
◦  Vantagens: 
–  Por serem compiladas ou interpretadas, tem maior 
portabilidade podendo ser executadas em várias 
plataformas com pouquíssimas modificações. 
–  A programação torna-se mais fácil por causa do 
maior ou menor grau de estruturação das suas 
linguagens. 
◦  Desvantagens: 
–  São mais lentas e ocupam mais memória 
Faculdade de Ciências da Universidade 
Agostinho Neto 9 
1. Conceitos básicos 
—  É uma linguagem de alto nível. 
—  Foi desenvolvida por programadores para 
programadores tendo como meta as características 
flexibilidade e portabilidade. 
—  Nasceu juntamente com advento da teoria de linguagem 
estruturada e do computador pessoal. 
—  É multiplataforma (Windows, Unix e famílias). 
Faculdade de Ciências da Universidade 
Agostinho Neto 10 
1. Conceitos básicos 
—  Linguagem C utiliza: 
◦  O paradigma 
–  Programação estruturada 
–  Programação imperativa 
–  Programação procedural. 
◦  Compiladores: Borland C, GNU GCC, Microsoft 
Visual Studio, Turbo C, Watcom C, Tiny C Compiler. 
◦  Dialetos: ANSI C, C99, C11, ISO C e K&R C. 
Faculdade de Ciências da Universidade 
Agostinho Neto 11 
1. Conceitos básicos 
—  Linguagem C não tem: 
◦  Segurança de tipo 
◦  Coletor de lixo (mais comum em linguagens interpretadas) 
◦  Vectores que crescem automaticamente 
◦  Classes ou objetos com comportamento 
◦  Closures 
◦  Funções aninhadas 
◦  Sobrecarga de operadores 
◦  Meta-programação 
◦  Apoio nativo de multithreading e comunicação por rede 
Faculdade de Ciências da Universidade 
Agostinho Neto 12 
1. Conceitos básicos 
Capítulo 1: 
As expressões em C. 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 13 
“Eu oiço e eu esqueço. Eu vejo e eu lembro. Eu faço e eu entendo.” 
Anónimo 
 
Sumário 
1.  A forma de um programa em C. 
2.  A biblioteca e a linkedição. 
3.  Compilação de um programa em C. 
4.  O mapa de memória em C. 
5.  Sentença geral na linguagem C. 
6.  Tipos de dados. 
7.  Modificadores de tipos primitivos. 
8.  Tipos de Dados Definidos no Padrão ANSI. 
9.  Identificador. 
Faculdade de Ciências da Universidade 
Agostinho Neto 14 
Sumário 
10.  Identificador. 
11.  Variáveis. 
12.  Modificadores de tipo de acesso. 
13.  Constantes. 
14.  Especificadores de tipos de classe de 
armazenamento. 
15.  Operadores. 
16.  Casts. 
17.  Comentários. 
18.  Funções de Biblioteca. 
19.  Formatos de Leitura e Escrita 
Faculdade de Ciências da Universidade 
Agostinho Neto 15 
Objectivos 
—  Instrutivo 
◦  Fornecer conhecimentos e técnicas quanto a definição e 
manipulação de variáveis e constantes, bem como a capacidade 
de examinar os tipos de dados internos, variáveis, operadores e 
expressões. 
—  Educativo 
◦  Sentir a necessidade de entender e manipular variáveis e 
constantes para aplicação em problemas sociais. 
—  Valores 
◦  Humildade, Persistência e Perseverança. 
Faculdade de Ciências da Universidade 
Agostinho Neto 16 
1. A forma de um programa em C 
—  As palavras reservadas listadas na tabela a seguir que, 
combinada com a sintaxe formal do C, formam a 
linguagem de programação C. 
—  Destas, 27 foram definidas pela versão original de C. 
—  As 5 restantes foram adicionadas pelo comitê ANSI: 
enum, const, signed, void e volatile. 
—  Além disso, muitos compiladores C acrescentaram 
diversas palavras-chave para explorar melhor a 
organização da memória da família de processadores 
8088 / 8086, que suporta programação interlinguagem e 
interropções. 
Faculdade de Ciências da Universidade 
Agostinho Neto 17 
Palavras reservadas: 
 
auto double int struct 
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 
1. A forma de um programa em C (Cont.) 
Faculdade de Ciências da Universidade 
Agostinho Neto 18 
—  Todas as palavras-chave em C são minúsculas. 
—  Uma palavra-chave não pode ser utilizada para 
nenhum outro propósito em um programa em C. 
—  Todo programa em C consiste em uma ou mais 
funções. 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 
1. A forma de um programa em C (Cont.) 
19 
—  A única função que necessariamente precisa estar 
presente é a Função Principal, que é a primeira 
função chamada quando é executado o programa em 
C. 
—  A Função Principal não é tecnicamente parte da 
linguagem C. 
Faculdade de Ciências da Universidade 
Agostinho Neto 
1. A forma de um programa em C (Cont.) 
20 
A forma geral de um programa em C 
//inclusão de bibliotecas uma por linha 
//declarações globais (inclui protótipos de funções) 
tipo_de_retorno funcao_principal(lista de parâmetros) 
{//início do bloco de instruções 
 //sequência de comandos 
} //fim do bloco de instruçõestipo_de_retorno funcao1(lista de parâmetros) 
{//início do bloco de instruções 
 //sequência de comandos 
} //fim do bloco de instruções 
 … … … … … … 
tipo_de_retorno funcaoN(lista de parâmetros) 
{//início do bloco de instruções 
 //sequência de comandos 
} //fim do bloco de instruções 
Faculdade de Ciências da Universidade 
Agostinho Neto 21 
—  Protótipo da Função Principal 
◦  Para o ambiente DOS (Linhas de comandos) 
–  main(); 
–  int main(void); 
–  int main(int argc, char **argv); 
–  int main(int argc, char *argv[]); 
◦  Para o ambiente Windows (Interface gráfica) 
–  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE 
hPrevInstance, LPTSTR pCmdLine, int nCmdShow); 
–  int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE 
hPrevInstance, LPTSTR lpCmdLine, int nCmdShow); 
Faculdade de Ciências da Universidade 
Agostinho Neto 
1. A forma de um programa em C (Cont.) 
22 
—  Exemplo para o ambiente DOS (Linhas de comandos) 
#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char *argv[]) 
{ 
 printf("Ola programador!!! Bem-vindos ao C
\n“ , "Saudações"); 
 system("pause"); 
 return 0; 
} 
Faculdade de Ciências da Universidade 
Agostinho Neto 
1. A forma de um programa em C (Cont.) 
23 
—  Exemplo para o ambiente Windows (Interface gráfica) 
 
#include <windows.h> 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE 
hPrevInstance, LPTSTR pCmdLine, int nCmdShow) 
{ 
 MessageBox( 
 NULL, 
 "Ola programador!!! Bem-vindos ao C” , 
 "Saudacoes” , MB_OK); 
 return 0; 
} 
Faculdade de Ciências da Universidade 
Agostinho Neto 
1. A forma de um programa em C (Cont.) 
24 
2. A biblioteca e a linkedição 
—  Biblioteca é o arquivo contendo as funções padrão que 
um programa em C pode utilizar. Essas funções incluem 
todas as operações de entrada/saída (E/S) como 
também outras rotinas úteis. 
—  Linkeditor é um programa que une funções compiladas 
separadamente em um programa. Ele combina as 
funções da biblioteca C padrões com o código que o 
programador escreve. 
Faculdade de Ciências da Universidade 
Agostinho Neto 25 
2. A biblioteca e a linkedição (Cont.) 
—  Quando chamamos uma função que não faz parte do 
programa, o compilador C “Memoriza” seu nome, 
depois o linkeditor (Linker) combina o código que o 
programador escreveu com o código-objecto já 
encontrado na biblioteca padrão. Este processo é 
chamado de linkedição. 
—  A saída do linkeditor é um programa executável. 
Faculdade de Ciências da Universidade 
Agostinho Neto 26 
3. Compilação de um programa em C 
—  O método exacto para compilar um programa 
depende do compilador que está em uso. 
—  Alguns compiladores fornecem ambientes de 
programação integrados que incluem um editor. 
—  Outros é necessário utilizar um editor separado para 
criar programa. 
—  A linkedição varia muito entre os compiladores e os 
ambientes. 
Faculdade de Ciências da Universidade 
Agostinho Neto 27 
4. Compilação separada 
—  O C permite que um programa seja contido em vários 
ficheiros e que cada ficheiro seja compilado 
separadamente. 
—  Uma vez que todos os ficheiro sejam compilados, eles 
são linkeditados com qualquer rotina de biblioteca para 
formar um código-objecto completo. 
—  Vantagens 
◦  Se houver uma mudança no código de um ficheiro, não será 
necessário a recompilação do programa todo. 
Faculdade de Ciências da Universidade 
Agostinho Neto 28 
5. O mapa de memória em C 
—  Um programa C compilado cria e utiliza quatro regiões, 
logicamente distintas na memória, que possuem funções 
específicas. 
—  A primeira região é a memória que contém o código do 
programa. 
—  A segunda armazena as variáveis globais do programa. 
Faculdade de Ciências da Universidade 
Agostinho Neto 29 
5. O mapa de memória em C (Cont.) 
—  A pilha é a terceira região que armazena o endereço de 
retorno das chamadas de função, argumentos para 
funções e variáveis locais. 
 
—  O heap é uma região de memória livre que o programa 
pode utilizar, via funções de alocação dinâmica de C, em 
aplicações como listas ligadas, árvores, etc. 
Faculdade de Ciências da Universidade 
Agostinho Neto 30 
5. O mapa de memória em C (Cont.) 
—  A disposição exacta do programa pode variar de 
compilador para compilador e de ambiente para 
ambiente. 
—  Embora a disposição física exacta de cada uma das 
quatros regiões possa diferir entre tipos de CPU e 
implementações de C, a figura abaixo mostra 
conceitualmente como o programa aparece na 
memória. 
Faculdade de Ciências da Universidade 
Agostinho Neto 
31 
6. Sentença geral na linguagem C 
—  É uma linguagem Case Sensitive, isto é, faz distinção 
entre maiúsculas e minúsculas. 
—  Cada instrução deve ser seguida por ponto e vírgula (;). 
—  A disposição de código é arbitrário e depende das 
preferências de cada programador. 
Faculdade de Ciências da Universidade 
Agostinho Neto 32 
—  Em C a função em que são colocadas todas as 
instruções que queremos que sejam executadas chama-
se função principal e todo o código a executar é 
colocado entre { } . 
—  O conjunto de código existente entre chavetas chama-
se bloco. Ou seja, um bloco inicia com um "{" e 
termina com um "}". 
—  Em C qualquer função tem que ser seguida por 
parêntesis. 
Faculdade de Ciências da Universidade 
Agostinho Neto 33 
6. Sentença geral na linguagem C (Cont.) 
—  Directivas de compilação (Também conhecido por 
directrizes de pre-processador) são informações/
instruções que são passadas para o compilador com o 
simbolo #. 
—  Especificador é uma palavra reservada da linguagem que 
é utilizada para atribuir determinadas propriedades ao 
tipos. 
—  O void para ponteiro é um ponteiro para qualquer 
coisa, e para funções significa ausência de parâmetros 
ou ausência de retorno. 
Faculdade de Ciências da Universidade 
Agostinho Neto 34 
6. Sentença geral na linguagem C (Cont.) 
7. Tipos de dados 
—  Um tipo é uma abstracção de algo. Define o domínio de 
valores e o tamanho em byte (conjunto de 8 bits) que 
determinada variável ocupará em memória. 
—  Existem os seguintes grupos de tipos de dados: os tipos 
primitivos, os tipos definidos pelo programador e os 
definidos em bibliotecas externas. 
—  O tipo de dado associado a uma variável é o conjunto 
de elementos que podem ser armazenados na variável. 
Faculdade de Ciências da Universidade 
Agostinho Neto 35 
7. Tipos de dados 
—  Os tipos de dados primitivos pertencem a linguagem C, 
todos os outros são baseados nesses. 
—  Os tipos de dados primitivos são: 
◦  char – caractere. 
◦  int – inteiro. 
◦  float – real. 
◦  double – real (o dobro float). 
◦  void – nada. 
—  Para o programador definir um novo tipo precisa 
utilizar o operador typedef. 
—  A definição de novo tipo é feita a partir da declaração. 
Faculdade de Ciências da Universidade 
Agostinho Neto 36 
7. Tipos de dados 
—  A declaração de um novo tipo tem três componentes: 
◦  A palavra reservada typedef. 
◦  O tipo de dado. 
◦  O nome para o novo tipo. 
 
Exemplos: 
/* cria o novo tipo de nome inteiro equivalente a int */ 
typedef int inteiro; 
 
/* cria o novo tipo de nome String para permitir a uma variável associar uma cadeia 
de caracteres */ 
typedef char* String; 
Faculdade de Ciências da Universidade 
Agostinho Neto 37 
8. Modificadores de tipos primitivos 
—  Os tipos primitivos podem ter vários modificadores 
precedendo-os, excepto o tipo void. 
—  Um modificador é utilizado para alterar o significado do 
tipo primitivo e adapta-lo a diversas situações. 
—  Os modificadores são: 
◦  signed◦  unsigned 
◦  long 
◦  short 
Faculdade de Ciências da Universidade 
Agostinho Neto 38 
9. Tipos de Dados Definidos no Padrão ANSI 
Denominação Nº de 
Bytes 
Conjunto de Valores (Faixa mínima) 
char 1 Caracteres cód. ASCII 
unsigned char 1 0 a 255 
signed char 1 -127 a 127 
int 2 Nº int. -32768 a 32767 
unsigned int 2 0 a 65.535 
signed int 2 O mesmo que int 
short int 2 O mesmo que int 
unsigned short int 2 0 a 65.535 
Faculdade de Ciências da Universidade 
Agostinho Neto 39 
9. Tipos de Dados Definidos no Padrão ANSI 
Denominação Nº de 
Bytes 
Conjunto de Valores (Faixa mínima) 
signed short int 2 O mesmo que short int 
long ou long int 4 Nº int. -65536 a 65535 
unsigned long int 4 0 a 4.294.967.295 
signed long int 4 O mesmo que long int 
float 4 Nº reias -3,4x1038 a -3,4x10-38 e 3,4x10-38 a 
3,4x1038 
double 8 Nº reias -1,7x10308 a -3,4x10-308 e 
1,7x10-308 a 3,4x10308 
long double 8 Dez dígitos de precisão 
void 0 Conjunto vazio 
Faculdade de Ciências da Universidade 
Agostinho Neto 40 
10. Identificador 
—  É uma sequência de letras, dígitos e caracteres escolhida pelo 
programador e será utilizado pelo programa para se fazer 
referência a variável ou função; 
—  Deve-se escolher um identificador (nome) para a variável 
que tenha uma relação com a sua finalidade. 
—  Regra: O primeiro caractere deve ser uma letra, cifrão ou 
um sublinhado e os caracteres subsequentes devem ser 
letras, números, cifrão, ou sublinhados. 
◦  Ex: salario, nome, _serial2 
Faculdade de Ciências da Universidade 
Agostinho Neto 41 
11. Variáveis 
—  Em programação, variável é uma posição de memória 
cujo conteúdo pode ser modificado durante a execução 
de um programa; 
—  Deve ser associado a cada variável: um identificador e 
um tipo de dado. 
—  Toda variável em C deve ser declarada antes de ser 
utilizada. 
Faculdade de Ciências da Universidade 
Agostinho Neto 42 
11. Variáveis 
—  Genericamente existem dois tipos de variáveis: 
◦  Variável de conteúdo ( chamada apenas de variável ) 
◦  Variável de endereço ( chamada de apontador ou ponteiro) 
—  A variável armazena o dado propriamente dito. 
—  O apontador armazena o endereço da variável ou de 
um outro apontador. 
—  A variável e o apontador devem ser declarados : dentro 
de funções (Local), na definição de parâmetro das 
funções e fora de todas as funções (Global). 
Faculdade de Ciências da Universidade 
Agostinho Neto 43 
11. Variáveis 
—  Declaração de variável 
◦  tipo lista_de_variável; 
◦  Tipo : deve ser um tipo de dados válido em C mais quaisquer 
modificadores. 
◦  Lista_de_variável : Pode consistir em um ou mais nomes de 
identificadores separados por vírgula. 
—  Ex: 
/*declaração da variável idade do tipo int*/ 
int idade; 
/*declaração da variável peso e altura ambas 
do tipo float*/ 
float peso, altura; 
Faculdade de Ciências da Universidade 
Agostinho Neto 44 
11. Variáveis 
—  Declaração de apontador 
◦  tipo lista_de_apontadores; 
◦  Tipo : deve ser um tipo de dados válido em C mais quaisquer 
modificadores. 
◦  Lista_de_apontador : Pode consistir em um ou mais nomes de 
identificadores (cada um precedido pelo asterisco) e separados por 
vírgula. 
—  Ex: 
/*declaração do apontador p1 e p2 ambos de 
tipo float*/ 
float *p1, *p2; 
/*declaração do apontador p do tipo int 
inicializado com o valor NULL*/ 
int *p = NULL; 
Faculdade de Ciências da Universidade 
Agostinho Neto 45 
11. Variáveis 
—  Exemplo de declaração e uso: 
int x; // declarado a variável x. 
x = 3; // atribui-se em x o valor 3. 
//declara-se abaixo o apontador ptr inicializado com o //valor 
NULL. 
int *ptr = NULL; 
//A seguir coloca-se no ponteiro ptr o endereço da variável //x 
para o qual ele vai apontar. 
ptr = &x; 
//A seguir busca-se o conteudo armazenado no endereço que //se 
encontra no ponteiro ptr e substitui-se pelo valor 7. 
*ptr = 7; 
//Deste modo o actual valor de x é 7 e o valor de ptr é o //
endereço de x. 
 
 Faculdade de Ciências da Universidade Agostinho Neto 46 
11. Variáveis 
—  Exemplo de declaração e uso (ilustrado): 
 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 47 
23399 
12ff01 
int x; x 
3 
12ff01 
X = 3; x 
NULL 
a3ff01 
int *p = NULL; 
P 
12ff01 
a3ff01 
P = &x; 
p 
7 
12ff01 
*p = 7; 
x 
1ª instrução 
2ª instrução 
3ª instrução 
4ª instrução 
5ª instrução 
11. Variáveis: Exercícios 
Assinale com V, as declarações de variáveis (de dado e de 
endereço) válidas e com F as inválidas. 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 48 
a) [ ] v int ; b) [ ] char oo=070; c) [ ] double $b_; 
 
d) [ ] int _=3>2; 
 
e) [ ] float x=y=4; 
 
f) [ ] char *er=”Erro”; g) [ ] int media*arit; h) void *xe; 
i) [ ] void nada; j) [ ] int g=0c2f43; 
 
k) [ ] double $; 
 
l) [ ] int void; 
 
11. Variáveis: Exercícios 
Faculdade de Ciências da Universidade 
Agostinho Neto 49 
12. Modificadores de tipo de acesso 
—  Os modificadores de tipo de acesso também chamados 
qualificadores, controlam como as variáveis podem ser 
acessadas ou modificadas. 
—  Os modificadores de tipo de acesso são : 
◦  const – impede a modificação de valores. 
◦  Volatile – permite a mudança implícita de valores. 
—  Podem preceder os modificadores de tipos e os nomes 
que eles modificam. 
Faculdade de Ciências da Universidade 
Agostinho Neto 50 
12. Modificadores de tipo de acesso 
—  Variável do tipo const não pode ser modificada pelo 
seu programa. Podem, entretanto, receber um valor 
inicial. 
const int b = 4; // Declaração de constante em C 
int dobro(const unsigned int numero){ 
 return numero * 2; 
 } 
—  O modificador volatile é utilizado para informar o 
compilador que o valor de uma variável pode ser alterada de 
maneira não explicitamente especificada pelo programa. 
◦  const volatile unsigned char *porta = 0x30; 
Faculdade de Ciências da Universidade 
Agostinho Neto 51 
13. Constantes 
—  A constante, tal como variável, é uma posição de memória à 
qual devem ser associada um identificador e um tipo de 
dado. 
—  A diferença é o facto de que o conteúdo de uma constante 
que é atribuída no momento de declaração não pode ser 
modificado durante a execução do programa. 
—  Constantes em C podem ser de qualquer um dos cinco tipos 
de dados básicos*. 
—  A maneira como da constante é representada depende de 
seu tipo. 
Faculdade de Ciências da Universidade 
Agostinho Neto 52 
13. Constantes 
—  Para tipo flutuante, se você colocar um F após o 
número, será tratado como float. Se colocar um L, 
tornará um long double. 
—  Para tipos inteiros, o sufixo U representa unsigned e o L 
representa o long. 
Faculdade de Ciências da Universidade 
Agostinho Neto 53 
13. Constantes 
—  Às vezes é mais fácil utilizar um sistema na base 8 ou 16 
em lugar de 10. 
—  O sistema numérico na base 8 é chamado octal e utiliza 
os dígitos de 0 a 7. 
—  O sistema na base 16 é chamado hexadecimal e utiliza 
os dígitos de 0 a 9 mais as letras de A a F, que 
representam 10, 11, 12, 13, 14 e 15, respectivamente. 
Faculdade de Ciências da Universidade 
Agostinho Neto 54 
13. Constantes 
—  Em virtude desses números serem utilizados 
frequentemente, C permite especificar constantes 
inteira em hexadecimal ou octal em lugar de decimal. 
—  Uma constante hexadecimal de consistir de 0x seguido 
por uma constante na forma hexadecimal. 
—  Uma constante octal começa com 0. 
—  Ex: const int hex = 0x2a2b; 
 const int oct = 027; 
Faculdade de Ciênciasda Universidade 
Agostinho Neto 55 
13. Constantes 
—  Sintaxe 
—  /* ocupa espaço na RAM */ 
const tipo_de_dado identificador = valor; 
#define identificador valor //não ocupa espaço na 
RAM 
 
—  Exemplo 
•  const float pi=3,142857; 
•  #define MAX 20 
Faculdade de Ciências da Universidade 
Agostinho Neto 56 
13. Constantes 
—  Colocar entre aspas simples todas as constantes tipo 
caractere funciona para a maioria dos caracteres 
imprimíveis. 
—  Outros são impossíveis de inserir pelo teclado. Por essa 
razão, C criou as constantes especiais de caractere de 
barra invertida. 
—  De modo a aumentar a portabilidade aconselha-se o 
uso dos códigos de barra invertida em lugar de seus 
ASCII. 
Faculdade de Ciências da Universidade 
Agostinho Neto 57 
13. Constantes 
Faculdade de Ciências da Universidade 
Agostinho Neto 58 
14. Especificadores de tipos de 
classe de armazenamento 
—  São utilizados para informar ao compilador como a 
variável deve ser armazenada. 
—  Há quatro especificadores de classe de armazenamento 
suportados por C, que são: 
◦  extern 
◦  static 
◦  register 
◦  Auto 
—  O especificador de armazenamento precede o resto da 
declaração da variável. Sua forma geral é: 
especificador_de_armazenamento tipo identificador; 
Faculdade de Ciências da Universidade 
Agostinho Neto 59 
14. Especificadores de tipos de 
classe de armazenamento 
—  Exemplos 
 /*Variável que conserva o valor da última 
chamada de forma incremental.*/ 
 static int dado_estatico = 0; 
/*O valor armazenado na variável é colocado no 
registrador do processador, o que torna a execução 
mais rápida.*/ 
 register int dado_no_registador; 
/*declaraçao de uma variável externa.*/ 
 extern float f; 
/*declaraçao de uma variável XXXXX.*/ 
 auto float f; 
Faculdade de Ciências da Universidade 
Agostinho Neto 60 
—  Especificador extern: 
◦  Declara-se uma variável global apenas uma vez. 
◦  Surgem transtornos quando tenta-se linkeditar os 
módulos que contem variáveis globais com o mesmo 
nome. 
◦  O extern utiliza-se para indicar que uma 
determinada variável global é externa ao módulo. 
◦  Uma boa prática seria declarar todas as suas variáveis 
globais em um ficheiro e utilizar declarações extern 
nos outros. 
Faculdade de Ciências da Universidade 
Agostinho Neto 61 
14. Especificadores de tipos de 
classe de armazenamento 
FICHEIRO 1 
 
int x,y; 
main(){ 
 extern int x;//Att 
} 
FICHEIRO 2 
 
extern int x,y; 
int isMult2(){ 
 return (x%2)&&(y%2); 
} 
Faculdade de Ciências da Universidade 
Agostinho Neto 62 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador static: 
◦  Dentro de sua própria função ou ficheiro, variáveis 
static são variáveis permanentes. 
◦  São reconhecidas apenas dentro de sua função ou 
ficheiro, mas mantêm seus valores entre chamadas. 
◦  O especificador static tem efeitos diferentes em 
variáveis locais e em variáveis global. 
Faculdade de Ciências da Universidade 
Agostinho Neto 63 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador static: 
◦  Em variáveis locais o compilador cria armazenamento 
permanente, quase da mesma forma para variável 
global. 
◦  Uma variável local static retém seu valor entre 
chamadas de função. 
◦  Uma variável global static é reconhecida apenas no 
arquivo no qual a mesma foi declarada. 
Faculdade de Ciências da Universidade 
Agostinho Neto 64 
14. Especificadores de tipos de 
classe de armazenamento 
—  Exemplos 
1)static int estado = 2; 
 
 
 
2)void conta_ate_n(const int n) 
 { 
 static int contador = 0; 
 if(contador / (n + 1)) return; 
 printf(" %d", contador++); 
 conta_ate_n(n); 
 } 
Faculdade de Ciências da Universidade 
Agostinho Neto 65 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador register: 
◦  No padrão C ANSI pode ser aplicado a qualquer tipo 
de variável. 
◦  O padrão C ANSI simplesmente determina que "o 
acesso ao objecto é o mais rápido possível". 
◦  Dependendo da implementação do compilador C e 
de seu ambiente operacional, variáveis register 
podem ser manipuladas de quaisquer forma 
consideradas cabíveis pelo implementador do 
compilador. 
Faculdade de Ciências da Universidade 
Agostinho Neto 66 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador register: 
◦  Uma variável register pode ser armazenada em um 
registrador da CPU, variáveis register não podem ter 
endereços. 
◦  Não pode-se encontrar o endereço de uma veriável 
register usando o operador &. 
Faculdade de Ciências da Universidade 
Agostinho Neto 67 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador register: 
◦  Embora o padrão C ANSI tenha expandido a 
descrição de register, na prática ele geralmente só 
tem um efeito significativo com os tipos inteiro e 
caractere. 
◦  Não devemos contar com aumentos substanciais da 
velocidade para os outros tipos de variáveis. 
Faculdade de Ciências da Universidade 
Agostinho Neto 68 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador register: 
◦  Exemplo 
1)register int i = 0; 
 for(; i < 20; printf(“Valor: %d\n”,i++)); 
 
 
 
2) int potencia (const unsigned int base, register unsigned int espoente) 
{ 
 register int resultado; 
 resultado = 1; 
 for(; espoente; espoente--) resultado *= base; 
 return resultado; 
} 
Faculdade de Ciências da Universidade 
Agostinho Neto 69 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador auto: 
◦  A classe de armazenamento auto permite definir 
variáveis locais. 
◦  Trata-se do modo padrão de definição de variáveis, 
por esse motivo ela raramente é utilizada. 
◦  A classe auto só pode ser utilizada dentro de 
funções e blocos de comandos definidos por um 
conjunto de chaves {} (escopo local) 
Faculdade de Ciências da Universidade 
Agostinho Neto 70 
14. Especificadores de tipos de 
classe de armazenamento 
—  Especificador auto: 
◦  Exemplo 
int potencia (const unsigned int b, 
 register unsigned int e) 
{ 
 auto unsigned int res; 
 res = 1; 
 for(; e; e--) res *= b; 
 return res; 
} 
Faculdade de Ciências da Universidade 
Agostinho Neto 71 
14. Especificadores de tipos de 
classe de armazenamento 
—  C é muito rica em operadores internos. 
—  C dá mais ênfase aos operadores que a maioria das outras 
linguagens de computador. 
—  C define quatro classes de operadores: 
◦  Aritméticos. 
◦  Relacionais 
◦  Lógicos 
◦  Bit a bit 
—  Além das classes acima , C tem alguns operadores especiais 
para tarefas particulares. 
Faculdade de Ciências da Universidade 
Agostinho Neto 72 
15. Operadores 
Operador de Atribuição 
◦  Em C, pode-se utilizar o operador de atribuição 
dentro de qualquer expressão válida de C. 
◦  A forma geral do operador de atribuição é: 
–  nome_da_variavel = expressão; 
◦  O destino, ou a parte esquerda, da atribuição deve ser 
uma variável ou um ponteiro, não uma função ou uma 
constante. 
Faculdade de Ciências da Universidade 
Agostinho Neto 73 
15. Operadores 
Operador de Atribuição (cont.) 
◦  C permite atribuir o mesmo valor a muitas variáveis 
utilizando atribuição múltiplas em um único comando. 
◦  Ex: 
int x, y = 2.5; 
x = x * y + 1; 
int z = x = y = 1; 
Faculdade de Ciências da Universidade 
Agostinho Neto 74 
15. Operadores 
Operadores aritméticos 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 75 
15. Operadores 
Operador Operação 
+ Adição 
- Subtração 
* Multiplicação 
/ Divisão 
% Resto de divisão++ Incremento 
-- Decremento 
Operadores Relacionais 
—  Os compiladores C realizam comparações entre valores 
através de operadores relacionais: 
◦  maior que (>) 
◦  maior ou igual a (>=) 
◦  menor que (<) 
◦  menor ou igual a (<=) 
◦  igual (==) 
◦  diferente (!=) 
—  O resultado de uma avaliação de uma relação é 1 (um) se 
for verdadeiro ou 0 (zero) se for falso. 
Faculdade de Ciências da Universidade 
Agostinho Neto 76 
15. Operadores 
Operadores lógicos 
Faculdade de Ciências da Universidade 
Agostinho Neto 77 
15. Operadores 
R1 R2 R1 && R2 R1 || R2 
0 0 0 0 
0 1 0 1 
1 0 0 1 
1 1 1 1 
R1 !R1 
1 0 
0 1 
Operadores bit a bit 
—  Refere-se a testar, atribuir ou deslocar os bits efectivos em 
um byte ou uma palavra, que correspondem aos tipos de 
dados char e int e variantes do padrão C. 
—  Os operadores bit a bit não podem ser utilizados em 
float, double, long double, void ou outros tipos mais 
complexos. 
—  Essas operações são aplicadas aos bits individuais dos 
operandos. 
Faculdade de Ciências da Universidade 
Agostinho Neto 78 
15. Operadores 
Operadores bit a bit 
—  Os operadores bit a bit são: 
◦  & (AND) 
◦  | (OR) 
◦  ^ (OR exclusivo - XOR) 
◦  ~ (Complemento de um) 
◦  >> (Deslocamento à direita) 
◦  << (Deslocamento à esquerda) 
Faculdade de Ciências da Universidade 
Agostinho Neto 79 
15. Operadores 
Operadores bit a bit 
—  Exemplo 1: 
Faculdade de Ciências da Universidade 
Agostinho Neto 80 
15. Operadores 
Operadores bit a bit 
—  As operações bit a bit mascaram certos bits, como o bit 
de paridade. 
—  O bit de paridade confirma se o restante dos bits em 
byte não se modificaram (É geralmente o bit mais 
significativo em cada byte.). 
—  A paridade é indicada pelo oitavo bit, que é colocado 0, 
fazendo-se um AND com um byte em que os bits de 1 a 7 
são 1 e o bit 8 é 0. 
Faculdade de Ciências da Universidade 
Agostinho Neto 81 
15. Operadores 
Operadores bit a bit 
—  Exemplo 2: 
Faculdade de Ciências da Universidade 
Agostinho Neto 82 
15. Operadores 
Operadores bit a bit 
—  O operador OR, ao contrário de AND, pode ser utilizado 
para ligar um bit. 
—  Exemplo 3: 
Faculdade de Ciências da Universidade 
Agostinho Neto 83 
15. Operadores 
Operadores bit a bit 
—  Um OR exclusivo, normalmente abreviado por XOR, 
activa um bit se, e somente se, os bits comparados forem 
diferentes. Por exemplo, 127^120 é : 
—  Exemplo 4: 
Faculdade de Ciências da Universidade 
Agostinho Neto 84 
15. Operadores 
Operadores bit a bit 
—  Operações bit a bit podem possuir valores diferentes de 0 
e 1, mas os operadores lógicos sempre conduzem a 0 ou 
1. 
—  Os operadores de deslocamento, >> e <<, movem todos 
os bits de uma variável para a directa ou para esquerda, 
como especifico. 
Faculdade de Ciências da Universidade 
Agostinho Neto 85 
15. Operadores 
Operadores bit a bit 
A forma geral do comando de deslocamento à direita é: 
variavel >> numero de posicoes de bits 
 
 
 
A forma geral do comando de deslocamento à esquerda é: 
variavel << numero de posicoes de bits 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 86 
15. Operadores 
Operadores bit a bit 
—  Conforme os bits são deslocados para uma extremidade, 
zeros são colocados na outra. 
—  Os bits deslocados são perdidos e zeros são colocados. 
—  Esta operação pode ser útil quando se decodifica a 
entrada de um dispositivo externo, e quando se lê 
informação de estado. 
Faculdade de Ciências da Universidade 
Agostinho Neto 87 
15. Operadores 
Operadores bit a bit 
—  Os operadores de deslocamento em nível de bits também 
podem multiplica e dividir inteiros rapidamente. 
—  Um deslocamento a esquerda efectivamente multiplica um 
número por 2 e um deslocamento à direita divide-o por 2. 
Faculdade de Ciências da Universidade 
Agostinho Neto 88 
15. Operadores 
Operadores bit a bit 
—  Exemplo 5: 
—  Obs: A divisão subsequente não trazem de volta bits 
anteriormente perdidos. 
Faculdade de Ciências da Universidade 
Agostinho Neto 89 
15. Operadores 
Operadores bit a bit 
—  O operador de complemento a um, ~, inverte o estado de 
cada bit da variável especificada. 
—  Pode ser utilizado para sifrar e decifrar uma palavra. 
—  Exemplo 4: 
Faculdade de Ciências da Universidade 
Agostinho Neto 90 
15. Operadores 
Resumo de precedência 
Faculdade de Ciências da Universidade 
Agostinho Neto 91 
15. Operadores 
—  Podemos forçar uma expressão a ser de um determinado 
tipo utilizando um cast. 
—  A forma genérica de um cast é: 
(tipo) expressão 
◦  onde tipo é qualquer tipo de dados válido em C. 
—  Exemplo 
Int x = (int)5/2; 
Faculdade de Ciências da Universidade 
Agostinho Neto 92 
16. Casts 
—  Exemplo 
Faculdade de Ciências da Universidade 
Agostinho Neto 93 
16. Casts 
17. Comentários 
—  Em C, comentários podem ser escritos em qualquer 
lugar do texto para facilitar a interpretação do 
algoritmo. 
—  Para identifica-lo ele deve ter um /* antes e um */ 
depois. 
 
—  Ex:. 
/* Aqui escrevo o meu comentário*/ 
Faculdade de Ciências da Universidade 
Agostinho Neto 94 
18. Funções de Biblioteca 
Faculdade de Ciências da Universidade 
Agostinho Neto 95 
Sintaxe Exemplo 
printf(“Informação“); printf(“Bem-vindo” ); 
 
printf(“Informação formato“, variavel); 
 
printf("Resultado=%d " , a ); 
 
printf(“Informação formato Informação “, 
variável); 
 
printf("Resultado=%d da soma" , a ); 
 
Protótipo 
_CRTIMP int __cdecl printf (const char*, ...); 
18. Funções de Biblioteca 
Faculdade de Ciências da Universidade 
Agostinho Neto 96 
Sintaxe Exemplo 
printf(“formato“, endereço); 
 
scanf("%d " , &a ); 
 
printf(“formatos“, endereços); 
 
scanf("%d %f" , &a, &b); 
 
Protótipo 
_CRTIMP int __cdecl scanf (const char*, ...); 
18. Funções de Biblioteca 
Biblioteca Argumentos Tipos de Arg. Retorna 
math.h 
fabs(x) float Valor absoluto de x 
cos(x) float Coseno de x 
log(x) float Logaritmo natural de x 
log10(x) float Logaritmo decimal de x 
pow(x,y) float, float x elevado a y 
pow10(x) int 10 elevado a x 
sin(x) int Seno de x 
sqrt(x) float Raiz quadrada de x 
tan(x) float Tangente de x 
stdlib.h random(x) float Um número aleatório entre 0 e x-1 
ctype.h tolower(x) char Converte o caractere x para 
minúsculo 
ctype.h toupper(x) char Converte o caractere x para 
maiúsculo 
Faculdade de Ciências da Universidade 
Agostinho Neto 97 
19. Formatos de Leitura e Escrita 
Faculdade de Ciências da Universidade 
Agostinho Neto 98 
Tipo Formato Observações 
char %c Um único carácter 
int %d ou %i Um inteiro (Base decimal) 
int %o Um inteiro (Base octal) 
int %x ou %X Um inteiro (Base Hexadecimal) 
short int %hd Um short inteiro (Base decimal) 
long int %ld Um long inteiro (Base decimal) 
unsigned short int %hu Short int positivo 
19. Formatos de Leitura e Escrita 
Faculdade de Ciências da Universidade 
Agostinho Neto 99 
Tipo* Formato Observações 
unsigned int %u Inteiro positivo 
unsigned long int %lu Long inteiro positivo 
float %f ou %e ou %E Um número real 
double %f ou %e ou %E Um número real 
char* %s Cadeia de caracteres 
Perguntas 
 
Faculdade de Ciências da Universidade 
Agostinho Neto 100 
“Eu oiço e eu esqueço. Eu vejo e eu lembro. Eu faço e eu entendo. 
Anónimo 
 
Exercícios de aplicação 
—  Em anexo encontra-se o ficheiro: 
◦  Exercícios de aplicação_02.docx 
Faculdade de Ciências da Universidade 
Agostinho Neto101

Outros materiais