Home
Camillo - Departamento de Ciência da Computação
Contents
1. ii irreaeeeeraaaraaanaa nara aaaaana rante nanaaananaa 19 6 5 Abreviaturas 20 7 Vari veis compostas homog neas 20 7 1 Vari veis compostas homog neas unidimensionais vetores 20 7 1 1 Inicializa o de vetores ie er ara aea a 22 7 2 Vari veis compostas homog neas multidimensionais matrizes 23 7 21 Inicializa o de matrizes is iserreerreeaaracanaanaranaraaanaananaa 24 1 3 Exerc cios PrOpOSIOS ainiisiiscoasia tira louslposcraoas onioeain iba Lo aino iaei VIU L GALO na su unas asi ai 26 7 4 Operador em tempo de compila o sizeof e reeereereerraarna 32 6 PONGIFOS 2 cousa poi cea a ra EE e pa DAL o RAS UHE GRASS LORD SS CD qn Ara aa E 32 8 1 Vatl veis ponteiros s anistia desisto TA dores Ra nba doa Ds ABALA SORO sau nto SONS Rana DRA OS RAE o DRan E data TE 33 8 2 Operadores de ponteiros rare aeaenaneareaananananaaaanaaara ana raaanaananaanaa 33 8 3 Aritm tica de ponteiros s ssi s iissiuseoa io sera nes ai e aai eo ia aia ca ada din e a Eoia pe iab ias te ha 33 8 4 ndire o m lliplas 042 2 2 22 2 47 5503 0000007005 2822 45 04005 ariaa Ea aE E NENESE du AEAN ada alga naomi ada 33 8 5 Ponteir s SlringS msaiisssitio raro siicando risadas aea aaa aaea aa aA thais ale Aaa aeaea i aaia Dado 34 tA E Ponteiros e VOlOr s E A T A E 35 8 7
2. Supondo o endere o inicial da vari vel y igual 5DC46 Quais os endere os das seguintes vari veis em arquiteturas de 16 bits e 32 bits p g 41 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 16 bits y i y 1 a y 1 b y 1 c 1 b s 1 2 y 1 c 0 a y 2 c 0 b s 0 1 3 Dada as defini es das estruturas struct REG 1 int x 2 char y struct REG_2 char a struct REG 1 b 2 2 struct REG_3 struct REG 1 d 3 struct REG 2 el2 Dada a declara o struct REG_3 Reg Complete o quadro abaixo 16 bits sizeof Reg d sizeof Reg e 1 a sizeof Reg e 0 b sizeof Reg e 0 b 1 0 x 1 sizeof REG 1 sizeof REG 2 sizeof REG 3 sizeof Reg 32 bits 32 bits p g 42 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Supondo o endere o inicial da vari vel Reg igual 7D016 Quais os endere os das seguintes vari veis em arquiteturas de 16 bits e 32 bits 16 bits 32 bits Reg d 2 y Reg e 0 b 1 0 x 1 Reg e 1 a Reg d 0 x Reg e 1 b 1 1 Reg e 1 b 1 0 y p g 43 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 4 Um ponto no espa o R pode ser representado por um par de n meros pertencentes ao conjunto dos E 2 n meros reais e que formam um par ordenado x y Uma reta representada no espa o R pode ser definida por dois pontos Defina os ti
3. char Dia char Mes int Ano E struct NOME char Nomef 40 char Sexo struct DATA Data data de nascimento p g 130 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira struct FONE char Codigo 3 char Prefixo 4 char Numero 4 struct ENDERECO char Ruaf 35 char Bairro 25 char Cep 8 l struct REG char Codigo 6 sequ ncia de caracteres num ricos struct NOME Nome struct FONE Fone struct ENDERECO Endereco struct DATA Data data do sistema operacional char Email 40 a de DEDE a SED Prototipos de fun es ERRA E O E RE REDE void ApanharDataSistema struct DATA Data void LerRegistro struct REG void GerarCodigo char void GerarEmail struct REG char void GravarRegistro struct REG E E REIER NEESER EA R N EE EEE RRE EREEREER EEEREN Funcoes RR DRA SE a SEADE DDD void main struct REG Reg randomize fun o para inicializar o gerador de n meros aleat rios do LerRegistro amp Reg if IReg Nome Nomej 0 break GravarRegistro Reg while 1 ee a E a a Sintaxe void LerRegistro struct REG Reg Fun o Ler uma estrutura do tipo REG Entrada Ponteiro para uma estrutura do tipo REG Sa da Nenhuma PEIRE EEE RAEE KE ENRE E EE E EREN R EER REEE EEA R T void LerRegistro struct REG Reg p g 131 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Ger
4. 11 Fa a um programa que gere e mostre a seguinte matriz UT UT a a rererere perr ryp e pe A e e a e o og aji 9000000000 9000000000 2000000000 9000000000 2000000000 9000000000 12 Fa a um programa que gere e mostre a seguinte matriz LLLLILIILIILMMM LLLLLILILMMM LLLLILIILIILMMM LLLLLILIILMMM LLLILILILIILMMM LLLLLILILMMM LLLLLILILMMM LLLLILIILIILMMM LLLLLILIILMMM LLLLLILIILMMM p g 94 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 13 Fa a um programa que gere e mostre a seguinte matriz AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA A ABBBBBBAABBBBAA A ABBBBBBAABBBBAA A ABBBBBBAABBBBAA A ABBBBBBAABBBBAA AAAAAAAAAABBBBAA AAAAAAAAAABBBBAA AAAAAAAAAABBBBAA A ABBBBBBAABBBBAA AABBBBBBAABBBBAA AABBBBBBAMABBBBA RAM AABBBBBBAMABBBBA RAM AAAAAAAAAABBBBA RAM AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA 14 Construa um programa que leia uma matriz 4x3 calcule e mostre o somat rio dos valores contidos linha por linha Por exemplo H le h J gt 4 d1 oi 2 gt 2 o2 01 gt 28 5 l2 gt 8 15 Implemente um programa que leia uma matriz 4x3 calcule e mostre o somat rio dos valores contidos coluna por coluna Por exemplo 12 4 4 EXERC CIOS GERAIS SOBRE REPETI ES 1 Fa a um programa que leia um valor do tipo float 32 bits e mostre como este float est armazenado na mem ria do computador mostrando o conte do e a sequ ncia dos bytes que represent
5. 22 length ftell stream 28 fseek stream curpos SEEK SET 24 return length 25 16 9 FEOF uma macro que testa se o final de um arquivo de fluxo foi alcan ado O prot tipo int feof FILE stream Retorna um n o zero se um final de arquivo foi encontrado Retorna um zero se o final de arquivo n o foi encontrado Exemplo 1 void main void 2 3 FILE stream 4 5 abre um arquivo para leitura 6 stream fopen DUMMY FIL r 7 if Istream 8 9 puts N o foi poss vel abrir o aquivo aan 10 return 11 12 l um charactere de um arquivo 13 fgetc stream 14 verifica se EOF 15 if feof stream 16 puts E final de arquivo 17 fclose stream 18 16 10 FGETS e FPUTS A fun o fgets l uma sequ ncia de caracteres string de um fluxo de arquivo A fun o fputs escreve uma sequ ncia de caracteres string em um fluxo de arquivo O seus prot tipos s o char fgets char s int n FILE stream int fputs const char s FILE stream A fun o fgets l caracters de um fluxo de arquivo parando quando for lido tamb m um n 1 caracteres ou um caractere de linha nova n o que vier primeiro A fun o fgets coloca um byte nulo NO depois do caractere nova linha indicando o final da sequ ncia de caracteres string A fun o fputs copia uma sequ ncia de caracteres string terminado com o caractere nu
6. o igual 3 tr s quociente e op o igual 4 quatro resto Quando a execu o do programa estiver na linha 15 o conte do da vari vel c ter o resultado da express o a b void main int a b c op o a 3 b 4 op o if o TA 1 soma c a b else if op o 2 subtra o c a b else if op o 3 quociente c a b else c a b l resto p g 78 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Poder amos rescrever o c digo anterior utilizando o comando de sele o switch void main int a b c op o a 3 b 4 opcao 2 switch op o case 1 soma c a b break case 2 subtra o c a b break case 3 quociente c a b break case 4 resto c a b break 12 1 3 EXERC CIOS PROPOSTOS Um ponto em R pode ser definido por um par ordenado x y formando uma coordenada no plano cartesiano Podendo ser definido como segue struct PONTO double x y Uma reta pode ser representada por um ponto defini o anterior e pelo seu coeficiente angular e pode ser definido como segue struct RETA struct PONTO p double m Levando em conta as defini es anteriores implemente os programas que seguem 1 Fa a um programa que leia duas retas mostre as suas equa es y ax b e qual delas possui a maior coeficiente angular 2 Fa a um programa que leia duas retas e
7. 13 FUN ES ado cao sab oia dean oaao dessa AT a CCD MOS U 5O Spina gana AA CASES COR tA Deo qdo A i o a 97 13 1 Passagem de par metros por valor err eerereracaeecennera nara aaenaneaa 99 13 2 Passagem de par metros por refer ncia carrera 99 13 3 Chamando fun es passando e retornando estruturas serenas 102 13 4 Chamando fun es passando um vetor como par metro 104 13 5 Chamando fun es passando uma matriz como par metro ie 107 14 Aloca o din mica de mem ria erre carracar narra nara naeaaaeaanara acena caraananananaanaa 109 15 Exercicios propostos rnane aea indaga os a nea eaaa Aa a lo usas amas d des pueda toda dial aE gre alegre pude 110 15 SINOS 36475202 e e do eE no SA R a o e ER ATE a e a e N 110 15 2 Operadores d Dils hoian etsean a iaaa a iae ean Dl sais E eat aa a atean ta i aa ini 115 TEA ArquIVOS iai en a a a a a eoa De ta aie Eai E T E EEN Eaa 121 16 1 Representa o de registros is rreereeaaraanaranaraaaraaaaaaaaaaa nara aaananananaa 121 16 2 Fluxos E ArU O Si ee etna oea ee aate duda ao idade Do E capinha gd audi pu gi Dia na Sa e qua Cad a Sloan aaa ds 122 16 3 Open passa sioai cha A an and SME OA Aa Danda Sn SIR bd at s Doab ana Bu T 124 ARS T 6 OG PORREIRO NR END NNE DP NERO AE ER DRA EE RED REED SRS 124 ketara a nE oras Sal E end pos rins dd E soda o E E A N
8. NUM INTEIRO s caracteres num ricos 3 NUM REAL s caracteres num ricos e o caractere ponto e 4 SEM TIPO qualquer caractere ASCII A fun o n o deixa ser lido um caractere que n o fa a parte do tipo de caractere Sugest o utilize defines para os tipos mencionados 8 Fa a um programa que leia uma sequ ncia de caracteres num ricos utilize a fun o LerString do exerc cio anterior transforme e mostre o string lido em um inteiro Para fazer esta transforma o escreva uma fun o que possua o seguinte prot tipo int Retornarinteiro char que recebe como par metro uma sequ ncia de caracteres num ricos string num rico e que retorna um inteiro 9 Fa a um programa que leia uma sequ ncia de caracteres num ricos mais o caractere ponto utilize a fun o LerString dos exerc cios anteriores transforme e mostre o string lido em um real Para fazer esta transforma o escreva uma fun o que possua o seguinte prot tipo double RetornarReal char que recebe como par metro uma sequ ncia de caracteres num ricos string num rico com ou sem o caractere ponto e que retorna um inteiro p g 111 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 10 Fa a um programa que l dois n meros um inteiro e um real A leitura destes dois n meros devem ser feitas atrav s de duas fun es que s o Obs Os valores devem ser lidos caractere a caractere usando a fun o getch da biblio
9. OBS Quando passado uma matriz como par metro para uma fun o dentro da fun o n o podemos utilizar os ndices linha e coluna como de costume Isto porque temos dentro da fun o um ponteiro para um endere o e a matriz est linearmente na mem ria a partir deste endere o 1 void LerMatriz double 2 void MostrarMatriz double 3 void main 4 5 int i j 6 double Matriz 3 2 7 clrscr 8 LerMatriz double Matriz 3 2 9 MostrarMatriz double Matriz 3 2 10 getch apenas para parar a tela 11 12 void LerMatriz double m int int c 13 14 int i j 15 for i 0 i lt l i 16 for j 0 j lt c j 17 18 printf m d d i 19 scanf Ylf amp m c i j 20 21 22 void MostrarMatriz double m int int c 23 24 int i j 25 for i 0 i lt l i 26 27 for j 0 j lt c j 28 printf 11f m c i j 29 printf n 30 31 p g 108 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 14 ALOCA O DIN MICA DE MEM RIA Na linguagem C podemos reservar blocos de bytes de mem ria dinamicamente durante a execu o do programa O espa o reservado estaria no heap Para reservarmos mem ria no heap n s temos a fun o malloc memory allocation da biblioteca padr o O seu prot tipo void malloc size t que recebe como par metro o
10. s amp a gt Nome 18 printf Fone 19 scanf s amp a gt Fone 20 1 21 void Mostrarlnfo struct INFO a 22 28 printf Nome s Fone sin a Nome a Fone 24 1 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O programa anterior pode ser escrito de uma outra maneira Vamos escrev lo utilizando A fun o Lerinfo recebe como par metro um dado do tipo struct INFO A informa es lidas via teclado dever o ser colocadas em um lugar na mem ria que a vari vel a A passagem do par metro por refer ncia por que desejamos que o conte do exista depois do encerramento da fun o p g 103 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Poder amos escrever a fun o Lerlnfo de uma outra maneira Note que funcionalmente que a fun o Lerinfo faz a mesma coisa 1 struct INFO 2 3 char Nome 20 4 char Fone 12 5 3 struct INFO Lerinfo void Mostrarlnfo struct INFO oi 8 void main 9 10 struct INFO r 11 r Lerlnfo 12 Mostrarlnfo r 13 14 void Lerlnfo 15 16 struct INFO a 17 printf Nome 18 scanf s amp a Nome 19 printf Fone 20 scanf s amp a Fone 21 return a 22 1 23 void Mostrarlnfo struct INFO a 24 25 printf Nome s Fone sin a Nome a Fone 26 1 Note que a fun o Lerlnfo retorna um tipo de dado struct INF
11. 1002 1003 1004 1005 1006 p g 32 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 8 1 VARI VEIS PONTEIROS Na linguagem C a declara o de vari veis ponteiros obedece a seguinte sintaxe modificador tipo identificador modificador tipo identificador 1 identificador 2 Onde o tipo b sico pode ser qualquer tipo v lido em C O tipo define o tipo base do ponteiro que indica o tipo de vari veis que o ponteiro pode apontar guardar o endere o Tecnicamente qualquer tipo de ponteiro pode apontar para qualquer lugar na mem ria No entanto toda a aritm tica de ponteiros feita atrav s do tipo base do ponteiro assim importante declarar o ponteiro corretamente 8 2 OPERADORES DE PONTEIROS amp operador un rio que devolve o endere o na mem ria do seu operando m amp c m recebe o endere o de c operador un rio que devolve o valor da vari vel localizada no endere o que o segue q m q recebe o valor que est no endere o m Exemplo void main float x y int p x y 10 098 p amp Xx y p O c digo acima cont m um erro O ponteiro p aponta para um tipo base int logo teremos informa es perdidas visto que o tipo float possui 4 bytes O ponteiro p faz refer ncia apenas aos dois primeiros bytes e n o aos quatro bytes do tipo float 8 3 ARITM TICA DE PONTEIROS Existem duas opera es adi o e subtra o char ch 300
12. 9 m 3 1 0 m 3 0 0 m 3 0 1 m 3 0 2 10 m 3 2 0 m 3 2 1 m 3 2 2 mat 2 0 mat 2 1 mat 2 2 11 m 3 1 2 m 3 0 1 m 3 1 1 m 3 2 1 p g 35 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Quando atribu mos o endere o de uma matriz para uma vari vel ponteiro linha 4 a matriz deixa de ser tratada como matriz com dois ndices linha e coluna e passa a ser tratada como um vetor Mesmo quando declaramos uma matriz int mat 3 3 esta est disposta na mem ria de uma forma linear e cont gua Na forma de ponteiro como a matriz passa a ser tratada como vetor temos que calcular o ndice deste ponteiro em fun o da linha e da coluna Por exemplo no programa anterior mat 1 2 corresponde no ponteiro m 3 1 2 Isto porque o ndice 1 2 equivale total de colunas n mero da linha n mero da coluna 8 8 VETOR DE PONTEIROS Podemos ter na linguagem C vetores de ponteiros um vetor onde cada posi o deste vetor cont m o endere o de um outra vari vel na mem ria Cada ndice do vetor armazena um endere o aponta para uma outra vari vel Exemplo 1 void main 2 3 char v 4 p puc pr 4 char s 3 primeiro segundo terceiro 5 v 0 p 6 v 1 s 0 7 v 2 s 1 8 v 3 s 2 9 v 0 0x20 10 v 1 Z 11 v1 49 X 12 v 2 W 13 v 2 3 Q Na linha 3 foi declarado um vetor de pon
13. H 1 3 7 15 al 12 4 1 1 RESPOSTA DOS EXERC CIOS SOBRE S RIES Exerc cio 1 Soma 95 50079466167059650000 Exerc cio 2 Soma 1560828692041339 75000000000000000000 Exerc cio 3 Soma 4080 75078370370875000000 Exerc cio 4 Soma 0 64563492063492078400 Exerc cio 5 Soma 685 29690205764632100000 Exerc cio 6 Soma 21 11071558638006710000 Exerc cio 7 Seno 0 0 0 00000000000000000000 Seno 0 1 0 09983341664682540700 Seno 0 2 0 19866933079365081700 Seno 0 3 0 295520206607 14289900 Seno 0 4 0 38941834158730159700 Seno 0 5 0 47942553323412701000 Seno 0 6 0 56464244571428567900 Seno 0 7 0 64421757652777778000 Seno 0 8 0 71735572317460316600 Seno 0 9 0 78332584982142849900 Seno 1 0 0 84146825396825386500 Seno 1 1 0 89120093311507930800 Seno 1 2 0 93202505142857139400 p g 90 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Seno 1 3 0 96352940640873019400 Seno 1 4 0 98539379555555561800 Seno 1 5 0 99739118303571427900 Seno 1 6 0 99938856634920636400 Seno 1 7 0 99134644299603169600 Seno 1 8 0 97331677714285702600 Seno 1 9 0 94543936628968239200 Seno 2 0 0 90793650793650770800 Seno 2 1 0 86110586624999974100 Seno 2 2 0 80531143873015831300 Seno 2 3 0 7409 252287698367500 Seno 2 4 0 66855058285714219500 Seno 2 5 0 58853391617063421900 Seno 2 6 0 50142002031745946900 Seno 2 7 0 40769555946428470700 Seno 2 8 0 30781383111110993700 Sen
14. Nas linhas 1 e 2 aparecem os prot tipos das fun es Quadrado e Cubo O prot tipo prototype de uma fun o avisa ao compilador quais os tipos e quantos argumentos par metros a fun o receber e o tipo de dado que retornar Quando a fun o main estiver antes da segi ncia das fun es obrigado colocar os prot tipos das fun es no programa Observe a declara o das vari veis c e q que est o fora das fun es logo s o ditas vari veis globais A vari vel v declarada na linha 8 uma vari vel local ao bloco de c digo da fun o main Esta vari vel s vis vel manipulada dentro do bloco de c digo desta fun o As vari veis x e r declaradas nas linhas 11 e 13 s o vari veis locais ao bloco de c digo da fun o Cubo sendo vis veis apenas neste bloco As vari veis declaradas nas linhas 17 e 19 x e r s o vari veis locais ao bloco de c digo da fun o Quadrado Apesar de possu rem o mesmo nome que as vari veis locais fun o Cubo s o vari veis diferentes posi es diferentes na mem ria Nas linhas 8 9 e 14 ocorrem chamadas de fun es Quando ocorre uma chamada de fun o o fluxo do programa deslocado para o bloco de c digo da fun o chamada Na linha 9 primeiro chamada a fun o Cubo v 1 em seguida a fun o Quadrado O par metro passado para a fun o Quadrado seria o valor obtido do retorno da fun o Cubo v 1 chamada anteriormente menos o valor 2
15. as rotinas em linguagem Assembly n o s o port veis entre m quinas com unidades centrais de processamento UCP s diferentes processador de texto criar modificar c digo fonte pr processador compila o biblioteca padr o arquivo de cabe alho erro de compila o biblioteca padr o dados do programa linker erro de linker entrada programa execut vel depurador debugger sa da resultados do rograma erros de execu o Digrama mostra a sequ ncia de eventos necess rios para a implementa o de um programa em linguagem C Processador de texto usado para criar o texto do programa c digo fonte ou modificar o texto j existente Pr processadores o programa inicia com o pr processamento de diretivas que ativam substitui o de macros compila es condicionais e a inclus o de outros arquivos textos c digo fonte no programa Exemplo arquivos de cabe alho header files que suprem detalhes sobre fun es das bibliotecas O pr processador l um arquivo texto c digo fonte expande alguma macro incluir algum arquivo de cabe alho header files e escreve o resultado para um arquivo texto intermedi rio que lido pelo compilador Compilador o compilador converte o arquivo gerado pelo pr processador em um c digo objeto que cont m c digo execut vel de m quina mais informa es para o linker Exemplo detalhes de fun es padr es
16. biblioteca padr o fun es que ser o brevemente comentadas na sequ ncia p g 122 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Para abrirmos um arquivo necess rio criarmos um fluxo e este fluxo criado atrav s da declara o de um ponteiro para uma estrutura j definida na biblioteca padr o STDIO H Que segue a t tulo de curiosidade a sua defini o File control structure for streams typedef struct short level unsigned flags char unsigned char hold short bsize unsigned char buffer curp unsigned istemp short token FILE _F_XXXX File status flags of streams Name _F_RDWR F READ F WRIT F BUF F LBUF F ERR F EOF F BIN FIN F OUT F TERM Ent o antes de abrirmos um fluxo de arquivo temos a declara o Meaning Read and write Read only file Write only file Malloc ed buffer data Line buffered file Error indicator EOF indicator Binary file indicator Data is incoming Data is outgoing File is a terminal FILE f Onde f um ponteiro para um tipo definido de estrutura FILE Vale lembrar que n s n o nos preocupamos em saber muito sobre FILE e seus sinalizadores de estados status flags estas informa es s o transparentes para o programador sendo que a completa e total manipula o deste ficam a cargo internamente das fun es da biblioteca padr o que trata de arquivos Ap s a declara o do ponteiro do tipo FILE devemos
17. o organizada de informa es preparada para ser usada com alguma finalidade Os registros em um arquivo podem ser seq enciais ou n o dependendo das necessidades de sua utiliza o Uma cole o de registros tratada como uma unidade Um conjunto de registros inter relacionados tratados como uma unidade por exemplo em controle de estoque o arquivo deve ser constitu do de itens registros de estoque Unidade principal de dados f sicos formada por um conjunto de registros f sicos dispostos em formatos prescritos e descrita pela informa o de controle a qual o sistema tem acesso American National Standard Code for Information Interchange C digo para Interc mbio de Informa o Nacional Padr o Americano X 3 4 1968 Um c digo de n vel 8 7 bits e paridade desenvolvido por um subcomit da USASI Este c digo foi desenvolvido com a finalidade de padronizar as comunica es americanas Montar preparar um programa em linguagem objeto a partir de um programa em linguagem simb lica substituindo os c digos de opera es simb lico e absoluto ou endere o reloc vel para endere o simb lico Montador programa que monta transforma os c digos de opera o simb licos em c digos absolutos ou de m quina Montagem sa da produzida pelo montador ASSEMBLER Abreviatura de binary digit a menor unidade de um computador Magnetizado no estado desligado assume o valor zero e no estado ligado assume o valor um Lin
18. 1 double Cubo double 2 double Quadrado double 3 double c q 4 void main 5 6 double v 7 Vv 8 8 q Quadrado v 9 c Cubo 3 Quadrado Cubo v 1 2 10 11 double Cubo double x 12 13 return Quadrado x x 14 15 double Quadrado double x 16 17 return x x OBS Uma c pia do valor do argumento que passado para a fun o O que ocorre dento da fun o n o tem efeito algum sobre a vari vel usada na chamada 13 2 PASSAGEM DE PAR METROS POR REFER NCIA Nesta maneira de passar um par metro o endere o de um argumento copiado no par metro Dentro da fun o sub rotina o endere o usado para acessar o argumento real utilizado na chamada Isso significa que altera es feitas no par metro afetam a vari vel usada para chamar a rotina O programa que segue l tr s valores inteiros x y e z para depois coloc los em ordem crescente trocando os valores de duas vari veis quando necess rio p g 99 1 void main oN int a x y Z printf x scanf d amp x printf y 9 scanf d amp y printf z scanf d amp Zz if x gt y x gt z if y lt z a X x y y a else a X Xx 2Z z a if y gt z a y y Z z a printf d d d x y Z Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Podemos perceber sequ ncias de c
19. 12 escreve algum dado no arquivo 13 fwrite msg strlen msg 1 1 stream 14 posiciona no inicio do arquivo 15 fseek stream SEEK_SET 0 16 I o dado e mostra no monitor de v deo 17 fread buf strlen msg 1 1 stream 18 printf Ysin buf 19 fecha o arquivo 20 fclose stream 16 5 FWRITE Para gravar informa es em um arquivo podemos utilizar a fun o fwrite que possui prot tipo size_t fwrite const void ptr size_t size size tn FILE stream Esta fun o escreve um n mero especifico de tens de dados de igual tamanho de um fluxo aberto arquivo aberto Os argumentos da fun o s o ptr Aponta para o bloco no qual os dados ser o escritos size Tamanho de cada tem que ser escrito em bytes n N mero de tens que ser o escritos stream Aponta para o fluxo aberto arquivo O n mero de bytes escritos no total igual n size Retorna o n mero de tens escritos se conseguiu escrever ou um erro possivelmente zero p g 125 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Exemplo 1 struct INFO 2 3 int i 4 char ch 5 5 6 void main void 7 8 FILE stream 9 struct INFO s 10 11 abre o arquivo TEST 12 if I stream fopen TEST wb 13 14 puts N o foi poss vel abrir o aquivo aan 15 return 16 17 s i 0 18 s ch A 19
20. 49 48 1 3 Fazer um programa para calcular e escrever a seguinte soma 37x38 36x37 35x36 Ix2 1 2 3 37 4 Fazer um programa que calcule e escreva o valor de S onde 1 2 3 4 5 6 l0 gt S eo 1 4 9 16 25 36 100 5 Fazer um programa que calcule e escreva a soma dos 50 primeiros termos da seguinte s rie 1000 997 994 991 2 1 2 3 4 6 Fazer um programa que calcule e escreva a soma dos 30 primeiros termos da s rie 480 475 470 465 10 11 12 13 7 Fazer um programa para gerar e escrever uma tabela com os valores do seno de um ngulo A em radianos utilizando a s rie de Mac Laurin truncada apresentada a seguir p g 89 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira A A A 6 120 5040 sen A A Condi es os valores dos ngulos A devem variar de 0 0 a 6 3 inclusive de 0 1 em 0 1 8 O valor aproximado de 7 pode ser calculado usando se a s rie 1 1 1 1 1l Ea ta ry S sendo Do Fazer um programa para calcular e escrever o valor de 7 com 51 termos 9 Fazer um programa que calcule e escreva o valor de S atrav s do somat rio que segue 1 2 4 8 16384 t 225 196 169 144 1 10 Fazer um programa que calcule e escreva a soma dos 20 primeiros termos da s rie 100 99 98 97 O 11 2 3 11 Fazer um programa que calcule e escreva a soma dos 50 primeiros termos da s rie 1 2 3 4 5 2
21. 6 7 8 9 10 11 12 13 14 T Podem existir aplica es que utilizem matrizes que possuam mais que duas dimens es Um exemplo seria int m 3 2 4 14 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 1 6 6 6 6 6 6 6 6 Esquematicamente ficaria OBSERVA OES SOBRE MATRIZES O c lculo do tamanho em bytes de uma matriz est diretamente relacionado com o seu tamanho e o tipo b sico Que seria total em bytes tamanho do tipo n mero de linhas n mero de colunas Na linguagem C n o existe uma verifica o dos limites das matrizes Pode se ultrapassar os limites e escrever dados no lugar de outra vari vel ou mesmo no c digo do programa E responsabilidade do programador prover verifica o dos limites onde for necess rio de modo nunca invadir o espa o na mem ria de uma outra vari vel p g 25 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 7 3 EXERC CIOS PROPOSTOS 1 Analise o programa abaixo informando o conte do das vari veis a e b quando a execu o estiver na linha 1 void main 2 3 unsigned int a 4 unsigned int b 5 a 0x9129 6 b 0x8218 7 a gt gt 4 8 a amp 0x00FF 9 b gt gt 4 1 b amp 0x00FF 1 O a b 2 Analise o c digo que segue e informe o conte do das vari veis a e b quando a execu o estiver na linha 1 void main 2 3 unsigned char af 3 4 char b 3 0x80 0x09 0xB0 5 a 0 b 0 6 b 1 b 1 7 a
22. Ponteiros matrizes ssas sirene sr essas asasrpaanaguocrescaniiosisda se do EAn Eea E E i a areir arei 35 8 8 Vetor de ponteiros e E ar a ea do aae Coisa ada va doa hd d rabea do dna dna rd Oaa EAREN AERA Eea 36 8 9 EXETC CIOS DODOSO S pinsin ae e poito ciano po dd daua bao das Gabi a Srde qu sas o desafetos 37 9 Vari veis compostas heterog neas ereta cenanarcaeaacanacaraaaaacana car aaana nana nanaa 38 QA EStULUTAS iane i pes Lgals Lane a ee atr alas estas e e Ena Sala abastado 38 9 2 Exercicios propostos neie aaa aa uai a a E EE a in iad a al a ip ins aE ea 40 9 3 UNI ES ann a a a e a a dd CRS ado Scar ra a a ta 62 10 En umera es s fis e e ane a En eaa Ee aA aonde ug E E O TE A an aa Satta a de 64 11 Entradas e sa das utilizando scanf e printf rr eeraereera arenas 64 aa ea printi oso EE set i pese EE E nofeiaalaa lo CSAal SALLES ARAME ONU SDUS TOA GUGA DELA E dia A 64 11 2 Scanf o EE A EE ess iso LING CASES Liss E Ada A pad LR AIN SEL E E E E casada E da atado 65 111 3 Exerc cios propostos er onn e e JB iG na ras iara alba a E a ND ES EEA UEa EEA el Ra ni ans din aeae caio 66 pag 3 Aspectos Formais da Computa o linguagem C prof Camillo Oliveira 12 Comandos de controle do fluxo de execu o er eeeeraaeraaananenanernaraaaenanaana 69 12 1 Comandos de sele o n aa anaa aE Ta e a aeea EE eae
23. YYYY identificador Exemplo union TIPO unsigned char c unsigned int i E A defini o de uma union n o declara quaisquer vari veis Para declarar uma vari vel do tipo union seria union TIPO t A vari vel t uma vari vel do tipo union Nesta union vari vel inteira i e a vari vel caractere c compartilham a mesma posi o de mem ria E obvio que a vari vel inteira i ocupa dois bytes na mem ria e a vari vel caractere c ocupa apenas um byte Quando uma vari vel union declarada o compilador cria automaticamente uma vari vel grande suficiente para conter o maior tipo de vari vel da union union TIPO u A vari vel ponteiro u aponta para uma union cont m o endere o de uma union Neste c digo que apresentado abaixo tem se uma uni o identificada por TIPO Esta possui dois elementos que s o um inteiro e um vetor de caracteres de tamanho igual dois O tamanho da vari vel t que do tipo uni o seria dois bytes Observe os valores de i c 0 e c 1 quando a execu o do programa estiver na linha 14 union TIPO unsigned int i unsigned char c 2 void main void union TIPO t u u t u gt 255 U gt i 256 u gt cl0 0x0OF u gt c 1 0x01 p g 62 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O programa abaixo mostra a utiliza o de uma uni o chamada PRIMITIVA Onde os seus elementos s o quatro estruturas que defin
24. atribuir um valor a uma determinada posi o de mem ria utilizaremos o s mbolo que costumamos chamar de igual O operando a esquerda lvalue sempre se refere a uma posi o de mem ria o operando a direita rvalue ser um valor A sintaxe seria nome da vari vel express o int a b a 5 o0 valor 5 vai para a posi o de mem ria da vari vel a b a o valor armazenado na vari vel a copiado para b A atribui o de um valor inicial para uma vari vel pode ser feita na mesma hora em que feita a sua declara o unsigned long int x 10 b 200 Para toda vari vel global atribu do um valor inicial igual zero nulo o que n o ocorre com uma vari vel local que sempre possui sujeira da mem ria um valor que n o interessa por isso chamado de lixo a b 1 c 2 5 erro b 1 retorna um valor n o um Ivalue p g 10 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 4 CONSTANTES Referem se aos valores fixos que o programa n o pode alterar Estas constantes podem ser de qualquer um dos cinco tipos de dados b sico 4 1 CONSTANTES CARACTERES S o envolvidas por aspas simples Um caractere entre ap strofos aspas simples a uma constante que tem o valor do c digo ASCII que a representa unsigned char a B a possui o valor do c digo ASCII que representa 66 char x x possui o valor do c digo ASCII 4 2 CONSTANTES INTEIRAS Uma co
25. caracteres bytes entre aspas aspas duplas Por exemplo PUC Pr 4 6 CONSTANTES CARACTERE DE BARRA INVERTIDA S o constantes especiais para os caracteres de controle como o return line feed beep e etc Voc deve utilizar os c digos de barra invertida em lugar de seu ASCII equivalente para aumentar a portabilidade p g 11 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira b Retrocesso BS rio FF Retorno de carro CR t Tabula o horizontal HT PR Do Barra invertida Tabula o vertical Alerta beep Constante octal onde N uma constante octal Constante hexadecimal onde N uma constante hexadecimal 5 CONVERS O DE TIPOS A convers o de tipos refere se situa o em que vari veis de um tipo s o misturadas com vari veis de outro tipo Em um comando de atribui o a regra de convers o de tipos muito simples o valor do lado direito o lado da express o de uma atribui o convertido no tipo do dado esquerdo a vari vel destino Quando se converte de inteiros para caracteres inteiros longos para inteiros a regra b sica que a quantidade apropriada de bits significativos ser ignorada Isso significa que 8 bits s o perdidos quando se vai de inteiro para caractere ou inteiro curto e 16 bits s o perdidos quando se vai de um inteiro longo para um inteiro A convers o de um int em um float ou float em double etc n o aumenta a precis o
26. chegarmos ao apartamento desejado os ndices seriam o n mero do pr dio o andar e o n mero do apartamento Dependendo do problema que se tem para resolver podemos pensar na estrutura multidimensional que quisermos A declara o de uma matriz seria modificador tipo identificador num de linhas num de colunas Quando declaramos uma matriz um espa o em bytes reservado na mem ria e a matriz se encontra linearmente a partir de um endere o base p g 23 Exemplo Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira double m 5 5 0 1 2 3 4 0 1 2 3 a RR i 7 2 1 INICIALIZA O DE MATRIZES Exemplo void main Podemos inicializarmos uma matriz logo ap s a sua declara o como segue unsigned long int v 2 2 1000 1234 1200 1233 0 1 0 1000 1234 1 1200 1233 float b 3 2 2 4 124 2e1 3E 5 0 11 2 1 2 of 24 124 1 21 3E 5 2j 0 11 2 double matriz 2 10 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 2 3 4 o 10 10 10 10 10 10 10 10 10 10 1 int x y double m 3 4 0 0 0 0 0 0 0 0 0 0 0 0 y 9 m 0 0 10 4 34 mix 2 y 3 3 e 3 m x y 100 01 Ter amos a seguinte matriz quando a execu o do programa estivesse na linha 12 p g 24 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira char Nomes 3 15 Carla Manoel Maria 2 3 4 5
27. digos que podem ser reunidas em uma fun o Seriam as sequ ncias em que funcionalmente realizam a mesma coisa como trocarmos os valores de duas vari veis e lermos um n mero inteiro O programa ficaria 1 int Lerinteiro char 2 void Trocar int int 3 void main 4 5 int a x y Z 6 x Lerlnteiro x 7 y Lerlnteiro y 8 z Lerlnteiro z 9 if x gt y x gt z 10 if y lt Z 11 Trocar amp x amp y 12 else 13 Trocar amp x amp z 14 if y gt Z 15 Trocar amp y amp z 16 printf d d d x y Z 17 p g 100 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 18 int Lerinteiro char s 19 20 int n 21 printf s 22 scanf V d amp n 28 return n 24 25 void Trocar int a int b 26 27 int aux 28 aux a 29 a b 30 b aux 31 A fun o Trocar uma fun o que n o retorna nada por isso no seu prot tipo aparece a palavra reservada void para informar que a fun o na realidade retorna um conjunto vazio de valores Quando feita a chamada da fun o Trocar est sendo passado como par metros o endere o das vari veis e n o o seu valor A declara o dos par metros preciso declar los como ponteiros para o mesmo tipo do endere o passado Dentro da fun o Trocar ocorrer troca dos dois valores Existindo a necessidade de uma
28. do livro 12 903 T tulo Programando em linguagem C Autor Jos Jo o Krig er Assunto Programa o de computadores Editora C u Azul Ltda Ano 1992 16 1 REPRESENTA O DE REGISTROS Para representarmos um registro na codifica o da linguagem C lan ar amos m o de estruturas e uni es quando necess rio Em cima do exemplo anterior a do arquivo da biblioteca cada ficha de um livro constante em um arquivo de a o onde todas as fichas s o guardadas cada ficha o registro de um livro que cont m campos c digo t tulo autor assunto editora e ano Para representarmos este registro na linguagem ter amos p g 121 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira struct LIVRO int C digo char T tulo 35 char Autor 40 char Assunto 35 char Editora 30 int Ano A estrutura LIVRO an loga ao registro Livro ficha do arquivo onde os seus elementos c digo t tulo autor assunto editora e ano correspondem aos campos dos registros 16 2 FLUXOS E ARQUIVOS A linguagem C n o possui comandos de entrada e sa da O trabalho todo relacionado manipula o de arquivos se d atrav s de fun es da biblioteca padr o Este tipo de abordagem garante ser um sistema bastante poderoso e flex vel Na linguagem C existe dois m todos para o tratamento de arquivos O primeiro o sistema ANSI com buffer tamb m chamado de formatado ou alto n vel e um segundo sistema UNIX s
29. do programa 200 300 302 299 p g 16 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O programa anterior poderia ser escrito da seguinte maneira void main int cnt acm ind1 ind2 cnt 100 acm 100 cnt indi acm cnt cnt cnt ind acm cnt ind1 cnt ind1 1000 OBS Sempre que tivermos d vidas com operadores e ou uma boa t tica explodirmos expand rmos a express o em mais linhas de c digo de modo que consigamos observar melhor a sequ ncia de opera es a serem feitas 6 2 OPERADORES L GICOS E RELACIONAIS 6 2 1 OPERADORES L GICOS Operador A o D amp amp and Conjun o DL o Disjun o __ not nega o 6 2 1 1 TABELAS VERDADE f Perceba que n o temos o operador l gico xor na linguagem C ent o devemos obt lo a partir de uma express o l gica utilizando and or ou not 6 2 2 OPERADORES RELACIONAIS lt menor que lt igual diferente O importante nos operadores l gicos e relacionais que estes s o utilizados em express es l gicas e o resultado de uma express o l gica 0 falso ou 1 verdadeiro As preced ncias entre os operadores l gicos e relacionais seriam gt gt lt lt amp amp p g 17 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 6 2 3 EXPRESS ES L GICAS S o express es onde os operand
30. dois Por ltimo ter amos chamada da fun o Cubo passando o par metro 3 tr s Assim o valor retornado pela fun o Quadrado mais o resultado retornado pela fun o Cubo 3 atribu do para a vari vel c p g 98 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Quando chamamos uma fun o ocorrem os seguinte eventos Empilha os par metros da direita para a esquerda Empilha o endere o de retorno Chama fun o Se houver vari veis locais reservar espa o na pilha Executa s instru es Coloca o valor de retorno em um registrador Desempilha o endere o de retorno e para l retorna ERA E T Nas linhas 15 e 21 aparece o comando return que um comando de desvio incondicional n o possui condi o Este comando tem dois importantes usos primeiro ele for a uma sa da da fun o segundo o return usado para retornar um valor da fun o 13 1 PASSAGEM DE PAR METROS POR VALOR A passagem de par metros por valor copia o valor de um argumento no par metro formal da sub rotina Neste caso os valores s o passados para a fun o e precisam ser guardados em vari veis par metros declaradas O s valor es podem s o utilizados dentro do bloco de c digo da fun o e depois do retorno da fun o s o destru dos e os valores s o perdidos Usaremos o exemplo anterior para mostrar a passagem de par metros por valor Rescrevemos o programa apenas de uma forma diferente
31. esquerda mais baixa seg ncia gt esquerda para direita Obs Vale lembrar que par nteses e colchetes afetam a ordem de avalia o da express o p g 19 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 6 5 ABREVIA ES ABREVIATURAS NA LINGUAGEM C A linguagem C oferece abrevia es abreviaturas que simplificam a codifica o de certos tipos de comandos de atribui o x x 10 Significa pegar o conte do da vari vel x somar dez 10 e atribuir o resultado na vari vel x Isto poderia ser escrito de outra forma produzindo o mesmo resultado que seria x 10 O compilador entende atribuir vari vel x o valor da vari vel x mais 10 que mesmo resultado produzido anteriormente Esta mesma id ia vale para os operadores de bits e matem ticos como segue Forma Forma n o abreviada abreviada x 2 x X 2 importante saber sobre as abrevia es abreviaturas visto que nos livros e programas feitos por programadores profissionais voc sempre ir encontrar a forma abreviada 7 VARI VEIS COMPOSTAS HOMOG NEAS Do mesmo modo que na teoria de conjuntos uma vari vel pode ser interpretada como um elemento e uma estrutura de dados como um conjunto Quando uma determinada estrutura de dados for composta de vari veis com o mesmo tipo primitivo temos um conjunto homog neo de dados 7 1 VARI VEIS COMPOSTAS UNIDIMENSIONAIS VETORES Para entendermos vari veis co
32. estivermos utilizando ponteiros utilizaremos o operador seta gt 9 2 EXERC CIOS PROPOSTOS 1 Dada a defini o da estrutura struct STT int a float b E Dada a declara o struct STT s Qual o tamanho em bytes da vari vel s sizeof s Supondo o endere o inicial da vari vel s igual 3E8165 Qual o endere o de s a e s b d o endere o em hexadecimal s a s b Dada a declara o struct STT r 5 Qual o tamanho em bytes da vari vel r sizeof r Supondo o endere o inicial da vari vel r igual 1750s Qual o endere o de r 2 r 2 a e r 2 b d o resultado do endere o em hexadecimal r 2 r 2 a r 2 b Dada a declara o struct STT m 3 3 Qual o tamanho em bytes da vari vel m sizeof m Supondo o endere o inicial da vari vel m igual 7D016 Qual o endere o de m 1 1 m 1 1 a e m 1 1 b d o resultado do endere o em hexadecimal mJil 0 mila 0 m 1 b p g 40 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 2 Dada as defini es das estruturas struct INFO 1 char s 2 3 int x struct INFO 2 char a struct INFO 1 b p struct INFO_3 float a long int b struct INFO 2 c 2 Dada a declara o struct INFO_3 y 3 Complete o quadro abaixo 16 bits 32 bits sizeof INFO_1 sizeof INFO_2 sizeof INFO 3 sizeof y 1 c sizeof y 2 c 1 b s 1 2 sizeof y
33. fwrite amp s sizeof s 1 stream escreve a estrutura s no arquivo 20 fclose stream fecha o arquivo 21 16 6 FCLOSE Esta fun o fecha um fluxo de arquivo Seu prot tipo int fclose FILE stream Todos os buffers associados com a fluxo s o esvaziados antes de serem fechados Se houver sucesso no fechamento do fluxo de arquivo retorna 0 Se ocorrer erro retorna um EOF Exemplo void main void FILE fp char buf 11 0123456789 cria um arquivo contendo dez bytes fp fopen DUMMY FIL w if lfp puts N o foi poss vel abrir o aquivo a a n return fwrite amp buf strlen buf 1 fp fecha o arquivo fclose fp 16 7 FTELL Retorna a posi o corrente do ponteiro de um arquivo de fluxo O prot tipo seria long ftell FILE stream p g 126 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Se o arquivo bin rio o desvio medido em bytes do inicio do arquivo O valor retornado por ftell pode ser usado na chamda subsequ nte de um fseek Retorna a posi o corrente do ponteiro de um fluxo de arquivo Se ocorrer erro retorna 1L Exemplo 1 void main void 2 3 FILE stream 4 5 stream fopen MYFILE TXT w 6 if Istream 7 8 puts N o foi poss vel abrir o aquivo a a n 9 return 10 11 fprintf stream This is a test 12 printf The file
34. informe se as retas lidas s o paralelas ou n o Duas retas n o verticais distintas s o paralelas se e somente se possuem o mesmo coeficiente angular 3 Implemente um programa que leia duas retas e informe se estas retas s o perpendiculares ou n o Duas retas n o verticais distintas s o perpendiculares se e somente se o coeficiente angular de uma das retas sim trico do inverso do coeficiente angular da outra reta 4 Construa um programa que leia um ponto e um reta e informe se o ponto pertence ou n o a esta reta p g 79 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 5 Codifique um programa que leia duas retas e se forem concorrentes calcule e mostre ponto de intercess o Duas retas n o verticais distintas s o concorrente se n o forem paralelas Tanto um cone como um cilindro pode ser definido pelo seu raio e altura como segue struct CONE double Raio double Altura E struct CILINDRO double Raio double Altura Levando em conta as defini es anteriores implemente os programas que seguem 6 Implemente um programa que leia dois cubos e informe qual dos dois possui o maior volume 7 Codifique um programa que leia um cone calcule e mostre a altura que um cilindro deve ter de modo que possua o mesmo volume do cone O cilindro e o cone possuem a mesma base 8 Desejamos calcular a partir do sexo e da altura o peso ideal de uma pessoa Para isto devemos saber
35. o incrementado o conte do da vari vel x neste caso em um p g 85 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Representa o do programa anterior atrav s de um diagrama de blocos f 1 avaliar x lt 5 verdadeiro X Os programas que seguem geram a matriz descrita abaixo de maneira diferentes utilizando os v rios comandos de repeti es existentes na linguagem C SZZZZ YSZZZ YYSZZ YYYSZ YYYYS Com o comando for void main char matriz 5 5 i j for i 0 i lt 5 i for j 0 j lt 5 j if i j matriz i lj W else if i lt j matriz i j Z else matriz i lj Y p g 86 Com o comando while void main char matriz 5 5 i j i 0 while i lt 5 j 0 while j lt 5 if i j matriz i lj W else if i lt j matriz i j else matriz i j j i Com o comando do while void main char matriz 5 5 i j i 0 do j 0 do if i j matriz i lj W else if i lt j matriz i j Z else matriz i j Y j while j lt 5 i while i lt 5 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira p g 87 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Observe o c digo abaixo e analise o incremento das vari veis i e j void main char matri
36. o c digo abaixo e informe o conte do das vari veis a b e c quando a execu o do programa estiver na linha 11 1 void main 2 3 int a 4 1 1 1 1 b c n 4 n 0x000B 5 b n 8 6 c 2 7 al0 b c 8 a i b c 9 al2 al0 a 1 10 a 3 al0 a 1 a 2 11 a b cs 14 Analise o c digo que segue e informe o conte do das vari veis a e b quando a execu o do programa estiver na linha 10 1 void main 2 3 unsigned char a 4 char b n 5 n 0x14 6 n 0x10 7 n 8 n 0x80 9 a b n 1 e p g 30 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 15 Execute o programa abaixo at a linha 10 e informe o conte do das vari veis a e b 1 void main 2 3 unsigned char a b c 4 char d e n 5 n n 0x10 6 a 0x10 7 b d n a 8 c 0xFE 9 e c 1 o a 1 bs 16 Execute o programa abaixo at a linha 13 e informe o conte do da vari vel m 1 void main 2 3 double x m 3 2 0 0 0 0 0 0 4 int a b 5 a 1 6 b 2 7 x 3 8 ml alfa x b 9 m 0 a 5 b 10 a b 11 m a b a 7 m 1 1 12 m a 0 I a b gt x p g 31 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 7 4 OPERADOR EM TEMPO DE COMPILA O SIZEOF O operador sizeof um operador em tempo de compila o un rio
37. o c digo de endere amento postal Cep 8 bytes Defina o tipo ENDERE O p g 54 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 10 Um telefone pode ser definido com tr s tipos de informa es que s o o c digo de discagem dist ncia ddd 3 bytes prefixo de rea Prefixo 4 bytes e o n mero restante N mero 4 bytes Defina o tipo FONE p g 55 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 11 O tipo de dado CLIENTE pode ser identificado pelo nome 40 bytes n mero do registro geral RG 8 bytes data de nascimento endere o fone Defina o tipo CLIENTE utilizando quando puder os tipos anteriores j definidos Declare um conjunto de 20 vinte clientes do tipo CLIENTE p g 56 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Supondo o endere o inicial igual 100D16 Qual o endere o do d cimo cliente D o resultado em hexadecimal p g 57 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 12 Uma ap lice de seguro de vida pode ser formada pelo n mero da ap lice CLIENTE ENDERE O valor da ap lice pr mio nome do benefici rio 40 bytes e data de anivers rio Defina o tipo APL VIDA ap lice de vida p g 58 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 13 Uma ap lice de seguro de autom vel pode ser composta pelo n mero da ap lice CLIENTE ENDE
38. ou exatid o Esses tipos de convers o apenas mudam a forma em que o valor representado Poss vel informa o perdida char _ unsigned char___ Se valor gt 127 o destino negativo Do char int Os 8 bits mais significativos char unsigned int Os 8 bits mais significativos char tongint Os 24 bits mais significativos char unsignedlongint Os 24 bits mais significativos ___ Do in tongint Os 16 bits mais significativos ___ int unsigned long int Os 16 bits mais significativos Dim float A parte fracion ria e as vezes mais A in double A parte fracion ria e as vezes mais ____ ot long double Precis o o resultado arredondado p g 12 5 1 EXERC CIOS PROPOSTOS 1 Dado o programa void main char x a unsigned char b int y Z unsigned long int w x 0x7F w 65535U y 1439 x X 1 a b y Z W Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Analise o programa anterior e informe o conte do das vari veis x y z a b e w quando a execu o do programa estiver na linha 14 d o resultados em valores na base 10 x a 2 Analise o programa que segue executando o at a linha 10 e explique o conte do das vari veis x y e Z void main double x float y int z x 2 1234567890123456789012345 y X z y X Justifique a resposta 3 Analise o programa
39. pointer is at byte ld n ftell stream 18 fclose stream 14 16 8 FSEEK seria Reposiciona o ponteiro associado um fluxo de arquivo para a nova posi o O prot tipo int fseek FILE stream long offset int whence Os arqggumentos s o e stream Ponteiro para um fluxo de arquivo e offset Diferen a em bytes entre de onde e a nova posi o Para fluxos de arquivos no modo texto offset dever ser O ou um valor retornado por ftell e whence Uma das tr s SEEK SET inicio SEEK CUR corrente e SEEK END final posi es de localiza o do ponteiro de fluxo do arquivo 0 1 ou 2 respectivamente Depois de um fseek a pr xima opera o de atualiza o de um arquivo pode ser uma leitura ou escrita O retorno seria O ponteiro movido com sucesso fseek retorna 0 Caso n o consiga mover o ponteiro retorna um valor n o zero ocorreu algum erro Exemplo long FileSize FILE stream void main void FILE stream stream fopen FILE TXT w if Istream puts N o foi poss vel abrir o aquivo a a n return fprintf stream Isto um teste printf O tamanho do arquivo FILE TXT ld bytes n FileSize stream fclose stream p g 127 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 16 long FileSize FILE stream 17 18 long curpos length 19 20 curpos ftell stream 21 fseek stream OL SEEK END
40. programa o deve oferecer meios de acesso mem ria ou seja um meio de reservar um peda o da mem ria e um meio de identificar dar um nome a este peda o que foi reservado de mem ria A declara o de uma vari vel reserva um espa o na mem ria onde ser guardado um tipo de dado especificado O tipo do dado informa ao compilador quanto de espa o de mem ria necess rio para armazenar aquele tipo de dado e como o dado deve ser manipulado Por exemplo para o computador e muito diferente a soma de dois n meros inteiros e dois n meros reais p g 8 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Na linguagem C a declara o de vari veis obedece a seguinte sintaxe modificador tipo identificador modificador tipo identificador 1 identificador 2 Os tipos b sicos da linguagem C s o char caractere int inteiro float real double real e void sem valor Os modificadores do tipo opcional s o signed sinalizado com sinal unsigned n o sinalizado sem sinal long longo e short curto Os modificadores s o opcionais na declara o da vari vel Exceto o tipo void os demais tipos de dados b sicos podem ter v rios modificadores precedendo os Um modificador usado para alterar o significado de um tipo b sico para adapt lo mais precisamente s necessidades de diversas situa es Os modificadores signed short long e unsigned podem ser aplicados aos tip
41. que existem duas f rmulas que s o para homens peso ideal 12 7 altura 58 para homens peso ideal 62 1 altura 44 7 Para a implementa o deste programa utilize a defini o abaixo struct PESSOA char Nome 40 char Sexo int Idade double Altura E Elabore um programa que leia as informa es de uma pessoa e informe se esta pessoa est obesa ou n o Para que uma pessoa seja considerada obesa a diferen a entre o seu peso e o peso ideal deve ser superior 40 quilogramas 9 Codifique um programa que leia o nome e o peso de um boxeador e informe categoria a qual o boxeador pertence seguindo a tabela abaixo Peso Kg Leve 60 75 999 Utilize na implementa o a estrutura abaixo struct BOXEADOR char Nome 40 float Peso p g 80 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 10 Fa a um programa que escolha a moeda a ser lida 1 libra 2 franco 3 d lar 4 marco ou 5 real leia um montante transforme conforme tabela e mostre o valor equivalente nas outras moedas Utilize para isto uma estrutura chamada MOEDA que possui os seguinte elementos Libra Franco D lar Marco e Real Valor R 1 libra esterlina 0 96 1 37 1 franco franc s 3 11 Fa a um programa que leia tr s valores A Be C verifique se eles podem ser os comprimentos dos lados de um tri ngulo e se forem verificar se comp em um tri ngulo equi
42. que retorna o tamanho em bytes da vari vel ou especificador de tipo entre par nteses que ele precede Analise o c digo abaixo e informe quais os valores que est o no vetor y quando a execu o do programa estiver na linha 16 y 1 void main 2 3 unsigned int x y 9 4 double a b 6 5 char s r 6 casa 6 y 0 sizeof x 7 y 1 sizeof y 8 y 2 sizeof a 9 y 3 sizeof b 10 y 4 sizeof s 11 y 5 sizeof r 12 y 6 sizeof y sizeof int n mero de elementos de y 13 y 7 sizeof b sizeof double n mero de elementos de b 14 y 8 sizeof r sizeof char n mero de elementos de r 15 x y 0 y 1 y 2 y 3 y 4 y 5 y 6 y 7 y 8 Por que os valores de y 1 e y 3 s o 18 e 48 respectivamente O operador sizeof ajuda basicamente a gerar c digos port veis que dependam do tamanho dos tipos de dados internos da linguagem C Por exemplo imagine um programa de banco de dados que precise armazenar seis valores inteiros por registro Se voc quer transportar o programa de banco de dados para v rios computadores n o deve assumir o tamanho de um inteiro mas deve determinar o tamanho do inteiro usando sizeof 8 PONTEIROS Ponteiro uma vari vel que cont m um endere o de mem ria Esse endere o normalmente a posi o de uma outra vari vel na mem ria Endere o na Vari vel na mem ria mem ria 1000 1003 1001
43. que segue informe e justifique o conte do das vari veis a e b quando a execu o do programa estiver na linha 8 void main char a int b a 66 b B p g 13 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira a b Justifique a resposta analise a tabela ASCII 4 Analise o programa que segue informe o conte do das vari veis r s t u e v quando a execu o do programa estiver na linha 14 Sugest o observe as vari veis no watch em hexadecimal void main unsgined long int r int s unsigned int t char u unsigned char v r 0x12345678L s f t r u r V T r S t u V 6 OPERADORES A linguagem C rica em operadores internos A linguagem C d mais nfase aos operadores que a maioria das outras linguagens de computador Na linguagem C podemos definir operadores aritm ticos relacionais l gicos e de bits Al m disso outros operadores utilizados para tarefas particulares Os operadores geram dados intermedi rios que podem ser utilizados 6 1 OPERADORES ARITM TICOS Operadores aritm ticos Subtra o tamb m menos un rio _ Divis o JDecemento _ O p g 14 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Exemplo void main int a b a 5 2 b a Quando o operador divis o for utilizado a um inteiro ou caractere qualquer resto trunc
44. recebe a seq ncia de caracteres a ser analisada e por refer ncia retorna uma struct AVAL preenchida corretamente int PesquisarString char s int v int c int I que recebe a sequ ncia de caracteres a ser analisada e por refer ncia retorna o n mero de vogais consoantes e de letras A fun o retorna o n mero de caracteres do string passado para a an lise 6 A fun o gets possui o inc modo de n o controlar o tamanho do string a ser lido Fa a um programa que leia e mostre um string Para lermos o string devemos construir a fun o LerString que recebe como par metros um string e o tamanho m ximo do string a ser lido O prot tipo seria void LerString char s int t A fun o LerString retorna o string lido na vari vel s passada por refer ncia A fun o encerrada quando A tecla RETURN c digo ASCII 13 for pressionada colocando um 0 no final do string A tecla ESC c digo ASCII 27 for pressionada colocando um 0 no primeiro byte do string retornando assim um string nulo O n mero de caracteres a serem digitados n o pode exceder a t 1 onde t foi passado como par metro 7 Rescreva a fun o LerString de modo que possua o seguinte prot tipo void LerString char s int t int tipo onde o tipo o tipo do caractere a ser lido que far parte do string e que pode ser O ALFABETICO s caracteres alfab ticos 1 ALFANUMERICO s caracteres alfab ticos e ou num ricos 2
45. rio e o programa roda executa por si s Os depuradores geralmente s o interpretadores Um interpretador executa o c digo fonte uma linha por vez executando instru o espec fica contida nessa linha Por isso um programa interpretado mais lento que o compilado Um ambiente integrado de desenvolvimento cont m um processador de texto habilitando o programador a escrever o c digo fonte e pressionando uma tecla pr definida ou o bot o do mouse ativa o processo de compila o e linkedi o Se em tempo de compila o e ou linkedi o ocorrer erros o programa para a compila o e mostra as mensagens de erro e o usu rio deve corrigilas Se a compila o e a linkedi o completar e sem erros o programa execut vel foi gerado podendo ser executado dentro do ambiente sob o controle do depurador ou fora direto no sistema operacional Um erro pode ocorrer durante a compila o em tempo de compila o erro de sintaxe que indica que o programa n o est escrito conforme as regras da linguagem exemplo a estrutura de uma senten a est incorreta erro de sintaxe durante a linkedi o em tempo de linkedi o m ltiplas defini es de uma refer ncia duas fun es com o mesmo nome ou uma refer ncia indefinida uma fun o chamada no programa e n o encontrada durante a execu o em tempo de execu o o programa aborta com um erro de run time divis o por zero ou n o faz o que deve ser feito resul
46. vari vel auxiliar aux e ser manipulado o conte do do endere o passado isto ser feito atrav s do operador un rio Como a fun o Trocar manipula o conte do de endere os quando do seu t rmino o conte do valor armazenados nos endere os passados estar o modificados A fun o Lerinteiro recebe como par metro o t tulo do campo de modo a orientar qual vari vel est sendo entrada digitada O programa anterior poderia ser rescrito tendo na fun o main as chamadas de fun es LerNumeros e OrdenarTresValores o programa ficaria 1 void OrdenarTresValores int int int 2 void LerNumeros int int int 3 void Trocar int int 4 void main 5 6 int a b C 7 LerNumeros amp a amp b amp c 8 OrdenarTresValores amp a amp b amp c 9 printf d Y d d a b c 10 11 void OrdenarTresValores int x int y int z 18 if x gt y x gt z 14 if y lt z 15 Trocar x y 16 else 17 Trocar x z 18 if y gt z 19 Trocar y z 20 p g 101 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 21 void Trocar int a int b 22 23 int aux 24 aux a 25 a b 26 b aux 27 28 void LerNumeros int x int y int z 29 30 printf x 31 scanf V d x 32 printf y 38 scanf d y 34 printf z 35 scanf Vd z 36 1 A
47. x Oo NON str Justifique a resposta observe a tabela de c digos ASCII OBSERVA OES SOBRE VETORES O c lculo do tamanho em bytes de um vetor est diretamente em fun o do seu tamanho e o tipo b sico Que seria total em bytes tamanho do tipo tamanho do vetor Na linguagem C n o existe uma verifica o dos limites dos vetores Pode se ultrapassar os limites e escrever dados no lugar de outra vari vel ou mesmo no c digo do programa E responsabilidade do programador prover verifica o dos limites onde for necess rio de modo nunca invadir espa o na mem ria de uma outra vari vel 7 2 VARI VEIS COMPOSTAS MULTIDIMENSIONAIS MATRIZES Ainda no exemplo do edif cio suponha que al m do acesso pelo elevador at um determinado andar tenhamos tamb m a divis o do andar em apartamentos Para chegar a algum deles n o basta s o n mero do andar precisamos tamb m do n mero do apartamento As estruturas compostas unidimensionais tem como principal caracter stica a necessidade de apenas um ndice para o endere amento s o estrutura com uma nica dimens o Uma estrutura que precise de mais de um ndice como no caso do edif cio dividido em apartamentos seria ent o denominada estrutura composta multidimensional neste caso duas dimens es bidimensional Imagine um conjunto de tr s pr dios de apartamentos Ter amos uma estrutura homog nea tridimensional com tr s ndices Para
48. 0 int i 3000 ch endere o i ch 0 i 0 ch 1 ch 2 i 1 ch 3 3003 ch 4 3004 i 2 ch 5 3005 8 4 INDIRE O M LTIPLA PONTEIRO APONTANDO PARA PONTEIRO Quando falamos em indire o m ltipla significa dizer que podemos ter vari veis ponteiros apontando para outras vari veis ponteiros Vari veis ponteiros que possuem o endere o de outras vari veis ponteiros p g 33 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Exemplo void main ON unsigned int a p1 p2 p3 a 100 pt amp a p1 p1 p2 amp p1 p2 1000 p3 amp p2 p3 1000 as eos coa O Na linha 5 a vari vel ponteiro p1 recebe o endere o da vari vel a Na linha 6 a posi o apontada pela vari vel ponteiro p1 incrementada em 100 Na linha 7 a vari vel ponteiro p2 recebe o endere o de da vari vel ponteiro p1 Na linha 8 a posi o apontada pela vari vel ponteiro p2 recebe o valor inteiro 1000 Na linha 9 a vari vel ponteiro p3 recebe o endere o da vari vel ponteiro p2 Na linha 10 a posi o apontada pela vari vel ponteiro p3 incrementada em 1000 8 5 PONTEIROS E STRINGS Exemplo 1 void main 2 3 char s 8 PUC PR p 4 p s 5 p 0 32 6 p 2 040 40 na base 8 octal 7 p 4 0x20 20 na base 16 hexadecimal 8 pl 9 p incrementa o endere o contido em p em 1 byte tipo char 10 p inc
49. 00000000000000000e 49 p g 91 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 12 4 2 VETORES 1 Fa a um programa que leia um vetor de inteiros de oito elementos e mostre este vetor na mesma linha com um espa o entre os elementos 2 Fa a um programa que leia um vetor de reais de tamanho igual dez e mostre o valor do somat rio dos elementos do vetor 3 Fa a um programa que leia um vetor de inteiros de tamanho igual quinze e informe o menor elemento do vetor 4 Implemente um programa que leia um vetor de inteiros de tamanho igual doze e informe o maior e o menor valor existente neste vetor 5 Implemente um programa que leia um vetor de inteiros de tamanho igual quinze calcule e mostre a amplitude dos elementos A amplitude a diferen a entre o maior e o menor elemento do vetor 6 Fa a um programa que leia um vetor qualquer de dez posi es calcule e mostre a m dia aritm tica dos elementos deste vetor 7 Fa a um programa que leia dois vetores de caracteres de tamanhos iguais cinco e oito respectivamente Gere um terceiro vetor que possua as informa es dos dois vetores lidos respetivamente um na sequ ncia do outro 10 Construa um programa que leia um vetor de quinze elementos quaisquer Calcule a vari ncia e o desvio padr o dos dados deste vetor Onde n l PES F F Variancia Xo media e desvio var iancia i 0 11 Fa a um programa que leia
50. 4 3 Constantes com ponto flutuante errar aaenacar carater nara 11 4 4 Constantes octais e hexadecimais er aeecena cer aaenanena cara aaeaaneaa 11 4 5 Constantes SirinO sms ga azar at oaa Lacan das a a agia esa a dad capa pelos an ais pa sean 11 4 6 Constantes caractere de barra invertida cerraeeaeeaee raras 11 5 Conversdo de tpos eissir ien ii n t EAR EA igual A a a a aiani sintas fa o 12 5A Exerc cios propo Sto Shs aeri a iea o ca A A ERr Re aea Tn NTE EAEan 13 mO 01E 10 0 ATENE E E A T T E E E EE A E E A 14 6 1 Operadores arntM tCOS einioes e a a e e aa Pensa aa ea oitan 14 6 1 1 Incremento e decremento er ereeaarareaaanareaaraaananananaa 15 6 1 2 Express es aritm ticas ir rreeereerereaaraaaraaarnaraaanaananaa 16 6 2 Operadores l gicos e relacionais re rreereeaaraaareaaeaanraaaerananaanaaaa 17 6 2 1 Operadores L gico Snie a eee a eieo a Usa das e ardea Sadi aa Se 17 6 2 1 1 Tabelas verdade inan ieaie to ainei eiere ias aoie rosia i iioi ha eE iana 17 6 2 2 Operadores Relacionais e irearereraaaaanaaaareaaerananaanaa 17 6 2 3 Express es l gicas uai ssa Losi egg stasoesiogmi nuas lgrala agfi esa uida La lala da pd and ohad Las la sis las aiad 17 6 3 Operadores de bitsin aeeie aaea iaaa eE GASTA dando db a Lan eos aiee iaasa 18 6 4 Preced ncia dos operadores
51. 4 v int malloc 10 malloc sizeof int 5 5 if Iv 6 n o conseguiu reservar mem ria no heap 7 puts Faltou mem ria a n 8 exit 0 9 10 for i 0 i lt 5 i 11 12 printf v Vod 13 scanf d amp v i 14 15 for i 0 i lt 5 i 16 printf d fil printf d v i 17 free v libera mem ria 18 getch p g 109 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 15 EXERC CIOS PROPOSTOS 15 1 STRINGS OBS Deve ser tomado o maior cuidado poss vel quanto manipula o de uma sequ ncia de caracteres na linguagem C Como existe uma flexibilidade grande de programa o fica a cargo do programador que deve tomar cuidado com a invas o do espa o de mem ria de uma outra mem ria O programador deve ter uma vis o ampla do que est sendo feito e pensar em tudo que for necess rio Quando manipulamos sequ ncias de caracteres com a linguagem C devemos pensar no barra invertida zero 10 O ou NULL Existem situa es que necess rio o 0 outras n o O caractere barra invertida zero na linguagem C tem a fun o de finalizar indicar o fim de uma sequ ncia de caracteres Quando o retorno de uma fun o ap s a manipula o de uma sequ ncia de caracteres que ocorre por refer ncia deve se tomar cuidado para que esta sequ ncia de caracteres tenha espa o reservado dentro do endere
52. Aspectos Formais da Computa o linguagem C prof Camillo Oliveira PONTIF CIA UNIVERSIDADE CAT LICA DO PARAN CENTRO DE CI NCIAS EXATAS E DE TECNOLOGIA DIRETORIA DE INFORM TICA E CURSO DE ENGENHARIA DE COMPUTA O DISCIPLINA DE ASPECTOS FORMAIS DA COMPUTA O PROFESSOR CAMILLO OLIVEIRA ASPECTOS FORMAIS Curitiba 1999 pag 1 Aspectos Formais da Computa o linguagem C prof Camillo Oliveira pag 2 Aspectos Formais da Computa o linguagem C prof Camillo Oliveira SUM RIO pag Rea Lg io 6 5 oi o WERE NE RR O RR SE ORNE E RE DER TREND AND UNR REAR OE EEN RAR RR EAR aa 5 1 1 Origens da linguagem C roneo eii aao eiiie EA aa aaraa oa e e a aei aa ti 5 1 2 Esqueleto de um programa em linguagem C eretas 7 1 3 Mapa de mem ria de um programa em eee careaaenaneranaenananananaa 8 2 TIPOS D SICOS sa 3casis2iiso asistal onto setoo Sosa e Ioe ta Josi aaea a a DOIS asas Landon da setas A NTE LOGAN STOE 8 3 Operadorde atripui o sii naaar aR aa caido S DUGS a a LAGOA a op Un aE aaa SO UAS dna des 10 4 Constantes ui e eae aa a a a salgados DSO sita a E dl tda sb igu lh aan a Fab a uia cana DSO siga Tai a 11 41 CGonstantes Caracieres sua sis re eenn aea DS ei ai o TUDO EE NN pa din algu Dae aaa nb dos aaa ela SE 11 4 2 Constant s INleiraS ais sans ess siri tos sie Nisa sonda ais ai hasta nian dica pas aa a aa da 11
53. E void main unsigned char Chr Nbits Bit Chr 0x80 LigarBit amp Chr 4 Nbits ContarBitsLigado Chr LigarBit amp Chr 5 Nbits ContarBitsLigado Chr Chr Chr DesligarBit amp Chr 6 DesligarBit amp Chr 5 Nbits ContarBitsLigados Chr InverterBit amp Chr 4 Bit EstadoBit Chr 1 DesligarBit amp Chr 1 p g 115 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira DesligarBit amp Chr 6 Nbits ContarBitsLigados Chr ContarBitsLigado so O DesligarBit SS p g 116 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira InverterBit A LigarBit o EstadoBit p g 117 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 2 Complete a fun o main do c digo que segue implementando as fun es que est o sendo chamadas O bit mais significativo seria o bit de n mero 8 oito e o bit menos significativo seria o bit de n mero 1 um ou seja a n mera o dos bits v o da direita para a esquerda menos significativo para o mais significativo Fun es a serem implementadas ContarBitsLigado que recebe o conte do de um caractere como par metro e retorna o n mero de bits ligados deste caractere DesligarBit que recebe o conte do de um caractere e o n mero do bit a ser desligado e retorna o caractere com o bit desligado InverterBit que rebebe um caractere e o n mero do bit a ter o seu va
54. E O endere os 10 O c digo acima declara uma vari vel vetor de tamanho 10 dez elementos Cada elemento deste vetor um dado do tipo estrutura struct ENDERE O Exemplo struct ENDERE O endere os 5 10 O c digo acima declara uma vari vel matriz de cinco linhas por 10 colunas Cada elemento da matriz endere os armazena uma estrutura struct ENDERE OS Exemplo struct ENDERE O endere os 16 O c digo acima declara uma vari vel vetor de ponteiros de tamanho igual a 16 Cada elemento do vetor de ponteiros endere o aponta para uma estrutura struct ENDERE O O compilador da linguagem C coloca automaticamente mem ria suficiente para acomodar as vari veis que formam a vari vel estrutura p g 39 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Podemos declarar uma ou mais vari veis quando a estrutura definida struct ENDERE O char nomef 30 char rua 40 char cidade 20 char estado 3 char cep 8 char fone 11 unsigned int idade unsigned int ndep n mero de dependentes info1 info2 end1 A defini o da estrutura ocorre e logo ap s o bloco de c digo da estrutura ocorreu as declara es de tr s vari veis do tipo da estrutura em quest o Um espa o de sizeof ENDERE O foi reservado na mem ria para cada uma das vari veis declaradas Para fazermos refer ncia manipularmos os elementos de uma estrutura utilizaremos o operador ponto e quando
55. FABETICO s caracteres alfab ticos 1 ALFANUMERICO s caracteres alfab ticos e ou num ricos 2 NUM INTEIRO s caracteres num ricos 3 NUM REAL s caracteres num ricos e o caractere ponto e 4 SEM TIPO qualquer caractere ASCII Para realizar tal tarefa construa um fun o que recebe o endere o de um string e retorna um inteiro conforme o tipo do string O prot tipo da fun o seria int TipoString char s p g 112 Aspectos Formais da Computa o linguagem C 13 Dado o c digo abaixo tidefine TAM 20 void MemsSet char char int void main char s char malloc TAM aloca o de mem ria heap if Is puts Faltou mem ria lala exit 0 puts s MemsSet s v 50 puts s free s liberar a mem ria reservada com malloc getch void MemsSet char s char c int t Prof Camillo Oliveira Construa o c digo da fun o MemSet que preenche uma rea de mem ria de t bytes com o caractere c p g 113 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 14 Dado o programa abaixo struct FONE char C digo 3 char Area 4 char N mero 4 void MostrarFone void main char s 11 0413301515 struct FONE f 041 330 1563 MostrarFone s 11 MostrarFone amp f 11 getch void MostrarFone Cosntrua a fun o MostrarFone Esta fun o mostra o n mero de um telefon
56. Nu N NNN e pper prprrrypr s aiis ai i aa ad a e a a S n ie a a a a a a a o i a e A A A S SA D e iS e e A e n E A a 6 Fa a um programa que gere e mostre a seguinte matriz Cerere NNNNA qe m og A O UM N Cerere NNN NNNNNAO Cerere NNN NNN rrr rrrre NNJNNT O NNJNT O NNNNT O NNNNT O 7 Fa a um programa que gere e mostre a seguinte matriz Cerere NNNNA NNNNNAO ANNAN NNAOA Cerere NNNNA A a e i a e a a a a S n a a a a a a aa a a an aiis anaie ae s i a e a NNJNNT Or NNJNNT Or NNJNNT Oro 8 Fa a um programa que gere e mostre a seguinte matriz LCLLLLLLLIL I LCLLLLLLLI I tcnanamnm lt L lt t lt cnannamnm lt L lt t lt cnanamnm lt L lt tcnanamnm lt L lt tcnananmam lt L lt t lt cnannamanm lt L lt LCLLLLLLILI I LCLLLLLLLIL I p g 93 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 9 Fa a um programa que gere e mostre a seguinte matriz UT 000000000 UT 000000000 UT 000000000 TU 000000000 UT 000000000 10 Fa a um programa que gere e mostre a seguinte matriz Oro ro roOro Oro ro rOoOroO OorOoOorOoO ro ro Oro ro rOoOroO Oro ro roOro Or Orroroo r Oro ro roOroO Oro ro roOro Or Orroroo r Oro ro rOoOroO
57. O por isso obrigat rio o uso de um return e da atribui o deste retorno a uma posi o de mem ria 13 4 CHAMANDO FUN ES PASSANDO UM VETOR COMO PAR METRO Podemos passar como par metro para uma fun o um vetor Este par metro sempre ser declarado na fun o como ponteiro do tipo do vetor que foi passado OBS A passagem de par metro de vetores sempre por refer ncia sempre passado o endere o do primeiro elemento 0 e recebido na fun o como um ponteiro do tipo do vetor O programa que segue calcula a m dia aritm tica do conte do de um vetor de inteiros que representam as idades de doze pessoas O programa ir ler o vetor de idades calcular a m dia e mostrar a m dia das idades p g 104 void main int Idades 12 i double Media 0 for i 0 i lt 12 i printf Idades d i scanf Ylf amp Idadesfi for i 0 i lt 12 i Media Idades i 12 0 printf Media 2lf n Media Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O programa anterior poderia ser escrito utilizando uma fun o que l o conte do do vetor de idades e uma outra fun o que calcula a m dia das idades do vetor O programa ficaria assim void Lerldades int double CalcularMedia int void main int Idades 12 double Media Lerldades Idades Media CalcularMedia Idades printf Media 2lfn Media 3 vo
58. RE O valor da ap lice pr mio deprecia o licen a 10 bytes unidade da federa o UF modelo 15 bytes e ano de fabrica o Defina o tipo APL AUTO ap lice de autom vel p g 59 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 14 Uma ap lice de seguro de im vel pode ser formada pelo n mero da ap lice CLIENTE ENDERE O valor da ap lice pr mio deprecia o licen a e ano de constru o Defina o tipo APL IMOVEL ap lice de im vel p g 60 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O exemplo abaixo mostra bem a defini o de uma estrutura a declara o da vari vel info que do tipo struct INFO e tamb m mostra a manipula o de seu elementos sem ponteiros linhas 11 a 14 e atrav s de um ponteiro que cont m o endere o da vari vel info p aponta para a info linha 16 struct INFO char nome 25 int idade double altura E void main struct INFO info Jos da Silva 30 1 82 p manipulando a estrutura sem ponteiros info nomef0 040 info nome 8 040 info idade 35 info altura 1 90 manipulando a estrutura atrav s de um ponteiro p amp info p recebe o endere o de info p gt nomej 0 0x20 p gt nome 8 0x20 p gt idade 25 p gt altura 1 78 No c digo do programa que segue temos um ponteiro apontando para um tipo estrutura linha 5 O ponteiro pr x
59. a 25 void MostrarPontos struct PONTO v 26 27 int i 28 for i 0 i lt 5 i 29 printf Ponto d lf lf n i v i x v i y 30 13 5 CHAMANDO FUN ES PASSANDO UMA MATRIZ COMO PAR METRO Podemos passar como par metro para uma fun o uma matriz Este par metro sempre ser declarado na fun o como ponteiro do tipo da matriz que foi passada OBS A passagem de par metro de matrizes sempre por refer ncia sempre passado o endere o do primeiro elemento 0 0 e recebido na fun o como um ponteiro do tipo da matriz passada O programa que segue l uma matriz 3x2 e mostra o conte do da matriz no formato de matriz que estamos acostumados 1 void main 2 3 int i j 4 double Matriz 3 2 5 clrscr 6 for i 0 i lt 3 i 7 for j 0 j lt 2 j 8 9 printf m d d i j 10 scanf lf amp m i lj 11 12 for i 0 i lt 3 i 13 14 for j 0 j lt 2 j 15 printf 11f m i lj 16 printf n 17 18 getch apenas para parar a tela Podemos rescrever o programa utilizando fun es Criaremos duas fun es LerMatriz e MostrarMatriz A fun o LerMatriz vai ler o conte do da matriz e colocar as informa es na mem ria a partir do endere o recebido como par metro O novo programa ficaria p g 107 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira
60. a ONE i ada 69 12 4A Comando M isni na iaee aei eE EE EA a Ea Na ieaiai 69 124A T Eros mais COMUNS prina a e a e hae 75 12 1 1 2 Operador de sele o 2 raras 76 12 1 2 Comando SWiHCN a earnen said N me sado o ddio negado eeta nado EEEa N aaea oaiae ES 78 12 1 3 ExXErC CIOS propostos sissien aeaa ienaat oeae Eei iee aae Rage aaoi 79 12 2 Comandos de repeti o rir eereaeananaraaaaanararnaranana nara aanaanananta 82 12 2 1 Comando While soiorn ar ai aienea eaaa Eaa on E na dada Semasa 82 12 2 2 Comando do while eee reeaaracanarenraanaaananana 83 1 2 2 3 Comando Or casais sais quite Da caco nab inda a ga EE SALA 85 12 3 Comandos de desvios incondicionais re eereererereeenanaraanananarana 88 12 31 Comando break nsare neient nni ada aii eii 88 12 3 2 Comando continue re ireenerereaeaneenaraantaannaaa 88 124 Exerc cios Proposto S nicsen ligas Qua es iaoiaee dio nela IDEA Guia Rest ha al gaba dad aaa da 89 12 84 S rieS ara ema a sda SO raias O ad na doa as RO Sia Ce ntada a 89 12 4 1 1 Respostas dos exerc cios sobre s ries 90 1254 2 VOLONOS E res ntiaa Sac E SG AI nUea SR EELeab EaD E les SOR E 91 124 3 MalTiZES axiessantsooeasnasa ceodaeral arise gene a aE EEA de CIO casa p aa gen aaa ee de 92 12 4 4 Exerc cios gerais sobre repeti es ereta 95
61. a aritm tica das notas lidas 4 Fa a um programa que leia um n mero real ponto flutuante e mostre o n mero lido com e sem nota o cient fica 5 Fa a um programa que leia os catetos de um tri ngulo ret ngulo calcule e mostre o valor da hipotenusa com tr s casas decimais 6 Construa um programa que leia os tr s lados de um paralelep pedo em cent metros calcule e mostre o valor da diagonal do paralelep pedo em metros mostre o resultado em nota o cient fica 7 A partir da diagonal de um quadrado desejamos elaborar um programa que nos informe o comprimento do lado deste quadrado Implemente um programa que leia o valor da diagonal calcule e mostre o valor do lado do quadrado com uma casa decimal 8 A convers o de graus Fahrenheit para Cent grados obtida pela f rmula C g 32 Codifique um programa que leia o valor de um temperatura em graus Fahrenheit transforme e mostre a temperatura em graus Cent grados 9 Para a codifica o do programa que segue utilize a seguinte defini o struct PONTO double x y z p g 66 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Elabore um programa que leia as coordenadas de dois pontos calcule e mostre a dist ncia entre os dois pontos lidos no espa o tridimensional R A dist ncia entre dois pontos dada pela f rmula d 0 1 tiara 10 Utilizando a mesma defini o anterior para ponto Implemente um prog
62. a fun o faz Como as fun es da biblioteca padr o da linguagem C s o todas escritas com letras min sculas de bom grado utilizar nomes para as fun es que comecem com letras mai sculas como vimos no par grafo anterior Tudo que est antes do nome da fun o o especificador de valor que o comando return da fun o devolve podendo ser qualquer tipo v lido Se nenhum tipo especificado o default o que compilador assume que a fun o devolve um valor inteiro A fun o tamb m pode n o retornar nada Aparecendo o tipo void especificando um conjunto vazio de valores O void usado como tipo retornado por fun es que n o retornam nada As informa es que est o ap s o nome da fun o entre par nteses s o os par metros que se trata de uma lista de declara es de vari veis Sendo uma lista estas vari veis s o separadas por v rgulas quando existirem mais que uma declara o Uma fun o pode n o ter par metro algum neste caso a lista de par metros vazia Apenas abrem se e fecham se os par nteses ou escrevemos void dentro dos par nteses Os par metros vari veis declaradas e as vari veis declaradas dentro do bloco de c digo da fun o s o ditas vari veis locais locais ao bloco de c digo locais na fun o As vari veis locais n o podem manter os seus valores entre as chamadas de fun es A nica exce o s o para as vari veis est ticas static fazendo com que o comp
63. abrir o arquivo utilizando a fun o fopen que possui o seguinte prot tipo p g 123 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 16 3 FOPEN FILE fopen char char Onde os par metros passados s o o nome do arquivo com ou sem caminho e o modo que determina como o arquivo vai ser aberto leitura escrita leitura e ou escrita Modo Significado r Abre um arquivo texo para letura A Cria um arquivo texto para escrita a aneaaumaaguvotedo gt gt gt ro Abre um arquivo bin rio para leitura O Anexa a um arquivo bin rio CE al w Cria um arquivo bin rio para escrita _ _ _ ja Anexa ou cria um arquivo texto para leitura e ou escrita _ _ r b Abre um arquivo bin rio para leitura e ou escrita Cria um arquivo bin rio para leitura e ou escrita Anexa a um arquivo bin rio para leitura e ou escrita f fopen TESTE w A fun o fopen retorna o endere o de uma estrutura FILE retorna um ponteiro Este valor nunca deve ser alterado Caso aconte a algum erro na abertura do arquivo n o existe o diret rio nome do arquivo errado e etc a fun o fopen retornar NULL nulo zero Devido ao retorno de fopen deve sempre ser feito um teste para a verifica o da abertura do aquivo if 1f puts Problemas na abertura do arquivo a exit 0 J que n o conseguiu abir o arquivo d se uma mensagem e sai do
64. ado Por isso na linha 5 ap s a sua execu o o valor armazenado na vari vel a ser o valor 2 visto que uma divis o de inteiros n o suporta parte fracion ria O menos un rio linha 6 multiplica seu nico operando por 1 Isso qualquer n mero precedido por um sinal de menos troca se o sinal Portanto o valor armazenado na vari vel b na linha 6 seria o valor 2 6 1 1 INCREMENTO E DECREMENTO A linguagem C possui dois operadores teis geralmente n o encontrados em outras linguagens S o os operadores de incremento e decremento e O operador soma 1 ao seu operando e subtrai 1 x x 1 o mesmo que X OU X x X 1 o mesmo que x ou x Os dois tipos de operadores de incremento e decremento podem ser utilizados como prefixo ou sufixo do operando c C y y Os operadores de incremento e decremento operam sobre um lvalue e retornam ao valor armazenado na vari vel Exemplo void main t intc a a 5 c a incrementa a em 1 e atribui o valor de a para a I posi o de mem ria c a erro pois o resultado intermedi rio gerado por a um valor n o um lvalue N o pode ser usado como operando para o operador de incremento Exemplo void main int a b c d x 10 y 5 a X b c y d y p g 15 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Analisando o programa anterior notamos q
65. am o float lido Exemplo o n mero 2513 125 seria mostrado 8D06 0FFF 45 8D06 0FFE 1D 8D06 0FFD 12 8D06 0FFC 00 p g 95 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 2 Elabore um programa que leia um valor inteiro e mostre a tabuada deste n mero da seguinte maneira Suponha que o n mero lido seja o 5 o programa mostraria 5x1 5 5x2 10 5x3 15 5x4 20 5x5 25 5x6 30 5x7 35 5x8 40 5x9 45 5x10 50 3 Fa a um programa que leia o valor N um n mero inteiro positivo e calcule o valor do seguinte somat rio 4 O n mero 3025 possui a seguinte caracter stica 30 25 55 55 55 3025 Construa um programa que pesquise e mostre todos os n meros de quatro algarismos que apresentam tal caracter stica 5 Fa a um programa que pesquise no intervalo de O a 200 os n meros perfeitos Um n mero perfeito aquele cuja soma de seus divisores exceto ele pr prio igual ao n mero Exemplo 6 perfeito porque 1 2 3 6 6 Fa a um programa que mostre os n meros primos no intervalo de 100 a 200 Um n mero primo se e somente se ele for divis vel por 1 ou ele mesmo 7 Fa a um programa que leia um n mero inteiro e positivo e mostre este n mero invertido Sem utilizar vetor Exemplo foi lido 3456 o programa mostrar 6548 8 A quadrado de um n mero inteiro e positivo igual soma dos n primeiros termos mpares Fa a um programa que leia um n mero inteiro e positivo ca
66. arCodigo Reg gt Codigo sizeof Reg gt Codigo codigo para a leitura dos outros elementos da estrutura REG ApanharDataSistema Reg gt Data GerarEmail Reg system aii a a a a Sintaxe void ApanharDataSistema struct DATA Data Fun o Apanhar a data do sistema operacional Entrada Ponteiro para uma estrutura do tipo DATA Sa da Nenhuma id doada id do Sid did dd void ApanharDataSistema struct DATA Data o a a a a a E Sintaxe void GravarRegistro struct REG Reg Fun o Gravar em disco o conteudo de uma struct Reg no arquivo CADASTRO DAT Entrada Ponteiro para uma estrutura do tipo REG Sa da Nenhuma o dd A id dido a dd void GravarRegistro struct REG Reg ida di a a a a A a Sintaxe void GerarEmail struct REG Reg char Provedor Fun o Gerar o email a partir do nome completo da pessoa Entrada Ponteiro para uma estrutura do tipo REG e um char Sa da Nenhuma REDE DER REDE RED DR void GerarEmail struct REG Reg char Provedor JETER PEEKAA ERRE VERRE A ai dd A doid o E RENNENE EKEREN EREEREER Sintaxe void GerarCodigo char Codigo int Tamanho Fun o Gerar um c digo num rico caracteres num ricos Entrada Ponteiro para um char C digo e o tamanho Sa da Nenhuma REED RR RODEADA ERAR EA KEKER AR KAERA DR void GerarCodigo char Codigo int Tamanho Complete o programa com o c digo necess rio para as fun es que faltam ser i
67. b else c b 3 b c 1 p g 77 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 12 1 2 COMANDO SWITCH A sintaxe do comando switch switch vari vel case constante 1 break case constante N break default A vari vel analisada no comando switch deve ser um caractere ou um inteiro As constantes dos v rios cases s o constantes inteiras ou caracteres Quando a execu o do programa chegar em um comando switch o conte do da vari vel analisado e segue um dos caminhos case A palavra default na falta opcional pode ou n o aparecer se aparecer significa que caso nenhum dos cases satisfa a sempre entrar no default executando as linhas de c digo que estiverem abaixo do default Note que aparece a palavra reservada break que um desvio incondicional sem condi o Quando encontrado um break no caso do switch o fluxo da execu o do programa vai para a primeira linha depois da chave que fecha o bloco de c digo do comando switch Bloco este que obrigat rio O comando switch pode substituir uma sequ ncia de if else que possui apenas testes de igualdades O programa abaixo atribui vari vel c o resultado da soma da subtra o do quociente ou do resto entre os valores a e b Para isso feito uma sequ ncia de if else em fun o da vari vel op o op o igual 1 um realiza se soma op o igual 2 dois subtra o op
68. ba Rs CASE a CR SD 2 125 16 60 CIOSE 22 o uus E raso Me E qm at DUDE S REA CO SAIO E Spanair 126 16 7 tell x E E E tap eb as age DE alas Ubie aro rd EL o Spa db ge pe apa AD E ad 126 16 8 1sCeK C EE ET A E E cu aBE SIA SO Citado ias dra SE Eta SON tato iasoa 127 16 9 feof A a ns eea r s alan SL o JL AD ques rodo aoquass gua lan age atas ACI t 128 16 10 gels TPUS GE iiras piain n anie a eii eigai feoti p o i Dn dada bao su A a da Lisa 128 1 6 11 Exerc cios PrOpOStO S ii sonoran eaeoe aate R aoaea a ReTaS PO e Te NORE nadas Lt andas 130 IPAR EIET T o EAEE E A E E E E A A AA 134 18 Bibliografia vicinie eii ae Ea a A ea a E queda o aE a PANEKE Ea aa ESEA E 136 pag 4 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 1 INTRODU O 1 1 ORIGEM DA LINGUAGEM C A linguagem C resultado de uma linguagem mais antiga chamada BCPL que originou a linguagem B Ken Thompson que por sua vez influenciou ao aparecimento da linguagem C Dennis Ritchie nos laborat rios BELL em 1972 tornando se a linguagem b sica do sistema operacional UNIX Por muito tempo a linguagem C padr o foi fornecida junto com o sistema operacional UNIX Com a popularidade dos microcomputadores a linguagem C passou a ser usada com bastante intensidade Foi quando em 1983 um comit ANSI AMERICAN NATIONAL STANDARDS INSTITUTE padronizou a linguagem C com 32 palavras chaves 27 originais e mais 5 incorporadas
69. c quando a execu o do estiver na linha 10 1 void main 2 3 int a b c p1 p2 4 a 5 5 b 2 6 pi amp a 7 p2 amp b 8 c p1 p2 9 p1 p1 p2 10 p g 37 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 2 Analise o programa abaixo e informe o conte do da vari vel v quando a execu o do programa estiver na linha 14 1 void main 9N int v 5 a b p1 p2 4 a 2 5 b 3 6 v b a 5 7 pl v 8 9 13 pl a a 14 9 VARI VEIS COMPOSTAS HETEROG NEAS 9 1 ESTRUTURAS Em linguagem C uma estrutura uma cole o de vari veis referenciadas por um nome fornecendo uma maneira conveniente de se ter informa es relacionadas agrupadas A defini o de uma estrutura forma um modelo que pode ser usado para criar vari veis estruturas As vari veis que compreendem a estrutura s o chamadas elementos da estrutura De uma forma gen rica todos os elementos de uma estrutura s o logicamente relacionados Imagine informa es sobre o nome endere o telefone cep informa es estas utilizadas em um programa de lista postal seria facilmente representados atrav s de uma estrutura A defini o de uma estrutura para um programa em linguagem C poderia ser struct NOME modificador tipo identificador modificador tipo identificador tamanho modificador tipo identificador linhas colunas modificador tipo identif
70. cador modificador tipo identificador tamanho struct XXXX identificador Exemplo struct ENDERE O char nomef 30 char rua 40 char cidade 20 char estado 3 char cep 8 char fone 11 unsigned int idade unsigned int ndep n mero de dependentes p g 38 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Devemos observar que a defini o termina com um ponto e v rgula Isto ocorre porque a defini o de estrutura em linguagem C um comando O r tulo nome da estrutura identifica uma estrutura de dados particular sendo o seu especificador de tipo Quando definida uma estrutura nesse ponto do c digo nenhuma vari vel foi de fato declarada nenhum espa o na mem ria foi reservado Apenas a forma dos dados foi definida Para declarar uma vari vel com um estrutura devemos escrever struct NOME identificador Exemplo struct ENDERE O endere o O c digo acima declara uma vari vel endere o do tipo estrutura ENDERE O Quando voc define uma estrutura est essencialmente definindo um tipo complexo de vari vel n o uma vari vel N o existe uma vari vel desse tipo at que seja realmente declarada Exemplo struct ENDERE O endere o O c digo acima declara uma vari vel ponteiro endere o Esta vari vel ponteiro ter o endere o de uma estrutura do tipo ENDERE O aponta para um tipo de dado que uma estrutura struct ENDERE O Exemplo struct ENDER
71. ctere W Na linha 12 atribu do na posi o apontada por v 2 3 a constante caractere Q Logo temos WegQndo ao inv s de segundo No programa acima comentado foi mostrado as v rias maneira que dispomos para fazer refer ncia as informa es apontadas pelas vari veis ponteiros existentes no programa p g 36 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Exemplo Analise o programa abaixo e perceba o incremento e o decremento do endere o que o ponteiros possuem Quando da depura o do programa observe na janela de watch as vari veis e tamb m o tipo b sico do ponteiro importante 1 void main 2 4 3 char s 16 Pontif cia p1 p2 4 int i 6 1 2 3 4 5 6 p3 p4 5 i 0 sizeof s 6 i 1 sizeof i 7 manipulando os ponteiros para o tipo char 8 pi s p1 recebe o endere o s 0 9 p2 amp s 4 p2 recebe o endere o s 4 10 pt incrementa o endere o em 1 byte tipo char 11 pi 12 p2 decrementa o endere o em 1 byte tipo char 13 p2 14 manipulando os ponteiros para o tipo int 15 p3 i p3 recebe o endere o de i 0 16 p4 amp i 4 p4 recebe o endere o de i 4 17 p3 incrementa o endere o em 2 bytes tipo int 18 P8 19 p4 decrementa o endere o em 2 bytes tipo int 20 p4 21 8 9 EXERC CIOS PROPOSTOS 1 Analise o programa abaixo e informe o conte do das vari veis a b e
72. do programa ao longo da execu o do programa em tempo de execu o 12 1 1 COMANDO IF Estrutura de sele o simples if condi o instru o 1 Representa o atrav s de um diagrama de blocos avalia o da condi o verdadeiro execu o da instru o 1 Este tipo de estrutura que a mais simples que existe analisada da seguinte maneira se condi o que uma express o l gica for verdadeira 1 ocorrer a execu o da instru o 1 caso contr rio se condi o for falsa 0 n o ocorrer a execu o da instru o 1 OBS Na linguagem C qualquer valor diferente de zero interpretado como verdadeiro Execute o programa que segue passo a passo e observe o conte do das das vari veis x e y Feito isto troque os valores de x e y e execute novamente o programa passo a passo Procure observar e compreender o funcionamento do comando de sele o if void main int x y X X Y p g 69 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Representa o do programa anterior atrav s de um diagrama de blocos x Il 5 19 y 1 avaliar x gt y falso Verdadeiro Estrutura de sele o composta if condi o instru o 1 else instru o 2 Representando atrav s de um diagrama de blocos verdadeiro avalia o da condi o Instru o 2 A express o l gica condi o avaliada e se condi o
73. e que pode estar em um string ou em uma estrutura como percebido no c digo acima O n mero do telefone mostrado no seguinte formato 041 330 1515 p g 114 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 15 2 OPERADORES DE BITS 1 Complete a fun o main do c digo que segue implementando as fun es que est o sendo chamadas O bit mais significativo seria o bit de n mero 8 oito e o bit menos significativo seria o bit de n mero 1 um ou seja a n mera o dos bits v o da direita para a esquerda menos significativo para o mais significativo Fun es a serem implementadas ContarBitsLigado que recebe o conte do de um caractere como par metro e retorna o n mero de bits ligados deste caractere DesligarBit que recebe o endere o de um caractere e o n mero do bit a ser desligado InverterBit que rebebe o endere o de um caractere e o n mero do bit a ter o seu valor invertido se 1 um tornar O zero e vice versa LigarBit que recebe o endere o de um caractere e o n mero do bit a ser ligado EstadoBit que recebe o conte do de um caractere e o bit a ser verificado o estado Ligado ou desligado A dd dd o dd dd dd dd Prot tipos de fun es dd dd dad a ContarBitsLigado RES DesligarBit RES InverterBit FE LigarBit ie EstadoBit E E odio dd ad dd o EATA dad od do dd dd E Fun es RE EENE RENAE ERAEN AE ENEE EREE EAER A AEE AEE EEN NEE AE EE EE EAE EEE
74. ectos Formais da Computa o linguagem C Prof Camillo Oliveira 14 Elabore um programa que leia um n mero real e mostre o n mero arredondado Os crit rios s o 2 2 vai para 2 0 2 8 vai para 3 0 2 5 vai para 3 0 12 2 COMANDOS DE REPETI O A linguagem C possui tr s comandos estruturados de repeti o que s o while do while e o for Os comandos de repeti o s o respons veis por permitirem que um bloco de c digo seja repetido por um n mero finito de vezes Quem controla o n mero de vezes itera es que o comando faz s o as express es l gicas 12 2 1 COMANDO DE REPETI O WHILE O comando de repeti o while caracteriza se por fazer o teste no in cio Por isso muitas vezes dito comando de repeti o com teste no in cio Isto implica que nem sempre o c digo dentro do bloco do comando ser executado Isto elimina a necessidade de efetuar um teste condicional antes do comando A forma geral de um comando while seria while condi o instru o 1 Representa o atrav s de um diagrama de blocos Avaliar falso Condi o Verdadeiro executar instru o 1 m Onde condi o uma express o l gica Enquanto o resultado da express o l gica for verdadeiro na linguagem C verdadeiro qualquer valor diferente de O zero a instru o 1 executada Caso contr rio a instru o 1 n o ser executada OBS Vale lembrar que se tivermos mais que uma linha de c digo instru o a
75. em buffer tamb m chamado de n o formatado O sistema de entrada e sa da na linguagem C torna os diversos detalhes dos dispositivos reais transparentes para o programador Isto para dar maior portabilidade poss vel As fun es de entrada e sa da trabalham sobre fluxos de dados Os fluxos podem ser conectados dispositivos reais sendo considerados como arquivos Um fluxo uma sequ ncia de dados e existem dois tipo Os fluxos de TEXTO que s o sequ ncias de caracteres ASCII muitas vezes linhas terminadas com uma nova linha in Os fluxos BIN RIOS que s o sequ ncias de bytes em estado bruto n o ocorrendo nenhuma tradu o A maior parte das fun es de entrada e sa da s o projetadas para operar sobre fluxos Estes fluxos garantem a flexibilidade podendo ser atribu dos diferentes dispositivos reais Algumas dessas conex es j est o constru das quando iniciado o programa Cinco fluxos padronizados est o definidos e conectados aos v rios dispositivos f sicos que s o teclado Para manipularmos arquivos precisamos das seguintes etapas e abrir o arquivo e ler eou gravar no arquivo e fechar o arquivo Abrir o arquivo significa criarmos um fluxo texto ou bin rio para podermos em seguida gravar e ou ler dados no arquivo atrav s do dispositivo de fluxo criado Ap s a manipula o deve ser fechado o arquivo fechar o fluxo criado anteriormente Para realizarmos tais tarefas com arquivos existe na
76. em programas de modems rotinas de arquivos em disco e rotinas de impressoras porque as opera es com bits mascaram certos bits Para ligar um determinado bit ou seja torn lo 1 utiliza se o operador Na seq ncia temos um exemplo que ilustra 000000000001 1000001 0001000000010100000 000100000001 1100001 Para desligar um bit ou seja torn lo 0 zero utiliza se o operador amp Na seq ncia temos um exemplo para desligar um bit 0100100000011000001 1111011111111111111 amp 010000000001 1000001 O operador geralmente utilizado para inverter o estado de um bit 010010000001 1000001 0000100000000000000 010000000001 1000001 p g 18 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O operador de complemento inverte o estado de cada bit da vari vel especificada Ou seja todo 1 vira O e todo O vira 1 Os operadores de bits s o usados frequentemente em rotinas de criptografia Se voc deseja fazer um arquivo em disco parecer ileg vel realize algumas manipula es de bits no arquivo Um dos m todos mais simples complementar cada byte usando o complemento de um para inverter cada bit no byte Veja o exemplo que segue 0100100010011011001 1011011101100100110 1 complemento 0100100010011011001 2 complemento Para finalizar os operadores de bits temos os deslocamento de bit para a direita gt gt e para a esquerda lt lt Suponha x ser uma vari vel do tipo un
77. em uma RETA C RCULO TRI NGULO e um QUADRADO struct PONTO 2D double x y k struct TRIANGULO struct PONTO 2D v 3 E struct QUADRADO struct PONTO_2D v 4 E struct CIRCULO double raio struct PONTO _2D c E struct RETA struct PONTO_2D p1 p2 ja union PRIMITIVA E struct CIRCULO circulo struct QUADRADO quadrado struct TRIANGULO tri ngulo struct RETA reta void main unsigned int t 5 i 1 union PRIMITIVA a b preenche o vetor t com o tamanho das estruturas e da union t i sizeof union PRIMITIVA t i sizeof struct CIRCULO t i sizeof struct QUADRADO t i sizeof struct TRIANGULO t i sizeof struct RETA manipulando os elementos da union sem ponteiro a reta p1 x 1 a reta p1 y 2 a reta p2 x 1 a reta p2 y 2 manipulando os elementos da union com ponteiro b amp a b gt circulo raio 3 5 b gt circulo c x 3 b gt circulo c y 4 Usar uma uni o ajuda na produ o de c digos independentes da m quina hardware Como o compilador n o perde o tamanho real das vari veis que perfazem a uni o nenhuma depend ncia do hardware produzida A ent o n o necess rio se preocupar com o tamanho do int char float ou qualquer outra coisa que seja p g 63 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira As uni es s o mais utilizadas frequentemente nas conve
78. es profissionais O resultado final que a linguagem C d ao programador o que ele quer poucas restri es poucas reclama es estruturas de blocos fun es isoladas e um conjunto compacto de palavras chaves Usando a linguagem C um programador pode conseguir aproximadamente a efici ncia de c digo de montagem m quina assembler N o de admirar que a linguagem C seja tranquilamente a linguagem mais popular entre os programadores profissionais p g 5 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O fato da linguagem C frequentemente ser usada em lugar da linguagem Assembly o fator mais importante para a sua popularidade entre os programadores A linguagem Assembly usa uma representa o simb lica do c digo bin rio real que o computador executa diretamente Cada opera o em linguagem Assembly leva a uma tarefa simples a ser executada pelo computador Embora a linguagem Assembly d aos programadores o potencial de realizar tarefas com m xima flexibilidade e efici ncia notoriamente dif cil de trabalhar quando se est desenvolvendo ou depurando um programa Al m disso como a linguagem Assembly n o uma linguagem estruturada o programa final tende a ser um emaranhado de jumps calls e ndices desvios Essa falta de estrutura torna os programas em linguagem Assembly dif ceis de ler aperfei oar e fazer manuten es necess rias a qualquer programa de computador Talvez mais importantes
79. fun o LerNumeros passa os endere os das vari veis onde os valores lidos do teclados ser o colocados Note que a passagem por refer ncia No exemplo anterior foi feito a fun o OrdenarTresValores que recebe os tr s valores por refer ncia e coloca os tr s valores em ordem OBS Os dois ltimos c digos escritos fazem a mesma coisa s que escritos de maneiras diferentes Isto importante por que vai conseguindo um refinamento do programa deixando o bastante funcional Algumas destas fun es podem bem ser utilizadas em outros programass reutilizando o c digo sempre 13 3 CHAMANDO FUN ES PASSANDO E RETORNANDO ESTRUTURAS Dado o programa o c digo que segue l o nome e o n mero do telefone mostrando os em seguida utilizando para isto uma estrutura 1 struct INFO 2 3 char Nomef 20 4 char Fone 12 5 3 6 void main 7 4 8 struct INFO r 9 printf Nome 10 scanf s amp r Nome 11 printf Fone 12 scanf s amp r Fone 13 printf Nome s Fone s n r Nome r Fone 14 p g 102 duas fun es que seriam Lerlnfo e Mostrarinfo 1 struct INFO 2 3 char Nomef 20 4 char Fone 12 5 3 6 void Lerlnfo struct INFO 7 void Mostrarlnfo struct INFO 8 void main 9 10 struct INFO r 11 Lerinfo amp r 12 Mostrarlnfo r 13 14 void Lerlnfo struct INFO a 15 16 printf Nome 17 scanf
80. guagem de programa o de sistemas que incorpora as estruturas de controle necess rias programa o estruturada Sua principal caracter stica consiste em ser uma linguagem de tipo livre ou seja o nico tipo de objeto de dados que pode ser usado uma palavra composta de bits Prote o de uma mensagem mediante em dos m todos c digo cifrado que transformam um texto em linguagem natural em texto cifrado ou vice versa O primeiro ou m todo prim rio consiste em substitui o que cada elemento individual do texto cifrado em c digo por ser elemento correspondente em linguagem natural A lista dessas substitui es recebe o nove de c digo de chaves e deve manter se secreto com o objetivo de proteger a informa o O processo de cifragem consiste em mudar um texto em linguagem natural para texto em linguagem cifrada criptografada mediante transforma o criptogr fica geralmente de tal modo que cada bit caractere ou palavra do texto normal seja substitu do por bit caractere ou palavra do texto cifrado criptografado A transforma o do dado ou informa o para encobrir ou dissimular seu significado Mecanismo impulsionador Conjunto ordenado de bytes caracteres que ocupa um localiza o no armazenamento e tratado pelos circuitos do computador em opera es de transfer ncias aritm tica etc com uma unidade Ordinariamente a palavra tratada tanto pela unidade de controle como pela unidade aritm tica co
81. guinte estrutura struct ATLETA char Nome 40 int Idade float Altura Elabore um programa que leia as informa es de um atleta utilizando a estrutura acima definida e mostre as informa es lidas 16 Dadas as seguintes estruturas struct FONE int DDD Prefixo N mero ui ALUNO int C digo char Nome 40 struct FONE Fone Fa a um programa que leia as informa es de um aluno utilizando as estruturas acima definidas e mostre as informa es lidas 17 Utilizando a defini o FONE do programa anterior fa a um programa que leia o n mero de um telefone e mostre o telefone no seguinte formato 41 330 1515 18 Dadas as seguintes defini es struct DATA char Dia char Mes int Ano E struct INTERVALO struct DATA In cio struct DATA Fim Fa a um programa que leia um intervalo de horas utilizando as estruturas definidas acima e mostre o intervalo da seguinte forma por exemplo In cio 10 12 1990 Fim 11 10 1999 p g 68 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 12 COMANDOS DE CONTROLE DO FLUXO DE EXECU O O padr o ANSI divide os comandos de controle de um programa em linguagem C nos seguintes grupos sele o itera o repeti o desvio r tulo label express o e bloco 12 1 COMANDOS DE SELE O Os comandos de sele o dispon veis em linguagem C s o if e switch Os comandos s o ditos sele o porque selecionam o fluxo
82. id Lerldades int v int i for i 0 i lt 12 i printf v d i scanf lf amp v i 3 d double CalcularMedia int v int i double m 0 for i 0 i lt 12 i m v i 12 0 m v i 12 0 return m p g 105 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O programa que segue l um vetor de pontos no plano cartesiano e mostra estes pontos Inicialmente o programa sem fun es struct PONTO double x y void main struct PONTO p 5 int i for i 0 i lt 5 i printf Ponto Y dAn i printf x scant lf amp p i x printf y scant lf amp p i y for i 0 i lt 5 i printf Ponto d lf lf n i p i x p i y Rescrevendo o programa com duas novas fun es LerPontos e MostrarPontos ter amos struct PONTO double x y void LerPontos struct PONTO void MostrarPontos struct PONTO void main struct PONTO p 5 4 LerPontos p MostrarPontos p void LerPontos struct PONTO v int i for i 0 i lt 5 i printf Ponto Y dAn i printf x scanf Volf 8 amp v i x printf y 9 scanf Volf amp v i y p g 106 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveir
83. ilador trate vari vel com se ela fosse uma vari vel global para fins de armazenamento mas ainda limita sua atua o para dentro da fun o Uma vari vel dita global quando for declarada fora da s fun o es Esta vari vel est armazenada na rea de dados e sempre iniciada com o valor zero 0 NULL 40 Uma vari vel global pode ser utilizada dentro de qualquer uma das fun es da o termo a vari vel vis vel em todo o programa Na linguagem C todas as fun es est o no mesmo n vel de escopo Obedecem as mesmas regras de escopo que governam se um bloco de c digo conhece ou tem acesso a outro bloco de c digo ou dados N o poss vel definir uma fun o dentro de uma outra fun o Isto mostra que a linguagem C n o uma linguagem estruturada em blocos O programa abaixo mostra a utiliza o de fun es em um programa O programa possui tr s fun es main Quadrado e Cubo Observe tamb m que podemos chamar uma fun o dentro de outra fun o p g 97 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 1 double Cubo double 2 double Quadrado double 3 double c q 4 void main 5 H 6 double v 7 v 3 8 q Quadrado v 9 c Cubo 3 Quadrado Cubo v 1 2 10 11 double Cubo double x 13 double r 14 r Quadrado x x 15 return r 16 17 double Quadrado double x 19 double r 20 r x x 21 return r 22
84. illo Oliveira Para uma arquitetura de 32 bits o que muda o tamanho do inteiro int que do tamanho da palavra 32 bits O short int passa a ser 16 bits e o long int 64 bits Obs Vale lembrar que quando declaramos uma vari vel um espa o em bytes na mem ria do computador reservado para a vari vel Obs O padr o ANSI determina que os identificadores podem ter qualquer tamanho mas pelo menos os primeiros seis caracteres devem ser significativos se o identificador estiver envolvido em um processo externo de linkedi o S o chamados ent o de nome externos Caso contr rio s o chamados de nomes internos e os 31 primeiros caracteres s o significativos E bom olhar o manual do usu rio para ver exatamente quantos caracteres significativos s o permitidos pelo compilador que se est usando Obs Letras mai sculas e min sculas s o tratadas diferentemente Portanto ano Ano ANO s o tr s identificadores distintos Obs Um identificador n o pode ser igual um palavra chave da linguagem C e n o deve ter o mesmo nome que as fun es que voc escreveu ou as que est o na biblioteca 3 OPERADOR DE ATRIBUI O Na linguagem C voc pode usar o operador de atribui o dentro de qualquer express o v lida em C Isto n o acontece com a maioria das linguagem de computador void main int a b a 2 b 3 Analise o programa acima e informe os valores das vari veis a e b a b Quando quisermos
85. imo cont m o endere o aponta de uma struct REGISTRO Sugere a no o de encadeamento struct REGISTRO unsigned int c digo unsigned char nomef 16 struct REGISTRO proximo void main struct REGISTRO p struct REGISTRO r1 1 Cl udio NO struct REGISTRO r2 2 Renata NO struct REGISTRO r3 3 Marcela NO struct REGISTRO v 3 4 Jo o 0 5 Maria 0 6 Renato 0 manipulando as vari veis sem ponteiros ri proximo amp r2 r2 proximo amp r3 r3 proximo amp r1 manipulando as vari vel com ponteiros p amp ri p gt proximo amp v 0 p gt proximo gt proximo amp r3 p gt proximo gt proximo gt proximo amp v 1 p gt proximo gt proximo gt proximo gt proximo amp r2 p gt proximo gt proximo gt proximo gt proximo gt proximo amp v 3 p g 61 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 9 3 UNI ES Na linguagem C uma union uma posi o de mem ria que compartilhada por duas ou mais vari veis diferente geralmente de tipos de dados diferentes em momentos diferentes A defini o de uma union semelhante defini o de uma estrutura Sua forma geral e union NOME modificador tipo identificador modificador tipo identificador tamanho modificador tipo identificadorflinhas colunas modificador tipo identifcador modificador tipo identificador tamanho struct XXXX identificador union
86. ita para a esquerda Linha 9 x x y y x x y Linha 11 x Xx z z x x Z Linha 13 y y z z y y z p g 74 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 12 1 1 1 ERROS MAIS COMUNS Um erro bastante comum seria ao inv s de colocarmos o operador de igualdade colocamos o operador de atribui o linha 5 1 void main 2 3 unsigned char ch1 ch2 4 ch1 A 5 if ch1 S 6 ch2 7 else 8 ch2 chi 9 Na linha 5 n o queremos atribuir constante caractere S para a vari vel caractere ch1 e sim compararmos ch1 com o valor da constante caractere S if ch1 S Neste caso a express o ch1 S sempre ser verdadeira Para a linguagem C qualquer valor diferente de zero 0 ser sempre verdadeiro No programa que segue temos um erro bastante comum que seria colocarmos um ponto final na linha do comando if linha 4 1 void main void 2 3 char x 16 Puc pr y 16 Pontif cia 4 if x 3 y 3 5 x 3 y 3 W 6 Na linha 4 aparece um ponto e v rgula no final do comando if isto significa que um if sem linha nenhuma a ser executada em fun o do resultado da express o l gica x 3 y 3 A linha 5 s deve ser executada se a express o l gica do if for verdadeira um Com o ponto e v rgula isto n o ocorre A linha 5 sempre ser executada Portanto um erro que n o aparece durante a co
87. l tero is sceles ou escaleno Informar tamb m se n o compuserem nenhum tri ngulo Lembramos que e comprimento de cada lado de um tri ngulo menor do que a soma dos comprimentos dos outros dois lados Chama se tri ngulo equil tero ao tri ngulo que tem os comprimentos dos tr s lados iguais e Chama se tri ngulo is sceles ao tri ngulo que tem os comprimentos de dois lados iguais Portanto todo tri ngulo equil tero tamb m is sceles e Chama se tri ngulo escaleno ao tri ngulo que tem os comprimentos de seus tr s lados diferentes 12 Fa a um programa que seja capaz de concluir qual dentre os animais seguintes foi escolhido atrav s de perguntas e respostas Animais poss veis on a boi porco homem mico le o morcego golfinho avestruz ping im pato condor jabuti jacar sucuri exemplo E mam fero S E quadr pede S E carn voro N E herb voro S Ent o o animal escolhido foi o boi mam fero quadr pede carn voro on a herb voro boi on voro porco b pede on voro homem frut fero mico le o voadores morcego aqu ticos golfinho aves n o voadoras tropical avestruz polar ping im nadadoras pato de rapina condor r pteis com casco jabuti carn voro jacar sem patas sucuri 13 Fa a um programa que leia um n mero real e informe se este n mero possui ou n o casas decimais parte fracion ria p g 81 Asp
88. lcule o quadrado deste n mero e mostre o em seguida Exemplo 3 1 3 5 9 n n 2 i 1 i 0 p g 96 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 13 FUN ES As fun es s o uma das caracter sticas mais importantes da linguagem C As fun es s o nada mais nada menos que blocos de c digos identificados por um nome onde toda a atividade do programa ocorre O c digo de uma fun o um bloco discreto O c digo de uma fun o privativo fun o e nenhum outro comando pode ter acesso em uma outra fun o Exceto atrav s de uma chamada de fun o A forma geral de uma fun o modificador tipo nome da fun o modificador tipo identificador 1 modificador tipo nome da fun o modificador tipo identificador 1 Onde o nome da fun o seria um identificador para a fun o que seguem as mesmas regras do identificador de uma vari vel O nome de uma fun o deve ter uma sequ ncia significativa por exemplo M dia RetornaM dia MaiorValor LeNotas LeNota LeNumero LeReal LeNome RetTurmaAluno RetornaTurma RetornaMediaBimestral M diaBimestral Calculalmposto MontaMatriz CalculaVetor RetNomeUsuario MontraQuadro C rculo Moldura RetornaCaractere RetornaSexo Simpson Gauss MulMatriz SomaMatriz Inversa Matrizinversa RetornaElemento GeraMatriz GeraVetor CopiaString StrTamanho StrConcatena e etc O nome dever ser compat vel com o que
89. lo para um fluxo de arquivo n o colocando um caractere de nova linha e nem copiando o caractere nulo A fun o fgets retorna o um ponteiro para s Encontrando um EOF ou ocorrendo um erro fgets retorna NULL p g 128 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira A fun o fputs retorna retorna o ltimo caractere escrito Se ocorrer algum erro fputs retorna EOF Exemplo 23 void main void FILE stream char string 16 Isto um teste char msg 20 abre um arquivo para leitura stream fopen DUMMY FIL w if Istream puts N o foi poss vel abrir o aquivo a a n return escreve um string em um arquivo fwrite string strlen string 1 stream posiciona no in cio do arquivo fseek stream 0 SEEK SET I um string de um arquivo fgets msg strlen string 1 stream mostra o string lido printf Yos msg fclose stream Exemplo void main void FILE stream int i 100 char c C float f 1 234 abre um arquivo para leitura stream fopen DUMMY FIL w if Istream puts N o foi poss vel abrir o aquivo a a n return escreve algum dado no arquivo fprintf stream Y d c f i c f fecha um arquivo fclose stream p g 129 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 16 11 EXERC CIOS PROPOSTOS 1 Fa a
90. lor invertido se 1 um tornar O zero e vice versa e retorna o caractere com o bit invertido LigarBit que recebe o conte do de um caractere e o n mero do bit a ser ligado e retorna o caractere com o bit desligado EstadoBit que recebe o conte do de um caractere e o bit a ser verificado o estado e retorna um ligado ou zero desligado RE E E E a Prot tipos de fun es dd dd dd dd dd di dd E EEES ContarBitsLigado RES F DesligarBit E InverterBit RE LigarBit E EstadoBit fis sa Add dd dd dd dah dad ia dad Fun es dd dd dd dd dd void main unsigned char Chr Nbits Bit Chr 0x90 Chr LigarBit Chr 4 Nbits ContarBitsLigado Chr Chr LigarBit Chr 5 Nbits ContarBitsLigado Chr Chr Chr Chr DesligarBit Chr 6 Chr DesligarBit Chr 5 Nbits ContarBitsLigados Chr Chr InverterBit Chr 4 Bit EstadoBit Chr 1 p g 118 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Chr DesligarBit Chr 1 Chr DesligarBit Chr 6 Nbits ContarBitsLigados Chr ContarBitsLigado fi O DesligarBit E p g 119 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira InverterBit os LigarBit EstadoBit a p g 120 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 16 ARQUIVOS O trabalho com arquivos fundamental em programa o Atrav s dos arquivos que conseguimos fazer p
91. lt b 1 8 a 2 b 2 9 3 a b 3 Analise o programa abaixo informando o conte do das vari veis a b e c quando a execu o estiver na linha 15 1 void main 2 3 unsigned char af 5 4 char b 5 5 c 0x3FF 6 a 0 b 0 c 7 c lt lt 1 8 ali b 1 c 9 c 0x80 10 a 2 b 2 c 11 c gt gt 4 12 a 3 b 3 c 13 c 0x90 14 a 4 b 4 c p g 26 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 4 Dado o c digo 1 2 4 3 4 5 6 ON void main unsigned char a char b unsigned int c int d a Cc b c d 0x0FF d 0x8000 Qual o conte do das vari veis a b c e d quando a execu o do programa estiver na linha 9 as 0 b C d 5 Analise o c digo abaixo e informe o conte do da vari vel v quando a execu o estiver na linha 9 1 void main void 2 3 int v 4 v1 v2 4 vl v2 1 5 v 0 0xF amp 032 1 6 v 1 2 0x80 02 7 v 2 1 v2 2 gt v1 3 amp amp v1 8 v 3 1 v2 2 gt v1 3 amp amp v1 9 1 6 Analise o programa abaixo e fazendo um teste de mesa e informe o conte do da vari vel mat i e j quando a execu o do programa estiver na linha 12 1 void main 2 3 int m 2 2 4 unsigned int i j 5 m 0 0 1 6 m 0 1 m 1 0 m 1 1 0 7 i 1 8 m 0 0 10 9 m 0 mi 1 1 10 10
92. ml il O m 0 m OJ O 1 mlillj m 0J 0 m 0 1 m 1 0 Teste de mesa m 01 0 m 0 1 m 1 0 mii i j p g 27 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 7 Analise o programa abaixo e informe o conte do da vari vel s quando a execu o do programa estiver na linha 7 Sugest o utilize uma tabela de c digos ASCII para verificar o valor do caracteres e vice versa 1 void main 2 3 char s 5 Puc 4 s 0 s 0 5 s 1 s 1 6 s 2 s 2 7 S 8 Analise o programa abaixo e informe o conte do das vari veis x e y quando a execu o do programa estiver na linha 16 1 void main 2 3 unsigned int n 4 char y 4 5 unsigned char x 4 6 unsigned long int a 7 n 1 8 n 8 9 n 10 a 0xFFEEDDCCUL 11 x 0 y 0 n a 12 x 1 y 1 a gt gt n 2 13 x 2 y 2 a gt gt n 4 14 x 3 y 3 a gt gt n 6 15 x 1 y 2 0x80 16 x y 9 Analise o c digo abaixo e informe o conte do das vari veis x y z e w quando a execu o do programa estiver na linha 13 1 void main 2 3 unsigned int n 4 unsigned char x w 5 char y z 6 n 0x000A 7 x OxFFFO 8 z 0x007F 9 x n 0x0A 10 y X 11 y y 12 w Z z 0x0001 13 x y Z W p g 28 Aspectos Formais da Computa o linguagem C Prof Camillo Oli
93. mo uma quantidade O comprimento da palavra poder ser fixo ou vari vel dependendo do computador p g 134 REGISTRADORES REGISTRO RECORD ULA Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Dispositivo do hardware usado para armazenar uma certa quantidade de bit bytes ou caracteres Um registrador normalmente constru do de elementos tais como transmissores ou tubos e geralmente armazena uma palavra de informa o A programa o comum exige que o registrador tenha condi es de operar a informa o e n o apenas somente armazen la Um grupo de fatos relacionados ou campos de informa es tratadas como uma unidade ou ainda uma lista de informa es em uma forma a ser impressa Unidade l gico aritm tica ALU Arithmetic Logical Unit a parte do hardware do computador na qual s o realizadas as opera es aritm ticas e l gicas A unidade aritm tica geralmente constitu da de um acumulador alguns registradores especiais para o armazenamento dos operandos e resultados suplementados por circuitos de deslocamentos e de sequ ncia divis o e outras opera es desejadas p g 135 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 18 BIBLIOGRAFIA C for engineers Brian Bramer amp Susan Bramer Ed John Wiley amp Sons TURBO C GUIA DO USU RIO Herbert Schildt Ed Makron Books TREINAMENTO EM LINGUAGEM C CURSO COMPLETO M dulos 1 e 2 Victori
94. mpila o e a gera o do programa execut vel aparece sim em tempo de execu o do programa Outro erro bastante comum seria esquecer ou n o colocar chaves quando obrigat rias de in cio e final do bloco em uma sequ ncia de if else void main intx 10 y 9 2 0 if x gt 0 C Y if a c gt 0 c 3 y p g 75 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 12 1 1 2 OPERADOR INTERROGA O DOIS PONTOS Podemos utilizar este operador para substituir comandos if else na forma geral if condi o instru o 1 else instru o 2 As express es devem ser comandos simples nunca um outro comando da linguagem C Este operador chamado de operador interroga o dois pontos por requerer tr s operando Sua forma geral e express o 1 express o 2 express o 3 Sua avalia o express o 1 avaliada Se express o 1 verdadeira express o 2 avaliada e se torna o valor da express o inteira Se express o 1 falsa ent o express o 3 avaliada e se torna o valor da express o Analise o programa abaixo e observe o conte do das vari veis tentando compreender o funcionamento do operador interroga o dois pontos void main void int x y Menor x 1 Xx 1 Menor x lt y x y Analise o programa abaixo e observe o conte do das vari veis tentando compreender o funcionamento do operador interroga o dois ponto
95. mplementadas LerRegistro esta fun o deve ler um tipo struct REG passado por refer ncia para a fun o p g 132 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira GerarCodigo est fun o gera um string preenchido aleat riamente com caracteres num ricos Utilize para isto a fun o random ApanharDataSistema para a implementa o desta fun o utilize a fun o getdate Gerar Email o email deve ser gerado a partir do nome completo da pessoa pegando sempre a letra inicial de cada nome do nome mais um caractere gerado aleat riamente Ex Jos Nogueira Filho o emil poderia ser jnfk system com br GravarRegistro fun o que grava em disco o conte do de uma vari vel do tipo struct REG no arquivo CADASTRO DAT 8 Fa a um programa em linguagem C que extraia do arquivo CADASTRO DAT os campos c digo e email gerando um outro arquivo com estes campos o novo arquivo deve ter o nome de EMAIL DAT 9 Fa a um programa em linguagem C que retire do arquivo CADASTRO DAT o campo email reorganizando o arquivo todo Fa a tudo isto no mesmo arquivo p g 133 17 GLOSS RIO ANSI ARQUIVO FILE ASCII ASSEMBLE ASSEMBLER ASSEMBLY BIT BCPL CRIPTOGRAFIA DRIVE PALAVRA WORD Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira American National Standards Institute Instituto Nacional de Padroniza o Americano Uma cole
96. mpostas unidimensionais imaginemos um edif cio com um n mero finito de andares representando uma estrutura de dados e seus andares parti es dessa estrutura Visto que os andares s o uma segmenta o direta do pr dio estes comp em ent o o que chamado de estrutura unidimensional uma dimens o Um vetor uma cole o de vari veis do mesmo tipo que s o referenciadas por um nome comum Na linguagem C todos os vetores consistem em localiza es cont guas de mem ria A declara o de um vetor seria modificador tipo identificador tamanho Obs Os colchetes do identificador delimitando o tamanho do vetor n o s o opcionais p g 20 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira unsigned int vet 8 0 1 2 3 4 5 6 7 void main int v 5 v 0 2 v 1 10 v 2 v 0 5 v 1 v 4 v 2 8 v 0 viS v 1 Mostrando o teste de mesa do programa acima temos 5 vit 8 vj0 O programa abaixo mostra que os ndices de um vetor pode ser uma vari vel ou uma express o Note que o operador est depois do operando i sufixo Analise os valores finais das vari veis void main void int v 5 i i 0 v i 0x2 vli 10 v i v 0 5 v 1 v i v 2 8 v 0 v i v 1 O programa abaixo possui um erro de programa o que ocorrer em tempo de execu o Qual o erro que o programa tem Fa a um teste de mesa e justifi
97. n mero de bytes a ser reservados no heap e retorna um ponteiro para o primeiro byte do bloco reservado Se n o existe mem ria suficiente no heap a fun o malloc retorna NULL 0 10 O prot tipo pode ser encontrado em lt stdlib h gt lt alloc h gt conveniente verificarmos sempre se conseguimos reservar mem ria utilizando um if e abortarmos o programa sempre que n o conseguimos reservar espa o na mem ria Sempre que um programa reservou mem ria no heap no mesmo programa deve ser liberada a mem ria atrav s da fun o free que possui o seguinte prot tipo void free void que encontro em lt stdlib h gt lt alloc h gt A fun o free recebe como par metro o endere o do primeiro byte de um bloco O programa abaixo l uma sequ ncia de caracteres string e mostra em seguida O espa o reservado para a sequ ncia de caracteres que lida atrav s da aloca o din mica de mem ria 1 void main 2 3 char Str 4 Str char malloc 35 reserva mem ria no heap 5 if IStr 6 n o conseguiu reservar mem ria no heap 7 puts Faltou mem ria a n 8 exit 0 9 10 printf Nome 11 gets Str 12 printf Nome lido sin Str 13 free Str libera mem ria 14 getch 15 O programa a seguir l um vetor de cinco inteiros e mostra o conte do deste vetor Utilizando aloca o din mica de mem ria 1 void main 2 3 int i v
98. ne Viviane e Mizrahi Ed McGraw Hill Dominando o Turbo C Stan Kelly Bootle Ed Ci ncia Moderna Linguagem C Kernighan amp Ritchie C Completo e total Herbert Schildt Ed Makron Books p g 136
99. ng p1 pi pi pi p2 1000 N OO E Na linha 4 tanto as vari veis ponteiro p1 e p2 recebem o endere o do primeiro byte da vari vel string as vari veis ponteiro p1 e p2 apontam para string 0 P Nas linhas 5 6 e 7 cada uma delas incrementa o endere o em um byte Um byte porque o tipo base da vari vel ponteiro p1 char caractere Depois de executada a linha 7 a vari vel ponteiro p1 aponta para o endere o de string 3 ou seja o quarto byte caractere da vari vel string Na linha 8 a vari vel ponteiro p1 ir receber o endere o da vari vel ponteiro p2 que aponta para o primeiro byte da vari vel caractere string string 0 8 6 PONTEIROS E VETORES Exemplo 1 void main 2 3 float vet 7 1 0 1 0 1 0 1 0 1 0 1 0 1 0 v 4 v vet v recebe o endere o do elemento O do vetor vet 5 v 0 1 1 6 v 1 v 0 7 v 2 v 0 v 1 8 v 3 2 2 v 0 9 v 4 sizeof int 10 v 5 10 11 v 6 v 0 v 1 v 2 v 3 12 V 13 v 0 11 11 14 V 15 v 22 22 v 0 22 22 16 8 7 PONTEIROS E MATRIZES Exemplo 1 void main void 2 3 int mat 3 3 0 0 0 0 0 0 0 0 0 m 4 m int mat m aponta para o elemento 0 0 de mat 5 m 3 0 1 1 mat 0 1 1 6 m 3 1 1 1 mat i 1 1 7 8 m 3 2 1 1 mata 1 m 3 0 0 m 3 0 1 m 3 0 2 mat oJ 0 m 0 1 m OJ 2
100. nstante inteira representada com n meros sem componentes fracion rios O tipo de uma constante inteira o menor tipo de dado capaz de armazen la int unsigned int long int unsigned long int A menos que a vari vel venha acompanhada de um sufixo que indique o seu tipo U unsigned int L long int e UL unsigned long int 4 3 CONSTANTES COM PONTO FLUTUANTE N MEROS REAIS Constantes com ponto flutuante requerem ponto decimal seguido pela parte fracion ria do n mero Existem dois tipos b sicos de vari veis com ponto flutuante float e double Podemos tamb m utilizar sufixos que indicam o seu tipo F float e L long double Tipos de dados Exemplo de constantes 1 123 21000 234 35000L 34L 10 12 90 unsigned int 10000U 977U 40000U float 23 28F 4 34e3F 124 F 2el 1 123 23 12312333 0 9876432 long double 101 2L 4 4 CONSTANTES HEXADECIMAIS E OCTAIS Muitas vezes s o utilizados vari veis no sistema num rico na base 8 octal e na base 16 hexadecimal O sistema octal utiliza os d gitos O a 7 e o hexadecimal os d gitos O a 9 e as letras A B C D E e F para representar os algarismos 10 11 12 13 14 e 15 Uma constante hexadecimal deve consistir de um 0x seguido por uma constante na forma hexadecimal Uma constante octal com um 0 seguido por uma constante na forma octal int h OxF 15 em decimal int O 012 10 em decimal 4 5 CONSTANTES STRING i S o constantes formadas por um conjunto de
101. nte do das vari veis x e y printf x d x printf y lf y printf x d y lf x y Escrever o endere o das vari veis x e y printf x p 8x printf x p amp y 11 2 SCANF uma rotina da biblioteca padr o e seu prot tipo est em STDIO H O scanf l os dados digitados via teclado transformando os para o formato especificado na chamada da fun o scanf O prot tipo da fun o int scanf char formato endere o da vari vel p g 65 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Especificadores de formato Formato Descri o string sequ ncia de caracteres YU Inteiro decimal sem sinal Hexadecimal sem sinal letras min sculas Exemplos da utiliza o da fun o scanf para leitura de um valor entrando via teclado Para isto suponha as seguintes declara es de vari veis int x float y char Nome 35 char Chr Ler as vari veis x y Nome Chr scanf d amp x scanf f amp y scanf s Nome ou scant s amp Nome 0 scant c amp Chr 11 3 EXERC CIOS PROPOSTOS 1 Fa a um programa que leia um n mero inteiro e mostre este n mero em decimal octal e hexadecimal 2 Fa a um programa que possua quatro vari veis inteiras declaradas Mostre o endere o de cada uma das quatro vari veis declaradas no programa 3 Fa a um programa que leia quatro notas calcule e mostre a m di
102. o 2 9 0 20216963275793514700 Seno 3 0 0 09107142857142705440 Seno 3 1 0 02528928394841438790 Seno 3 2 0 14687150730158918300 Seno 3 3 0 27382127732143063400 Seno 3 4 0 40651129650793882400 Seno 3 5 0 54558376736111369200 Seno 3 6 0 69199652571428849100 Seno 3 7 0 84707257406746339100 Seno 3 8 1 01255311492063838000 Seno 3 9 1 19065418410714674000 Seno 4 0 1 38412698412698765000 Seno 4 1 1 59632201748016200000 Seno 4 2 1 83125712000000274000 Seno 4 3 2 09368949418650985000 Seno 4 4 2 38919184253968364000 Seno 4 5 2 72423270089285730000 Seno 4 6 3 10626107174603039000 Seno 4 7 3 54379545759920322000 Seno 4 8 4 04651739428570867000 Seno 4 9 4 62536958430554712000 Seno 5 0 5 29265873015871779000 Seno 5 1 6 06216316767855368000 Seno 5 2 6 94924539936505603000 Seno 5 3 7 97 096962771822248000 Seno 5 4 9 14622438857138853000 Seno 5 5 10 49585038442455160000 Seno 5 6 12 04277361777771380000 Seno 5 7 13 81214392446420550000 Seno 5 8 15 83147900698402740000 Seno 5 9 18 13081406783717850000 Seno 6 0 20 74285714285699460000 Seno 6 1 23 70315023454347170000 Seno 6 2 27 05023634539660900000 Seno 6 3 30 82583251 124974310000 Seno 6 4 35 07500893460287020000 Exerc cio 8 Soma 3 14158881890944786000 Exerc cio 9 Soma 14693 63808699286530000000 Exerc cio 10 Soma 269 10990101744556600000 Exerc cio 11 Soma 2 5974955987765101100000
103. o passado para fun o OBS Procure utilizar com e ou sem aloca o din mica de mem ria e observe os c digos gerados 1 Fazer um programa que leia uma sequ ncia de caracteres string pelo teclado atrav s da fun o gets da biblioteca padr o O programa deve mostrar o tamanho da sequ ncia de caracteres lida O tamanho do string sequ ncia da caracteres deve ser calculada atrav s de uma fun o chamada StrTam que recebe como par metros um string e retorna o tamanho do string 2 Fazer um programa que leia uma sequ ncia de caracteres string pelo teclado atrav s da fun o gets da biblioteca padr o O programa deve copiar o conte do do string lido para uma outra vari vel outra posi o de mem ria Est c pia deve ser feita atrav s de uma fun o chamada StrCopia que recebe dois par metros dois strings O prot tipo da fun o seria void StrCopia char d char s que copia o conte do da vari vel do ponteiro s para a vari vel d Obs Note o tamanho reservado na mem ria para as vari veis em quest o principalmente depois da c pia realizada 3 Fazer um programa que leia duas sequ ncias de caracteres strings pelo teclado atrav s da fun o gets da biblioteca padr o O programa deve mostrar os dois strings concatenados o segundo string lido deve ser colocado na sequ ncia logo ap s o primeiro A concatena o deve ser feita atrav s da fun o StrCat que recebe dois par metros dois string
104. o s o constantes e ou vari veis e os operadores s o l gicos e ou relacionais O resultado de uma express o l gica sempre 1 um para verdadeiro ou O zero para falso As express es l gicas ser o utilizadas nos comandos de sele o if e repeti o while do while for estas express es que controlar o o fluxo de execu o do programa atrav s dos comandos Mais na frente veremos com mais detalhes estes comandos Exemplos de express es l gicas Altura lt 1 80 amp amp Peso lt 100 x lt 10 amp amp y gt 10 amp amp z 10 Sal rio lt 2000 00 Horas gt 40 6 3 OPERADORES DE BITS Ao contr rio de muitas linguagens a linguagem C suporta um completo conjunto de operadores de bits Uma vez que C foi projetada para substituir a linguagem assembly na maioria das tarefas de programa o era importante dar suporte as opera es que podem ser feitas em linguagem assembly Opera es com bits consistem em testar atribuir ou deslocar os bits efetivos em um byte ou palavra que correspondem aos tipos char int ou variantes do padr o C Opera es com bits n o podem ser usadas em float double long double void ou outros tipos mais complexos Os operadores de bits s o Operador A o Moo o o o o gt gt complemento deslocamento para a direita lt lt deslocamento para a esquerda Os operadores de bits encontram aplica es mais freq entemente em drivers de dispositivos como
105. ograma a seguir atribui valores iniciais para as vari veis x y e z Depois verifica se est o em ordem crescente trocando o conte do das vari veis quando necess rio Observar a sequ ncia de c digo utilizado para trocar o conte do de duas vari veis neste caso duas vari veis inteiras 1 void main 5 DV x N EN N lt x o Na DSR 15 else o Nx 9 Na DENA 22 if y gt z 19 a NX o na DNS p g 73 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Representa o do programa anterior atrav s de um diagrama de blocos verdadeiro Avaliar falso x gt y x gt z O programa pode ser rescrito de uma outra maneira tirando as chave das linhas 8 e 21 j que possu mos uma linha de c digo um comando if Tamb m poder amos a t tulo de ilustra o fazer a troca entre duas vari veis inteiras utilizando o operador de bits xor O programa ficaria 1 void main 3 int x y Z 4 x 2 5 y 1 6 Z 83 7 if x gt y x gt z 8 if y lt z 9 x y x y 10 else 11 x Zz xX Z 12 if y gt Z 13 y z y Z bvio que ao expandirmos as linhas 9 11 13 ter amos que colocar chaves novamente para marcar o in cio e fim do bloco dos comandos Estas mesmas linhas poderiam ser rescritas da seguinte maneira levando em contra a preced ncia e associatividade dos operadores bem como a ordem de execu o que da dire
106. opcoes 3 SAIR SAIR SAIR unsigned int i 1 dia i DOM dia i TER dia i SEX mes i 2 MAR mes i 2 ABR mes i 2 MAI mesfi 2 JUN opcoes i 5 INCLUIR opcoes i 5 EXCLUIR opcoesfi 5 SAIR 11 ENTRADA E SA DA UTILIZANDO SCANF E PRINTF 11 1 PRINTF Printf uma rotina da biblioteca padr o que possibilita a escrita no monitor de v deo do computador O prot tipo desta rotina fun o encontra se no arquivo de header STDIO H Esta fun o devolve o n mero de caracteres escritos ou um valor negativo se ocorrer algum erro Seu prot tipo seria int printf char string lista de argumentos p g 64 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Para escrever qualquer string sequ ncia de caracteres no monitor de v deo do computador basta passarmos como par metro o string a ser escrito Exemplos da utiliza o do printf Escrever PONTIF CIA seria j printf PONTIF CIA Escrever PUC PR 1999 printf PUC PR 1999 Escrever Nome printf Nome Se desejarmos escrever o conte do de vari veis precisamos utilizar formatos para indicar o tipo de dado a ser escrito AC Caractere Exemplos da utiliza o da fun o printf para escrever o conte do de vari veis Para isto suponha as seguintes declara es e inicializa es int x 15 double y 3 1415 Escrever o co
107. or poderia ser rescrito da seguinte maneira void main int x f x 1 do f X while x lt 5 12 2 3 COMANDO DE REPETI O FOR O comando de repeti o for tamb m chamado de comando de repeti o com vari vel de controle Na sua declara o existem tr s express es que s o inicializa o condi o e incremento decremento O interessante deste comando que o controle todo est na sua declara o A inicializa o e incremento decremento s o express es aritm ticas enquanto condi o uma express o l gica que controlar o n mero de repeti es A forma geral de um comando for seria for inicializa o condi o incremento decremento instru o 1 inicializa o avaliar condi o verdadeiro executar instru o 1 Incremento decremento falso OBS Se tivermos mais que uma linha de c digo obrigat rio a utiliza o de chaves para marcar o in cio e final do bloco de c digos pertencentes ao comando for O programa abaixo calcula o fatorial do n mero 4 1 void main 2 3 int x f 4 f 1 5 for x 1 x lt 5 X 6 f x 7 Quando a execu o do programa estiver na linha 5 temos um comando for Ser realizada a inicializa o da vari vel x com o valor 1 a condi o testada e se for verdadeira para a linguagem C qualquer valor diferente de zero verdadeiro executa a linha 6 Depois de executada uma intera
108. os b sicos caractere e inteiro O modificador long tamb m pode ser aplicado ao tipo b sico double Observe que o padr o ANSI elimina o long double porque ele tem o mesmo significado de um double O identificador uma sequ ncia de caracteres alfanum ricos e o caracter _ sublinhado O primeiro caracter da sequ ncia deve ser uma letra ou um sublinhado e os caracteres subsequentes devem ser letras n meros ou sublinhados O padr o ANSI C define os nomes de vari veis fun es r tulos labels e v rios outros objetos definidos pelo usu rio como identificadores Exemplo contador contador teste344 teste 344 tempo m dio Exemplo de declara es de vari veis float x sal rio nota media unsigned int ano char c sexo double x1 y1 z1 raz o sal inicial sal final A tabela a seguir mostra o tamanho e o intervalo num rico em uma arquitetura de 16 bits char Esma 128 a 127 signed char unsigned char 0a 255 short int 32 768 a 32 767 signed short int unsigned short int 2 to 0 a 65 535 int 32 768 a 32 767 signed int punsignedim 2 16 0a655355 _ long int 2 147 483 648 a 2 147 483 647 signed long int unsigned long int 32 O a 4 294 967 295 32 3 4E 38 a 3 4E 38 7 d gitos de precis o double 64 1 7E 308 a 1 7E 308 15 d gitos de precis o long double 10 80 3 4E 4932 a 1 1E 4932 p g 9 Aspectos Formais da Computa o linguagem C Prof Cam
109. pelo comit Para efeito de compara o a linguagem BASIC para o IBM PC possui 159 palavras chaves A linguagem C combina o controle e as estruturas de dados de uma linguagem de alto n vel com a facilidade de trabalhar em equipamentos m quinas a um n vel associado e aproximado com a linguagem de montagem assembler Possui uma sintaxe concisa bastante atrativa para os programadores sendo que os compiladores geram um c digo objeto muito eficaz As linguagens de alto n vel s o linguagens ricas em tipos de dados S o os tipos de dados que definem um conjunto de valores de uma vari vel pode armazenar e o conjunto de opera es que podem ser executados com esta vari vel Linguagens de ALTO N VEL ADA MODULA 2 PASCAL COBOL FORTRAN BASIC VISUAL BASIC Linguagem de M DIO N VEL C MACRO ASSEMBLER Linguagem de BAIXO N VEL ASSEMBLER A linguagem C uma linguagem estruturada que permite diversas estruturas de la os repeti es como while do while e for A linguagem C suporta o conceito de bloco de c digo que um conjunto de instru es entre chaves Exemplo if x lt 10 printf Muito baixo tente novamente n scanf d amp x Sa A linguagem C dita para programadores ao contr rio de outras linguagem as de ALTO NIVEL o programador n o necessita de conhecimento em inform tica para program las A linguagem C foi criada influenciada e testada em campo por programador
110. pos de dados PONTO e RETA este ltimo em fun o de PONTO e declare um conjunto de 5 retas Sabendo que a terceira reta passa pelos pontos 9 2 5 e 0 8 1 6 atribua estes valores ao conjunto de retas que foi declarado p g 44 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 5 Utilizando o tipo de dado PONTO do exerc cio anterior defina os seguintes tipos CIRCULO definido por um ponto e o comprimento do raio p g 45 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira RETA definida por um ponto e seu coeficiente angular TRIANGULO 1 definido por um conjunto de tr s pontos p g 46 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira TRIANGULO 2 definido por tr s pontos QUADRILATERO 1 definido por um conjunto de quatro pontos p g 47 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira QUADRILATERO 2 definido por quatro pontos p g 48 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 6 Um ponto no espa o R pode ser representado por uma trinca de n meros pertencentes ao conjunto dos n meros reais e que formam uma trinca ordenada x y Z Um cubo reto pode ser definido por oito pontos em R e tamb m pode ser definido por um conjunto de oito pontos Defina os tipos PONTO CUBO 1 e CUBO 2 estes dois ltimos em fun o de PONTO Declare duas vari veis do tipo CUBO 1 e CUBO 2 re
111. programa neste caso O c digo escrito anteriormente poderia ser rescrito de uma outra maneira utilizando a fun o fopen j no comando de sele o assim if 1 f fopen TESTE a puts Problemas na abertura do arquivo a exit 0 Ler e ou gravar no arquivo isto significa apanhar ou por uma informa o um n mero de bytes em um arquivo que esteja aberto informa es 16 4 FREAD Para ler informa es de um arquivo podemos utilizar a fun o fread que possui prot tipo size_t fread void ptr size_t size size_t n FILE stream Esta fun o l um n mero especifico de tens de dados de igual tamanho de um fluxo aberto arquivo aberto Os argumentos da fun o s o ptr Aponta para o bloco no qual os dados ser o lidos p g 124 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira size Tamanho de cada tem que ser lido em bytes n N mero de tens que ser o lidos stream Aponta para o fluxo aberto arquivo O n mero de bytes lidos no total igual n size Retorna o n mero de tens lidos se conseguiu ler ou um final de arquivo ou um erro retornando possivelmente zero Exemplo 1 void main void 2 3 FILE stream 4 char msgl Isto um teste 5 char buf 20 6 7 if I stream fopen DUMMY FIL w 8 9 puts N o foi poss vel abrir o aquivo a a n 10 return 11
112. que a sua resposta void main void int v 5 i i 0 v i 0x2 v i 10 v i v 0 5 v 1 v i v 2 8 v 0 v i v 1 p g 21 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 7 1 1 INICIALIZA O DE VETORES Um vetor pode ser inicializado logo ap s a sua declara o como segue unsigned long int v 4 100 1234 1200 1233 0 1 2 3 100 1234 1200 1233 float b 4 2 4 124 2e1 3E 5 0 1 2 3 2 4 3E 5 double tipos 4 0 02 1 24 3 5 6 0 1 2 3 0 02 Ao inicializarmos um vetor de caracteres temos char nome 14 Computa o 0 1 2 3 4 5 6 7 8 9 10 11 12 18 14 Clolmlplultlalcl alolwI T char nome 10 Computa o 0 1 2 3 4 5 6 7 8 9 10 11 12 18 14 Pepe pmpedloqapart lalor J TI TI T unsigned char x 7 PUC PR 0 1 2 3 4 5 6 7 8 9 10 1i 12 13 14 P lUjcI PIRI INI TT I T unsigned char y 9 P U P R AOS o 1 2 3 4 5 6 7 8 9 10 1 12 143 14 ujel P R T T T T char var 5 P p g 22 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Fa a um teste de mesa e explique o conte do da vari vel str quando a execu o do programa estiver na linha 10 1 void main 2 3 int x 4 unsigned char str 16 ASPECTOS x 040 str 0 x str 1 x str 2 x str 3
113. rama que leia as coordenadas de dois pontos no plano cartesiano x y calcule e mostre o coeficiente angular da reta que passa pelos pontos lidos O coeficiente angular de uma reta dado por Mm Y Yo x1 xo 11 Dada a defini o abaixo struct CONE E double Raio Altura Implemente um programa que leia o raio e a altura de um cone calcule e mostre o volume do cone 12 Dada a estrutura abaixo struct PIR MIDE double Diagonal Altura Construa um programa que leia a diagonal da base e a altura de uma pir mide de base quadrada calcule e mostre a rea da base da pir mide e o volume 13 Escreva um programa que calcule a quantidade de latas de tinta necess rias e o custo para pintar tanques cil ndricos de combust vel por dentro e por fora onde s o fornecidos a altura e o raio desse cilindro Sabemos que a lata de tinta custa R 55 00 cada lata cont m 5 litros e cada litro de tinta pintam 3 metros quadrados 14 Analise o programa abaixo e informe o que foi escrito no monitor de v deo do computador quando a execu o do programa estiver na linha 11 finclude lt stdio h gt 2 void main 3 4 int n d1 d2 d3 d4 5 n 1789 6 d4 n 10 7 d3 n 10 10 8 d2 n 100 10 9 d1 n 1000 10 10 printf d d d d d4 d3 d2 d1 11 p g 67 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 15 Dada a se
114. rdadeiro Menor x Maior y Menor y Maior x Podemos ter seq ncias de c digo onde aparecem if dentro de if e assim por diante Execute o programa que segue passo a passo e observe o conte do das vari veis X y Maior e Menor Feito isto troque os valores de x e y e execute novamente o programa passo a passo Procure observar e compreender o funcionamento do comando de sele o if p g 71 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 1 void main 2 3 int x y Menor Maior 4 x 1 5 y 1 6 if x y 7 Menor Maior x 8 else 9 if x lt y 10 11 Menor x 12 Maior y 18 14 else 15 16 Menor y 17 Maior x 18 19 O else da linha 8 possui apenas uma linha de c digo que um comando if ficando opcional usar chaves para delimitar o in cio e final de bloco Dependendo da experi ncia do programador uma boa pr tica na d vida colocar chaves e o programa ficaria void main int x y Menor Maior x 1 y 1 3 if x y Menor Maior x else if x lt y Menor x Maior y else Menor y Maior x p g 72 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Representa o do programa anterior atrav s de um diagrama de blocos verdadeiro Menor x Maior y Menor x Menor y avaliar Xx lt y Maior y Maior x e O pr
115. rementa o endere o contido em p em 1 byte tipo char 11 Na linha 3 temos as declara es das vari veis s vetor de caracteres de tamanho igual 8 e p vari vel ponteiro do tipo caracter ou seja que cont m o endere o de uma outra vari vel que do tipo caracter char Na linha 4 a vari vel ponteiro p recebe o endere o do primeiro byte da vari vel vetor s p aponta para o ndice O zero do vetor s Na linha 5 com o conte do da posi o p 0 feito um xor operador de bits com a constante num rica inteira 32 base 10 atribuindo o resultado na posi o p 0 Na linha 6 com o conte do da posi o p 2 feito um xor operador de bits com a constante num rica octal 040 base 8 atribuindo o resultado na posi o p 2 Na linha 7 com o conte do da posi o p 4 feito um xor operador de bits com a constante hexadecimal 0x20 base 16 atribuindo o resultado na posi o p 4 Na linha 8 na posi o p 3 atribu do a constante caractere Nas linhas 9 e 10 s o incrementados os endere os contidos na vari vel ponteiro p agora p n o cont m mais o endere o do ndice O do vetor s mas sim o endere o do terceiro byte ndice 2 dizendo que p aponta para o terceiro byte de s p g 34 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Exemplo void main Edo dE char string 16 Pontif cia p1 p2 pi p2 stri
116. requeridas Alguns compiladores podem gerar uma listagem combinada entre o compilador e o assembler que apresenta o c digo original do C e as senten as em linguagem assembler Linker Exceto para programas muito especialistas programas embutidos a maioria dos programas requer fun es da biblioteca padr o O linkeditor junta os arquivos de c digo objeto bibliotecas padr o e outros arquivos gerados pelo usu rio para formar o arquivo execut vel em c digo de m quina para ser executado sob o sistema operacional p g 6 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Execu o do programa O usu rio atrav s do prompt do sistema operacional pode executar o programa Durante a execu o do programa dados podem ser entrados via teclado e ou arquivos e resultados podem sair para o monitor de v deo arquivos e ou impressoras Depuradores debugger muitos ambientes de programa o possuem um depurador autom tico que ajuda na detec o e corre o de erros de compila o de linkedi o jun o erros de execu o e erros de l gica de programa o estes dois ltimos erros s aparecem durante a execu o do programa Nestes depuradores pontos de quebra podem ser inseridos significa que voc pode executar o programa at o ponto marcado como quebra examinar o conte do de vari veis etc Quando o programa trabalha corretamente foi corretamente implementado o depurador n o mais necess
117. rogramas que conseguem produzir informa es permanentes no computador Informa o estas que poder o ser alteradas e ou exclu das no futuro Armazenando os dados em discos na forma de arquivos O conceito de arquivo est no nosso cotidiano que bastante normal a utiliza o de arquivos para armazenar mos grandes quantidades de informa o por um grande per odo de tempo Exemplos os arquivos mantidos por uma companhia telef nica agenda de telefones as informa es de um paciente em um consult rio m dico e etc O arquivo um conjunto cole o de registros de uma estrutura de dados Cada registro ocupa uma posi o fixa dentro do arquivo Os registros s o estruturas formadas por um conjunto de informa es chamadas de campos Exemplo de um arquivo do cotidiano seria o arquivo de uma biblioteca que possui o cat logo dos livros existentes na biblioteca Para isto temos a ficha do livro C digo do livro T tulo Autor Assunto Editora Cada ficha de um livro seria um registro e cada registro possui seis campos que s o c digo do livro t tulo autor assunto editora e ano Quando todas as fichas registros dos livros forem colocadas juntas em um mesmo local um arquivo de a o formando assim o arquivo da biblioteca podendo ser manipulado pelas pessoas que utilizam o arquivo de fichas C digo do livro 13 546 C digo do livro 13 002 C digo do livro 12 932 C digo
118. rs es de tipos quando necess rias porque pode referenciar os dados contidos na uni o de maneiras diferentes 10 ENUMERA ES Uma enumera o uma extens o da linguagem C acrescentada pelo padr o ANSI Uma enumera o um conjunto de constantes inteiras que especifica todos os valores legais que uma vari vel desse tipo pode ter Enumera es s o comuns na vida cotidiana Um exemplo de enumera o das moedas usadas nos Estados Unidos penny nickel dime quarter half dollar dollar As enumera es s o definidas de forma semelhante a estruturas A diferen a que temos a palavra enum usada no in cio de um tipo de enumera o A forma geral de uma enumera o enum NOME lista de enumera o Para declararmos uma vari vel do tipo enumera o seria enum identificador Para entender bem as enumera es o ponto que cada s mbolo representa um valor inteiro e podem ser usados em qualquer lugar em que um inteiro pode ser usado Cada s mbolo dado um valor maior em uma unidade do precedente O valor do primeiro s mbolo da enumera o 0 Neste exemplo mostramos como definir declarar e uma simples manipula o de uma enumera o enum DIAS DOM SEG TER QUA QUI SEX SAB enum MESES JAN FEV MAR ABR 20 MAI JUN JUL AGO SET OUT NOV DEZ enum OPCOES INCLUIR 2 EXCLUIR SAIR void main enum DIAS dia 3 DOM DOM DOM enum MESES mes 4 JAN JAN 10 JAN JANJ enum OPCOES
119. s void main int g passo impar g 0 passo 2 g passo gt 0 g 4 passo passo 2 impar 1 3 Analise o programa abaixo e observe o conte do das vari veis tentando compreender o funcionamento do operador interroga o dois pontos void main int n g passo n 2 1 1 passo gt 0 passo 3 passo g 2 passo 3 passo g p g 76 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira OBS N o devemos utilizar indiscriminadamente o operador interroga o dois pontos Isto causaria um empobrecimento do c digo do programa quando a legibilidade compreens o e poss veis manuten es que venham a ser necess rias Dado o c digo abaixo void main void int a b C a 0 b 3 if a gt 0 if b gt 0 c a b else c a b else if b 3 c b else C O programa anterior poderia ser rescrito utilizando o operador interroga o dois pontos e ficaria bem mais complexo de dif cil legibilidade e manuten o Ficaria assim void main void int a b C a 0 b 3 c a gt 0 b gt 0 a b a b b 3 b c Uma vers o para o programa anterior para n o ficaria muito ruim c digo quanto a legibilidade e manutenibilidade seria void main void int a b C a 0 b 3 if a gt 0 c b gt 0 a b a
120. s O prot tipo da fun o seria void StrCat char d char s que p e o conte do da vari vel ponteiro s na sequ ncia da vari vel ponteiro d gerando a partir do ponteiro d o string concatenado Obs Note o tamanho reservado na mem ria para a vari vel ponteiro d aponta deve ser suficiente para receber o conte do das vari veis ponteiros d e s 4 Fazer um programa que leia uma sequ ncia de caracteres string pelo teclado atrav s da fun o gets da biblioteca padr o O programa deve mostrar o n mero de caracteres letras vogais e consoantes do string lido Para isto devemos construir as seguintes fun es e ContarVogais que recebe um string como par metro e retorna o n mero de vogais do string e ContarConsoantes que recebe um string como par metro e retorna o n mero de consoantes do string e ConitarLeiras que recebe um string como par metro e retorna o n mero de letras do string p g 110 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 5 No mesmo programa anterior adicione a seguinte defini o struct AVAL int Vogais int Consoantes int Letras int Caracteres Construa tr s novas fun es que far o a mesma coisa s que de maneiras diferentes As fun es sao struct AVAL PesquisarString char s que recebe a seq ncia de caracteres a ser analisada e a fun o retorna uma struct AVAL preenchida corretamente void PesquisarString char s struct AVAL que
121. s como listas encadeadas e rvores As reas do heap e pilha s o ditas reas din micas por que s o utilizadas manipuladas durante a execu o do programa em tempo de execu o A disposi o exata do programa pode variar de compilador para compilador e de ambiente para ambiente Por isso dado um modelo conceitual da mem ria PILHA 4 T HEAP DADOS C DIGO 2 TIPOS B SICOS Na linguagem C existem cinco tipos de dados que s o caractere char inteiro int ponto flutuante float ponto flutuante de precis o dupla double e sem valor void Veremos que todos os outros tipos de dados s o baseados em um desses tipos O tamanho e a faixa desses tipos de dados variam de acordo com o tipo de processador e com a implementa o do compilador C O padr o ANSI estipula apenas a faixa m nima de cada tipo de dado e n o o seu tamanho em bytes O formato exato de valores em ponto flutuante depende de como est o implementados Inteiros geralmente correspondem ao tamanho natural da palavra do computador hospedeiro Valores caracteres s o geralmente usados para conter valores definidos pelo conjunto de caracteres ASCII AMERICAN NATIONAL STANDARD CODE for INFORMATION INTERCHANGE Os valores fora desta faixa podem ser manipulados diferentemente entre as implementa es em C Um programa de computador manipula dados os dados tem que ser armazenados em algum lugar Este lugar chamado de mem ria Qualquer linguagem de
122. ser executada dentro de uma comando while obrigat rio a utiliza o de chaves para marcar o in cio e final do bloco de c digo do comando while O programa a seguir preenche um vetor de 10 posi es da seguinte maneira As posi es de ndice mpar preenchido com o valor tr s e as posi es de ndice par com o valor dois void main void int i v 10 i 0 while i lt 10 if i 2 v i 3 else v i 2 i p g 82 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Representa o do programa anterior atrav s de um diagrama de blocos verdadeiro Avaliar i lt 10 falso verdadeiro Avaliar i 2 O programa anterior poderia ser rescrito utilizando o operador interroga o dois pontos A sequ ncia de c digo ficaria void main void int i v 10 i 0 while i lt 10 vli i 2 3 2 Exemplo O programa abaixo calcula a m dia aritm tica de um vetor de n meros reais e tamb m extrai o maior e o menor n mero do vetor O vetor inicializado na declara o void main unsigned int i double vetor 7 1 1 2 3 2 0 4 6 5 0 3 0 5 6 double m dia menor maior acumulador menor 99 maior acumulador i 0 while i lt sizeof vetor sizeof double acumulador acumulador vfi if v i lt menor menor v i else if v i gt maior maior vi i m dia ac
123. signed char Antes A o Depois X 7 00000111 7 X lt lt 1 of 0000110 14 X lt lt 3 000 01110000 e 12 X gt gt 1 01100000 96 X gt gt 2 00011000 00 24 Quando temos x lt lt 1 o mesmo que x x lt lt 1 ou seja os bits de x ser o deslocados para a esquerda em 1 e o resultado do deslocamento atribu do na vari vel x Este tipo de nota o vale para todos os operadores de bits 00001 11000000 Y o Vale a pena observar que o deslocamento em 1 para a esquerda voc multiplica o n mero por 2 e o deslocamento em 1 para a direita o mesmo que dividir o n mero por 2 6 4 PRECED NCIA DOS OPERADORES Associatividade Mais alta 15 gt esquerda para direita Do qa um rio typecast sizeof direita para esquerda 13 multiplicativo Do fif aditivo OT esquerda para direita 11 deslocamento co gt gt esquerda para direita Vo esquerda para direita o relacional lt gt gt esquerda para direita 9 igualdade l esquerda para direita 8 bitabtAND amp esquerda para direita Do TI bitabixOR n esquerda para direita 6f btawoR esquerda para direita 5 l gico AND amp amp esquerda para direita 4 l gco0R I esquerda para direita 3 condicional dir taparaesquerda 2 atribui o l gt gt lt lt amp direita para
124. spectivamente e inicialize os com os seguintes valores dos v rtices 0 0 0 4 0 0 4 4 0 0 4 0 0 0 4 4 0 4 4 4 4 0 4 4 p g 49 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 7 Uma Reta pode ser definida por um ponto e o seu coeficiente angular Um plano pode ser definido por uma RETA e um PONTO desde que este ponto n o perten a a esta reta Defina o tipo PLANO em fun o dos tipos RETA e PONTO p g 50 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Declare uma vari vel do tipo PLANO e atribua valores para este plano p g 51 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Declare um conjunto de cinco PLANOS e atribua valores para terceiro plano p g 52 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 8 Uma data pode ser definida por tr s n meros que representam o dia 1 31 m s 1 12 janeiro igual 1 e ano um n mero de quatro algarismos Defina o tipo de dado DATA Utilize menor tipo de dado que caiba a faixa de intervalo Declare duas vari veis do tipo DATA chamadas de Inicio e Fim e atribua as datas 13 4 1992 e 29 12 1999 p g 53 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 9 Um endere o residencial pode ser definido atrav s do nome da rua 35 bytes o bairro 20 bytes a cidade 30 bytes a sigla do estado da federa o UF 2 bytes
125. tado incorreto 1 2 ESQUELETO DE UM PROGRAMA EM LINGUAGEM C declara o das vari veis globais void main in cio de bloco declara o das vari veis sequ ncia de comando e fun es final de bloco Sempre um programa ou um conjunto de programas em linguagem C deve ter uma nica fun o main Sempre aparecer um destes prot tipos void main void main void int main int main void main ou main void Exemplo de um programa bem simples seria Para exemplificar os processos descritos anteriormente observe o c digo abaixo finclude lt stdio h gt pr processador de diretivas void main cabe alho header da fun o main in cio do bloco de c digo da fun o main puts Engenharia de computa o I final do bloco de c digo da fun o main p g 7 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 1 3 MAPA DE MEM RIA EM C Um programa compilado em linguagem C cria e usa quatro regi es que s o rea de c digo rea de dados heap e pilha A pilha tem diversos usos durante a execu o de seu programa Ela possui o endere o de retorno das chamadas de fun es argumentos para as fun es e vari veis locais tamb m guarda o estado atual da UCP unidade central de processamento O heap uma regi o de mem ria livre que seu programa pode usar nas fun es de aloca es din micas em linguagem C em aplica e
126. teca padr o colocando os em um vetor de caracteres finalizado sempre com o caracteres 0 Utilize as fun es dos exerc cios 7 8 e 9 respectivamente int Lerlnteiro int n que recebe como par metro o n mero m ximo de algarismos que possui o n mero a ser lido por esta fun o double LerReal int n que recebe como par metro o n mero m ximo de algarismos que possui o n mero a ser lido por esta fun o 11 Fa a um programa que leia um string sequ ncia de caracteres alfab tico utilizando a fun o void LerString char s int t int tp e converta esta sequ ncia de caracteres toda para mai sculas e min sculas Para realizar tal tarefa construa as seguintes fun es que s o void StrMai char s que recebe como par metro o endere o do primeiro byte de uma sequ ncia de caracteres string e converte os para mai sculas void StrMin char s que recebe como par metro o endere o do primeiro byte de uma sequ ncia de caracteres string e converte os para min sculas char ChrMai char c que recebe um caractere convete o para maiusculo e retorna este caractere convertido char ChrMai char c que recebe um caractere convete o para min sculo e retorna este caractere convertido 12 Construa um programa que utilize a fun o void LerString char s int t int tp para ler uma sequ ncia de caracteres pelo teclado O programa deve mostrar o tipo do string da sequ ncia de caracteres que pode ser 0 AL
127. teiros v de tamanho igual quatro foram reservados 8 bytes na mem ria supondo endere os menores que 64 Kbytes seriam reservados 16 bytes se os endere os fossem maiores que 64 kbytes isto depender do modelo de mem ria utilizado e a vari vel ponteiro p A vari vel ponteiro p aponta para o primeiro byte caractere da constante string puc pr que se encontra armazenada na rea de dados e que gasta 7 bytes inclui o 0 Na linha 4 aparece a declara o de um vetor de ponteiros s 3 que possui dimens o igual tr s Na linha 5 v 0 recebe o endere o da vari vel ponteiro p apontando para o primeiro byte caractere da constante string puc pr Na linha 6 v 1 recebe o endere o do primeiro byte da constante s 0 Na linha 7 v 2 recebe o endere o da constante s 2 Na linha 8 v 3 recebe o endere o da constante s 2 Na linha 9 a vari vel ponteiro v 0 cont m o endere o aponta para o primeiro byte da constante puc pr como temos v 0 fazemos refer ncia ao conte do deste endere o onde feito um xor operador de bits com a constante num rica hexadecimal 0x20 32 em decimal ou 040 em octal Na linha 10 atribu do na posi o apontada por v 1 a constante caractere Z Na linha 11 atribu do na posi o apontada por v 1 4 a constante caractere X Logo temos ZrimXiro ao inv s de primeiro Na linha 12 atribu do na posi o apontada por v 2 a constante cara
128. ue na linguagem C valores podem ser atribu dos as vari veis na hora da declara o das mesmas linha 3 Assim para as vari veis x e y s o atribu dos os valores iniciais de 10 e 5 respectivamente Quando um operador de incremento ou decremento precede seu operando C executa a opera o de incremento ou decremento antes de usar o valor do operando Se o operador estiver ap s seu operando C usa o valor do operando antes de increment lo ou decrement lo Fazendo um teste de mesa para o programa anterior ter amos a ob fe fa x y 10 i2 ja f4 tio f5 11 l 4 12 _ 3 A preced ncia dos operadores aritm ticos seria C F Os operadores do mesmo n vel de preced ncia s o avaliados pelo computador da esquerda para a direita Obviamente par nteses podem ser usados para alterar a ordem de avalia o A linguagem C trata os par nteses da mesma forma que todas as outras linguagens de programa o Par nteses for am uma opera o ou um conjunto de opera es a ter um n vel de preced ncia maior 6 1 2 EXPRESS ES ARITM TICAS S o express es onde os operandos podem ser constantes e ou vari veis e os operadores s o aritm ticos Exemplo void main int cnt acm ind1 ind2 cnt 100 acm 100 cnt indi acm cnt ind2 acm ent cnt ind1 1000 Mostrando o teste de mesa do programa acima temos os seguintes valores atribu dos para as vari veis ao longo da execu o
129. um programa em linguagem C que leia caracteres a caractere do teclado utilizando a fun o getchar e grave em um arquivo com o nome KTOD DAT atrav s da fun o fputc O programa termina quando o caractere lido for um 2 Fa a um programa em linguagem C que leia caractere a caractere do arquivo KTOD DAT atrav s da fun o fgetc e mostrando o caractere atrav s da fun o putchar 3 Fa a um programa em linguagem C que gere o arquivo LADOS DAT Este arquivo possui 3000 valores inteiros gerados aleatoriamente utilizando a fun o random 4 Fa a um programa em linguagem C que leia o arquivo LADOS DAT utilizando a estrutura definida abaixo struct TRIANGULO E int a b C O programa dever informar quantos s o tri ngulos e n o tri ngulos 5 Fa a um programa em linguagem C que leia o arquivo LADOS DAT e utilizando uma estrutura TRIANGULO informe qual o tri ngulo que possui o maior per metro 6 Fa a um programa em linguagem C que gere o arquivo TRIAN DAT que possui todos os lados que formam um tri ngulo extra dos do arquivo LADOS DAT 7 Considere o fragmento de c digo abaixo DER RGE Ra ASR a E DO O DA Includes id di ed dog id foda di dad din td finclude lt conio h gt include lt dos h gt include lt stdio h gt include lt stdlib h gt include lt string h gt include lt lib h gt bad ia ad a dd Did dd do dd Estruturas PRE de RS AS JD DS RR struct DATA
130. uma sequ ncia de caracteres string e conte e mostre o n mero de vogais desta sequ ncia de caracteres 12 Implemente um programa que leia um vetor de caracteres de tamanho igual dez mostre o vetor lido inverta e mostre o vetor invertido Para realizar a invers o tente n o utilizar outro vetor fa a a invers o no mesmo vetor 13 Fa a um programa que leia um valor base dez inteiro maior ou igual zero contido no intervalo 1 a 255 inclusive tranforme e mostre este valor na base dois Fa a este programa de duas maneira utilizando um vetor e sem vetor Fa a tamb m uma consist ncia do n mero lido informando que o n mero n o v lido fora do intervalo pedido O programa acaba quando for lido o valor O zero 12 4 3 MATRIZES 1 Fa a um programa que leia uma matriz 5x5 de caracteres e mostre a matriz no formato de matriz que estamos acostumados 2 Construa um programa que leia duas matrizes de ordem tr s e mostre a soma destas duas matrizes 3 Implemente um programa que leia duas matrizes de ordem tr s calcule e mostre o resultado da multiplica o das matrizes 4 Fa a um programa que l uma matriz 4x2 l um escalar e mostra o resultado da multiplica o da matriz lida pelo escalar p g 92 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 5 Fa a um programa que gere e mostre a seguinte matriz e NNNNNAN e NNNNNA e NNNNNAN Crer N NNN Crer receN
131. umulador sizeof vetor sizeof double 12 2 2 COMANDO DE REPETI O DO WHILE O comando de repeti o do while possui o teste no final do comando Isto garante que uma itera o sempre ser feita p g 83 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira A forma geral de um comando do while seria do instru o 1 while condi o Onde condi o uma express o l gica Enquanto o resultado da express o l gica for verdadeiro na linguagem C verdadeiro qualquer valor diferente de O zero a instru o 1 executada Caso contr rio a instru o 1 n o ser executada Representa o atrav s de um diagrama de blocos Execu o da instru o 1 verdadeiro Avaliar Condi o falso OBS Se tivermos mais que uma linha de c digo a ser executada dentro do comando do while obrigat rio a coloca o de chaves para indicar o in cio e final do bloco do comando do while OBS E bom salientar que o comando do while sempre acaba com um ponto e v rgula na linha da declara o do while O programa abaixo calcula o fatorial do n mero 4 1 void main 2 int x f 4 x f 1 5 do 6 7 f x 8 X 9 while x lt 5 10 Representa o do programa anterior atrav s de um diagrama de blocos verdadeiro avaliar x lt 5 Falso p g 84 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira O programa anteri
132. veira 10 Analise o c digo que segue e informe o conte do da vari vel a quando a execu o do programa estiver na linha 15 1 void main 2 3 unsigned int n 4 unsigned char a 5 0xFF 0xFE 0xFD 0xFC 0xFB 5 char i 6 n 20 7 n 3 8 n 2 9 i 1 10 a 0 a i n 11 ali al i n 12 a 2 afi 1 n 13 a 3 afi 2 n 14 a 4 afi 3 n 15 a 11 Analise o programa abaixo e informe o conte do da vari vel a quando a execu o do programa estiver na linha 19 1 void main 2 3 unsgned int n 4 int a 7 07 07 07 07 07 07 07 5 double c d 6 c 1 1 7 d 2 2 8 n gt gt 4 9 n 0x00FO 10 n 0x000F 11 al4 n 12 a 0 a 0 gt n amp amp n lt 100 n 9 13 a 1 a 0 a 2 a 3 a 4 14 al2 a 1 a 2 gt n a 0 2 lt n 15 a 3 a 5 al6 16 al4 c 1 gt d 17 a 5 al0 a 1 18 a 6 a 0 a 1 p g 29 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira 12 Analise o c digo que segue e informe o conte do das vari veis a e d quando a execu o do programa estiver na linha 12 void main 1 2 3 int a 4 b c n 4 double d 4 5 n 11 6 b 10 n 5 1 7 c 10 8 a 0 d 0 b c 9 a i d 1 b float c 10 a 2 d 2 b 20 14 al3 d 3 b 20 0 a d 13 Analise
133. verdadeira 1 executa a instru o 1 caso contr rio se condi o falsa 0 a instru o 2 executada Execute o programa que segue passo a passo e observe o conte do das vari veis x y e Menor Feito isto troque os valores de x e y e execute novamente o programa passo a passo Procure observar e compreender o funcionamento do comando de sele o if void main int x y Menor x 1 y 1 if x lt y Menor x else Menor y p g 70 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira Representa o do programa anterior atrav s de um diagrama de blocos Avaliar Xx lt y Verdadeiro Menor x OBS Quando tivermos mais de uma linha de c digo instru o a ser executada dentro de um if ou de um else somos obrigados a colocar chaves indicando o in cio e final do bloco do comando Quando tivermos apenas uma linha de c digo o in cio e final de bloco opcional Execute o programa que segue passo a passo e observe o conte do das vari veis X y Maior e Menor Feito isto troque os valores de x e y e execute novamente o programa passo a passo Procure observar e compreender o funcionamento do comando de sele o if void main int x y Menor Maior x 1 1 if x lt y Menor x Maior y else Menor y Maior x Representa o do programa anterior atrav s de um diagrama de blocos Avaliar x lt y Ve
134. z 5 5 i j if i j matriz i j W else if i lt j matriz illj Z else matriz i j Y while j lt 5 while i lt 5 12 3 COMANDOS DE DESVIOS INCONDICIONAIS 12 3 1 COMANDO BREAK O comando break quando utilizado dentro de uma estrutura de repeti o provoca um desvio do fluxo do programa para fora do comando de repeti o Evitando o teste condicional normal do la o O c digo a seguir mostra uma utiliza o simples do comando break void main i int t c 0 for t 0 t lt 100 t i C if t 5 break Quando a execu o do programa acima estiver na linha 9 um salto para a linha 11 ser dado ou seja a execu o do programa ir para esta linha 12 3 2 COMANDO CONTINUE O comando continue quando utilizado dentro de uma estrutura de repeti o provoca um desvio do fluxo de modo que ocorra uma nova itera o pulando qualquer c digo intermedi rio O c digo a seguir mostra uma utiliza o simples do comando continue p g 88 Aspectos Formais da Computa o linguagem C Prof Camillo Oliveira void main char string 36 Ca sa s int contador s string for contador 0 s s S if s 9 continue contador 12 4 EXERC CIOS PROPOSTOS 12 4 1 S RIES 1 Fazer um programa que calcule e escreva o valor de S 2 Fazer um programa que calcule e escreva a seguinte soma 2 2 2 250 HO pt 50
Download Pdf Manuals
Related Search
Related Contents
Bulletin - Lycée Sandar INSTANT MAGIC COVER - Bienvenue dans l`univers M6 Boutique Télécharger (615 ko) Da-Lite 97962D projection screen BL55-RU - Hegewald & Peschke Mess LG 22LB4510 Energy Guide : Free Download, Borrow, and Streaming : Internet Archive Sinhox Washer - SINH2OX Lavaggi Nasali Copyright © All rights reserved.
Failed to retrieve file