Baixe o app para aproveitar ainda mais
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
Compartilhar