Introdução à Linguagem C Eduardo Simões de Albuquerque Instituto de Informática UFG 13/03/2006 1 História Inventada e desenvolvida por Dennis Ritchie em um DEC- PDP 11 Originária de: BCPL desenvolvida por Martin Richards B inventada por Ken Thompson Vários sistemas operacionais, compiladores são escritos em C O padrão era dado pelo livro de Ritchie Hoje existe um padrão ANSI para C 13/03/2006 2 1
Características gerais Linguagem de finalidade geral Nível médio combina alto nível com baixo nível» permite a manipulação direta de bits, bytes, palavras e apontadores possui apenas 28 palavras reservadas Estruturada Linguagem para programadores for(;p("\n"),r-;p(" "))for(e=c;e- ;P("_"+(*u++/8)%2))P(" "+(*u/4)%2); 13/03/2006 3 Características Possui modernos fluxos de controle e estruturas de dados e, um rico conjunto de operadores Possui apenas 28 palavras-chaves (reservadas) Permite economia de expressão e gera códigos reduzidos Permite estruturar o software em módulos, arquivos fontes, bibliotecas É facilmente transportável (ANSI C) Possui alocação dinâmica de memória Permite recursividade 13/03/2006 4 2
Críticas Dá-se muita liberdade ao programador Programas ininteligíveis, acesso direto a memória Não permite o aninhamento de funções Não há verificação de tipos e nem de limites de arranjos (arrays) Simplifica o design do compilador C O uso de apontadores pode se tornar muito confuso Mensagens de erro muito vagas ( limitação do compilador ) Constatação: não possui muitas facilidades para tratamento de arquivos 13/03/2006 5 O programa C Consiste de uma (main) ou mais funções Um programa começa a ser executado no início da função main ( ), que invocará as demais funções A comunicação entre as funções é feita através da passagem de argumentos e/ou variáveis globais 13/03/2006 6 3
Hello World #include <stdio.h> main() {printf ( Hello World ); } { Em pascal} Program Hello(input, output) begin write ( Hello World ); end. 13/03/2006 7 Tipos de arquivos Arquivos fonte *.c (programa) o código propriamente dito Arquivos fonte *.h (header = cabeçalho) exemplos: stdio.h, math.h contém declarações de tipos e protótipos de funções 13/03/2006 8 4
Bibliotecas C é uma linguagem minimalista A maior parte da funcionalidade é dada por bibliotecas São utilizadas para facilitar o desenvolvimento de software Por exemplo, stdlib.a é sempre incluída em todos os programas C por default 13/03/2006 9 Palavras reservadas auto break case char continue default do double else entry extern float for goto if int long register return short sizeof static struct switch typedef union unsigned while 13/03/2006 10 5
Variáveis e Constantes - Tipos e Declarações Declaração deve vir antes do uso Os nomes das variáveis são constituídos de letras e dígitos, onde o primeiro caractere é uma letra Há diferença entre letras maiúsculas e minúsculas Uso de letras maiúsculas para constantes (convenção) 13/03/2006 11 Tipos de dados char int short, long, unsigned float double void 13/03/2006 12 6
Tamanho dos dados arquitetura de 16 bits Tipo Tamanho em Bits Intervalo char 8-127 à 127 unsigned char 8 0 à 255 signed char 8-127 à 127 int 16-32.767 à 32.767 unsigned int 16 0 à 65.535 signed int 16 Igual a int short int 16 Igual a int unsigned short int 8 0 à 65.535 signed short int 8 Igual a short int long int 32-2.147.483.647 à 2.147.483.647 unsigned long int 32 0 à 4.294.967.295 signed long int 32 Igual a long int float 32 Seis dígitos de precisão double 64 Dez dígitos de precisão long double 128 Dez dígitos de precisão 13/03/2006 13 Identificadores Usados para definir nomes de variáveis, funções, rótulos (labels), etc. Consiste de um ou mais caracteres, o primeiro caracter deve ser letra ou _, os demais devem ser letras, ou números ou _ Pode ter qualquer tamanho, 6 primeiros caracteres são usados como nomes externos 31 primeiros caracteres para nomes internos 13/03/2006 14 7
Exemplos de identificadores Correto contador test123 sala_de_aula Incorreto 1contador ola!turma sala-de-aula 13/03/2006 15 Variáveis É uma posição da memória, identificada por um nome (identificador), usada para guardar um valor que poderá ser usado, modificado pelo programa Todas as variáveis devem ser declaradas Uma declaração consiste de um tipo (adicionado de algum qualificador) e de uma lista de variáveis (separadas por vírgula) que sejam deste tipo 13/03/2006 16 8
Exemplo de variáveis int i, j, k l,m; float salario, preco, desconto; char nome [30]; short int valor = 0; char letra; unsigned int idade; 13/03/2006 17 Escopo de declaração das variáveis Locais declaradas dentro de funções Globais declaradas fora das funções Parâmetros das funções definição de parâmetros de funções 13/03/2006 18 9
Tipos de armazenamento de variáveis extern static register auto (default) 13/03/2006 19 Exemplo do uso de extern /* arquivo exp.c*/ int ap = 0; double val[30];...... /* arquivo imp.c*/ extern int ap; extern double val[];...... 13/03/2006 20 10
Exemplo do uso de static int minhafuncao(int val) { static int nrovezesexec = 0; nrovezesexec ++; return (val + 10); } 13/03/2006 21 Constantes Valores fixos que não podem ser alterados #define MAX 100 #define PI 3.14 13/03/2006 22 11
Operadores Atribuição aritméticos relacionais lógicos manipulação de bits (bitwise) especiais 13/03/2006 23 Atribuição pode ser usado em qualquer expressão válida em C Forma geral:» nome-da variavel = expressao ; O nome-da-variavel deve ser uma variável simples ou um ponteiro Múltiplas atribuições são permitidas x = y = z = 0; 13/03/2006 24 12
Operadores aritméticos Operador Prioridade Ação - 3 (1) subtração ( unário ) + 3 adição * 2 multiplicação / 2 divisão % 2 resto da divisão (só para int) -- 1 decrementa ++ 1 incrementa 13/03/2006 25 Exemplos x = x + 1; ++x; x = x -1; x--; x = 10; y = ++x; y = 11 x = 10; y = x++; y = 10 13/03/2006 26 13
Operadores relacionais Operador Prioridade Ação > 4 maior que > = 4 maior ou igual que < 4 menor que < = 4 menor ou igual que = = 5 igual! = 5 diferente 13/03/2006 27 Operadores lógicos Operador Prioridade Ação && 6 e 7 ou! 1 não 13/03/2006 28 14
Operadores para manipulação de bits (inteiros e caracteres) Operador Ação & e ou ^ ou exclusivo ~ complemento de 1 >> deslocamento à esquerda << deslocamento à direita 13/03/2006 29 O operador? Forma geral: Exp1? Exp2 : Exp3 Ex: x = 10; y = x > 9? 100 : 200; y receberá o valor 100 13/03/2006 30 15
Os operadores & e * para ponteiros & fornece o endereço de uma variável * fornece o conteúdo de um ponteiro Ponteiros podem ser usados para: acesso rápido a elementos de arranjos; modificar os parâmetros de chamada de uma função; e acesso a estruturas dinâmicas 13/03/2006 31 Exemplo Int contador, q, * m; contador = 9; m = &contador;/*m recebe o endereço de contador*/ q = *m; /*q recebe o valor que está armazenado no endereço de m (9)*/ 13/03/2006 32 16
Comandos de Controle Todo comando em C termina com ; seleção iteração desvio rótulo (label) expressão bloco 13/03/2006 33 Seleção: if Forma Geral: if (expressão) comando; else comando; 13/03/2006 34 17
Seleção: switch Forma Geral:» switch (expressão) {» case constante1:» comando(s)» break;» case constante2:» comando(s)» break;»...» default:» comando(s)» } 13/03/2006 35 Iteração: for For (expressao_1;/*inicio*/ expressao_2; /*parada*/ expressao_3)/*incremento*/ Loop infinito: for (; ;) comando; for sem corpo: for ( t=0; t < VALOR; t++); 13/03/2006 36 18
Iteração: while e do-while Forma Geral: while (condição)» comando; Forma Geral: do {» comando(s) ; } while (condição); 13/03/2006 37 Desvio return» Forma Geral: return expressão; (opcional) goto» Forma Geral: goto label;»...» label: comando; break» Forma Geral: break; 13/03/2006 38 19
Expressões Qualquer expressão válida em C seguida de um ; func ( ); /* chamada de funcao */ a = b + c; /* comando de atribuicao */ ; /* comando nulo */ 13/03/2006 39 Bloco de comandos: {} Comandos agrupados que são tratados como uma unidade Ex: main () { printf( programa em C\n ); } 13/03/2006 40 20
Arranjos (arrays) Coleção de variáveis do mesmo tipo referenciadas por um só nome. Um elemento específico num arranjo é localizado por um índice ou mais Podem ter de 1 a N dimensões Pode-se declarar arranjos de quaisquer tipos de dados Os índices começam sempre de 0 C não faz testes para os limites de um arranjo 13/03/2006 41 Arranjos multi-dimensionais Arranjos com várias dimensões são declarados colocando-se a dimensão adicional dentro de outro par de colchetes Ex: float matriz [2] [2]; 13/03/2006 42 21
Strings Não existe o tipo String São arranjos de caracteres Terminam com o caracter nulo ( \0 ) Ex: char s [11]; s pode armazenar 10 caracteres s [10] deve ser o caracter null ( \0 ) 13/03/2006 43 Funções de String Nome Função strcpy (s1, s2) copia s2 em s1 strcat (s1, s2) concatena s2 no fim de s1 strlen (s1) retorna o tamanho de s1 strcmp (s1, s2) retorna 0 se s1 e s2 forem do mesmo tamanho retorna < 0 se s1 < s2 retorna > 0 se s1 > s2 strchr (s1, ch) retorna um ponteiro para o primeiro caracter de ch em s1 strstr (s1, s2) retorna um ponteiro para a primeira ocorrência de s2 em s1 13/03/2006 44 22
Estruturas coleção de uma ou mais variáveis que podem ser de tipos diferentes e que passam a ser referenciadas por um único nome Forma Geral: struct tag {.. tipo nome-da variavel; tipo nome-da variavel; tipo nome-da variavel;. } variaveis-estruturas; 13/03/2006 45 Exemplo de estrutura Struct funcionario { int matricula; char nome [30]; }; float salario; struct funcionario fun1; fun1.matricula = 1546; 13/03/2006 46 23
Exemplo de um programa /* imprimir a tabela de conversão Fahrenheit-Celsius para f = 0, 20,..., 300 */ #define INICIO 0/*limite inferior da tabela*/ #define FIM 300 /*limite superior*/ #define INCR 20 /* incremento */ main( ) {int fahr; for (fahr = INICIO; fahr <= FIM; fahr += INCR) printf( %4.0f %6.1f\n,fahr,(5.0/9.0)*(fahr - 32));} 13/03/2006 47 Funções Funções dividem grandes tarefas de computação em partes menores e simples Um programa é estruturado como um conjunto de definições individuais de funções O programa fonte pode ser dividido em arquivos múltiplos 13/03/2006 48 24
Funções em C Comunicação feita por argumentos e valores retornados O return define um mecanismo para retornar um valor de uma função chamada para a sua chamadora As funções podem ocorrer em qualquer ordem no arquivo fonte C permite que declaremos o tipo que uma função irá retornar 13/03/2006 49 Exemplo de passagem de parâmetro struct exemplo { char x; int y; } ex; func1 (ex.x); Passagem do endereço Ex: func2 (&ex.x); Passagem de uma Estrutura por referência» func3 (&ex); 13/03/2006 50 25
Entrada e saída As funções de entrada e saída estão definidas no arquivo header stdio.h A Função Printf Permite a impressão de quantidades numéricas, strings, caracteres, etc.» Forma Geral: printf (controle, arg1, arg2,... ) 13/03/2006 51 Escapes de formatação Formato Significado %c caracter %d inteiro decimal com sinal %i inteiro decimal com sinal %e notação científica com e %E notação científica com E %f ponto flutuante decimal %g escolhe %e ou %f,o menor dos dois formatos %G escolhe %E ou %f,o menor dos dois formatos %o octal %p imprime o endereço de um ponteiro %s cadeia de caracteres %u inteiro decimal sem sinal %x hexadecimal sem sinal (letras minúsculas) %X hexadecimal sem sinal (letras maiúsculas) %% imprime o caracter % 13/03/2006 52 26
A função scanf Usada para a entrada (leitura) de dados Forma Geral:» scanf ( controle, arg1, arg2,...) 13/03/2006 53 Exemplo do uso de scanf } #include <stdio.h> main ( ) /* calculadora elementar */ { double soma, v; soma = 0; while (scanf ( %lf, &v)!= EOF) printf ( \t%.2f\n, soma += v); 13/03/2006 54 27