Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso de Linguagem C PDF
Curso de Linguagem C PDF
Curso de Linguagem C
Rodolfo Jardim de Azevedo
Instituto de Computao
UNICAMP
Curso de Linguagem C
Programao Estruturada
n
Curso de Linguagem C
Declarao de variveis
n
Curso de Linguagem C
Curso de Linguagem C
Laos
n
Curso de Linguagem C
Testes de condies
n
Curso de Linguagem C
A linguagem C
n
Curso de Linguagem C
Curso de Linguagem C
Sensvel ao caso
n
Curso de Linguagem C
10
Programa exemplo
/* Este o primeiro programa */
#include <stdio.h>
main()
{
printf(Alo mundo\n);
}
n
Curso de Linguagem C
11
Curso de Linguagem C
12
#include <stdio.h>
n
Curso de Linguagem C
13
main()
n
Curso de Linguagem C
14
{
n
Curso de Linguagem C
15
printf(Alo mundo\n);
n
Curso de Linguagem C
16
}
n
Curso de Linguagem C
17
Blocos de cdigo
n
Curso de Linguagem C
18
Ponto e vrgula
n
Curso de Linguagem C
19
Chaves
n
Curso de Linguagem C
20
Comentrios
n
Na linguagem C, os comentrios so
delimitados por /* e */ como pode ser
visto na primeira linha do programa
anterior. No permitido colocar
comentrios aninhados. Os
comentrios podem vir em qualquer
posio do programa e no apenas em
linhas separadas. Eles tambm podem
comear em uma linha e terminar em
outra.
Curso de Linguagem C
21
Palavras reservadas
n
Curso de Linguagem C
22
Palavras reservadas
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
23
Variveis, constantes,
operadores e expresses
n
Curso de Linguagem C
Curso de Linguagem C
24
Identificadores
n
Curso de Linguagem C
25
Tipos de dados
n
Curso de Linguagem C
26
Tipos de dados
Tipo Extenso
em bits
char
8
int
16
float
32
double
64
void
0
Escala
-128 a 127
-31768 a 32767
3.4E-38 a 3.4E+38
1.7E-308 a 1.7E308
sem valor
Curso de Linguagem C
27
Modificadores de tipo
n
Curso de Linguagem C
28
Modificadores de tipo
Tipo
char
int
short int
long int
float
short float
long float
double
short double
long double
Extenso em bits
8
16
16
32
32
32
64
64
64
80
Curso de Linguagem C
29
Declarando variveis
n
30
Exemplos de declarao de
varivel
int i, j, l;
n short int si;
n unsigned int ui;
n long inteiro_grande;
n double balanco, lucro, prejuizo;
n
Curso de Linguagem C
Curso de Linguagem C
31
Onde declarar?
n
Curso de Linguagem C
32
Varivel global
n
Curso de Linguagem C
33
Varivel local
n
Curso de Linguagem C
34
Parmetro (argumento)
n
Curso de Linguagem C
35
Programa exemplo:
/* soma os nmeros de 0 a 9 */
int soma;
/* Varivel global */
main()
{
int cont;
/* Varivel local */
soma = 0;
/* inicializa varivel soma */
for (cont = 0; cont < 10; cont ++) {
total(cont);
display();
}
}
Curso de Linguagem C
36
Funo total()
/* acumula no total parcial */
total(x)
int x;
/* Parmetro formal */
{
soma = x + soma;
}
Curso de Linguagem C
37
Funo display()
display()
{
int cont;
/* Varivel local */
/* esta varivel cont diferente
daquela declarada em main() */
for(cont = 0; cont < 10; cont ++) printf(-);
printf(A soma atual %d, soma);
}
Curso de Linguagem C
38
Comentrios
n
Curso de Linguagem C
39
Inicializao de variveis
n
Curso de Linguagem C
40
Constantes
n
Curso de Linguagem C
41
Exemplos de Constantes
Tipo de dado
Exemplo
char
int
long int
short int
unsigned int
float
double
a
n 9
1
123 2100 -234
35000 -34
10
-12 90
10000 987 40000
123.23 4.34E-3
123.23 12312333 -0.9876
Curso de Linguagem C
42
Curso de Linguagem C
43
Constantes strings
n
Curso de Linguagem C
44
Curso de Linguagem C
45
Significado
retrocesso
avano de pgina
mudana de linha
retorno de carro
tab horizontal
aspas duplas
aspas simples
ASCII 0
barra invertida
tab vertical
alerte (beep)
constante hexadecimal
Curso de Linguagem C
46
Operadores
n
Curso de Linguagem C
47
Operadores aritmticos
Operador
+
*
/
%
-++
Ao
subtrao, tambm menos unrio
adio
multiplicao
diviso
resto da diviso
decremento
incremento
Curso de Linguagem C
48
Exemplo:
main()
{
int x = 10, y = 3;
printf(%d\n, x / y);
/* exibir 3 */
printf(%d\n, x % y);
/* exibir 1, o resto da diviso de inteiros */
x = 1;
y = 2;
printf(%d %d\n, x / y, x % y);
/* exibir 0 e 1 */
Curso de Linguagem C
49
Exemplo (continuao)
x ++;
printf(%d\n, x); /* exibir 2*/
printf(%d %d\n, x++, ++y);/* exibir 2 e 3 */
/* neste caso, x s incrementado depois que o
comando
executado enquando y incrementado antes */
}
Curso de Linguagem C
50
Operadores de relao
Operador
Ao
>
maior que
>=
maior ou igual a
<
menor que
<=
menor ou igual a
==
igual a
!=
no igual a
Curso de Linguagem C
51
Operadores lgicos
Operador
&&
||
!
Ao
AND
OR
NOT
Curso de Linguagem C
52
Observao
n
Curso de Linguagem C
53
Operador de atribuio
n
O operador = o operador de
atribuio. Ao contrrio de outras
linguagens, C permite que o operador
de atribuio seja usado em
expresses com outros operadores.
int a, b, c;
a = b = c = 1; /* atribui 1 s 3 variveis */
((a = 2 * b) > c)
/* a = 2 e a comparao
resulta em 1 */
Curso de Linguagem C
54
Expresses
n
Os operadores, as constantes e as
variveis so os componentes das
expresses. Uma expresso em C
qualquer combinao vlida desses
componentes.
Curso de Linguagem C
55
Converses de tipos
n
Curso de Linguagem C
56
Regra 1
n
Curso de Linguagem C
57
Regra 2
n
Curso de Linguagem C
58
Type cast
n
Curso de Linguagem C
59
Exemplo:
main()
{
int x = 3;
printf(%f %f\n, (float) x / 2, (float) (x / 2));
/* sero impressos na tela 1.5 e 1.0 pois no primeiro
caso, x convertido para float e depois dividido, j
no segundo, somente o resultado convertido para
float */
}
Curso de Linguagem C
60
Modificadores de acesso
n
Curso de Linguagem C
61
Register
n
Curso de Linguagem C
62
Static
n
Curso de Linguagem C
63
Exemplo:
/* Exemplo de varivel static */
main()
{
printf(%d\n, numero());
/* imprimir 0 */
printf(%d\n, numero());
/* imprimir 1 */
}
numero()
{
static valor = 0; /* atribuio s executada 1 vez */
return valor ++;
}
Curso de Linguagem C
64
printf()
Rotina de finalidade geral para sada
pelo console
n A funo printf() serve para mostrar
mensagens na tela. Sua forma geral
n
Curso de Linguagem C
65
string de controle
n
Curso de Linguagem C
66
Comandos de formatao
Todos os comandos de formatao
comeam por % que seguido pelo
cdigo de formatao
n Deve haver exatamente o mesmo
nmero de argumentos quanto forem os
comandos de formatao e eles devem
coincidir em ordem
n
Curso de Linguagem C
67
Comandos de formatao
Cdigo
%c
%d
%i
%e
%f
%g
%o
%s
%u
%x
%%
%p
%n
Formato
um nico caracter
decimal
decimal
notao cientfica
ponto decimal flutuante
usa %e ou %f - aquele que for menor
octal
string de caracteres
decimal sem sinal
hexadecimal
sinal %
exibe um ponteiro
o argumento associado ser um ponteiro inteiro no
qual ser colocado o nmero de caracteres escritos
at o momento
Curso de Linguagem C
68
Curso de Linguagem C
69
Curso de Linguagem C
70
Comprimento mximo
n
Curso de Linguagem C
71
Curso de Linguagem C
72
Alinhamento
n
Curso de Linguagem C
73
Modificadores de formatao
n
Curso de Linguagem C
74
Exemplos
Comando printf()
(%-5.2f, 123.234)
(%5.2f, 3.234)
(%10s, alo)
(%-10s, alo)
(%5.7s, 123456789)
(%5.4d, 123)
Resultado
123.23
3.23
alo
alo
1234567
0123
Curso de Linguagem C
75
scanf()
Rotina de finalidade geral para entrada
pelo console
n A funo scanf() serve para ler
informaes do teclado. Sua forma
geral
n
Curso de Linguagem C
76
string de controle
n
Curso de Linguagem C
77
Especificadores de formato
Todos os especificadores de formato
comeam por % que seguido por um
caracter que indica o tipo de de dado
que ser lido
n Deve haver exatamente o mesmo
nmero de argumentos quanto forem os
especificadores de formato e eles
devem coincidir em ordem
n
Curso de Linguagem C
78
Especificadores de formato
Cdigo
%c
%d
%i
%e
%f
%o
%s
%x
%p
%n
L
nico caracter
decimal
decimal
nmero com ponto flutuante
numero com ponto decimal flutuante
nmero octal
string de caracteres
hexadecimal
ponteiro
recebe um valor inteiro igual ao nmero de
caracteres lidos at o momento
Curso de Linguagem C
79
Caracter branco
Um caracter branco na string de
controle faz com que scanf() passe por
cima de um ou mais caracteres brancos
na string de entrada
n Um caracter branco um espao, um
tab ou um \n
n
Curso de Linguagem C
80
Caracter no branco
Um caracter no branco na string de
controle faz com que scanf() leia e
desconsidere um caracter coincidente.
Se o computador no encontrar o
caracter especificado, scanf terminar
n O comando %d,%d far com que
scanf leia um inteiro, depois leia e
desconsidere uma vrgula e finalmente,
leia um outro inteiro
n
Curso de Linguagem C
81
Curso de Linguagem C
82
Ignorar entrada
n
Curso de Linguagem C
83
Curso de Linguagem C
84
Espaos, tabs e \n
n
Curso de Linguagem C
85
Curso de Linguagem C
86
Curso de Linguagem C
87
if
O comando if serve para executar
comandos de acordo com uma
determinada condio
n A forma geral do comando if
n
if (condio) comando;
else comando;
n
Curso de Linguagem C
88
Exemplo
/* programa do nmero mgico */
#include <stdlib.h>
main()
{
int magico, adivinhacao;
magico = rand() % 10; /* gerar um nmero */
printf(Adivinhe o nmero: );
scanf(%d, &adivinhacao);
if (adivinhacao == magico)
printf(** nmero certo **);
else
printf(-- nmero errado --);
}
Curso de Linguagem C
89
if aninhados
C permite que sejam colocados
comandos if dentro de outros comandos
if. A isto chamamos de if aninhados.
n Quando se trata de if aninhados, o
comando else se refere ao if mais
prximo que no possui um comando
else. Tanto o if quanto o else devem
estar dentro do mesmo bloco de cdigo.
n
Curso de Linguagem C
90
Exemplos
if (x)
if (y) printf(1);
else printf(2);
if (x) {
if (y) printf(1);
}
else printf(2);
n
Curso de Linguagem C
91
if-else-if
n
Curso de Linguagem C
92
Avaliao do if-else-if
O computador avalia as expresses
condicionais de cima para baixo. Assim
que encontra uma condio verdadeira,
ele executa o comando associado a ela
e passa por cima do resto da escada.
n Se nenhuma condio for verdadeira, o
computador executar o else final.
n
Curso de Linguagem C
93
A expresso condicional
n
Curso de Linguagem C
94
switch
n
Curso de Linguagem C
95
96
Curso de Linguagem C
Curso de Linguagem C
97
O comando break
Quando o computador encontra alguma
coincidncia, ele executa os comandos
associados quele case at encontrar
break ou o fim do comando switch.
n um erro comum programadores
esquecerem de colocar o break aps os
comandos.
n
Curso de Linguagem C
98
Importante
n
Curso de Linguagem C
99
Curso de Linguagem C
100
for
n
Curso de Linguagem C
101
Inicializao
Na forma mais simples, inicializao
um comando de atribuio que o
compilador usa para estabelecer a
varivel de controle de loop.
n A inicializao pode conter qualquer
comando vlido em C.
n
Curso de Linguagem C
102
Condio
A condio uma expresso de relao
que testa se a condio final desejada
pelo loop for ocorreu.
n Aqui tambm pode ser colocado
qualquer comando vlido em C.
n
Curso de Linguagem C
103
Incremento
O incremento define a maneira como a
varivel de controle do loop ser
alterada cada vez que o computador
repetir o loop.
n Tambm aqui, podemos colocar
qualquer comando vlido em C.
n
Curso de Linguagem C
104
Exemplo 1
/* imprimir os nmeros de 1 a 100 */
main()
{
int x;
for (x = 1; x <= 100; x ++) printf(%d , x);
}
Curso de Linguagem C
105
Exemplo 2
/* imprimir os nmeros de 100 a 1 */
main()
{
int x;
for (x = 100; x > 0; x --) printf(%d , x);
}
Curso de Linguagem C
106
Exemplo 3
/* imprimir os nmeros de 0 a 100, 5 em 5 */
main()
{
int x;
for (x = 0; x <= 100; x = x + 5)
printf(%d , x);
}
Curso de Linguagem C
107
Exemplo 4
/* executa um bloco de cdigo 100 vezes */
main()
{
int x;
for (x = 0; x < 100; x ++) {
printf(O valor de x : %d , x);
printf(e o quadrado de x : %d\n, x * x);
}
}
Curso de Linguagem C
108
Curso de Linguagem C
109
Curso de Linguagem C
110
Loop infinito
n
Curso de Linguagem C
111
Saindo de um loop
n
Curso de Linguagem C
112
Curso de Linguagem C
113
while
O while executa um comando (ou bloco
de comandos) enquanto uma condio
for verdadeira.
n A forma geral do while :
n
while (condio)
comando;
Curso de Linguagem C
114
Exemplo 1
pausa()
{
char tecla = \0;
printf(Tecle ESPAO para continuar...);
while (tecla != )
tecla = getche();
}
Curso de Linguagem C
115
Exemplo 2
n
Curso de Linguagem C
116
do while
n
Curso de Linguagem C
117
Exemplo
/* L um nmero maior que 100 */
main()
{
int num;
do {
printf(Digite um nmero maior que 100);
scanf(%d, &num);
} while (num <= 100);
}
Curso de Linguagem C
118
Loops aninhados
Quando um loop est dentro do outro,
dizemos que o loop interior est
aninhado.
n Loops aninhados permite que sejam
solucionados vrios problemas de
programao.
n Em C podemos aninhar qualquer tipo
de loop.
n
Curso de Linguagem C
119
Exemplo
/* exibir uma tabela de potncias dos nmeros de 1 a 9*/
main()
{ int i, j, k, temp;
printf(\ti\ti^2\ti^3\ti^4\n);
for (i = 1; i < 10; i ++) {
/* loop externo */
for (j = 1; j < 5; j ++) {
/* primeiro nvel de aninhamento */
temp = 1;
for (k = 0; k < j; k ++)
/* loop mais interior */
temp = temp * i;
printf(%8d, temp);
}
}
}
Curso de Linguagem C
120
Interrupo de loops
Quando precisamos encerrar um loop
sem que sua condio de encerramento
esteja satisfeita, podemos utilizar o
comando break.
n O comando break especialmente til
quando algum evento externo controle
um loop.
n
Curso de Linguagem C
121
Comando continue
n
Curso de Linguagem C
122
Exemplo
/* programa para imprimir os nmeros pares
entre 0 e 98 */
main()
{
int x;
for (x = 0; x < 100; x ++) {
if (x % 2) continue;
printf(%d , x);
}
}
Curso de Linguagem C
123
Vetores
Vetores so uma coleo de variveis
do mesmo tipo que so referenciadas
pelo mesmo nome.
n Em C, um vetor consiste em locaes
contguas de memria.
n O elemento mais baixo corresponde ao
primeiro elemento e o mais alto ao
ltimo.
n O vetor mais utilizado o de caracteres.
n
Curso de Linguagem C
124
Declarando vetores
n
Onde
tipo o tipo base do vetor e
tamanho a quantidade de elementos que
o vetor conter
Curso de Linguagem C
125
Acessando um vetor
Os vetores so acessados atravs de
ndices colocados entre colchetes.
n O ndice do primeiro elemento do vetor
0 (ZERO).
n
int amostra[10];
amostra[0]
amostra[9]
/* vetor de 10 inteiros */
/* primeiro elemento */
/* ltimo elemento */
Curso de Linguagem C
126
Exemplo
main()
{
int x[10]; /* vetor com 10 elementos int */
int t;
for (t = 0; t < 10; t ++)
x [ t ] = t;
}
Curso de Linguagem C
127
Curso de Linguagem C
128
Strings
n
Curso de Linguagem C
129
Finalidade
L uma string do teclado
Imprime uma string na tela
Copia uma string em outra
Concatena strings
Compara strings
Retorna o tamanho da string
Curso de Linguagem C
130
gets
L uma string do teclado.
n Forma geral:
n
gets(nome_string);
n
Exemplo:
main()
{ char str[80];
gets(str);
printf(%s, str);
}
Curso de Linguagem C
131
puts
Mostra uma string na tela.
n Forma geral:
n
puts(nome_string);
n
Exemplo:
main()
{
puts(Esta uma mensagem);
}
Curso de Linguagem C
132
strcpy
Copia uma string em outra.
n Forma geral:
n
strcpy(para, de);
n
Curso de Linguagem C
133
strcat
Adiciona uma string em outra.
n Forma geral:
n
strcat(s1, s2);
n
Curso de Linguagem C
134
strcmp
Compara 2 strings.
n Forma geral:
n
strcmp(s1, s2)
n
A funo retorna:
0
>0
<0
se s1 igual a s2
se s1 > s2
se s2 > s1
Curso de Linguagem C
135
strlen
Retorna o tamanho da string
n Forma geral:
n
strlen(str);
n
Exemplo:
main()
{ char str[80];
printf(Digite uma string: );
gets(str);
printf(Tamanho: %d\n, strlen(str));
}
Curso de Linguagem C
136
Matrizes bidimensionais
C permite que sejam declaradas
matrizes bidimensionais.
n Forma da declarao:
n
tipo nome_var[dimenso1][dimenso2];
n
Exemplo:
char tabela[5][5];
Curso de Linguagem C
137
Matrizes multidimensionais
n
138
Curso de Linguagem C
Curso de Linguagem C
139
Matrizes de strings
n
Curso de Linguagem C
140
Inicializao de matrizes
C permite que as matrizes globais
sejam inicializadas.
n A forma geral :
n
Exemplo:
int i[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Curso de Linguagem C
141
Exemplo
int quadrados[5][2] = {
1, 1,
2, 4,
3, 9,
4, 16,
5, 25};
quadrados =
1
2
3
4
5
1
4
9
16
25
Curso de Linguagem C
142
Curso de Linguagem C
143
Exerccios
Faa um programa que leia 3 nomes
com suas respectivas idades e mostre o
maior e o menor.
n Faa um programa que leia 5 nmeros
e imprima Nmeros altos se mais do
que 3 deles forem maiores que 5, caso
contrrio, imprima Nmeros baixos.
n
Curso de Linguagem C
144
Modelos de memria
n
Cdigo
Dados
1
1
mais de 1
1
mais de 1
mais de 1
1
1
mais de 1
mais de 1
mais de 1
Curso de Linguagem C
145
Ponteiros
Entender e usar corretamente os
ponteiros so pontos cruciais para
criao de programas bem-sucedidos
em C.
n Alm dos ponteiros serem uma das
caractersticas mais fortes em C,
tambm a mais perigosa.
n muito fcil usar ponteiros
incorretamente causando erros difceis
de serem encontrados.
n
Curso de Linguagem C
146
Curso de Linguagem C
147
Ponteiros so endereos
Um ponteiro uma varivel que contm
um endereo de memria. Isto , eles
possuem armazenam a localizao de
outra varivel dentro da memria do
computador.
n Ento dizemos que um ponteiro aponta
para esta varivel.
n
Curso de Linguagem C
148
Ilustrao de poteiros
Endereamento
de memria
1000
1001
1002
1003
1004
1005
Varivel na
memria
1003
Curso de Linguagem C
149
char *p;
int *temp, *valor;
Curso de Linguagem C
150
Os operadores de ponteiros
Existem 2 operadores especiais de
ponteiros: & e *.
n O operador & devolve o endereo da
varivel. utilizado para fazer um
ponteiro apontar para ela.
n O operador * devolve o valor
armazenado no endereo apontado
pelo ponteiro.
n
Curso de Linguagem C
151
Exemplo
main()
{ int numero = 5, *p;
p = №
printf(%d %d\n, numero, *p);
*p = 3;
printf(%d %d\n, numero, *p);
numero = 7;
printf(%d %d\n, numero, *p);
}
Curso de Linguagem C
152
Curso de Linguagem C
153
Ponteiros e vetores
n
Curso de Linguagem C
154
Exemplo
n
Aps a definio:
char str[80], *p;
p = str;
Curso de Linguagem C
155
Curso de Linguagem C
156
main()
{
int x, *p;
x = 10;
*p = x;
}
main()
{
int x, *p;
x = 10;
p = x;
printf(%d, *p);
}
Curso de Linguagem C
157
Curso de Linguagem C
158
Curso de Linguagem C
159
Exemplo 1
#include <stdio.h>
#include <stdlib.h>
main()
{ char *str;
str = (char *) malloc(101 * sizeof(char));
if (str) {
strcpy(str, Isto um teste);
printf(%s, str);
free(str);
}
}
Curso de Linguagem C
160
Exemplo 2
#include <stdio.h>
#include <stdlib.h>
main()
{ float *p;
p = (float *) calloc(100, sizeof(float));
if (!p) {
printf(alocao fracassada - abortado);
exit(1);
}
free(p);
}
Curso de Linguagem C
161
Funes
Funes so os blocos de contruo
em que ocorrem todas as atividades do
programas.
n Programar utilizando funes reduzir
a complexidade do cdigo e simplificar
sua escrita.
n
Curso de Linguagem C
162
Forma geral
n
Curso de Linguagem C
163
Comando return
n
Curso de Linguagem C
164
Exemplo
/* retorna 1 se o parmetro > 10 */
int maior_que_dez(int x)
{
return (x > 10);
}
Curso de Linguagem C
165
Argumentos
n
166
Curso de Linguagem C
Curso de Linguagem C
167
Exemplo
main()
{ int x = 3, y = 4;
printf(%d %d\n, x, y);
processa(x, &y);
printf(%d %d\n, x, y);
}
int processa(int a, int *b)
{ a = 6;
b = 7;
}
Curso de Linguagem C
168
Observaes
Vetores so passados por referncia.
n Quando uma funo feita para
receber um parmetro por referncia, o
parmetro deve ser declarado como um
ponteiro na lista de argumentos da
funo.
n Para conjuntos grandes de dados, a
passagem de parmetros por referncia
mais rpida.
n
169
Curso de Linguagem C
Curso de Linguagem C
170
Exemplo
/* Funo para imprimir os parmetros */
main(int argc, char *argv[ ])
{
int i;
for (i = 0; i < argc; i ++)
printf(argv[%d]: %s\n, i, argv[i]);
}
171
Curso de Linguagem C
Curso de Linguagem C
172
Prottipos
Como vimos, as funes que no
retornam int, devem ser identificadas
antes de serem referenciadas, para
isto, deve ser definido um prottipo para
a funo.
n Forma geral
n
tipo nome_funo(tipo_parmetros);
Curso de Linguagem C
173
Exemplo
float metade(float);
main()
{
printf(%f\n, metade(3));
}
float metade(float numero)
{
return (numero / 2);
}
Curso de Linguagem C
174
Recursividade
A linguagem C permite que as prprias
funes se chamem. A esta
caracterstica damos o nome de
recursividade.
n Existem muitos problemas que se
tornariam extremamente difceis de
serem implementados sem a
recursividade.
n
Curso de Linguagem C
175
Preprocessador
Antes do programa ser compilado, ele
submetido ao preprocessador. Esta
caracterstica muito til.
n Todos os comandos do preprocessador
so iniciados por um sinal #, sendo os
dois mais usados:
n
#define
#include
Curso de Linguagem C
176
#define
n
Curso de Linguagem C
177
Exemplo
#define mensagem Isto um teste.\n
#define verdadeiro 1
#define falso !verdadeiro
main()
{
if (verdadeiro) printf(mensagem);
if (falso) printf(mensagem);
}
Curso de Linguagem C
178
#include
n
Curso de Linguagem C
179
Entrada e sada
A entrada e sada em C feita
utilizando-se funes da biblioteca do
compilador, no existe nenhuma
palavra reservada para esta finalidade.
n Existem dois sistemas de entrada e
sada em C:
n
Bufferizado
No bufferizado
n
Curso de Linguagem C
180
Curso de Linguagem C
181
Filas de bytes
O sistema de arquivo bufferizado
destina-se a trabalhar com uma
variedade de dispositivos, que inclui
terminais, acionadores de disco e
acionadores de fita.
n Embora cada dispositivo seja diferente,
o sistema de arquivo bufferizado
transforma cada um em um dispositivo
lgico chamado fila de bytes.
n
Curso de Linguagem C
182
Arquivos
Em C, um arquivo um conceito lgico
que o sistema pode aplicar a qualquer
coisa, desde arquivos em disco at
terminais.
n Para associar uma fila de bytes a um
determinado arquivo, basta realizar
uma operao de abertura.
n Todas as filas de bytes so iguais.
n Nem todos os arquivos so iguais.
n
183
Curso de Linguagem C
Curso de Linguagem C
184
O ponteiro do arquivo
o que mantm unido o sistema de
entrada e sada bufferizado.
n um ponteiro para a informao que
define vrios aspectos do arquivo,
incluindo nome, status e posio
corrente.
n Um ponteiro de arquivo uma varivel
de ponteiro do tipo FILE, que definida
em stdio.h.
n
Curso de Linguagem C
185
Algumas funes
Nome
fopen()
fclose()
putc()
getc()
fseek()
fprintf()
fscanf()
feof()
ferror()
rewind()
remove
Funo
abre uma fila
fecha uma fila
grava um caracter na fila
l um caracter na fila
ajusta a posio atual no arquivo
printf para a fila
scanf para a fila
indica se a marca EOF foi encontrada
indica se ocorreu um erro
reposiciona no incio do arquivo
apaga um arquivo
Curso de Linguagem C
186
fopen()
n
Curso de Linguagem C
187
Significado
abre um arquivo-texto para leitura
cria um arquivo-texto para gravao
anexa a um arquivo-texto
abre um arquivo binrio para leitura
cria um arquivo binrio para gravao
anexa a um arquivo binrio
abre um arquivo-texto para leitura/gravao
cria um arquivo-texto para leitura/gravao
abre ou cria um arquivo-texto para leitura/gravao
abre um arquivo binrio para leitura/gravao
cria um arquivo binrio para leitura/gravao
abre um arquivo binrio para leitura/gravao
abre um arquivo-texto para leitura
cria um arquivo-texto para gravao
anexa a um arquivo-texto
abre um arquivo-texto para leitura/gravao
cria um arquivo-texto para leitura/gravao
abre ou cria um arquivo-texto para leitura/gravao
Curso de Linguagem C
188
fclose()
Fecha uma fila que foi aberta com
fopen().
n Todas as filas devem ser fechadas
antes que o programa termine.
n Prottipo:
n
Curso de Linguagem C
189
ferror() e rewind()
ferror() determina se a ltima operao
com arquivos produziu um erro
(devolvendo 1 caso tenha ocorrido).
n rewind() reposiciona no incio do
arquivo.
n Prottipos:
n
Curso de Linguagem C
190
getc() e putc()
n
Curso de Linguagem C
191
fprintf() e fscanf()
So os correspondentes a printf e scanf
do sistema de entrada e sada do
console. A diferena que o primeiro
parmetro um ponteiro de arquivo.
n Prottipos:
n
Curso de Linguagem C
192
fgets() e fputs()
So as correspondentes a gets e puts
para arquivos.
n Prottipos:
n
Curso de Linguagem C
193
getw() e putw()
So utilizadas para ler e gravar inteiros.
n Elas trabalham exatamente como getc
e putc com exceo de gravarem
inteiros.
n Prottipos:
n
Curso de Linguagem C
194
fread() e fwrite()
n
Curso de Linguagem C
195
fseek()
n
n
n
196
Curso de Linguagem C
entrada padro
sada padro
erro padro
Curso de Linguagem C
197
Exemplo
#include <stdio.h>
main(int argc, char *argv[ ])
{ FILE *entrada, *saida;
char ch;
if (argc != 3) {
printf(No foi digitado o nome da origem.\n);
exit(1);
}
if (!(entrada = fopen(argv[1], rb)) {
printf(arquivo de origem no achado.\n);
exit(1);
}
Curso de Linguagem C
198
Exemplo (continuao)
if (!(saida = fopen(argv[2], wb)) {
printf(Arquivo destino no pode ser aberto.\n);
exit(1);
}
/* esta a linha que copia o arquivo */
while (!feof(entrada)) putc(getc(entrada), saida);
fclose(entrada);
fclose(saida);
}
199
Curso de Linguagem C
estrutura
campo de bit
unio
enumerao
typedef
Curso de Linguagem C
200
Estruturas
n
201
Curso de Linguagem C
202
Curso de Linguagem C
nome_variavel.nome_elemento;
Curso de Linguagem C
203
Exemplo
struct pessoa {
char nome[21];
int idade;
} primeiro;
main() {
struct pessoa segundo;
strcpy(primeiro.nome, Jos);
primeiro.idade = 20;
segundo = primeiro;
}
Curso de Linguagem C
204
Exemplo:
struct pessoa pessoas[5];
Curso de Linguagem C
205
206
Curso de Linguagem C
207
Curso de Linguagem C
Veja a declarao:
struct pessoa *primeiro, segundo;
strcpy(segundo.nome, Jos);
segundo.idade = 10;
primeiro = &segundo;
208
Curso de Linguagem C
Curso de Linguagem C
209
Campos de bit
n
Curso de Linguagem C
210
struct nome_estrutura {
tipo1 var1 : comprimento;
tipo2 var2 : comprimento;
} nome_var ;
n
Curso de Linguagem C
211
Exemplo
struct dispositivo {
unsigned ativo : 1;
unsigned pronto : 1;
unsignet erro : 1;
unsigned : 2;
unsigned ultimo_erro : 3;
}
Curso de Linguagem C
212
Unies
Em C, uma unio uma localizao de
memria que usada por muitas
variveis diferentes, que podem ser de
tipos diferentes.
n A declarao e o acesso a uma unio
feita de forma semelhante as
estruturas, s que usando a palavra
reservada union no lugar de struct.
n
Curso de Linguagem C
213
Exemplo
union dois_bytes {
int inteiro;
char caracter[2];
} valor;
main()
{
valor.inteiro = A * 256 + B;
printf(%c %c, valor.caracter[0],
valor.caracter[1]);
}
Curso de Linguagem C
214
Enumeraes
Enumerao um conjunto de
constantes inteiras com nome e e
especifica todos os valores legais que
uma varivel daquele tipo pode ter.
n Para declarar:
n
Curso de Linguagem C
215
Exemplo
enum tamanhos {pequeno, medio, grande =
5} tamanho;
main()
{
tamanho = pequeno; printf(%d, tamanho);
tamanho = medio; printf(%d, tamanho);
tamanho = grande; printf(%d, tamanho);
}
Curso de Linguagem C
216
sizeof
n
Curso de Linguagem C
217
Exemplos
n
Curso de Linguagem C
218
typedef
C permite que sejam definidos
explicitamente novos tipos de dados
usando a palavra reservada typedef.
n typedef no cria realmente uma nova
classe de dados, mas sim define um
novo nome para uma tipo j existente.
n O uso do typedef torna os programas
em C mais legveis e mais portteis
pois bastar alterar a definio do
typedef quando trocar de ambiente.
n
Curso de Linguagem C
219
Exemplo
n
Aps as definies:
typedef float balanco;
typedef char string[21];
typedef struct pessoa tipo_pessoa;
float valor;
char frase[21];
struct pessoa aluno;
Curso de Linguagem C
220
Operadores avanados
n
Curso de Linguagem C
221
Curso de Linguagem C
222
Ao
E
OU
OU exclusivo (XOR)
Complemento de um (NOT)
Deslocar para direita
Deslocar para esquerda
Curso de Linguagem C
223
Operador ?
n
Forma geral:
condio ? expresso1 : expresso 2;
Curso de Linguagem C
224
Exemplo
n
A seqncia de comandos:
x = 10;
if (x > 9) y = 100;
else y = 200;
Curso de Linguagem C
225
Formas abreviadas
n
Curso de Linguagem C
226
Operador vrgula
O operador vrgula usado para juntar
vrias expresses. O compilador
sempre avalia o lado esquerdo da
vrgula como void. Assim, a expresso
do lado direito ficar sendo o valor de
toda expresso separada por vrgula.
n Por exemplo:
n
x = (y = 3, y + 1);
n
Atribuir 3 a y e 4 a x.
Curso de Linguagem C
227
Parnteses e colchetes
C considera os parnteses e os
colchetes como operadores.
n Os parnteses executam a tarefa
esperada de aumentar a precedncia
dos operadores que esto dentro deles.
n Os colchetes executam a indexao de
vetores e matrizes.
n
Curso de Linguagem C
228
Resumo de precedncia
Maior
Menor
( ) [ ] ->
! ~ ++ -- - (type cast) * & sizeof
*/%
+<< >>
< <= >=
== !=
&
^
|
&&
||
?
= += -= *= /=
,
Curso de Linguagem C
229
Funes comuns
A biblioteca padro de funes da
linguagem C muito ampla.
n Os programas em C fazem uso intenso
das funes da biblioteca.
n Os programadores iniciantes tendem a
reescrever funes j existentes nas
bibliotecas.
n
Curso de Linguagem C
230
Funes matemticas
n
231
Curso de Linguagem C
232
Erros de ordem de
processamento
n
Os operadores de incremento e
decremento so usados na maioria dos
programas em C, e a ordem de
ocorrncia da operao afetada pelo
fato de esses operadores precederem
ou sucederem a varivel. Logo, se y=10
x = y++;
Curso de Linguagem C
ser diferente de
x = ++y;
Curso de Linguagem C
233
Curso de Linguagem C
234
Redefinindo funes
n
Curso de Linguagem C
235
Erros por um
n
Curso de Linguagem C
236
Erros de limite
n
237
Omisses de declarao de
funo
n
Curso de Linguagem C
Curso de Linguagem C
238
Curso de Linguagem C
239
Exerccio (parte 1)
Faa um programa que leia 5 nomes
com suas respectivas idades e mostre o
maior e o menor.
n Vamos dividir o problema em partes,
primeiro vamos definir uma estrutura
contendo um campo nome e um campo
idade:
n
typedef struct {
char nome[21];
int idade; } pessoa;
Curso de Linguagem C
240
Exerccio (parte 2)
n
Curso de Linguagem C
241
Exerccio (parte 3)
n
Curso de Linguagem C
242
Exerccio (parte 4)
n
Curso de Linguagem C
243
Exerccio (parte 5)
n
Curso de Linguagem C
244
Exerccio (parte 6)
Agora s falta declarar as variveis e
definir o programa principal, que ser
composto por um loop de entrada, um
loop de pesquisa e a apresentao dos
resultados.
n Dividindo o cdigo do programa, fica
mais fcil resolver os problemas e
verificar os erros que possam ocorrer.
n
Curso de Linguagem C
245
Exerccio (parte 7)
main()
{ pessoa pessoas[5], *velho, *novo;
int i;
for(i = 0; i < 5; i++) le_pessoa(&pessoas[i]);
velho = novo = pessoas;
for(i = 1; i < 5; i++) {
velho = mais_velho(velho, &pessoas[i]);
novo = mais_novo(novo, &pessoas[i]);
}
puts(O mais novo \n); mostra_pessoa(novo);
puts(O mais velho \n); mostra_pessoa(velho);
}