Introduo a
LINGUAGEM DE
PROGRAMAO C
HISTRICO 5
CARACTERSTICAS 6
CRTICAS 7
PROGRAMA EM C 8
BIBLIOTECAS EM C 8
PALAVRAS CHAVES 9
TIPOS DE DADOS 11
A NORMA ANSI C 11
IDENTIFICADORES 12
VARIVEIS 13
PARMETROS FORMAIS 14
VARIVEIS GLOBAIS 15
CONSTANTES 18
COMANDOS DE CONTROLE 27
COMANDO DE ITERAO 29
COMANDO DE DESVIO 30
ARRANJOS 34
ESTRUTURAS 40
UNIES 41
EXEMPLOS: 41
FUNES 46
USO DE FUNES 47
FUNES EM C 47
UTILIZAO DE PARMETROS 50
APONTADORES (POINTERS) 56
APONTADORES 57
APONTADORES E ARRANJOS 59
EXEMPLOS 64
O PREPROCESSADOR C 65
Histrico
BCPL B C
Caractersticas
Crticas
D-se muita liberdade ao programador
Programa em C
Consiste de uma (main) ou mais funes
Bibliotecas em C
default
Palavras Chaves
So sempre escritas com letras minsculas
LINGUAGEM C
T I P OS D E D A D O S
Tipos de Dados
short
long
unsigned
A Norma ANSI C
Identificadores
Correto Incorreto
contador 1contador
test123 ola!turma
sala_de_aula sala-de-aula
Variveis
Variveis Locais
S pode ser referenciada dentro do bloco na qual foi definida, so criadas aps
a sua definio e so destrudas aps a sada do bloco
Parmetros Formais
Deve-se definir os parmetros e o tipo deles deve ser o mesmo definido para os
argumentos usados na chamada da funo ( o compilador no verifica isto)
Variveis Globais
Diferem das variveis locais por poderem ser usadas em qualquer parte do
cdigo
Se uma varivel local tem o mesmo nome de uma varivel global, dentro do
bloco no qual foi definido a varivel local ela ter prioridade sobre a global
O Tipo const
extern
static
register
auto
extern
Ex:
Arquivo 1: Arquivo 2:
int ap = 0; /* apontador */ extern int ap;
double val [MAXVAL]: extern double val[ ];
double empil (f) { ... }
double desempil ( ) { ... }
static
Constantes
Cdigo Significado
\b Espao
\f Alimenta formulrio
\n Pula linha
\r Carriage return
\t Tabulao horizontal
\ Aspa dupla
\ Aspa simples
\0 NULL
\\ \
\v Tabulao vertical
\a Alerta
\N Constante octal
\xN Constante hexadecimal
Operadores
atribuio
aritmticos
relacionais
lgicos
especiais
Atribuio
Forma geral:
Mltiplas atribuies
Ex:x = y = z = 0;
Operadores Aritmticos
Operador Prioridade Ao
- 3 (1) subtrao ( unrio )
+ 3 adio
* 2 multiplicao
/ 2 diviso
% 2 resto da diviso (s para int)
-- 1 decrementa
++ 1 incrementa
Ex: x = x + 1; ++x;
x = x -1; x--;
x = 10; y = ++x; y = 11
x = 10; y = x++; y = 10
Operadores Relacionais
Operador Prioridade Ao
> 4 maior que
>= 4 maior ou igual que
< 4 menor que
<= 4 menor ou igual que
== 5 igual
!= 5 diferente
Operadores Lgicos
Operador Prioridade Ao
&& 6 e
|| 7 ou
! 1 no
Operador Ao
& e
| ou
^ ou exclusivo
~ complemento de 1
>> deslocamento esquerda
<< deslocamento direita
O operador ?
Forma geral: Exp1 ? Exp2 : Exp3
Ex: x = 10;
y = x > 9 ? 100 : 200;
Os operadores & e * para pointers (ponteiros)
- Um ponteiro o endereo de uma varivel na memria
O operador , (vrgula)
-Usado para juntar vrias expresses
Ex: x = ( y = 3, y + 1);
Operador Associatividade
( ) [ ] -> . esquerda para direita
! ~ ++ - - - (tipo) * & sizeof direita para esquerda
* / % esquerda para direita
+ - esquerda para direita
<< >> esquerda para direita
> => < <= esquerda para direita
== != esquerda para direita
& esquerda para direita
^ esquerda para direita
| esquerda para direita
&& esquerda para direita
|| esquerda para direita
?: direita para esquerda
++ = -= etc. direita para esquerda
, esquerda para direita
LI NGUAGEM C
COMANDOS DE CONTROLE
Comandos de Controle
Comando de Seleo
if
Forma Geral: if (expresso) comando;
else comando;
switch
Forma Geral: switch (expresso) {
case constante1:
comando(s)
break;
case constante2:
comando(s)
break;
.
.
.
default:
comando(s)
}
Comando de Iterao
for
for (expressao_1; expressao_2; expressao_3)
inicializao
condio de
parada
incremento
comando;
while
Forma Geral: while (condio)
comando;
do-while
Forma Geral: do {
comando(s) ;
} while (condio);
Comando de Desvio
return
Forma Geral: return expresso; (opcional)
goto
Forma Geral: goto label;
.
.
.
label: comando;
break
Forma Geral: break;
exit
Forma Geral: void exit (int codigo-de-retorno);
continue
Forma Geral: continue;
Expresses
a = b + c; /* comando de atribuicao */
; /* comando nulo */
Bloco de Comandos
Comandos agrupados que so tratados como uma unidade. Devem estar entre
{ }
Exemplos
main ()
{
printf(programa em C\n);
}
pot (x, n)
int x, n;
{
int j, p;
p = 1;
for (j = 1; j <= n; ++j)
p = p * x;
return (p); }
LIGUAGEM C
ARRANJOS
Arranjos
Arranjo Bi-dimensional
Strings
Nome Funo
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 ocorrncia
de s2 em s1
Estas funes operam sobre strings terminados com o caractere null (\0)
Arranjos de strings
Inicializao de Arranjos
Ex:
main ( ) int nbranco = 0;
{ int noutro = 0;
int c, j, nbranco, noutro; int ndigito[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
int ndigito[10];
main ( )
nbranco = noutro = 0; {
for (j = 0; j < 10; j ++) int c, j;
ndigito[j] = 0;
. . . . . .
} }
Exemplos
nbranco = noutro = 0;
for (j = 0; j < 10; ++j)
ndigito [j] = 0;
Exemplos (continuao)
/* achei na posicao j, k */
LINGUAGEM C
ESTRUTURAS E UNIES
Estruturas
Uma estrutura uma coleo de uma ou mais variveis 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;
Unies
byte 1 byte 2
ch
Exemplos:
struct data static int tab_dia[2][13] = {
{ {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
int dia; {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
int mes; };
int ano;
int dia_ano;
char nome_mes[4];
};
Exemplos (continuao)
#define SIM 1
#define NAO 0
empalavra = NAO;
nl = np = nc = 0;
while ((c = getchar( ) ) != EOF)
{
nc++;
if (c = = \n)
nl++;
if (c = = || c = = \n || c = = \t)
empalavra = NAO;
else if (empalavra = = NAO)
{
empalavra = SIM;
np++;
}
}
}
{
int j, n = 0;
n = 10 * n + s[j] - 0;
return (n);
Exemplos (continuao)
comprime (s, c) /* remove todos os c de s */
char s[ ];
int c;
{
int j, k;
int b;
for (b = 0; n != 0; n >>= 1)
if (n & 01)
b++;
return (b);
}
Exemplos (continuao)
pesq-binaria(x, v, n) /* acha x em v[0] ... v[n-1] */
int x, v[ ], n;
{
int inicio, fim, meio;
inicio = 0;
fim = n -1;
while (inicio <= fim)
{
meio = (inicio + fim) / 2;
if (x < v[meio])
fim = meio - 1;
else if (x > v[meio])
inicio = meio + 1;
else /* achou */
return(meio);
}
return (-1);
}
Exemplos (continuao)
fahr = inicio;
while (fahr <= fim)
{
celsius = (5.0 / 9.0) * (fahr - 32.0);
printf(%4.0f %6.1f\n, fahr, celsius);
fahr = fahr + incr;
}
}
main( )
{
int fahr;
LINGUAGEM C
FUNES
Uso de Funes
Funes dividem grandes tarefas de computao em partes menores e simples
Um programa estruturado em C como um conjunto de definies individuais
de funes
O programa fonte pode ser dividido em arquivos mltiplos
Funes em C
Comunicao feita por argumentos e valores retornados
O return define um mecanismo para retornar um valor de uma funo
chamada para a sua chamadora
As funes podem ocorrer em qualquer ordem no arquivo fonte
C permite que declaremos o tipo que uma funo ir retornar
A rotina chamadora deve estabelecer que a funo chamada retorna um valor
no inteiro
Por default, o tipo de uma funo int
func1 (ex.x);
if (num < 0)
{
printf (\n Erro: fatorial de um numero negativo!);
fact = -1.0;
}
else
{
fact = 1.0;
for (aux = num; aux > 0: aux --)
fact *= aux;
}
return (fact);
}
Utilizao de Parmetros
sinal de menos
cadeia de dgitos (tamanho mnimo)
um ponto
cadeia de dgitos
modificador de tamanho (l)
Caracteres de converso: d, o, x, u, c, s, e, f e g
Ex:
printf(fatorial de %d = %g\n, num, fatorial(num));
Formato Significado
%c caracter
%d inteiro decimal com sinal
%i inteiro decimal com sinal
%e notao cientfica com e
%E notao cientfica 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 endereo de um ponteiro
%s cadeia de caracteres
%u inteiro decimal sem sinal
%x hexadecimal sem sinal (letras minsculas)
%X hexadecimal sem sinal (letras maisculas)
%% imprime o caracter %
Exemplo
main ( )
{
int num;
double fatorial;
{
if (x < 0)
{
printf (\n Erro: fatorial de um numero negativo!!!);
return (-1);
}
else if (x == 0)
return (1);
else
return (x * fatorial (x - 1));
}
A funo Scanf
Usada para a entrada (leitura) de dados, para string ler at o primeiro espao
em branco, ou o return, ou o tab.
Forma Geral:
scanf ( controle, arg1, arg2, . . .)
Espaos em branco
Caracteres ordinrios
Especificaes de converso
Um nmero (opcional) especificando o tamanho do campo
Caracteres de converso
Ex: Note que a funo scanf est usando passagem de parmetros por
referncia
#include <stdio.h>
main ( ) /* calculadora elementar */
{
double soma, v;
soma = 0;
while (scanf (%lf, &v) != EOF)
printf (\t%.2f\n, soma += v);
}
Formato Significado
%c l um caracter
%d l um inteiro decimal com sinal
%i l um inteiro decimal com sinal
%e l um nmero ponto flutuante
%f l um nmero ponto flutuante
%g l um nmero ponto flutuante
%o l um octal
%p l o endereo de um ponteiro
%s l uma cadeia de caracteres
%u l um inteiro sem sinal
%x l um hexadecimal sem sinal
LINGUAGEM C
Apontadores
Apontadores e Arranjos
arranjo de apontadores
ptr = &pessoa;
Para ler ou gravar num arquivo, pode-se usar: getc ( ), putc ( ), fscanf ( ),
fprintf ( )
Ex: c = getc (fp);
putc (c, fp);
Exemplos
#include <stdio.h>
O Preprocessador C
Exemplo:
#define max (A, B) ((A) > (B) ? (A) : (B))