Você está na página 1de 245

1

Curso de Linguagem C

Curso de Linguagem C
Rodolfo Jardim de Azevedo Instituto de Computao UNICAMP

Curso de Linguagem C

Programao Estruturada
n

A linguagem C uma linguagem estruturada em bloco simples. Uma caracterstica distintiva de uma linguagem estruturada em bloco a compartimentalizao de seu cdigo e de seus dados, que a habilidade de uma linguagem tem de seccionar e esconder do resto do programa todas as instrues necessrias para a realizao de uma determinada tarefa.

Curso de Linguagem C

Declarao de variveis
n

Variveis devem ser declaradas antes de serem usadas, permitindo assim, que o compilador saiba de antemo informaes como tipo e espao gasto em memria podendo fazer checagem durante o processo de compilao.

Curso de Linguagem C

Funes - Blocos de cdigo


n

Utilizando funes, possvel esconder parte do cdigo e variveis, evitando assim, que sejam gerados efeitos colaterais em outras partes do programa. Desta forma, necessrio saber apenas o que as rotinas fazem, e no como elas fazem.

Curso de Linguagem C

Laos
n

Os programas passam a maior parte do tempo repetindo tarefas at que uma condio seja satisfeita (ou um nmero fixo de vezes). Desta forma, fica mais fcil a programao e eliminam-se os inconvenientes gerados por vrios gotos espalhados pelo programa.

Curso de Linguagem C

Testes de condies
n

Numa linguagem estruturada, os testes de condies so amplamente utilizados, tanto como controle de laos, quanto para execues condicionais de blocos de cdigo.

Curso de Linguagem C

A linguagem C
n

Surgiu nos anos 70 de uma linguagem chamada B. Criada por Dennis Ritchie. Embora houvessem poucas divergncias entre as primeiras implementaes em nvel de cdigofonte, foi desenvolvido o padro ANSI sendo assim, qualquer programa C ANSI pode ser compilado em qualquer compilador C ANSI no importando a mquina na qual o programa v ser executado. Por isso, quando se quer portabilidade, a escolha acaba recaindo sobre a linguagem C.

Linguagem feita para programadores


n

Curso de Linguagem C

Ao contrrio do que possa parecer, nem todas as linguagens foram feitas para programadores. C virtualmente nica, porque ela foi criada, influenciada e testada em campo por programadores. Ela oferece ao programador exatamente o que ele quer: poucas restries e queixas, cdigo rpido e eficincia. Por isso ela a linguagem mais popular entre os programadores profissionais altamente qualificados.

Curso de Linguagem C

Sensvel ao caso
n

A linguagem C sensvel ao caso, isto quer significa que letras maisculas e minsculas so tratadas como caracteres separados.

10

Curso de Linguagem C

Programa exemplo
/* Este o primeiro programa */ #include <stdio.h> main() { printf(Alo mundo\n); }
n

Este um exemplo bem simples, mas que mostra alguns componentes bsicos que existem nos programas feitos em C. Nele vemos:

11

Curso de Linguagem C

/* Este o primeiro programa */


n

Esta linha um comentrio.

12

Curso de Linguagem C

#include <stdio.h>
n

Indica a incluso de arquivos dentro do programa atual (neste caso, o arquivo stdio.h). Normalmente so arquivos cabealhos contendo declaraes de tipos e prottipos de funes. Sero vistos mais tarde.

13

Curso de Linguagem C

main()
n

Todo programa em C tem que ter a funo main, na primeira linha desta funo que o programa comea a ser executado e quando a ltima linha for executada, o programa ser encerrado.

14

Curso de Linguagem C

{
n

Inicia um bloco de cdigo.

15

Curso de Linguagem C

printf(Alo mundo\n);
n

Chamada a uma funo em C. A funo printf utilizada para imprimir uma mensagem na tela, neste caso, a mensagem Alo mundo que chamado de parmetro passado funo.

16

Curso de Linguagem C

}
n

Encerra um bloco de cdigo.

17

Curso de Linguagem C

Blocos de cdigo
n

Por ser uma linguagem estruturada, a linguagem C permite a criao de blocos de cdigo. Um bloco de cdigo um grupo de comandos de programa conectados logicamente que o computador trata como uma unidade. Para criar um bloco de cdigo, coloque uma seqncia de comandos entre chaves, como pode ser visto no programa exemplo, as linhas 5, 6 e 7 representam um bloco de cdigo.

18

Curso de Linguagem C

Ponto e vrgula
n

O ponto e vrgula um terminador de comandos, por isso, todos os comandos devem ser terminados por um. Desta forma, podemos ter vrios comandos numa mesma linha sendo cada um terminado com um ponto e vrgula.

19

Curso de Linguagem C

Chaves
n

Todo bloco de cdigo escrito em C deve vir entre chaves. No necessrio colocar um ponto e vrgula depois de fechar chaves pois cada comando dentro do bloco j possui o seu terminador.

20

Curso de Linguagem C

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.

21

Curso de Linguagem C

Palavras reservadas
n

Como todas as outras linguagens de programao, C consiste em palavras reservadas e em regras de sintaxe que se aplicam a cada palavra reservada. Uma palavra reservada essencialmente um comando, e na maioria das vezes, as palavras reservadas de uma linguagem definem o que pode ser feito e como ser feito. O padro ANSI C especifica as seguintes palavras reservadas:

22

Curso de Linguagem C

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

Por ser uma linguagem estruturada, em C, as variveis devem ser declaradas antes de serem usadas, permitindo assim, que o compilador faa checagens em tempo de compilao.

24

Curso de Linguagem C

Identificadores
n

Identificadores so nomes usados para se fazer referncia a variveis, funes, rtulos e vrios outros objetos definidos pelo usurio. Um identificador pode ter de um a vrios caracteres. O primeiro deve ser uma letra ou um sublinhado, e os caracteres subseqentes deve serm letras, nmeros ou um sublinhado.

25

Curso de Linguagem C

Tipos de dados
n

Em C, existem 5 tipos de dados bsicos: caracter, inteiro, ponto flutuante, ponto flutuante de dupla preciso e sem valor. As palavras reservadas para declarar variveis destes tipos so char, int, float, double e void respectivamente. Veja na tabela a seguir o espao gasto por cada um destes tipos assim como seus limites em mquinas IBM PC compatveis.

26

Curso de Linguagem C

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

27

Curso de Linguagem C

Modificadores de tipo
n

Com exceo de void, os tipos de dados bsicos tm vrios modificadores que os precedem. O modificador usado para alterar o significado do tipo-base para que ele se adapte da maneira mais precisa s necessidades das vrias situaes. Eis aqui uma lista dos modificadores: signed, unsigned, long, short. Os dois primeiros modificadores indicam a existncia ou no de sinal enquanto os outros dois so relativos ao tamanho de memria necessrio para armazenar o valor de um elemento deste tipo.

28

Curso de Linguagem C

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

29

Curso de Linguagem C

Declarando variveis
n

Uma declarao de varivel deve seguir a seguinte regra:


tipo lista_variveis;

onde tipo deve ser um tipo vlido em C e lista_variveis pode consistir em um ou mais identificadores separados por vrgula.

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

31

Curso de Linguagem C

Onde declarar?
n

Existem 3 lugares em um programa C onde as variveis podem ser declaradas.

32

Curso de Linguagem C

Varivel global
n

O primeiro lugar fora de todas as funes, incluindo a funo main(). A varivel decalrada dessa maneira chamada varivel global e pode ser usada em qualquer parte do programa.

33

Curso de Linguagem C

Varivel local
n

O segundo lugar dentro de uma funo. Estas variveis so chamadas variveis locais e podem ser usadas somente pelos comandos que estiverem na mesma funo.

34

Curso de Linguagem C

Parmetro (argumento)
n

O ltimo lugar onde as variveis podem ser declaradas na declarao dos parmetros formais de uma funo, embora as variveis aqui declaradas sejam utilizadas para receber os argumentos quando a funo chamada, eles podem ser utilizados como outra varivei qualquer.

35

Curso de Linguagem C

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(); } }

36

Curso de Linguagem C

Funo total()
/* acumula no total parcial */ total(x) int x; /* Parmetro formal */ { soma = x + soma; }

37

Curso de Linguagem C

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); }

38

Curso de Linguagem C

Comentrios
n

Neste exemplo, qualquer funo do programa pode acessar a varivel global soma. Porm total() no pode acessar diretamente a varivel local cont em main(), que deve passar cont como um argumento. Isto necessrio porque uma varivel local s pode ser usada pelo cdigo que est na mesma funo na qual ela declarada. Observe que cont em display() completamente separada de cont em main(), novamente porque uma varivel local conhecida apenas pela funo na qual ela declarada.

39

Curso de Linguagem C

Inicializao de variveis
n

Ns vimos que em main() existe uma linha somente para inicializar a varivel soma, esta linha poderia ser suprimida se a varivel fosse declarada int soma = 0;

Desta forma, podemos inicializar variveis no momento de sua declarao, o que facilita muito a escrita do programa alm de reduzir o seu tamanho.

40

Curso de Linguagem C

Constantes
n

Constantes so valores fixos que o programa no pode alterar.

41

Curso de Linguagem C

Exemplos de Constantes
Tipo de dado char int long int short int unsigned int float double Exemplo 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

42

Curso de Linguagem C

Constantes hexadecimais e octais


n

Podem ser declaradas constantes em hexadecimal ou octal conforme o exemplo a seguir:


int hex = 0xFF; /* 255 em decimal */ /* as constantes em hexadecimal devem ser precedidas por 0x */ int oct = 011; /* 9 em decimal */ /* as constantes em octal devem ser precedidas por 0 */

43

Curso de Linguagem C

Constantes strings
n

Uma string um conjunto de caracteres entre aspas. Por exemplo, esta uma string uma string. No confundir strings com caracteres, a um caracter enquanto a uma string.

44

Curso de Linguagem C

Constantes com barras invertidas


n

Existem alguns caracteres que no podem ser representados no texto comum, as constantes com barra invertida servem para representar estes caracteres.

45

Curso de Linguagem C

Constantes com barras invertidas


Cdigo \b \f \n \r \t \ \ \0 \\ \v \a \x 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

46

Curso de Linguagem C

Operadores
n

A linguagem C muito rica em operadores. Os operadores so divididos em 3 categorias gerais: aritmticos, de relao e lgicos e bit a bit. Alm desses, C tem operadores especiais para tarefas particulares.

47

Curso de Linguagem C

Operadores aritmticos
Operador + * / % -++ Ao subtrao, tambm menos unrio adio multiplicao diviso resto da diviso decremento incremento

48

Curso de Linguagem C

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 */

49

Curso de Linguagem C

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 */ }

50

Curso de Linguagem C

Operadores de relao
Operador > >= < <= == != maior que maior ou igual a menor que menor ou igual a igual a no igual a Ao

51

Curso de Linguagem C

Operadores lgicos
Operador && || ! Ao AND OR NOT

52

Curso de Linguagem C

Observao
n

Em C, o nmero 0 representa falso e qualquer nmero no-zero verdadeiro, assim, os operadores anteriores retornam 1 para verdadeiro e 0 para falso.

53

Curso de Linguagem C

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 */

54

Curso de Linguagem C

Expresses
n

Os operadores, as constantes e as variveis so os componentes das expresses. Uma expresso em C qualquer combinao vlida desses componentes.

55

Curso de Linguagem C

Converses de tipos
n

Quando voc mistura constantes e variveis de tipos diferentes em uma expresso, C as converte para o mesmo tipo. O compilador C converter todos os operandos para o tipo do maior operando, uma operao de cada vez, conforme descrito nestas regras de converso de tipo:

56

Curso de Linguagem C

Regra 1
n

Todo char e short int convertido para int. Todo float convertido para double.

57

Curso de Linguagem C

Regra 2
n

Para todos os pares de operandos, ocorre o seguinte, em seqncia: se um dos operandos for um long double, o outro ser convertido para long double. Se um dos operandos for double, o outro ser convertido para double. Se um dos operandos for long, o outro ser convertido para long. Se um dos operandos for unsigned, o outro ser convertido para unsigned.

58

Curso de Linguagem C

Type cast
n

Pode-se forar o compilador a efetuar determinada converso utilizando-se um type cast que tem a seguinte forma:
(tipo) expresso

59

Curso de Linguagem C

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 */ }

60

Curso de Linguagem C

Modificadores de acesso
n

Os modificadores de acesso informam sobre como ser feito o acesso varivel.

61

Curso de Linguagem C

Register
n

Sempre que uma varivel for declarada do tipo register, o compilador far o mximo possvel para mante-la num dos registradores do microprocessador, acelerando assim o acesso a seu valor. pratica comum, declarar as variveis de controle de loop como sendo register.

62

Curso de Linguagem C

Static
n

Variveis static so variveis existem durante toda a execuo do programa, mas s podem ser acessadas de dentro do bloco que a declarou.

63

Curso de Linguagem C

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 ++; }

64

Curso de Linguagem C

printf()
Rotina de finalidade geral para sada pelo console n A funo printf() serve para mostrar mensagens na tela. Sua forma geral
n

printf(string de controle, lista argumentos);

65

Curso de Linguagem C

string de controle
n

A string de controle consiste em dois tipos de itens:


Caracteres que a funo imprimir na tela Comandos de formatao

66

Curso de Linguagem C

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

67

Curso de Linguagem C

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

68

Curso de Linguagem C

Comprimento mnimo do campo


n

Para especificar o comprimento mnimo que um campo poder ter, basta colocar um inteiro entre o sinal % e o comando de formatao. Observe que este o comprimento mnimo e que o campo pode ocupar um espao maior.
Exemplo Funo %3d inteiro com pelo menos 3 dgitos (preenchido com espaos) %03d inteiro com pelo menos 3 dgitos (preenchido com zeros) %5s string com pelo menos 5 caracteres

69

Curso de Linguagem C

Nmero de casas decimais


n

Para especificar o nmero de casas decimais, coloque um ponto decimal aps o especificador de largura mnima do campo e depois dele, o nmero de casas decimais que devero ser exibidas.
Exemplo Funo %7.2f Usar 2 casas decimais

70

Curso de Linguagem C

Comprimento mximo
n

Quando o formato de casas decimais colocado em strings, o nmero de casas decimais passa a ser considerado como comprimento mximo do campo.
Exemplo Funo %5.7s string com no mnimo 5 e no mximo 7 caracteres

71

Curso de Linguagem C

Nmero mnimo de dgitos


n

Quando o formato de casas decimais aplicado em inteiros, o especificador de casas decimais ser utilizado como nmero mnimo de dgitos
Exemplo Funo %7.6d 7 caracteres no mnimo e 6 dgitos no mnimo

72

Curso de Linguagem C

Alinhamento
n

Por padro, todo resultado alinhado direita, para inverter este padro, utilize um sinal de menos (-) antes de especificar o tamanho.
Exemplo Funo %-5d 5 caracteres alinhados esquerda %-10s 10 caracteres alinhados esquerda

73

Curso de Linguagem C

Modificadores de formatao
n

Podemos usar modificadores para informar sobre a leitura de shorts (modificador h) ou longs (modificador l)
Exemplo Funo %hd Imprime um short int %ld Imprime um long int

74

Curso de Linguagem C

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

75

Curso de Linguagem C

scanf()
Rotina de finalidade geral para entrada pelo console n A funo scanf() serve para ler informaes do teclado. Sua forma geral
n

scanf(string de controle, lista argumentos);

76

Curso de Linguagem C

string de controle
n

A string de controle consiste em trs classificaes de caracteres:


Especificadores de formato Caracteres brancos Caracteres no-brancos

77

Curso de Linguagem C

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

78

Curso de Linguagem C

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

79

Curso de Linguagem C

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

80

Curso de Linguagem C

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

81

Curso de Linguagem C

Como chamar scanf()


n

Todas as variveis usadas para receber valores atravs de scanf() devem ser passadas por seus endereos. Se quiser ler a varivel cont, utilize
scanf(%d, &cont);

Como strings so representadas por vetores, NO deve ser colocado o & antes do nome da varivel

82

Curso de Linguagem C

Ignorar entrada
n

Colocar um * entre o % e o cdigo de formatao far com que scanf() leia dados do tipo especificado mas suprimir suas atribuies. Desta forma
scanf(%d%*c%d, &x, &y)

dada a entrada 10/20, coloca 10 em x, desconsidera o sinal de diviso e coloca 20 em y

83

Curso de Linguagem C

Comprimento mximo do campo


n

Para especificar o comprimento mximo que um campo poder ter, basta colocar um inteiro entre o sinal % e o comando de formatao. Os caracteres que sobrarem sero utilizados nas prximas chamadas a scanf(). Caso no queira ler mais do que 20 caracteres na string nome, utilize scanf(%20s, nome);

84

Curso de Linguagem C

Espaos, tabs e \n
n

Servem como separadores quando no estiverem sendo lidos caracteres. So lidos e atribudos quando for pedido um caracter de entrada. Caso o comando
scanf(%c%c%c, &a, &b, &c);

seja lido com a entrada


x y

scanf retornar com x em a, espao em b e y em c

85

Curso de Linguagem C

Comandos de controle de fluxo


n

Os comandos de controle de fluxo so a base de qualquer linguagem. A maneira como eles so implementados afeta a personalidade e percepo da linguagem. C tem um conjunto muito rico e poderoso de comandos de controle de fluxo. Eles se dividem em comandos de teste de condies e comandos de controle de loop.

86

Curso de Linguagem C

Comandos de testes de condies


n

Estes comandos avaliam uma condio e executam um bloco de cdigo de acordo com o resultado. So eles:
if switch

87

Curso de Linguagem C

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

onde a parte else opcional

88

Curso de Linguagem C

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 --); }

89

Curso de Linguagem C

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

90

Curso de Linguagem C

Exemplos
if (x) if (y) printf(1); else printf(2); if (x) { if (y) printf(1); } else printf(2);
n

Neste caso, o else pertence ao segundo if.

Neste caso, o else pertence ao primeiro if.

91

Curso de Linguagem C

if-else-if
n

muito comum encontrar programas que possuem uma escada if-else-if da seguinte forma:
if (condio) comando; else if (condio) comando; else comando;

92

Curso de Linguagem C

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

93

Curso de Linguagem C

A expresso condicional
n

Qualquer expresso vlida em C pode servir como expresso condicional. Veja o exemplo:
/* dividir o primeiro nmero pelo segundo */ main() { int a, b; printf(Digite dois nmeros: ); scanf(%d %d, &a, &b); if (b) printf(%d\n, a/b); else printf(no posso diridir por zero\n); }

94

Curso de Linguagem C

switch
n

Embora o if-else-if possa executar vrios tipos de testes, o cdigo pode ficar muito difcil de ser seguido. C possui um comando de vrios desvios chamado switch. No switch, o computador testa uma varivel sucessivamente contra uma lista de constantes inteiras ou de caracteres e executa um comando ou bloco de comandos quando encontrar uma coincidncia.

95

Curso de Linguagem C

Forma geral do switch


switch (varivel) { case constante1: seqncia de comandos break; case constante2: seqncia de comandos break; default: seqncia de comandos }

96

O comando default dentro do switch


n

Curso de Linguagem C

O comando default ser executado se no for encontrada nenhuma coincidncia na lista de constantes. n Caso no seja colocado um comando default e no haja coincidncia, nenhum comando ser executado.

97

Curso de Linguagem C

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

98

Curso de Linguagem C

Importante
n

O switch difere do if, j que o primeiro s pode testar igualdade e a expresso condicional if pode ser de qualquer tipo. No pode haver duas constantes case com valores iguais no mesmo switch. Podem ser colocados comandos switch dentro de comandos switch. Pode ser deixado um case vazio quando mais de uma condio usa o mesmo cdigo.

99

Curso de Linguagem C

Comandos de controle de loops


n

Os comandos de controle de loops permitem que o computador repita um conjunto de instrues at que alcance uma certa condio. Em C temos os seguintes comandos de controle de loop:
for while do while

100

Curso de Linguagem C

for
n

O loop for em C muito mais forte e mais flexvel que o da maioria das outras linguagens. Sua forma geral
for (inicializao; condio; incremento) comando;

Observe que as trs partes do loop for so separadas por ponto e vrgula. n Nenhuma destas partes precisa existir.
n

101

Curso de Linguagem C

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

102

Curso de Linguagem C

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

103

Curso de Linguagem C

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

104

Curso de Linguagem C

Exemplo 1
/* imprimir os nmeros de 1 a 100 */ main() { int x; for (x = 1; x <= 100; x ++) printf(%d , x); }

105

Curso de Linguagem C

Exemplo 2
/* imprimir os nmeros de 100 a 1 */ main() { int x; for (x = 100; x > 0; x --) printf(%d , x); }

106

Curso de Linguagem C

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); }

107

Curso de Linguagem C

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); } }

108

Curso de Linguagem C

Variaes do loop for


n

Podem ser executados mais de um comando nas partes de inicializao e de incremento. Veja que
main() { int x, y; for (x = 0, y = 0; x + y < 100; ++x, y++) printf(%d , x + y); }

Mostrar nmeros de 0 a 98, 2 a 2.

109

Curso de Linguagem C

Um uso diferente para for


main() { int t; for (prompt(); t=readnum(); prompt()) sqrnum(t); } prompt() { printf(digite um inteiro: ); } readnum() { int t; scanf(%d, &t); return t; } sqrnum(int num) { printf(%d\n, num * num); }

110

Curso de Linguagem C

Loop infinito
n

Podemos fazer um comando for executar para sempre simplesmente no especificando sua parte condicional. Veja
for (;;) printf(este loop rodar para sempre\n);

111

Curso de Linguagem C

Saindo de um loop
n

Podemos usar o comando break para encerrar um for a qualquer momento. Veja um exemplo:
main() { int a; for (a = 1; a < 100; a++) if (a == 10) break; }

O loop s ser executado 10 vezes.

112

Curso de Linguagem C

Loops for sem nenhum corpo


n

Podem ser utilizados loops sem corpo para gerar retardo de tempo. Veja um exemplo:
for (a = 0; a < 1000; a ++);

113

Curso de Linguagem C

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;

114

Curso de Linguagem C

Exemplo 1
pausa() { char tecla = \0; printf(Tecle ESPAO para continuar...); while (tecla != ) tecla = getche(); }

115

Curso de Linguagem C

Exemplo 2
n

O exemplo anterior pode ser reescrito sem utilizar varivel. Veja:


main() { printf(Tecle ESPAO para continuar...); while (getche() != ); }

116

Curso de Linguagem C

do while
n

Ao contrrio do loop for e do loop while, que testam a condio no comeo do loop, o loop do while verifica a condio somente no final. Desta forma, o loop ser executado pelo menos uma vez. A forma geral do loop do while :
do { comando; } while (condio);

117

Curso de Linguagem C

Exemplo
/* L um nmero maior que 100 */ main() { int num; do { printf(Digite um nmero maior que 100); scanf(%d, &num); } while (num <= 100); }

118

Curso de Linguagem C

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

119

Curso de Linguagem C

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); } } }

120

Curso de Linguagem C

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

121

Curso de Linguagem C

Comando continue
n

O comando continue funciona de maneira parecida com o comando break. Porm, em vez de forar o encerramento, continue fora a prxima iterao do loop e pula o cdigo que estiver no meio.

122

Curso de Linguagem C

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); } }

123

Curso de Linguagem C

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

124

Curso de Linguagem C

Declarando vetores
n

A forma geral da declarao de um vetor :


tipo nome_var[tamanho];

Onde
tipo o tipo base do vetor e tamanho a quantidade de elementos que o vetor conter

125

Curso de Linguagem C

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 */

126

Curso de Linguagem C

Exemplo
main() { int x[10]; /* vetor com 10 elementos int */ int t; for (t = 0; t < 10; t ++) x [ t ] = t; }

127

Curso de Linguagem C

Limites dos vetores


n

C no faz checagem dos limites dos vetores, isto responsabilidade do programador. Logo, o cdigo a seguir no causar nenhum erro.
int elementos[10]; elementos[12] = 0; elementos[10] = 0;

128

Curso de Linguagem C

Strings
n

Uma string por definio, um vetor de caracteres terminado em 0. Ento, para declarar a string, devemos declarar sempre um elemento a mais para o terminador. Veja que
char mensagem[10] = Exemplo

Ficar armazenado na memria como:


E x e m p l o \0

129

Curso de Linguagem C

Funes para manipular strings


Funo gets puts strcpy srtcat strcmp strlen 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

130

Curso de Linguagem C

gets
L uma string do teclado. n Forma geral:
n

gets(nome_string);
n

Exemplo:
main() { char str[80]; gets(str); printf(%s, str); }

131

Curso de Linguagem C

puts
Mostra uma string na tela. n Forma geral:
n

puts(nome_string);
n

Exemplo:
main() { puts(Esta uma mensagem); }

132

Curso de Linguagem C

strcpy
Copia uma string em outra. n Forma geral:
n

strcpy(para, de);
n

Lembre-se que a string para deve ser grande o suficiente para conter de.
main() { char str[80]; strcpy(str, alo); }

133

Curso de Linguagem C

strcat
Adiciona uma string em outra. n Forma geral:
n

strcat(s1, s2);
n

s2 ser anexada ao final de s1.


main() { char primeiro[20], segundo[10]; strcpy(primeiro, bom); strcpy(segundo, dia); strcat(primeiro, segundo); printf(%s\n, primeiro); }

134

Curso de Linguagem C

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

135

Curso de Linguagem C

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)); }

136

Curso de Linguagem C

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];

137

Curso de Linguagem C

Matrizes multidimensionais
n

De forma semelhante as matrizes bidimensionais, declaramos as multidimensionais. Veja por exemplo uma matriz de 4 dimenses:
int matriz[5][7][3][8];

138

Acessando os elementos das matrizes multidimensionais


main() { int numeros[4][3], i, j; for (i = 0; i < 4; i ++) for (j = 0; j < 3; j++) numeros[ i ][ j ] = i * j; }

Curso de Linguagem C

139

Curso de Linguagem C

Matrizes de strings
n

Uma matriz bidimensional de caracteres pode ser interpretada como uma matriz de strings.
main() { char strings[5][20]; /* 5 strings */ int i; for (i = 0; i < 5; i ++) gets(strings[ i ]); }

140

Curso de Linguagem C

Inicializao de matrizes
C permite que as matrizes globais sejam inicializadas. n A forma geral :
n

tipo nome_matriz[tam1]...[tamN] = {lista de valores}


n

Exemplo:
int i[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

141

Curso de Linguagem C

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

142

Curso de Linguagem C

Declarando vetores sem tamanho


Podem ser declarados vetores sem especificar explicitamente seus tamanhos. Os vetores devem ser inicializados na declarao. O tamanho ser definido na inicializao. n Exemplo:
n

char mensagem[ ] = Esta uma string;

143

Curso de Linguagem C

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

144

Curso de Linguagem C

Modelos de memria
n

A definio de modelos de memria foi a forma utilizada para contornar as limitaes de segmentos em computadores IBM PC.
Modelo Tiny Small Medium Compact Large Huge Cdigo 1 1 mais de 1 1 mais de 1 mais de 1 1 1 mais de 1 mais de 1 mais de 1 Dados

145

Curso de Linguagem C

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

146

Curso de Linguagem C

Motivos para usar ponteiros


Os ponteiros fornecem maneiras pelas quais as funes podem modificar os argumentos recebidos. n Do apoio s rotinas de alocao dinmica. n Podem substituir o uso vetores em muitas situaes para aumentar a eficincia.
n

147

Curso de Linguagem C

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

148

Curso de Linguagem C

Ilustrao de poteiros
Endereamento de memria 1000 1001 1002 1003 1004 1005 Varivel na memria 1003

149

Curso de Linguagem C

Variveis ponteiros - declarao


n

A declarao de variveis ponteiros, segue a seguinte regra geral:


tipo *nome_var;

onde tipo o tipo do elemento para o qual o ponteiro apontar. n Exemplo:


n

char *p; int *temp, *valor;

150

Curso de Linguagem C

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

151

Curso de Linguagem C

Exemplo
main() { int numero = 5, *p; p = &numero; printf(%d %d\n, numero, *p); *p = 3; printf(%d %d\n, numero, *p); numero = 7; printf(%d %d\n, numero, *p); }

152

Curso de Linguagem C

Expresses com ponteiros


C permite que sejam feitas expresses com ponteiros e elas seguem as mesmas regras das outras expresses em C. n Quando se compara um ponteiro com outro, estamos comparando seus endereos. Isto til quando ambos os ponteiros apontam para elementos de um vetor.
n

153

Curso de Linguagem C

Ponteiros e vetores
n

Existe um relacionamento muito prximo entre os ponteiros e os vetores. Veja o cdigo:


char str[80], *p; p = str;

Este cdigo faz com que p aponte para o primero elemento do vetor, pois um vetor sem o ndice se comporta como um ponteiro para seu primeiro elemento.

154

Curso de Linguagem C

Exemplo
n

Aps a definio:
char str[80], *p; p = str;

so equivalentes os acessos ao quinto elemento de str:


str[4] *(p + 4) p[4]

155

Curso de Linguagem C

Problemas com ponteiros


muito fcil errar quando se trabalha com ponteiros em C. n Algumas vezes, os erros com ponteiros s aparecem quando o programa cresce. n Ponteiros que no foram inicializados, apontam para um lugar desconhecido na memria, que pode ser inclusive o cdigo do programa.
n

156

Curso de Linguagem C

Dois erros comuns


/* este programa est errado */ main() { int x, *p; x = 10; *p = x; } /* este programa est errado */ main() { int x, *p; x = 10; p = x; printf(%d, *p); }

157

Curso de Linguagem C

Alocao dinmica de memria


A linguagem C permite que seja feita alocao dinmica de memria, isto , solicitar memria a medida que ela for sendo necessria. n Programas que utilizam listas, pilhas, e outros tipos de dados complexos cuja quantidade mxima no definida durante a compilao, trabalham com alocao dinmica de memria.
n

158

Curso de Linguagem C

Funes de alocao dinmica


n

Alocar um bloco de memria


void *malloc(int nmero_de_bytes); void *calloc(unsigned num, unsigned tam);

Liberar um bloco de memria


void free(void *p);

Alterar o tamanho de um bloco de memria


void *realloc(void *p, unsigned tam);

159

Curso de Linguagem C

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); } }

160

Curso de Linguagem C

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); }

161

Curso de Linguagem C

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

162

Curso de Linguagem C

Forma geral
n

A forma geral da declarao de uma funo :


tipo nome_funo(lista_parmetros) declarao de parmetros { corpo da funo }

Caso no seja especificado o tipo da funo, ela ser do tipo int.

163

Curso de Linguagem C

Comando return
n

O comando return possui duas utilidades bsicas:


Causar a sada imediata da funo na qual ele se encontra, retornando para o cdigo de chamada. Devolver um valor para a funo chamadora.

164

Curso de Linguagem C

Exemplo
/* retorna 1 se o parmetro > 10 */ int maior_que_dez(int x) { return (x > 10); }

165

Curso de Linguagem C

Argumentos
n

Quando necessrio passar alguma informao extra para uma funo, esta informao ser passada atravs de argumentos. Para chamar uma funo com argumentos, eles devem ser colocados entre parnteses aps o identificador da funo. Veja:
puts(Ateno);

a string Ateno o argumento passado para a funo puts.

166

Chamadas por valor e por referncia


n

Curso de Linguagem C

Existem duas formas de se passar um parmetro para uma funo, utilizando chamadas por valor ou por referncia. Quando um parmetro passado por valor, as alteraes efetuadas na funo no afetaro a varivel da funo chamadora. Quando um parmetro passado por referncia, qualquer alterao efetuada pela funo afetar a varivel da funo chamadora.

167

Curso de Linguagem C

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; }

168

Curso de Linguagem C

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

Argumentos argc e argv para main()


n

Curso de Linguagem C

A funo main tambm recebe argumentos. Eles so os parmetros da linha de comando passados ao programa. Os dois parmetros so argc e argv. Veja como eles devem ser declarados:
main(int argc, char *argv[ ])

Argc conter o nmero de parmetros passados e argv conter os parmetros.

170

Curso de Linguagem C

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

Funes que devolvem no inteiros


n

Curso de Linguagem C

Quando o tipo de uma funo no declarado, por default, ele ser int. Se for necessrio definir uma funo que retorna valores de outros tipos, o tipo deve ser especificado. Quando a funo no do tipo int, ela deve ser identificada antes de ser chamada da primeira vez. Assim, o compilador poder gerar um cdigo correto para a chamada funo.

172

Curso de Linguagem C

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);

173

Curso de Linguagem C

Exemplo
float metade(float); main() { printf(%f\n, metade(3)); } float metade(float numero) { return (numero / 2); }

174

Curso de Linguagem C

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

175

Curso de Linguagem C

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

176

Curso de Linguagem C

#define
n

O comando define serve para definir um identificador e uma string. O compilador substituir o identificador pela string toda vez que for encontrado no arquivofonte. O identificador chamado de nome de macro, e o processo de substituio chamado de substituio de macro.
#define indentificador string

177

Curso de Linguagem C

Exemplo
#define mensagem Isto um teste.\n #define verdadeiro 1 #define falso !verdadeiro main() { if (verdadeiro) printf(mensagem); if (falso) printf(mensagem); }

178

Curso de Linguagem C

#include
n

Instrui o compilador a incluir um outro arquivo fonte com aquele que contm o comando #include. O nome do arquivo a ser includo deve estar entre aspas ou entre o sinal de maior e menor. Se o nome do arquivo for colocado entre aspas, o compilador procurar pelo arquivo na seguinte seqncia: diretrio atual, diretrios configurados no compilador e diretrios padres. Caso o nome do arquivo esteja entre < >, no ser procurado no diretrio atual.

179

Curso de Linguagem C

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

O padro ANSI s define o primeiro.

180

Curso de Linguagem C

Arquivo cabealho stdio.h


n

Muitas bibliotecas em C exigem que certos tipos de dados ou outras informaes sejam partes dos programas que as usam. Para isto, necessrio utilizar o comando #include e incluir arquivos cabealho com estas definies nos programas.
#include <stdio.h>

181

Curso de Linguagem C

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

182

Curso de Linguagem C

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

Sistema de entrada e sada buferizado


n

Curso de Linguagem C

O sistema de entrada e sada bufferizado composto de vrias funes relacionadas. n Para utiliza-las, necessrio incluir o arquivo-cabealho stdio.h no programa.

184

Curso de Linguagem C

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

185

Curso de Linguagem C

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

186

Curso de Linguagem C

fopen()
n

Abre uma fila de bytes para ser usada e liga um arquivo a esta fila. Prottipo:
FILE *fopen(char *nome_arq, char *modo);

onde modo uma string que contm o status de abertura desejado. nome_arq uma string com um nome de arquivo vlido para o sistema operacional, podendo incluir drive e diretrio. Retorna NULL ( = 0 ) se a funo falhar.

187

Curso de Linguagem C

Valores legais de modo


Modo r w a rb wb ab r+ w+ a+ r+b w+b a+b rt wt at r+t w+t a+t 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

188

Curso de Linguagem C

fclose()
Fecha uma fila que foi aberta com fopen(). n Todas as filas devem ser fechadas antes que o programa termine. n Prottipo:
n

int fclose(FILE *arquivo);

189

Curso de Linguagem C

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

int ferror(FILE *arquivo); void rewind(FILE *arquivo);

190

Curso de Linguagem C

getc() e putc()
n

So utilizados para ler e gravar caracteres numa fila previamente aberta. Prottipo:
int putc(int caracter, FILE *arquivo); int getc(FILE *arquivo);

putc devolve o caracter gravado em caso de sucesso, em caso de erro EOF(definido em stdio.h) ser devolvido. getc devolve um inteiro mas com o byte superior zero. Ele devolve EOF quando alcanar o fim do arquivo.

191

Curso de Linguagem C

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

int fprintf(FILE *arq, const char *controle, ...); int fscanf(FILE *arq, const char *controle, ...);

192

Curso de Linguagem C

fgets() e fputs()
So as correspondentes a gets e puts para arquivos. n Prottipos:
n

char *fputs(char *str, FILE *arquivo); char *fgets(char *str, int comprimento, FILE *arquivo);
n

Observe que em fgets pode ser especificado o comprimento mximo da string e, ao contrrio do gets, o \n final colocado na string.

193

Curso de Linguagem C

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

int getw(FILE *arquivo); int putw(int numero, FILE *arquivo);

194

Curso de Linguagem C

fread() e fwrite()
n n

So funes utilizadas para ler e gravar blocos de dados nos arquivos. Prottipos:
int fread(void *buffer, int tamanho, int quantidade, FILE *arquivo); int fwrite(void *buffer, int tamanho, int quantidade, FILE *arquivo);

buffer um ponteiro para a regio da memria que possui os dados, tamanho o tamanho em bytes de cada unidade, quantidade determina quantos itens (cada um contendo tamanho bytes) sero lidos ou gravados e arquivo um ponteiro de arquivo para uma fila previamente aberta.

195

Curso de Linguagem C

fseek()
n

utilizado para efetuar operaes de leitura e gravao aleatrias sob o sistema de entrada e sada bufferizado. Prottipo:
int fseek(FILE *arquivo, long int num_bytes, int origem);

n n

fseek retorna zero em caso de sucesso. Arquivo o ponteiro de arquivo, num_bytes o nmero de bytes desde origem at chegar a nova posio e origem um dos seguintes macros:
Origem Nome incio do arquivo SEEK_SET posio corrente SEEK_CUR fim do arquivo SEEK_END

196

As filas de bytes stdin, stdout e stderr


n

Curso de Linguagem C

Existem 3 filas de bytes especiais que so abertas automaticamente quando o programa inicializado:
stdin sdtout stderr entrada padro sada padro erro padro

Elas podem ser usadas para efetuar operaes de entrada e sada no console.

197

Curso de Linguagem C

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); }

198

Curso de Linguagem C

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

Tipos de dados definidos pelos usurios


n

Curso de Linguagem C

Em C podem ser criados 5 tipos diferentes de dados personalizados:


estrutura campo de bit unio enumerao typedef

O uso de tipos definido pelo usurio facilita a programao e d maior poder ao programador.

200

Curso de Linguagem C

Estruturas
n

Em C, uma estrutura uma coleo de variveis que so referenciadas pelo mesmo nome. uma forma conveniente de manter juntas informaes relacionadas. Forma geral:
struct nome_estrutura { tipo1 var1; tipo2 var2; } var_estrutura;

201

Declarando variveis do tipo estrutura


n

Curso de Linguagem C

Alm de poder declarar variveis do tipo da estrutura durante a definio da estrutura, elas podem ser declaradas da seguinte forma:
struct nome_estrutura nome_varivel;

202

Acessando variveis do tipo estrutura


n

Curso de Linguagem C

Para acessar variveis do tipo estrutura, utiliza-se o operador . (ponto). n Forma geral:
nome_variavel.nome_elemento;

203

Curso de Linguagem C

Exemplo
struct pessoa { char nome[21]; int idade; } primeiro; main() { struct pessoa segundo; strcpy(primeiro.nome, Jos); primeiro.idade = 20; segundo = primeiro; }

204

Curso de Linguagem C

Vetores e matrizes de estruturas


n

Podem ser declarados vetores e matrizes de estruturas, para isto, usamos a forma geral:
struct nome_estrutura nome_var[t1][t2]...[tn];

Exemplo:
struct pessoa pessoas[5];

205

Curso de Linguagem C

Ponteiros para estruturas


Em C, podem ser declarados ponteiros para estruturas. n Forma geral:
n

struct pessoa *primeiro;

206

Vantagens de se usar ponteiros para estruturas


n

Curso de Linguagem C

Fazer chamada por referncia para uma funo; n Criar listas ligadas com estruturas dinmicas de dados usando o sistema de alocao. n mais rpido passar estruturas grandes por referncia (usando ponteiros) do que por valor, pois estamos passando apenas um endereo.

207

Acessando os elementos usando ponteiros para estruturas


n

Curso de Linguagem C

Veja a declarao:
struct pessoa *primeiro, segundo; strcpy(segundo.nome, Jos); segundo.idade = 10; primeiro = &segundo;

Para acessar o campo idade de primeiro:


(*primeiro).idade primeiro -> idade

208

Vetores, matrizes e estruturas dentro de estruturas


n

Curso de Linguagem C

Os elementos das estruturas podem ser simples ou complexos, assim, podemos colocar vetores, matrizes e at estruturas dentro das estruturas. Veja:
struct complexa { char setor[21]; struct pessoa funcionarios[50]; }

209

Curso de Linguagem C

Campos de bit
n

C possui metodos para acessar somente um bit dentro de um byte. Isto til para:
Economizar memria declarando vrias variveis booleanas num s byte Comunicar com dispositivos que transmitem informaes diversas codificadas em bytes Rotinas de codificao que precisam acessar bits dos bytes

210

Curso de Linguagem C

Como declarar campos de bit


Os campos de bit s podem ser declarados dentro de estruturas. n Forma geral:
n

struct nome_estrutura { tipo1 var1 : comprimento; tipo2 var2 : comprimento; } nome_var ;


n

Os tipos podem ser: int, signed e unsigned. Quando o tamanho 1, ele deve ser obrigatoriamente unsigned.

211

Curso de Linguagem C

Exemplo
struct dispositivo { unsigned ativo : 1; unsigned pronto : 1; unsignet erro : 1; unsigned : 2; unsigned ultimo_erro : 3; }

212

Curso de Linguagem C

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

213

Curso de Linguagem C

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]); }

214

Curso de Linguagem C

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

enum nome_tipo { lista de constantes } nome_var;


n

Todas as constantes recebero valores inteiros a comear por zero, a no ser que seja especificado o contrrio.

215

Curso de Linguagem C

Exemplo
enum tamanhos {pequeno, medio, grande = 5} tamanho; main() { tamanho = pequeno; printf(%d, tamanho); tamanho = medio; printf(%d, tamanho); tamanho = grande; printf(%d, tamanho); }

216

Curso de Linguagem C

sizeof
n

Como estamos trabalhando s com computadores IBM PC, at agora, no nos preocupamos com os tamanhos das variveis pois j sabemos seus valores. C possui o operador sizeof com a finalidade de garantir a portabilidade dos programas entre ambientes cujos tamanhos das variveis sejam diferentes. sizeof retorna a quantidade de bytes que uma varivel ocupa na memria.

217

Curso de Linguagem C

Exemplos
n

Alocar memria para 10 floats:


float *numeros; numeros = (float *) calloc(10, sizeof(float));

Imprimir o tamanho gasto por uma varivel inteira:


printf(%d, sizeof(int));

218

Curso de Linguagem C

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

219

Curso de Linguagem C

Exemplo
n

Aps as definies:
typedef float balanco; typedef char string[21]; typedef struct pessoa tipo_pessoa;

As seguintes declaraes sero equivalentes:


balanco valor; string frase; tipo_pessoa aluno; float valor; char frase[21]; struct pessoa aluno;

220

Curso de Linguagem C

Operadores avanados
n

C possui vrios operadores especiais que aumentam em muito sua fora e flexibilidade - especialmente na programao a nvel de sistema.

221

Curso de Linguagem C

Operadores bit a bit


Como C foi projetada para substituir a linguagem assembly na maioria das tarefas de programao, ela possui um completo arsenal de operadores bit a bit. n Os operadores bit a bit s podem ser usados nos tipos char e int.
n

222

Curso de Linguagem C

Tabela dos operadores bit a bit


Operador & | ^ ~ >> << Ao E OU OU exclusivo (XOR) Complemento de um (NOT) Deslocar para direita Deslocar para esquerda

223

Curso de Linguagem C

Operador ?
n

O operador ? pode ser usado para substituir comandos if / else que tenham a forma geral:
if (condio) expresso1; else expresso2;

Forma geral:
condio ? expresso1 : expresso 2;

224

Curso de Linguagem C

Exemplo
n

A seqncia de comandos:
x = 10; if (x > 9) y = 100; else y = 200;

pode ser substituda por:


x = 10; y = x > 9 ? 100 : 200;

225

Curso de Linguagem C

Formas abreviadas
n

C permite que sejam escritas formas abreviadas dos comandos de atribuio. Os comandos:
x = x + 10; y = y * 20; z = z - 5;

podem ser reescritos da forma:


x += 10; y *= 20; z -= 5;

226

Curso de Linguagem C

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.

227

Curso de Linguagem C

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

228

Curso de Linguagem C

Resumo de precedncia
Maior ( ) [ ] -> ! ~ ++ -- - (type cast) * & sizeof */% +<< >> < <= >= == != & ^ | && || ? = += -= *= /= ,

Menor

229

Curso de Linguagem C

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

230

Curso de Linguagem C

Funes matemticas
n

Os prottipos das funes matemticas ficam no arquivo math.h. Veja alguns prottipos:
double sin(double arg); double cos(double arg); double tan(double arg) double exp(double arg); double log(double num); double log10(double num); double pow(double base, double exp); double sqrt(double num);

231

Alguns erros comuns de programao


n

Curso de Linguagem C

Por ser uma linguagem que d muito poder ao programador, tambm muito fcil de errar em C. n Como o compilador aceita praticamente tudo o que se escreve, o programador deve ter ateno redobrada na hora de programar.

232

Erros de ordem de processamento


n

Curso de Linguagem C

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++;

ser diferente de
x = ++y;

233

Curso de Linguagem C

Problemas com ponteiros


n

O mau-uso de ponteiros em C pode causar muitos problemas. Veja os dois exemplos ERRADOS abaixo:
int *x; char *p; *p = malloc(100); *x = 10;

234

Curso de Linguagem C

Redefinindo funes
n

possvel, mas no recomendado, que seja criada uma funo com o mesmo nome de uma existente na biblioteca de C. Isto far com que qualquer chamada a esta funo seja direcionada para a nova. A pior parte que, mesmo o nosso programa no referenciando uma funo da biblioteca, as prprias funes da biblioteca podem estar se referenciando, o que causar problemas da mesma forma. Por exemplo, o programador reescreveu a funo getc mas esqueceu-se que a funo scanf a chama.

235

Curso de Linguagem C

Erros por um
n

Todos os ndices dos vetores e matrizes em C comeam em 0. Logo, o programa abaixo est errado.
main() { int x, num[100]; for (x = 1; x <= 100; x ++) num[x] = x; }

236

Curso de Linguagem C

Erros de limite
n

Muitas funes em C (inclusive as das bibliotecas) no possuem (ou possuem pouca) verificao de limites. Assim, a chamada a gets abaixo pode gerar um problema caso o usurio digite mais que 20 caracteres.
main() { char texto[21]; gets(texto); }

237

Omisses de declarao de funo


n

Curso de Linguagem C

Esquecer de definir o prottipo de uma funo pode causar erro pois o compilador estar esperando sempre que as funes no declaradas retornem um inteiro. O mesmo problema ocorre tambm com os parmetros.

238

Curso de Linguagem C

Erros de argumentos de chamada


n

Os argumentos passados a uma funo devem ser do mesmo tipo do esperado por elas. O programa abaixo est errado:
main() { int x; char string[10]; scanf(%d%s, x, string); }

239

Curso de Linguagem C

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;

240

Curso de Linguagem C

Exerccio (parte 2)
n

Vamos definir a funo mais_velho que recebe 2 ponteiros do tipo pessoa e retorna um ponteiro para a pessoa mais velha:
pessoa *mais_velho(pessoa *p1, pessoa *p2); { if (p1 -> idade < p2 -> idade) return p2; else return p1; }

241

Curso de Linguagem C

Exerccio (parte 3)
n

Vamos definir a funo mais_novo que recebe 2 ponteiros do tipo pessoa e retorna um ponteiro para a pessoa mais nova:
pessoa *mais_novo(pessoa *p1, pessoa *p2); { if (p1 -> idade > p2 -> idade) return p2; else return p1; }

242

Curso de Linguagem C

Exerccio (parte 4)
n

Vamos definir a funo le_pessoa que recebe um ponteiro do tipo pessoa e faz a leitura do teclado:
void le_pessoa(pessoa *p) { printf(Nome: ); gets(p -> nome); printf(Idade: ); scanf(%d, p -> idade); }

243

Curso de Linguagem C

Exerccio (parte 5)
n

Vamos definir a funo mostra_pessoa que recebe um ponteiro para uma pessoa e mostra seus dados na tela.
void mostra_pessoa(pessoa *p) { printf(Nome: %s\nIdade: %d\n, p->nome, p->idade); }

244

Curso de Linguagem C

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

245

Curso de Linguagem C

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); }

Você também pode gostar