Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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
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
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
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
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
onde tipo deve ser um tipo vlido em C e lista_variveis pode consistir em um ou mais identificadores separados por vrgula.
30
Curso de Linguagem C
31
Curso de Linguagem C
Onde declarar?
n
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
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
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
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
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
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
65
Curso de Linguagem C
string de controle
n
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
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
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
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
76
Curso de Linguagem C
string de controle
n
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
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)
83
Curso de Linguagem C
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);
85
Curso de Linguagem C
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
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
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
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
96
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
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
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); }
109
Curso de Linguagem C
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; }
112
Curso de Linguagem C
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
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
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
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
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
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
129
Curso de Linguagem C
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
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
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
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
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
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
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 = № 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
153
Curso de Linguagem C
Ponteiros e vetores
n
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;
155
Curso de Linguagem C
156
Curso de Linguagem C
157
Curso de Linguagem C
158
Curso de Linguagem C
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
163
Curso de Linguagem C
Comando return
n
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);
166
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
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[ ])
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
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
180
Curso de Linguagem C
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
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
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
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
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
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
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
Curso de Linguagem C
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
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
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
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
206
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
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
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
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
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
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;
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
222
Curso de Linguagem C
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;
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;
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
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
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
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
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
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
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); }