(Parte 1 de 6)

INTRODUÇÃO À LINGUAGEM C Versão 2.0

Gerência de Atendimento ao Cliente CENTRO DE COMPUTAÇÃO UNICAMP

1. Introdução3
2. Sintaxe4
2.1. Identificadores4
2.2. Tipos5
2.2.1. Tipos Inteiros5
2.2.2. Tipos Flutuantes6
2.3. Operadores6
2.3.1. Operador de atribuição6
2.3.2. Aritméticos7
2.3.3. Operadores de relação e lógicos7
2.3.4. Incremento e decremento8
2.3.5. Precedência8
2.3.6. Operador cast8
2.3.7. Operador sizeof9
3. Funções Básicas da Biblioteca C9
3.1. Função printf()9
3.2. Função scanf()10
3.3. Função getchar()1
3.4. Função putchar()1
4. Estruturas de Controle de Fluxo12
4.1. If12
4.2. If-else-if13
4.3. Operador ternário13
4.4. Switch13
4.5. Loop for14
4.6. While15
4.7. Do while16
4.8. Break17
4.9. Continue17
5. Matrizes17
5.1. Matriz unidimensional17
5.2. Matriz Multidimencional18
5.3. Matrizes estáticas19
5.4. Limites das Matrizes19
6. Manipulação de Strings19
6.1. Função gets()20
6.2. Função puts()20
6.3. Função strcpy()20
6.4. Função strcat()21
6.5. Função strcmp()21
7. Ponteiros2
7.1. Declarando Ponteiros2
7.2. Manipulação de Ponteiros2
7.3. Expressões com Ponteiros23
7.4. Ponteiros para ponteiros24
7.5. Problemas com ponteiros24
8. Ponteiros e Matrizes24
8.1. Manipulando Matrizes Através de Ponteiros24
8.2. String de Ponteiros25
8.3. Matrizes de Ponteiros26
9. Funções27
9.1. Função sem Retorno27
9.3. Parâmetros Formais28
9.3.1. Chamada por Valor28
9.3.2. Chamada por Referência28
9.4. Classe de Variáveis29
9.4.1. Variáveis locais29
9.4.2. Variáveis Globais30
9.4.3. Variáveis Estáticas30
9.5. Funções com Matrizes30
9.5.1. Passando Parâmetros Formais30
9.5.2. Alterando o Valores da Matriz31
10. Argumentos da Linha de Comando31
1. Estruturas32
12. Noções de Alocação Dinâmica3
13. Noções de Maninipulação de Arquivos34

1. Introdução

A linguagem C foi criada por Dennis Ritchie, em 1972, no centro de Pesquisas da Bell Laboratories. Sua primeira utilização importante foi a reescrita do Sistema Operacional UNIX, que até então era escrito em assembly.

Em meados de 1970 o UNIX saiu do laboratório para ser liberado para as universidades. Foi o suficiente para que o sucesso da linguagem atingisse proporções tais que, por volta de 1980, já existiam várias versões de compiladores C oferecidas por várias empresas, não sendo mais restritas apenas ao ambiente UNIX, porém compatíveis com vários outros sistemas operacionais.

O C é uma linguagem de propósito geral, sendo adequada à programação estruturada. No entanto é mais utilizada escrever compiladores, analisadores léxicos, bancos de dados, editores de texto, etc..

A linguagem C pertence a uma família de linguagens cujas características são: portabilidade, modularidade, compilação separada, recursos de baixo nível, geração de código eficiente, confiabilidade, regularidade, simplicidade e facilidade de uso.

Visão geral de um programa C

A geração do programa executável a partir do programa fonte obedece a uma seqüência de operações antes de tornar-se um executável. Depois de escrever o módulo fonte em um editor de textos, o programador aciona o compilador que no UNIX é chamado pelo comando c. Essa ação desencadeia uma seqüência de etapas, cada qual traduzindo a codificação do usuário para uma forma de linguagem de nível inferior, que termina com o executável criado pelo lincador.

Editor (módulo fonte em C) Ð

Pré-processador (novo fonte expandido) Ð

Compilador (arquivo objeto) Ð Lincador (executável)

2. Sintaxe

A sintaxe são regras detalhadas para cada construção válida na linguagem C.

Estas regras estão relacionadas com os tipos, as declarações, as funções e as expressões.

Os tipos definem as propriedades dos dados manipulados em um programa. As declarações expressam as partes do programa, podendo dar significado a um identificador, alocar memória, definir conteúdo inicial, definir funções.

As funções especificam as ações que um programa executa quando roda. A determinação e alteração de valores, e a chamada de funções de I/O são definidas nas expressões.

As funções são as entidades operacionais básicas dos programas em C, que por sua vez são a união de uma ou mais funções executando cada qual o seu trabalho. Há funções básicas que estão definidas na biblioteca C. As funções printf() e scanf() por exemplo, permitem respectivamente escrever na tela e ler os dados a partir do teclado. O programador também pode definir novas funções em seus programas, como rotinas para cálculos, impressão, etc.

Todo programa C inicia sua execução chamando a função main(), sendo obrigatória a sua declaração no programa principal.

Comentários no programa são colocados entre /* e */ não sendo considerados na compilação.

Cada instrução encerra com ; (ponto e vírgula) que faz parte do comando.

main()/* função obrigatória */
}

2.1. I dentificadores

São nomes usados para se fazer referência a variáveis, funções, rótulos e vários outros objetos definidos pelo usuário. O primeiro caracter deve ser uma letra ou um sublinhado. Os 32 primeiros caracteres de um identificador são significativos. É case sensitive, ou seja, as letras maiúsculas diferem das minúsculas.

2.2. Tipos

Quando você declara um identificador dá a ele um tipo. Os tipos principais podem ser colocados dentro da classe do tipo de objeto de dado. Um tipo de objeto de dados determina como valores de dados são representados, que valores pode expressar, e que tipo de operações você pode executar com estes valores.

2.2.1. Tipos Inteiros char[0,128)igual a signed char ou unsigned char signed char(-128,128)inteiro de pelo menos 8 bits unsigned char(0,256)mesmo que signed char sem negativos short(2-15,215inteiro de pelo menos 16 bits tamanho pelo menos igual a char unsigned sort[0,216)mesmo tamanho que sort sem negativos int(2-15,215)inteiro de pelo menos 16 bits; tamanho pelo menos igual a short unsigned int[0,216)mesmo tamanho que int sem negativos long(2-31,231)inteiro com sinal de pelo menos 32 bits; tamanho pelo menos igual a int unsigned log[0,232)mesmo tamanho que long sem valores negativos tipos de objetos de dados tipos não escalares tipos de estrutura tipos de união tipos de matriz tipos de função tipos incompletos tipos escalares tipos ponteiros tipos aritméticos tipos ponteiros para funções tipos ponteiros para objetos de dados tipos ponteiros para tipos incompletos tipos flutuantes tipos inteiros float double long double

Char signed char unsigned char short unsigned sort int unsigned int long unsigned long tipos de enumeração

Uma implementação do compilador pode mostrar um faixa maior do que a mostrada na tabela, mas não uma faixa menor. As potencias de 2 usadas significam: 215 32.768 216 65536 231 2.147.483.648 232 4.294.967.298

2.2.2. Tipos Flutuantes float[3.4-38, 3.4+38]pelo menos 6 dígitos de precisão decimal

Ex:

printf("char%d",sizeof(c));
printf("int%d",sizeof(i));
printf("float%d",sizeof(f));
printf("double%d",sizeof(d));

main() { char c; unsigned char uc; int i; unsigned int ui; float f; double d; printf("unsigned char %d",sizeof(uc)); printf("unsigned int %d",sizeof(ui)); }

2.3. Operadores

2.3.1. Operador de atribuição

O operador de atribuição em C é o sinal de igual "=". Ao contrário de outras linguagens, o operador de atribuição pode ser utilizado em expressões que também envolvem outros operadores.

2.3.2. Aritméticos

Os operadores *, /, + e - funcionam como na maioria das linguagens, o operador % indica o resto de uma divisão inteira.

2.3.3. Operadores de relação e lógicos

Relação refere-se as relações que os valores podem ter um com o outro e lógico se refere às maneiras como essas relações podem ser conectadas. Verdadeiro é qualquer valor que não seja 0, enquanto que 0 é falso. As expressões que usam operadores de relação e lógicos retornarão 0 para falso e 1 para verdadeiro.

Tanto os operadores de relação como os lógicos tem a precedência menor que os operadores aritméticos. As operações de avaliação produzem um resultado 0 ou 1.

relacionais lógicos

Ex: main() { int x=2,y=3,produto; if ((produto=x*y)>0) printf("é maior"); }

2.3.4. Incremento e decremento

O C fornece operadores diferentes para incrementar variáveis. O operador soma 1 ao seu operando, e o decremento subtrai 1. O aspecto não usual desta notação é que podem ser usado como operadores pré-fixo(++x) ou pós-fixo(x++).

++x incrementa x antes de utilizar o seu valor. x++ incrementa x depois de ser utilizado.

2.3.5. Precedência

O nível de precedência dos operadores é avaliado da esquerda para a direita. Os parênteses podem ser utilizados para alterar a ordem da avaliação.

++ -- mais alta * / % + - mais baixa

Sintaxe: (tipo)expressão

Podemos forçar uma expressão a ser de um determinado tipo usando o operador cast.

2.3.7. Operador sizeof

(Parte 1 de 6)

Comentários