1. Nota: ................................................................................................................................... 1 2. Caractersticas da Linguagem C......................................................................................... 2 2.1. Caracteres Vlidos ...................................................................................................... 2 2.2. Caracteres Especiais ................................................................................................... 2 2.3. Operadores Aritmticos .............................................................................................. 2 2.4. Operadores de Atribuio Aritmtica......................................................................... 3 2.5. Operadores Incrementais ............................................................................................ 4 2.6. Operadores Relacionais e Lgicos.............................................................................. 4 2.6.1. Operadores Relacionais: ..................................................................................... 4 2.6.2. Operadores Lgicos ............................................................................................ 5 2.7. Operador Condicional................................................................................................. 5 2.8. Tipos de Dados ........................................................................................................... 6 2.8.1. Comuns:.............................................................................................................. 6 2.8.2. Modificados:....................................................................................................... 6 2.9. Palavras Reservadas.................................................................................................... 6 2.10. Comentrios ............................................................................................................ 7 2.11. Constantes ............................................................................................................... 7 2.11.1. Constantes inteiras .............................................................................................. 7 2.11.2. Constantes de ponto flutuante............................................................................. 9 2.11.3. Constantes caracteres .......................................................................................... 9 2.11.4. Constantes string................................................................................................. 9 2.11.5. Constantes Definidas pelo Programador .......................................................... 10 2.12. Variveis ............................................................................................................... 10 3. Bibliotecas Disponveis .................................................................................................... 11 4. Comandos Mais Utilizados............................................................................................... 11 4.1.1. printf() ............................................................................................................... 11 4.1.2. scanf() ............................................................................................................... 13 4.1.3. getchar()............................................................................................................ 14 4.1.4. putchar()............................................................................................................ 15 4.1.5. getch(), getche()................................................................................................ 15 4.1.6. cprintf() ............................................................................................................. 15 4.1.7. sound(), delay(), nosound()............................................................................... 16 4.1.8. clrscr(), clreol() ................................................................................................. 17 5. Estruturas de Controle ...................................................................................................... 17 5.1. Condio de controle ................................................................................................ 17 5.2. do...while .................................................................................................................. 18 5.3. while ......................................................................................................................... 18 5.4. for.............................................................................................................................. 19 5.5. if...else....................................................................................................................... 20 5.5.1. Deciso com um bloco: .................................................................................... 20 5.5.2. Deciso entre dois blocos: ................................................................................ 20 5.5.3. Deciso de mltiplos blocos:............................................................................ 21 5.6. switch...case .............................................................................................................. 22 5.7. Comandos: break, continue, goto e a funo exit() .................................................. 23 5.7.1. break ................................................................................................................. 23 5.7.2. continue............................................................................................................. 24 5.7.3. goto ................................................................................................................... 25 5.7.4. exit().................................................................................................................. 26 6. Vetor ................................................................................................................................. 26 7. Matriz................................................................................................................................ 28 8. Ponteiros ........................................................................................................................... 30 8.1.1. Declarao de ponteiros.................................................................................... 30 8.1.2. Operadores & e * .............................................................................................. 31 8.1.3. Operaes elementares com ponteiros.............................................................. 32 8.1.4. Alocao Dinmica de Memria ...................................................................... 34 8.1.5. Ponteiros para Funes ..................................................................................... 35 8.1.6. Passando uma Funo como Argumento de Outra Funo .............................. 37 9. Tabela ASCII .................................................................................................................... 39 10. Bibliografia ................................................................................................................... 45 Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 1
1. Nota:
Este trabalho um resumo, com pequenas modificaes, da bibliografia aqui referenciada. Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 2
2. Caractersticas da Linguagem C
Importante: A linguagem C case-sensitive (sensvel a caixa), ou seja, uma palavra escrita em maiscula diferente de uma palavra escrita em minscula.
Exemplo:
Valor ? valor ? VALOR ? valoR ? VaLoR ? vALOr ? vaLor e assim por diante...
2.1. Caracteres Vlidos
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 + - * / \ = | & ! ? # % ( ) { } [ ] _ . , : < >
2.2. Caracteres Especiais
Controle/Caracter Seqncia de escape Valor ASCII nulo (null) \0 00 campainha (bell) \a 07 retrocesso (backspace) \b 08 tabulao horizontal \t 09 nova linha (new line) \n 10 tabulao vertical \v 11 alimentao de folha (form feed) \f 12 retorno de carro (carriage return) \r 13 aspas (") \" 34 apostrofo (') \' 39 interrogao (?) \? 63 barra invertida (\) \\ 92
2.3. Operadores Aritmticos
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 3
Existem cinco operadores aritmticos em C. Alm dos operadores aritmticos, existe ainda o operador % chamado operador de mdulo cujo significado o resto da diviso inteira. Os smbolos dos operadores aritmticos so:
A sintaxe da atribuio aritmtica a seguinte onde var a varivel e exp uma expresso vlida.
var += exp; var -= exp; var *= exp; var /= exp; var %= exp;
Estas instrues so equivalentes as seguintes:
var = var + exp; var = var - exp; var = var * exp; var = var / exp; var = var % exp;
Exemplo: Algumas atribuies aritmticas VLIDAS e suas respectivas formas sem o uso do operador de atribuio aritmtico:
Expresso COM operador aritmtico
Expresso SEM operador aritmtico Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 4
var += 5; var = var + 5; var -= 5; var = var 5; var *= 5; var = var * 5; var /= 5; var = var / 5; var %= 5; var = var % 5;
2.5. Operadores Incrementais
Na linguagem C existem instrues muito comuns chamadas de operadores de incremento (++) e decremento (--). A sintaxe dos operadores incrementais a seguinte:
var++; var = var + 1; ++var; var = var + 1; var--; var = var 1; --var; var = var 1;
Observe que existem duas sintaxes possveis para os operadores. Pode-se colocar o operador esquerda ou direita da varivel. Nos dois casos o valor da varivel ser incrementado (ou decrementado) de uma unidade. Porm se o operador for colocado esquerda da varivel, o valor da varivel ser incrementado (ou decrementado) antes que a varivel seja usada em alguma outra operao. Caso o operador seja colocado direita da varivel, o valor da varivel ser incrementado (ou decrementado) depois que a varivel for usada em alguma outra operao.
2.6. Operadores Relacionais e Lgicos
2.6.1. Operadores Relacionais:
Operadores relacionais verificam a relao de magnitude e igualdade entre dois valores. So seis os operadores relacionais em linguagem C:
Operador Significado > maior que < menor que Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 5
>= maior ou igual a (no menor que) <= menor ou igual a (no maior que) == igual a != no igual a (diferente de)
2.6.2. Operadores Lgicos
So trs os operadores lgicos na linguagem C:
Operadores em C Equivalentes em Pascal && AND || OR ! NOT
A sintaxe de uso dos operadores lgicos:
expr_1 && expr_2 expr_1 || expr_2 !expr
onde expr_1, expr_2 e expr so expresses vlidas.
2.7. Operador Condicional
O operador condicional ? : usado para simplificar expresses condicionais.
A sintaxe de uma expresso condicional :
condio ? expresso_1 : expresso_2;
A expresso acima poderia ser escrita tambm da seguinte forma:
if (condio) { expressao_1 } else { expressao_2 } Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 6
2.8. Tipos de Dados
2.8.1. Comuns:
Tipo Tamanho Intervalo Uso char 1 byte -128 a 127 Nmero muito pequeno e caracter ASCII int 2 bytes -32768 a 32767 Contador, controle de lao float 4 bytes 3.4e-38 a 3.4e38 Real (preciso de 7 dgitos) double 8 bytes 1.7e-308 a 1.7e308 Cientfico (preciso de 15 dgitos)
2.8.2. Modificados:
Tipo Tamanho (bytes) Intervalo unsigned char 1 0 a 255 unsigned int 2 0 a 65 535 long int 4 -2.147.483.648 a 2.147.483.647 unsigned long int 4 0 a 4.294.967.295 long double 10 3.4e-4932 a 1.1e4932
2.9. Palavras Reservadas
asm auto break case cdecl char class const continue _cs default delete do double _ds else enum _es extern _export far _fastcall float for friend goto huge if inline int interrupt _loadds long near new operator pascal private protected public register return _saveregs _seg short signed sizeof _ss static struct switch template this typedef union unsigned virtual void volatile while
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 7
2.10. Comentrios
Em linguagem C, comentrios podem ser escritos em qualquer lugar do texto para facilitar a interpretao do algoritmo. Para que o comentrio seja identificado como tal, ele deve ter um /* antes e um */ depois.
Exemplo:
/* esta uma linha de comentrio em C */
Observao: O C++ permite que comentrios sejam escritos de outra forma: colocando um // em uma linha, o compilador entender que tudo que estiver direita do smbolo um comentrio.
Exemplo:
// este um comentrio valido apenas em C++
2.11. Constantes
A linguagem C possui quatro tipos bsicos de constantes: inteiras, ponto flutuante, caracteres e strings. As constantes inteiras e de ponto flutuante representam nmeros, enquanto as de caracteres e strings representam letras e palavras.
2.11.1. Constantes inteiras
Uma constante inteira um nmero de valor inteiro. Nmeros inteiros podem ser escritos nos formatos:
Exemplo: Algumas constantes inteiras decimais INVLIDAS. 1. (ponto) 1,2 (vrgula) 045 (primeiro dgito 0: no constante decimal) Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 8
212-22-33 (caracter ilegal: -)
2. Hexadecimal (base 16):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (a, b, c, d, e)
Exemplo: A seguir so mostrados algumas constantes inteiras hexadecimais VLIDAS.
0x0 0x3 0x4f5a 0x2FFE OxABCD 0xAaFf
Exemplo: Algumas constantes inteiras hexadecimais INVLIDAS . 0x3. (ponto) 0x1,e (vrgula) 0x ff (espao) FFEE (no comea com 0x: no constante hexadecimal) 0Xfg34 (caracter ilegal: g)
3. Octal (base 8):
0, 1, 2, 3, 4, 5, 6, 7
Observao: Na representao de nmeros octais, o primeiro dgito deve ser o nmero 0 (zero).
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 9
2.11.2. Constantes de ponto flutuante
Um nmero ponto flutuante DEVE ter um ponto decimal que no pode ser substitudo por uma vrgula. Pode ser escrito em notao cientfica, neste caso o x10 substitudo por e ou E. Assim sendo, o nmero 1.23e4 representa 1.23 x 10 4 ou 12300.
Exemplo: Nmeros de ponto flutuante VLIDOS.
0.234 125.65 .93 1.23e-9 -1.e2 10.6e18 -.853E+67
A forma de representao de um nmero real em C bastante flexvel. Por exemplo, o nmero 314 pode ser representado por qualquer uma das seguintes formas abaixo:
314. 3.14e2 +3.14e+2 31.4e1 .314E+3 314e0
2.11.3. Constantes caracteres
Uma constante caracter uma letra ou smbolo colocado entre ASPAS SIMPLES.
Exemplo: Algumas constantes caracter VLIDAS.
a b X & {
2.11.4. Constantes string
Uma constante string consiste de um conjunto de caracteres colocados entre ASPAS DUPLAS. Embora as instrues do C usem apenas os caracteres do conjunto padro ASCII, as constantes caracter e string podem conter caracteres do conjunto estendido ASCII: , , , , ...
Exemplo: Abaixo seguem algumas constantes strings VLIDAS.
Oba! Caxias do Sul A resposta : Joo Carlos da Silveira a isto uma string Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 10
2.11.5. Constantes Definidas pelo Programador
O programador pode definir constantes em qualquer programa. A sintaxe da instruo de definio de uma constante:
#define nome_da_constante valor_da_constante
Onde #define uma diretiva de compilao que diz ao compilador para trocar as ocorrncias do texto nome_da_constante pelo valor_da_constante.
Exemplo: Algumas constantes.
#define PI 3.14159 #define ON 1 #define OFF 0 #define ENDERECO 0x378
2.12. Variveis
A sintaxe para declarao de variveis a seguinte:
tipo var_1 [, var_2, ...];
Onde tipo o tipo de dado e var_1 o nome da varivel a ser declarada. Se houver mais de uma varivel, seus nomes so separados por vrgulas.
Exemplo:
int i; int x,y,z; char letra; float nota_1,nota_2,media; double num;
Exemplo: Declarao de variveis em um programa: Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 11
main(){ float raio, area; /* declarao de variveis */ raio = 2.5; rea = 3.14 * raio * raio; }
Mostraremos, nas duas sees iniciais as mais importantes funes de entrada e sada de dados em C: as funes printf() e scanf(). A partir do estudo destas funes possvel escrever um programa propriamente dito com entrada, processamento e sada de dados.
4.1.1. printf()
Biblioteca: stdio.h Declarao: int printf (const char* st_contr [, lista_arg]);
A funo printf() (print formated) imprime dados da lista de argumentos lista_arg formatados de acordo com a string de controle st_contr. Esta funo retorna um valor inteiro representando o nmero de caracteres impressos. Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 12
A string de controle, st_contr, uma mscara que especifica (formata) o que ser impresso e de que maneira ser impresso.
Exemplo: Abaixo as instrues de sada formatadas e os respectivos resultados.
Depois do sinal %, seguem-se alguns modificadores, cuja sintaxe a seguinte:
% [flag] [tamanho] [.preciso] tipo
[flag] justificao de sada: (Opcional) - justificao esquerda. + converso de sinal (sada sempre com sinal: + ou -) <espao> converso de sinal (sadas negativas com sinal, positivas sem sinal)
[tamanho] especificao de tamanho (Opcional) n pelo menos n dgitos sero impressos (dgitos faltantes sero completados por brancos). Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 13
0n pelo menos n dgitos sero impressos (dgitos faltantes sero completados por zeros).
[.preciso] especificador de preciso, dgitos a direita do ponto decimal. (Opcional) (nada) padro: 6 dgitos para reais. .0 nenhum digito decimal. .n so impressos n dgitos decimais.
Tipo caracter de converso de tipo (Requerido) d inteiro decimal o inteiro octal x inteiro hexadecimal f ponto flutuante: [-]dddd.dddd. e ponto flutuante com expoente: [-]d.dddde[+/-]ddd c caracter simples s string
4.1.2. scanf()
Biblioteca: stdio.h Declarao: int scanf(const char* st_contr [, end_var, ...]);
A funo scanf() (scan formated) permite a entrada de dados numricos, caracteres e 'strings' e sua respectiva atribuio a variveis cujos endereos so end_var. Esta funo dita de entrada formatada pois os dados de entrada so formatados pela string de controle st_contr.
O uso da funo scanf() semelhante ao da funo printf(). A funo l da entrada padro (em geral, teclado) uma lista de valores que sero formatados pela string de controle e armazenados nos endereos das variveis da lista. A string de controle formada por um conjunto de especificadores de formato, cuja sintaxe a seguinte:
% [*] [tamanho] tipo
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 14
* indicador de supresso (Opcional) <presente> Se o indicador de supresso estiver presente o campo no lido. Este supressor til quando no queremos ler um campo de dado armazenado em arquivo. <ausente> O campo lido normalmente.
Tamanho especificador de tamanho(Opcional) n Especifica n como o numero mximo de caracteres para leitura do campo. <ausente> Campo de qualquer tamanho.
Tipo define o tipo de dado a ser lido (Requerido) d inteiro decimal (int) f ponto flutuante (float) o inteiro octal (int) x inteiro hexadecimal (int) i inteiro decimal de qualquer formato(int) u inteiro decimal sem sinal (unsigned int) s string (char*) c caracter (char)
A lista de variveis o conjunto de endereos de variveis para os quais sero passados os dados lidos. Variveis simples devem ser precedidas pelo caracter &. Vetores no so precedidos pelo caracter &.
4.1.3. getchar()
Biblioteca: stdio.h Declarao: int getchar(void);
A funo getchar() (get character) l um caracter individual da entrada padro (em geral, o teclado). Se ocorrer um erro ou uma condio de 'fim-de-arquivo' durante a leitura, a funo retorna o valor da constante simblica EOF (end of file) definida na biblioteca stdio.h. Esta funo permite uma forma eficiente de deteco de finais de arquivos.
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 15
4.1.4. putchar()
Biblioteca: stdio.h Declarao: int putchar(int c);
Esta funo putchar() (put character) imprime um caracter individual c na sada padro (em geral o monitor de vdeo).
4.1.5. getch(), getche()
Biblioteca: conio.h Declarao: int getch(void); int getche(void);
Estas funes fazem a leitura dos cdigos de teclado. Estes cdigos podem representar tecla s de caracteres (A, y, *, 8, etc.), teclas de comandos ( [enter], [delete], [Page Up], [F1], etc.) ou combinao de teclas ([Alt] + [A], [Shift] + [F1], [Ctrl] + [Page Down], etc.).
Ao ser executada, a funo getch() (get character) aguarda que uma tecla (ou combinao de teclas) seja pressionada, recebe do teclado o cdigo correspondente e retorna este valor. A funo getche() (get character and echoe) tambm escreve na tela, quando possvel, o caracter correspondente.
4.1.6. cprintf()
Biblioteca: conio.h Declarao: int cprintf (const char* st_contr [, lista_arg]);
Esta funo cprintf() (color print formated) permite a sada de dados usando cores. O uso da funo cprintf() semelhante printf(). Para que a sada seja colorida necessrio definir as cores de fundo e de letra para a impresso antes do uso da funo.
Cores (Modo Texto) Cor Constante Valor Fundo Letra Preto BLACK 0 ok ok Azul BLUE 1 ok ok Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 16
Verde GREEN 2 ok ok Cian CYAN 3 ok ok Vermelho RED 4 ok ok Magenta MAGENTA 5 ok ok Marrom BROWN 6 ok ok Cinza Claro LIGHTGRAY 7 ok ok Cinza Escuro DARKGRAY 8 -- ok Azul Claro LIGHTBLUE 9 -- ok Verde Claro LIGHTGREEN 10 -- ok Cian Claro LIGHTCYAN 11 -- ok Vermelho Claro LIGHTRED 12 -- ok Magenta Claro LIGHTMAGENTA 13 -- ok Amarelo YELLOW 14 -- ok Branco WHITE 15 -- ok Piscante BLINK 128 -- ok
Estas definies so feitas pelas funes texcolor() e textbackground() cuja sintaxe :
onde cor_de_letra e cor_de_fundo so nmeros inteiros referentes as cores da palheta padro (16 cores, modo texto). Estes valores de cor so representadas por constantes simblicas definidas na biblioteca conio.h. Para se usar uma letra piscante deve-se adicionar o valor 128 ao valor da cor de letra.
Exemplo: O trecho de programa abaixo imprime uma mensagem de alerta em amarelo piscante sobre fundo vermelho.
A funo sound() ativa o alto-falante do PC com uma freqncia freq (Hz). A funo delay() realiza uma pausa (aguarda intervalo de tempo), a durao determinada em milisegundos. A funo nosound() desativa o alto-falante.
A funo clrscr() (clear screen) limpa a janela de tela e posiciona o cursor na primeira linha e primeira coluna da janela (canto superior esquerdo da janela). A funo clreol() (clear to end of line) limpa uma linha desde a posio do cursor at o final da linha mas no modifica a posio do cursor. Ambas funes preenchem a tela com a cor de fundo definida pela funo textbacground().
5. Estruturas de Controle
5.1. Condio de controle
Em todas as estruturas, existe pelo menos uma expresso que faz o controle de qual bloco de instrues ser executado ou quantas vezes ele ser executado: o que chamamos de condio de controle. Uma condio de controle uma expresso lgica ou aritmtica cujo resultado pode ser considerado verdadeiro ou falso.
Exemplo: Observe nas condies abaixo, considere as variveis:
int i = 0, j = 3;
condio valor numrico significado lgico (i == 0) 1 verdadeiro (i > j) 0 falso Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 18
(i) 0 falso (j) 3 verdadeiro
5.2. do...while
Esta uma estrutura bsica de repetio condicional. Permite a execuo de um bloco de instrues repetidamente. Sua sintaxe a seguinte:
Sintaxe:
do{ bloco de instrues }while(condio);
Esta estrutura faz com que o bloco de instrues seja executado pelo menos uma vez. Aps a execuo do bloco, a condio testada. Se a condio verdadeira o bloco executado outra vez, caso contrrio a repetio terminada.
Exemplo: No trecho abaixo, a leitura de um nmero feita dentro de um lao de repetio condicional. A leitura repetida caso o nmero lido seja negativo.
do{ puts("Digite um nmero positivo:"); scanf("%f",&num); }while(num <= 0.0);
5.3. while
A estrutura de repetio condicional while semelhante a estrutura do...while. Sua sintaxe a seguinte:
Sintaxe:
while(condio){ bloco de instrues }
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 19
Esta estrutura faz com que a condio seja testada antes de executar o bloco de instrues. Se a condio verdadeira o bloco executado uma vez e a condio avaliada novamente. Caso a condio seja falsa a repetio terminada sem a execuo do bloco. Observe que nesta estrutura, ao contrrio da estrutura do...while, o bloco de instrues pode no ser executado nenhuma vez, basta que a condio seja inicialmente falsa.
Exemplo: No trecho abaixo, calcula-se a preciso () do processador aritmtico do PC. A varivel eps tem seu valor dividido por 2 enquanto o processador conseguir distinguir entre 1 e 1+. Aps a execuo do lao, o valor de eps contm a preciso da mquina.
eps = 1.0; while(1.0 + eps > 1.0){ eps /= 2.0; }
Exemplo2: No trecho abaixo o programa imprimira na tela os algarismos de 1 a 10.
A estrutura for muito semelhante as estruturas de repetio vistas anteriormente, entretanto costuma ser utilizada quando se quer um nmero determinado de ciclos. A contagem dos ciclos feita por uma varivel chamada de contador.
Sintaxe:
for(inicializao; condio; incremento){ bloco de instruo }
Esta estrutura executa um nmero determinado de repeties usando um contador de iteraes. O contador inicializado na expresso de inicializao antes da primeira iterao. Por exemplo: i = 0; ou cont = 20;. Ento o bloco executado e depois de cada iterao, o contador incrementado de acordo com a expresso de incremento. Por exemplo: i++ ou cont -= 2. Ento a expresso de condio avaliada: se a condio for verdadeira, o bloco de instruo executado novamente e o ciclo recomea, se a Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 20
condio falsa termina-se o lao. Esta condio , em geral, uma expresso lgica que determina o ltimo valor do contador. Por exemplo: i <= 100 ou cont > 0.
Exemplo: No trecho abaixo, o contador i inicializado com o valor 1. O bloco repetido enquanto a condio i <= 10 for verdadeira. O contador incrementado com a instruo i++. Esta estrutura, deste modo, imprime os nmeros 1, 2, ..., 9, 10.
for(i=1; i<=10; i++){ printf("Nmero: %d", i); }
5.5. if...else
A estrutura if...else a mais simples estrutura de controle da linguagem C. Esta estrutura permite executar um entre vrios blocos de instrues. O controle de qual bloco ser executado ser dado por uma condio (expresso lgica ou numrica).
5.5.1. Deciso com um bloco:
if(condio){ bloco de intrues }
Se a condio verdadeira, o bloco executado. Caso contrrio, o bloco no executado.
Exemplo: No trecho abaixo, se o valor lido for maior que 10, ento o seu valor redefinido como 10.
printf("Digite o nmero de repeties: (mximo 10)"; scanf("%d",&iter); if(iter > 10){ iter = 10; }
5.5.2. Deciso entre dois blocos:
if(condio){ bloco de instrues 1; Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 21
}else{ bloco de instrues 2; }
Se a condio for verdadeira o bloco de instrues 1 executado. Caso contrrio, o bloco de instrues 2 executado.
Exemplo: No trecho abaixo, se o valor de raiz*raiz for maior que num o valor de raiz ser atribudo a max, caso contrario, ser atribudo a min.
if(raiz*raiz > num){ max = raiz; } else{ min = raiz; }
5.5.3. Deciso de mltiplos blocos:
if(condio 1){ bloco de instrues 1; } else { if(condio N){ bloco de instrues N; } else { bloco de instrues P } }
Se a condio 1 for verdadeira o bloco de instrues 1 executado. Caso contrrio, a condio 2 testada. Se a condio 2 for verdadeira o bloco de instrues 2 executado. Caso contrrio, a condio 3 testada e assim sucessivamente. Se nenhuma condio verdadeira, o bloco de instrues P executado. Observe que apenas um dos blocos executado.
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 22
Exemplo: No trecho abaixo, uma determinada ao executada se o valor de num for positivo, negativo ou nulo.
if(num > 0){ a = b; } else { if(num < 0){ a = b + 1; } else { a = b - 1; } }
5.6. switch...case
A estrutura switch..case uma estrutura de deciso que permite a execuo de um conjunto de instrues a partir pontos diferentes conforme o resultado de uma expresso inteira de controle. O resultado desta expresso comparado ao valor de cada um dos rtulos, e as instrues so executadas a partir desde rtulo.
Sintaxe: Esta estrutura possui a seguinte sintaxe:
switch(expresso){ case rtulo_1: conjunto de instrues 1 case rtulo_2: conjunto de instrues 2 ... case rtulo_n: conjunto de instrues 1 [default: conjunto de instrues d] }
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 23
O valor de expresso avaliado e o fluxo lgico ser desviado para o conjunto cujo rtulo igual ao resultado da expresso e todas as instrues abaixo deste rtulo sero executadas. Caso o resultado da expresso for diferente de todos os valores dos rtulos ento conjunto de instrues d executado. Os rtulos devem ser expresses constantes inteiras diferentes entre si. O rtulo default opcional.
Esta estrutura particularmente til quando se tem um conjunto de instrues que se deve executar em ordem, porm se pode comear em pontos diferentes.
Exemplo: O trecho abaixo ilustra o uso da instruo switch em um menu de seleo. Neste exemplo, o programa iniciar o processo de usinagem de uma pea em um ponto qualquer dependendo do valor lido.
int selecao; printf("Digite estgio de usinagem:"); scanf("%d",&selecao); switch(selecao){ case 1: // desbaste grosso... break; case 2: // desbaste fino... break; case 3: // acabamento... break; case 4: // polimento... }
5.7. Comandos: break, continue, goto e a funo exit()
As instrues vistas anteriormente podem sofrer desvios e interrupes em sua seqncia lgica normal atravs do uso certas instrues. As instrues que veremos a seguir devem ser usadas com muita parcimnia, pois fogem da lgica estruturada tm a tendncia de tornar um programa incompreensvel.
5.7.1. break
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 24
Esta instruo serve para terminar a execuo das instrues de um lao de repetio (for, do...while, while) ou para terminar um conjunto switch...case.
Quando em um lao de repetio, esta instruo fora a interrupo do lao independentemente da condio de controle.
Exemplo: No trecho abaixo um lao de repetio l valores para o clculo de uma mdia. O lao possui uma condio de controle sempre verdadeira o que, em princpio, um erro: lao infinito. Porm, a sada do lao se d pela instruo break que executada quando um valor negativo lido.
printf("digite valores:"); do{ printf("valor:"); scanf("%f", &val); if(val < 0){ break; // sada do lao } num++; soma += val; }while(1); // sempre verdadeiro printf("mdia: %f",soma/num);
5.7.2. continue
Esta instruo opera de modo semelhante a instruo break dentro de um lao de repetio. Quando executada, ela pula as instrues de um lao de repetio sem sair do lao. Isto , a instruo fora a avaliao da condio de controle do lao.
Exemplo: No trecho abaixo revemos um lao de repetio l valores para o clculo de uma mdia. Se (val < 0.0) ento o programa salta diretamente para a condio de controle, sem executar o resto das instrues.
printf("digite valores:"); Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 25
do{ printf ("valor:"); scanf ("%f", &val); if(val < 0){ // se val negativo... continue; // ...salta para... } num++; // se (val < 0) estas instrues soma += val; // no so executadas! }while(val >= 0); // ...fim do lao printf("mdia: %f",soma/num);
5.7.3. goto
Esta instruo chamada de desvio de fluxo. A instruo desvia o programa para um rtulo (posio identificada) no programa. So raros os casos onde a instruo goto necessria, no entanto, h certas circunstncias, onde usada com prudncia, ela pode ser til.
Sintaxe:
goto rtulo; ... rtulo: ...
Exemplo: No trecho abaixo revemos um lao de repetio que l valores para o clculo de uma mdia. Foram usadas duas instrues goto.
printf ("digite valores:"); inicio: // rtulo printf ("valor:"); scanf("%f",&val); if(val < 0){ // se val negativo... goto fim; // ...salta para fim } num++; // se (val < 0.0) estas instrues soma += val; // no so executadas! Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
Esta funo (no instruo) exit(), da biblioteca stdlib.h, uma funo que termina a execuo de um programa. Normalmente um programa terminado quando se executa a ltima sua instruo, porm pode-se terminar a execuo do programa a qualquer momento com o uso desta funo.
A funo exit() tem a seguinte declarao: void exit(int status). Onde o argumento da funo um valor inteiro que ser passado para o Sistema Operacional: (varivel de sistema errorlevel no DOS).
Exemplo: No trecho abaixo revemos um lao de repetio l valores para o clculo de uma mdia. Foi usado a funo exit para terminar a execuo do programa.
printf("digite valores:"); do{ printf ("valor:"); scanf("%f",&val); if(val < 0.0){ // se val negativo... printf("mdia: %f",soma/num); // imprime resultado exit(0); // termina programa } num++; soma += val; }while(1); 6. Vetor
Em muitas aplicaes queremos trabalhar com conjuntos de dados que so semelhantes em tipo. Por exemplo o conjunto das alturas dos alunos de uma turma, ou um conjunto de seus nomes. Nestes casos, seria conveniente poder colocar estas informaes sob um mesmo conjunto, e poder referenciar cada dado individual deste conjunto por um nmero ndice. Em programao, este tipo de estrutura de dados chamada de vetor (ou array, em ingls) ou, de maneira mais formal estruturas de dados homogneas.
Exemplo: A maneira mais simples de entender um vetor atravs da visualizao de um lista, de elementos com um nome coletivo e um ndice de referncia aos valores da lista.
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 27
n nota 0 8.4 1 6.9 2 4.5 3 4.6 4 7.2
Nesta lista, n representa um nmero de referncia e nota o nome do conjunto. Assim podemos dizer que a 2 a nota 6.9 ou representar nota[1] = 6.9
Declarao e inicializao de vetores Sintaxe:
tipo nome[tam];
onde: tipo o tipo dos elementos do vetor: int, float, double ... nome o nome identificador do vetor. tam o tamanho do vetor, isto , o nmero de elementos que o vetor pode armazenar.
Exemplo: Veja as declaraes seguintes:
int idade[100]; // declara um vetor chamado 'idade' do tipo // 'int' que recebe 100 elementos. float nota[25]; // declara um vetor chamado 'nota' do tipo // 'float' que pode armazenar 25 nmeros. char nome[80]; // declara um vetor chamado 'nome' do tipo // 'char' que pode armazenar 80 caracteres.
Cada elemento do vetor referenciado pelo nome do vetor seguido de um ndice inteiro. O primeiro elemento do vetor tem ndice 0 e o ltimo tem ndice tam-1.
Assim como podemos inicializar variveis (por exemplo: int j = 3;), podemos inicializar vetores.
Sintaxe:
tipo nome[tam] = {lista de valores};
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 28
onde:
lista de valores uma lista, separada por vrgulas, dos valores de cada elemento do vetor.
Exemplo: Veja as inicializaes seguintes. Observe que a inicializao de nota gera o vetor do exemplo do incio desta seo.
int dia[7] = {12,30,14,7,13,15,6}; float nota[5] = {8.4,6.9,4.5,4.6,7.2}; char vogal[5] = {'a, e, i, o, u'};
Opcionalmente, podemos inicializar os elementos do vetor enumerando-os um a um. Exemplo:
int cor_menu[4] = {BLUE,YELLOW,GREEN,GRAY}; ou int cor_menu[4]; cor_menu[0] = BLUE; cor_menu[1] = YELLOW; cor_menu[2] = GREEN; cor_menu[3] = GRAY;
Importante: Na linguagem C, devemos ter cuidado com os limites de um vetor. Embora na sua declarao, tenhamos definido o tamanho de um vetor, o C no faz nenhum teste de verificao de acesso a um elemento dentro do vetor ou no. Por exemplo: Se declaramos um vetor como int valor[5], teoricamente s tem sentido usarmos os elementos valor[0], ..., valor[4]. Porm, o C no acusa erro se usarmos valor[12] em algum lugar do programa. Estes testes de limite devem ser feitos logicamente dentro do programa.
7. Matriz
Vetores podem ter mais de uma dimenso, isto , mais de um ndice de referncia. Podemos ter vetores de duas, trs, ou mais dimenses. Podemos entender um vetor de duas dimenses (por exemplo) associando-o aos dados de um tabela.
Exemplo: Um vetor bidimensional pode ser visualizado atravs de uma tabela.
nota 0 1 2 0 8.4 7.4 5.7 Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
Nesta tabela representamos as notas de 5 alunos em 3 provas diferentes (matemtica, fsica e qumica). O nome nota o nome do conjunto, assim podemos dizer que a nota do 3 o
aluno na 2 a prova 6.4 ou representar nota[2,1] = 6.4
Declarao e inicializao de Matrizes
A declarao e inicializao de vetores de mais de uma dimenso ou matriz feita de modo semelhante aos vetores unidimensionais.
Sintaxe:
tipo nome[tam_1][tam_2]...[tam_N]={{lista},{lista},...{lista}};
onde:
tipo o tipo dos elementos do vetor. nome o nome do vetor. [tam_1][tam_2]...[tam_N] o tamanho de cada dimenso do vetor. {{lista},{lista},...{lista}} so as listas de elementos.
Exemplo: veja algumas declaraes e inicializaes de vetores de mais de uma dimenso. Observe que a inicializao de nota gera a tabela do exemplo do incio desta seo.
Neste exemplo, nota um vetor duas dimenses ([][]). Este vetor composto de 5 vetores de 3 elementos cada. J tabela vetor de trs dimenses ([][][]). Este vetor composto de 2 vetores de 3 sub-vetores de 2 elementos cada. Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 30
8. Ponteiros
Toda informao (dado armazenado em varivel simples ou vetor) que manipulamos em um programa est armazenado na memria do computador. Cada informao representada por um certo conjunto de bytes (Ver captulo 2). Por exemplo: caracter (char): 1 byte, inteiro (int): 2 bytes, etc.
Cada um destes conjuntos de bytes, que chamaremos de bloco, tem um nome e um endereo de localizao especifica na memria.
Exemplo: Observe a instruo abaixo:
int num = 17;
Ao interpretarmos esta instruo, o processador pode especificar:
Nome da informao: num Tipo de informao: int Tamanho do bloco (nmero de bytes ocupados pela informao): 2 Valor da informao: 17 Endereo da informao (localizao do primeiro byte): 8F6F:FFF2 (hexadecimal)
Em geral, interessa ao programador apenas os nomes simblicos que representam as informaes, pois com estes nomes que so realizadas as operaes do seu algoritmo. Porm, ao processador interessa os endereos dos blocos de informao pois com estes endereos que vai trabalhar.
Ponteiros so variveis que contm endereos. Neste sentido, estas variveis apontam para algum determinado endereo da memria.
8.1.1. Declarao de ponteiros.
Quando declaramos um ponteiro, devemos declar-lo com o mesmo tipo (int, char, etc.) do bloco a ser apontado. Por exemplo, se queremos que um ponteiro aponte para uma varivel int (bloco de 2 bytes) devemos declar-lo como int tambm.
A sintaxe da declarao de um ponteiro a seguinte:
tipo_ptr *nome_ptr_1; ou tipo_ptr* nome_ptr_1, nome_ptr_2, ...; Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 31
onde: tipo_ptr : o tipo de bloco para o qual o ponteiro apontar. * : um operador que indica que nome_ptr um ponteiro. nome_ptr_1, nome_ptr_2,...: so os nomes dos ponteiros.
Exemplo: Veja as seguintes instrues:
int *p; float* s_1, s_2;
A primeira instruo declara um ponteiro chamado p que aponta para um inteiro. Este ponteiro aponta para o primeiro endereo de um bloco de dois bytes. Sempre necessrio declarar o tipo do ponteiro. Neste caso dizemos que declaramos um ponteiro tipo int.
A segunda instruo declara dois ponteiros (s_1 e s_2) do tipo float. Observe que o * est justaposto ao tipo: assim todos os elementos da lista sero declarados ponteiros.
8.1.2. Operadores & e *
Quando trabalhamos com ponteiros, queremos fazer duas coisas basicamente:
conhecer endereo de uma varivel; conhecer o contedo de um endereo.
Para realizar estas tarefas a linguagem C nos proporciona dois operadores especiais:
o operador de endereo: & o operador de contedo: *
O operador de endereo (&) determina o endereo de uma varivel (o primeiro byte do bloco ocupado pela varivel). Por exemplo, &val determina o endereo do bloco ocupado pela varivel val. Esta informao no totalmente nova pois j a usamos antes: na funo scanf().
Exemplo: Quando escrevemos a instruo:
scanf("%d", &num);
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 32
Estamos nos referindo ao endereo do bloco ocupado pela varivel num. A instruo significa: "leia o buffer do teclado, transforme o valor lido em um valor inteiro (2 bytes) e o armazene no bloco localizado no endereo da varivel num".
Exemplo: Para se atribuir a um ponteiro o endereo de uma varivel escreve-se:
int *p, val=5; // declarao de ponteiro e varivel p = &val; // atribuio
Observe que o ponteiro p deve ser declarado anteriormente com o mesmo tipo da varivel para a qual ele deve apontar.
O operador contedo (*) determina o contedo (valor) do dado armazenado no endereo de um bloco apontado por um ponteiro. Por exemplo, *p determina contedo do bloco apontado pelo ponteiro p. De forma resumida: o operador (*) determina o contedo de um endereo.
Exemplo: Para se atribuir a uma varivel o contedo de um endereo escreve-se:
int *p = 0x3f8, val; // declarao de ponteiro e varivel val = *p; // atribuio
8.1.3. Operaes elementares com ponteiros
Ponteiros so variveis especiais e obedecem a regras especiais. Deste modo, existem uma srie de operaes (aritmticas, lgicas, etc.) envolvendo ponteiros que so permitidas e outras no. A seguir so destacadas algumas operaes que podem ser executadas com ponteiros.
A um ponteiro pode ser atribudo o endereo de uma varivel comum.
Exemplo: Observe o trecho abaixo:
... int *p; int s; p = &s; // p recebe o endereo de s ...
Um ponteiro pode receber o valor de outro ponteiro, isto , pode receber o endereo apontado por outro ponteiro, desde que os ponteiros sejam de mesmo tipo.
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 33
Exemplo: Observe o trecho abaixo:
... float *p1, *p2, val; p1 = &val; // p1 recebe o endereo de val... p2 = p1; // ...e p2 recebe o contedo de p2 (endereo de val)
Um ponteiro pode receber um endereo de memria diretamente. Um endereo um nmero inteiro. Em geral, na forma hexadecimal (0x....). Nesta atribuio devemos, em geral, forar uma converso de tipo usando typecast 1 para o tipo de ponteiro declarado.
Exemplo: Observe o trecho abaixo:
... int *p1; float p2; p1 = 0x03F8; // endereo da porta serial COM1 p2 = (float)0x0FF6; // casting ...
A um ponteiro pode ser atribudo o valor nulo usando a constante simblica NULL (declarada na biblioteca stdlib.h). Um ponteiro com valor NULL no aponta para lugar nenhum! Algumas funes a utilizam para registrar uma atribuio ilegal ou sem sucesso (ver funo malloc() adiante).
Exemplo:
#include <stdlib.h> ... char *p; p = NULL; ...
Uma quantidade inteira pode ser adicionada ou subtrada de um ponteiro. A adio de um inteiro n a um ponteiro p far com que ele aponte para o endereo do n-simo bloco seguinte.
1 type conversion ou typecasting refere-se a mudana do tipo de uma entidade em outra. Isto feito para obter vantagens e flexibilidade nas caractersticas de algumas hierarquias. (Disponvel em: < http://en.wikipedia.org/wiki/Typecast_(programming)> Acesso em: 15 set. 2006) Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 34
Exemplo: Observe o trecho abaixo:
... double *p, *q, var; p = &var q = ++p; // q aponta para o bloco seguinte ao ocupado por var p = q - 5;// p aponta para o quinto bloco anterior a q ...
Dois ponteiros podem ser comparados (usando-se operadores lgicos) desde que sejam de mesmo tipo.
Exemplo: Observe o trecho abaixo:
... if(px == py){ // se px aponta para o mesmo bloco que py ... if(px > py){ // se px aponta para um bloco posterior a py ... if(px != py){ // se px aponta para um bloco diferente de py ... if(px == NULL) // se px nulo... ...
8.1.4. Alocao Dinmica de Memria
Os elementos de um vetor so armazenados seqencialmente na memria do computador. Na declarao de um vetor, (por exemplo: int vet[10]) dito ao processador reservar (alocar) um certo nmero de blocos de memria para armazenamento dos elementos do vetor. Porm, neste modo de declarao, no se pode alocar um nmero varivel de elementos.
A linguagem C permite alocar dinamicamente (em tempo de execuo), blocos de memria usando ponteiros. Dada a ntima relao entre ponteiros e vetores, isto significa que podemos declarar dinamicamente vetores de tamanho varivel. Isto desejvel caso queiramos poupar memria.
Para a alocao de memria usamos a funo malloc() (memory allocation) da biblioteca alloc.h. A funo malloc() reserva, seqencialmente, um certo nmero de blocos de memria e retorna, para um ponteiro, o endereo do primeiro bloco reservado.
Sintaxe:
pont = (tipo *)malloc(tam);
onde: Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 35
pont o nome do ponteiro que recebe o endereo do espao de memria alocado. tipo o tipo do endereo apontado (tipo do ponteiro). tam o tamanho do espao alocado: numero de bytes.
A sintaxe seguinte, porem, mais clara:
pont = (tipo*)malloc(num*sizeof(tipo));
onde:
num o nmero de elementos que queremos poder armazenar no espao alocado.
Exemplo: Se queremos declarar um vetor chamado vet, tipo int, com num elementos podemos usar o trecho abaixo:
... int *vet; // declarao do ponteiro vet = (int*)malloc(num*2); // alocao de num blocos de 2 bytes ...
ou ainda
... int *vet; // declarao do ponteiro vet = (int*) malloc(num * sizeof(int)); ...
Caso no seja possvel alocar o espao requisitado a funo malloc() retorna a constante simblica NULL.
Para liberar (desalocar) o espao de memria se usa a funo free(), cuja sintaxe a seguinte:
free(pont);
onde:
pont o nome do ponteiro que contm o endereo inicialdo espao de memria reservado.
8.1.5. Ponteiros para Funes
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 36
At agora usamos ponteiros para apontar para endereos de memria onde se encontravam as variveis (dados). Algumas vezes necessrio apontar para funes, isto , apontar para o endereo de memria que contem o incio das instrues de uma funo. Quando assim procedemos, dizemos que usaremos ponteiros para funes.
Um uso de ponteiros para funes passar uma funo como argumento de outra funo. Mas tambm pode-se usar ponteiros para funes ao invs de funes nas chamadas normais de funes.
Sintaxe:
tipo_r (*nome_p)(lista);
onde:
tipo_r o tipo de retorno da funo apontada. nome_p o nome do ponteiro que apontara para a funo. lista a lista de argumentos da funo.
Exemplo: Suponha que temos uma funo declarada como:
float fun(int a, int b){ ... }
O ponteiro correspondente ser:
float (*pt)(int, int);
Observe que o ponteiro para funo deve ser declarado entre parnteses. Observe tambm que o ponteiro e a funo retornam o mesmo tipo de dado e que tem os mesmos argumentos.
Sintaxe:
pont = &funcao;
onde:
pont o nome do ponteiro. funcao o nome da funo.
Se um ponteiro contm o endereo de uma funo, ele pode ser usado no lugar da chamada da funo.
Exemplo: O trecho de programa abaixo usa um ponteiro para chamar uma funo: Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
8.1.6. Passando uma Funo como Argumento de Outra Funo
Outra utilizao de ponteiros para funes na passagem de uma funo como argumento para outra funo. Para que isso ocorra necessitamos:
Na declarao da funo a ser passada:
i) Nada de especial, apenas a definio normal:
tipo nome_p(lista){ ... }
Exemplo:
float soma(float a,float b){ ... }
Na funo receptora:
i) Declarar o ponteiro que recebe a funo passada na lista de argumentos:
tipo nome_r(..., tipo (*pt)(lista), ...){
Exemplo:
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 38
float grad(float x, float y, float (*p)(float,float)){
ii) Usar o ponteiro para funes nas chamadas da funo passada:
var = (*pt)(lista);
Exemplo:
valor = (*p)(x,y);
Na funo principal:
i) Passar o nome da funo chamada para a funo receptora:
var = nome_g(... , nome_p , ...);
Exemplo:
g = grad(x,y,soma);
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 39
9. Tabela ASCII
As tabelas mostradas neste apndice representam os 256 cdigos usados nos computadores da famlia IBM. Esta tabela refere-se ao American Standard Code for Information Interchange (cdigo padro americano para troca de informaes), que um conjunto de nmeros representando caracteres ou instrues de controle usados para troca de informaes entre computadores entre si, entre perifricos (teclado, monitor, impressora) e outros dispositivos. Estes cdigos tem tamanho de 1 byte com valores de 00h a FFh (0 a 255 decimal). Podemos dividir estes cdigos em trs conjuntos: controle, padro e estendido.
Os primeiros 32 cdigos de 00h at 1Fh (0 a 31 decimal), formam o conjunto de controle ASCII. Estes cdigos so usados para controlar dispositivos, por exemplo uma impressora ou o monitor de vdeo. O cdigo 0Ch (form feed) recebido por ima impressora gera um avano de uma pgina. O cdigo 0Dh (carriage return) enviado pelo teclado quando a tecla ENTER pressionada. Embora exista um padro, alguns poucos dispositivos tratam diferentemente estes cdigos e necessrio consultar o manual para saber exatamente como o equipamento lida com o cdigo. Em alguns casos o cdigo tambm pode representar um caracter imprimvel. Por exemplo o cdigo 01h representa o caracter J (happy face).
Os 96 cdigos seguintes de 20h a 7Fh (32 a 127 decimal) formam o conjunto padro ASCII. Todos os computadores lidam da mesma forma com estes cdigos. Eles representam os caracteres usados na manipulao de textos: cdigos-fonte, documentos, mensagens de correio eletrnico, etc. So constitudos das letras do alfabeto latino (minsculo e maisculo) e alguns smbolos usuais.
Os restantes 128 cdigos de 80h at FFh (128 a 255 decimal) formam o conjunto estendido ASCII. Estes cdigos tambm representam caracteres imprimveis porem cada fabricante decide como e quais smbolos usar. Nesta parte do cdigo esto definidas os caracteres especiais: , , , ... Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 40
Dec. Hex. Controle 0 00h NUL (Null) 1 01h SOH (Start of Heading) 2 02h STX (Start of Text) 3 03h ETX (End of Text) 4 04h EOT (End of Transmision) 5 05h ENQ (Enquiry) 6 06h ACK (Acknowledge) 7 07h BEL (Bell) 8 08h BS (Backspace) 9 09h HT (Horizontal Tab) 10 0Ah LF (Line Feed) 11 0Bh VT (Vertical Tab) 12 0Ch FF (Form Feed) 13 0Dh CR (Carriage Return) 14 0Eh SO (Shift Out) 15 0Fh SI (Shift In) 16 10h DLE (Data Link Escape) 17 11h DC1 (Device control 1) 18 12h DC2 (Device control 2) 19 13h DC3 (Device control 3) 20 14h DC4 (Device control 4) 21 15h NAK (Negative Acknowledge) 22 16h SYN (Synchronous Idle) 23 17h ETB (End Transmission Block) 24 18h CAN (Cancel) 25 19h EM (End of Media) 26 1Ah SUB (Substitute) 27 1Bh ESC (Escape) 28 1Ch FS (File Separator) 29 1Dh GS (Group Separator) 30 1Eh RS (Record Separator) 31 1Fh US (Unit Separator)
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 41
Caracter Dec. Hex. <espao> 32 20h ! 33 21h " 34 22h # 35 23h $ 36 24h % 37 25h & 38 26h ' 39 27h ( 40 28h ) 41 29h * 42 2Ah + 43 2Bh , 44 2Ch - 45 2Dh . 46 2Eh / 47 2Fh 0 48 30h 1 49 31h 2 50 32h 3 51 33h 4 52 34h 5 53 35h 6 54 36h 7 55 37h 8 56 38h 9 57 39h : 58 3Ah ; 59 3Bh < 60 3Ch = 61 3Dh > 62 3Eh ? 63 3Fh @ 64 40h A 65 41h B 66 42h C 67 43h Caracter Dec. Hex. D 68 44h E 69 45h F 70 46h G 71 47h H 72 48h I 73 49h J 74 4Ah K 75 4Bh L 76 4Ch M 77 4Dh N 78 4Eh O 79 4Fh P 80 50h Q 81 51h R 82 52h S 83 53h T 84 54h U 85 55h V 86 56h W 87 57h X 88 58h Y 89 59h Z 90 5Ah [ 91 5Bh \ 92 5Ch ] 93 5Dh ^ 94 5Eh _ 95 5Fh ` 96 60h a 97 61h b 98 62h c 99 63h d 100 64h e 101 65h f 102 66h g 103 67h Caracter Dec. Hex. h 104 68h i 105 69h j 106 6Ah k 107 6Bh l 108 6Ch m 109 6Dh n 110 6Eh o 111 6Fh p 112 70h q 113 71h r 114 72h s 115 73h t 116 74h u 117 75h v 118 76h w 119 77h x 120 78h y 121 79h z 122 7Ah { 123 7Bh | 124 7Ch } 125 7Dh ~ 126 7Eh <delete> 127 7Fh Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
225 E1h G 226 E2h Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba2@yahoo.com ICQ-45923544 43
p 227 E3h S 228 E4h s 229 E5h
230 E6h t 231 E7h F 232 E8h T 233 E9h O 234 EAh d 235 EBh 8 236 ECh f 237 EDh
238 EEh n 239 EFh = 240 F0h
241 F1h = 242 F2h = 243 F3h ( 244 F4h ) 245 F5h
246 F6h
247 F7h
248 F8h
249 F9h
250 FAh Caracter Dec. Hex. v 251 FBh n 252 FCh
253 FDh
254 FEh
255 FFh
Guia de Consulta Rpida da Linguagem C Prof. Edwar Saliba Jnior
eddiesaliba@yahoo.com ICQ-45923544 44 Entre os caracteres da tabela ASCII estendidos os mais teis esto, talvez, os caracteres de desenho de quadro em linhas simples e duplas: os caracteres de B3h at DAh (179 a 218 decimal). Como a visualizao deste conjunto difcil, o desenho abaixo pode auxiliar nesta tarefa: