INTRODUÇÃO À LINGUAGEM PASCAL CESAR BEZERRA TEIXEIRA,MSC PREFÁCIO A linguagem C foi desenvolvida no início da década de 70 por dois pesquisadores do Bell Laboratories, Brian Kernihgan e Dennis Ritchie, com a intenção de ser uma linguagem para programadores, fornecendo diversas facilidades para manipulação de bits e também para a construção de estruturas de alto nível. A linguagem rapidamente se popularizou e é muito usada ainda hoje para programação, principalmente na produção de software básico. Pela sua simplicidade, elegância e possibilidade, a linguagem C serviu de base para as modernas linguagens de programação, como JavaScript, Java, PHP e muitas outras. Cabe ressaltar que não foi minha intenção produzir uma fonte de referência completa em C, a idéia é apenas apresentar um abreve introdução, devendo este material ser complementado com a realização de uma grande quantidade de programas, pois não há outra maneira de aprender uma linguagem de programação, sem ser pela prática. Boa Leitura!!! Cesar Bezerra Teixeira
CAP 1 - INTRODUÇÃO 1.1) Objetivo 1.2) Histórico 1.3) Características da Linguagem 1.4) Programa Básico 1.5) Compilação SUMÁRIO CAP 2 VARIÁVEIS, OPERADORES E CONSTANTES 2.1) Tipos de dados, constantes e variáveis 2.2) Operadores Aritméticos 2.3) Operadores Lógicos 2.4) Operadores Relacionais 2.5) Operadores bit a bit 2.6) Ponteiros CAP 3 CONSTRUÇÃO DE INSTRUÇÕES 3.1) Instruções de Atribuição 3.2) Instruções de Seleção 3.3) Instruções de Repetição 3.4) Instruções de Entrada e Saída CAP 4 ESTRUTURAS DE DADOS AVANÇADAS 4.1) Definição de Tipos 4.2) Vetores e Matrizes 4.3) Registros 4.4) Arquivos CAP 5 TÓPICOS AVANÇADOS
CAPÍTULO 1 SUMÁRIO 1.1) Objetivo 1.2) Histórico 1.3) Características da Linguagem 1.4) Programa Básico 1.5) Compilação 1.1) OBJETIVO Apresentar uma introdução aos principais aspectos da linguagem C. 1.2) HISTÓRICO Desenvolvida nos laboratórios Bell na década de 70, a partir da Linguagem B (criada no final dos anos 60 por Ken Thompson), foi reformulada por Brian Kernighan e Dennis M. Ritchie, sendo posteriormente renomeada para C. Esta linguagem é o resultado de um processo de desenvolvimento que começou com uma linguagem mais antiga chamada BCPL.Pode-se dizer que C é uma linguagem de médio nível, pois possui instruções que a tornam ora uma linguagem de alto nível e estruturada como o Pascal, se assim se fizer necessário, ora uma linguagem de baixo nível, com instruções tão próximas da máquina, que só o Assembler possui. Com a linguagem C podemos construir programas organizados e concisos (como o Pascal), ocupando pouco espaço de memória com alta velocidade de execução (como o Assembler). Infelizmente, dada toda a flexibilidade da linguagem, também poderemos escrever programas desorganizados e difíceis de serem compreendidos (como usualmente são os programas em BASIC).Devemos lembrar que a linguagem C foi desenvolvida a partir da necessidade de se escrever programas que utilizassem recursos próprios da linguagem de máquina de uma forma mais simples e portável que o assembler. Atualmente a linguagem C é padrão e estável, sendo também a linguagem de programação profissional mais popular do mundo.
1.3) CARACTERÍSTICAS DA LINGUAGEM Estruturada e Simples; Baseada em funções; Médio nível, permitindo a construção de estruturas lógicas complexas e manipulação de bits; Código relativamente compacto; Destinada principalmente à produção de software básico; As palavras reservadas em C são descritas a seguir: Auto double if static break else int struct case entry long switch char extern register typedef continue float return union default for sizeof unsigned do goto short while 1.4) PROGRAMA BÁSICO Em C o programa é um conjunto de funções, sendo a função main obrigatória, funcionando como o programa principal em PASCAL. A função main é por onde começa a execução do programa. A seguir é apresentado um programa básico, com seus elementos comentados: # include <stdio.h> void main (void) Biblioteca padrão de entrada e saída (STanDart Input Output). Em C as bibliotecas estão em arquivos.lib. A chamada das funções de biblioteca estão especificadas em arquivos headers (.h) ; Os fornecidos pelo compilador especificados entre < > ; Os definidos pelo usuário entre aspa. Toda função em C tem seu cabeçalho definido da seguinte maneira: <retorno> <identificador><entrada>; Void indica vazio, ou seja nenhum argumento ou parâmetro; Indica início de Bloco, no caso início do próprio programa; printf ( Oi! ); Printf é uma das funções de saída em C; Indica fim de Bloco, no caso fim do próprio programa em C; A figura a seguir procura exemplificar o comportamento de uma função: ENTRADAS PROCESSAMENTO SAÍDAS
1.5) COMPILAÇÃO Existem diversos compiladores e ambientes integrados de desenvolvimento para a linguagem C, tanto em ambientes proprietários, quanto no mundo livre, sendo o mais popular o gcc (gnu compiler). Neste curso usaremos o mais simples de todos: Turbo C 2.0. Todo compilador C vem com uma biblioteca C padrão de funções, que realizam as tarefas necessárias mais comuns. O padrão C ANSI especifica o conjunto mínimo de funções que estará contido numa biblioteca. Nesta apostila usaremos o padrão ANSI. Muito programas C estão completamente contidos num arquivo fonte. Contudo, quando o tamanho de um programa cresce, também aumenta seu tempo de compilação, por isso C permite que um programa esteja contidos em muitos arquivos, podendo ser compilados separadamente, constituindo um projeto. De uma maneira geral compilar um programa em C consiste em 3 passos: 1. Criar o programa; 2. Compilar o programa;e 3. Linkeditar o programa, com as funções necessária da biblioteca. FORMA GERAL DE UM PROGRAMA EM C declarações globais tipo_devolvido main (lista de parâmetros) seqüência de comando tipo_devolvido função 1 (lista de parâmetros) seqüência de comando... tipo_devolvido função n (lista de parâmetros) seqüência de comando
CAPÍTULO 2 SUMÁRIO 2.1) Tipos de dados, constantes e variáveis 2.2) Operadores Aritméticos 2.3) Operadores Lógicos 2.4) Operadores Relacionais 2.5) Operadores bit a bit 2.6) Ponteiros 2.1) TIPOS DE DADOS, CONSTANTES E VARIÁVEIS Existem em C as diretivas de pré-compilação, sendo as principais: #include e #define. O include tem a finalidade de incluir bibliotecas. A diretiva define tem como função a construção de macros e a definição de constantes. A seguir são mostrados alguns exemplos: # define <nome_macro> string # define VERDADEIRO 1 # define FALSO 0 # define UM 1 # define DOIS UM+UM Há cinco tipos básicos de dados em C: caractere (char), inteiro(int), ponto flutuante(float), ponto flutuante de precisão dupla(double) e sem valor(void). As variáveis possuem modificadores de tipo. A tabela a seguir ilustra os principais tipos de dados: Modificadores Tipo Faixa Quantidade de Bits signed unsigned signed unsigned short long Não possuem modificadores de tipo char int -128 a +127 0 a 255-128 a +127 0 a 255-32.768 a + 32.767 0 a 65.535-2.147483.648 a -2.147483.647 0 a 4.294.967.295 float 6 dígitos de precisão 32 double oito dígitos de precisão 64 8 8 16 32 long dez dígitos de precisão 80
As variáveis são declaradas em 3 lugares básicos: Dentro das funções (locais); Na definição dos parâmetros das funções (parãmetros formais); Fora de todas as funções (globais); C possui modificadores de tipo de acesso, que controlam a maneira como as variáveis podem ser acessadas ou modificadas. Eles devem preceder os modificadores de tipo e os nomes que eles modificam. São eles: Const = não podem ser modificadas por seu programa,, podendo no entanro receber um valor inicial. O compilador pode colocar este tipo de variáveis em memória somente de leitura (ROM); Volatile = indica ao compilador que uma variável pode ser alterada de maneira não explicitamente especificada pelo programa. 2.2) OPERADORES ARITMÉTICOS SÍMBOLO SIGNIFICADO OPERANDOS RESULTADO + adição Inteiros, reais Inteiros, reais - subtração Inteiros, reais Inteiros, reais * multiplicação Inteiros, reais Inteiros, reais / divisão Inteiros, reais Quociente real % Módulo Inteiros Resto inteiro ++ Incremento Inteiro Inteiro -- Decremento Inteiro Inteiro 2.3) OPERADORES LÓGICOS Os operadores lógicos implementam a Álgebra de Boole, uma lógica abstrata inventada pelo matemático George Boole, no século XIX, que serve de base para a computação. A Álgebra de Boole possui os seguintes elementos principais: Conjunto de números Binários (0 e 1); Conjunto de operações, expressas por tabelas verdade, como demonstrado a seguir: A B && 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1 A! 1 0 1 0
2.4) OPERADORES RELACIONAIS SÍMBOLO SIGNIFICADO OPERANDOS RESULTADO == igualdade!= desigualdade < Menor que QUALQUER V OU F <= Menor ou igual que > Maior que >= Maior ou igual que 2.5) OPERADORES BIT A BIT Ao contrário de muitas outras linguagens, C suporta um conjunto completo de operadores bit a bit. Uma vez que C foi projetada para substituir a linguagem assembly, na maioria das tarefas de programação, era importante que tivesse a habilidade de suportar muitas das operações típicas do assembly.. Operação bit a bit refere-se a testar, atribuir, deslocar os bits de um tipo de dados. A tabela a seguir indica os operadores bit a bit: Operador Ação & AND OR ^ OR EXCLUSIVO ~ COMPLEMENTO A UM >> DESLOCAMENTO À ESQUERDA << DESLOCAMENTO À DIREITA Operadores bit a bit são encontrados freqüentemente em drivers de dispositivo. 2.6) PONTEIROS Um ponteiro é um endereço de memória. Uma variável de ponteiro guarda um ponteiro para um tipo de dado específico. Os operadores de ponteiro são: m = &a Coloca o endereço da variável a em m q = *m Coloca o conteúdo de m em q.
CAPÍTULO 3 SUMÁRIO 3.1) Instruções de Atribuição 3.2) Instruções de Seleção 3.3) Instruções de Repetição 3.4) Instruções de Entrada e Saída 3.5) Exercícios 3.1) INSTRUÇÕES DE ATRIBUIÇÃO As instruções de atribuição em C tem os seguintes formatos: <identificador> = <identificador>; = <função>; = <valor>; 3.2) INSTRUÇÕES DE SELEÇÃO C suporta 2 tipos de comandos de seleção: if (expressão) <bloco> else <bloco> <Exp1>? <Exp2> : <Exp3> switch (expressão) case (constante 1): seqüência de comandos; break... case (constante n); default; 3.3) INSTRUÇÕES DE REPETIÇÃO (ITERAÇÃO) Comandos de iteração permitem que um conjunto de instruções seja executado até que ocorra uma certa condição. Tal condição pode ser pré-definida (for) ou com final aberto (while e do-while). A tabela a seguir apresenta os comandos de iteração: for (incialização;condição;incremento) for(;;) = laço infinito while (condição) bloco de comandos; do bloco de comandos; while (condição)
3.4) INSTRUÇÕES DE ENTRADA E SAÍDA As principais funções de entrada e saída em C são printf e scanf. A tabela a seguir as apresenta com exemplos: printf ( string ); printf ( %d texto %d,a,b); printf (b) Scanf ( %d %d, &a,&b); Ambas as funções fazem uso das strings de formatação e de controle, que são descritas a seguir: CONTROLE FORMATAÇÃO \n Nova linha %c Caracter simples \b Retrocesso %d Decimal \t Tab %e Notação Científica \ Aspas %f Ponto Flutuante \\ Barra %o Octal \f Salta formulário %s Cadeia de caracteres \0 Nulo %u Decimal sem sinal %x Hexadecimal
CAPÍTULO 4 SUMÁRIO 4.1) Definição de Tipos 4.2) Vetores e Matrizes 4.3) Registros 4.4) Arquivos 4.1) DEFINIÇÃO DE TIPOS A definição de tipos em C é feita por meio do uso da expressão typedef. A principal aplicação de typedef, é na definição de estruturas. Ex.: typedef float taxa. 4.2) VETORES E MATRIZES Os nomes dos vetores em C são ponteiros que apontam para o início destas estruturas de dados. As características de um vetor são: tamanho e endereço de início. Os vetores podem ser multidimensionais. A seguir são apresentados alguns exemplos de vetores: Ex.: char nome[50]; numeros [10] [20]; 4.3) REGISTROS Uma estrutura é uma coleção de variáveis referenciadas por um nome, fornecendo uma maneira conveniente de ter informações relacionadas e agrupadas. As variáveis que compõem a estrutura são os campos. A forma geral de definição de uma estrutura e exemplos são mostrados a seguir: struct <identificador> <tipo> identificador;... <tipo> identificador; lista de variáveis;
Ex.: struct Taddr char nome [30]; char rua [50]; char cidade [30]; unsigned long int zip; end_info, binfo, cinfo; Elementos individuais das estruturas são referenciados por meio do operador.. 4.4) ARQUIVOS Originalmente a linguagem C não contém nenhum comando de E/S, sendo todas as operações feitas por meio de chamadas a funções da biblioteca C padrão. Esta abordagem torna o sistema de arquivos em C extremamente poderoso, porque dados podem ser transferidos na sua representação binária interna ou em um formato legível para seres humanos. O sistema de arquivos de C é projetado para trabalhar com uma ampla variedade de dispositivos, pois os transforma em um dispositivo lógico chamado stream, que faz com que todos se comportem de forma semelhante. Uma stream de texto é uma seqüência de caracteres e uma stream binária é uma seqüência de bytes. Em C um arquivo pode ser qualquer coisa, sendo associada a uma stream, por uma operação de abertura e dessasociado por uma operação de fechamento. Cada stream possui uma estrutura de controle de arquivo do tipo FILE, essa estrutura é definida no arquivo cabeçalho STDIO.H. O exemplo a seguir ilustra um programa que grava num arquivo: # include <stdio.h> FILE *arq; arq = fopen ( arquivo.txt, wt ); fprintf (arq, teste ); fclose (arq); FILE é uma variável do tipo ponteiro de arquivo, que identifica a posição corrente no arquivo; fopen é uma função que abre o arquivo, identificando seu modo de operação (w=escrita,r=leitura,a=anexar) e a forma dos dados (t=texto, b=binário); close é uma função que fecha o arquivo; As principais funções de entrada e saída de arquivo são: fprintf, fscanf, fgetc e fpuc.
CAPÍTULO 5 FUNÇÕES Funções são blocos de construção de C e o local onde toda a atividade do programa ocorre, sendo um adas características mais importantes do C. A forma geral de uma função em C é descrita a seguir: <tipo> nome da função (lista de parâmetros) corpo da função; ARGUMENTOS DE LINHA DE COMANDO (ARGC E ARGV) Algumas vezes é útil passar informações para um programa, quando o executamos. Esta tarefa é feita passando informações para a função main via argumentos de linha de comando. O exemplo a seguir ilustra o uso de argc e argv: Ex. # include <stdio.h> # include <conio.h> void main (int argc, char * argv[]) if (argc!= 2) printf ( Você esqueceu de digitar seu nome!!! ); exit (1); printf ( Argumento de entrada = %s,argv[1]); A linguagem C possui uma série de outras funcionalidades, a idéia foi apenas ensinar o básico. Tenho certeza entretanto que quem conhece o básico, tem condições de aprender sozinho o conteúdo da linguagem C.