Você está na página 1de 64

EstruturadalinguagemdeprogramaoC Prof.TiagoEugeniodeMelo tiago@comunidadesol.

org

BreveHistrico

AlinguagemdeprogramaoCfoicriadana dcadade70,porDennisRitchie,quea implementou,pelaprimeiravez,num computadorDECPDP11,rodandoosistema operacionalUNIX.

BreveHistrico

Cconsideradaumalinguagemde programaogenricaequepodeserutilizada paraacriaodediversostiposdeprogramas, desdesoftwaresdealtonvel,comoprogramas comerciais,atsistemasdebaixonvel,como programasparaautomaoindustriale sistemasparadispositivosembarcados.

CaractersticasGerais

Cumalinguagemdeprogramaocase sensitive. OscomandosemCsoescritosemminsculo.

CaractersticasGerais

PalavrasreservadasemC:

CaractersticasGerais

Usodecomentrios:

Oscomentriostornamocdigofontedeum programamaislegvel,oquefacilitaasfuturas manutenes. ParaserealizarumcomentrioemC,bastainiciar otextoquesequercomentarcomumabarrae asterisco(/*)eterminarcomumasteriscoeuma barra(*/).

CaractersticasGerais

Exemplodeusodecomentrios
1/*Tudooqueestivernesteintervalonoser analisadopelocompilador. 2 3inttemperatura=40; 4 5Mesmoquesejaumadeclaraovlidada linguagem.*/

Estruturas

Umregistroumacoleodediversas variveis,comtipospossivelmentediferentes. EmC,osregistrossodeclaradosatravsda palavrareservadastruct.

Estruturas

Sintaxe:

1structnomedaestrutura{ 2 3tipodavarivelvarivel; 4tipodavarivelvarivel; 5 6};


Estruturas

ExemplodeestruturaemC:

1structaluno{ 2charnome[30]; 3intmatricula; 4charcurso[30]; 5};

Estruturas

Paraacessarumcampoespecficodeuma estrutura,devesecomporonomedocampo quesedesejaacessarcomonomeda estrutura. Essacomposiofeitautilizandosedoponto (.).

Estruturas
1structalunoa1,a2; 2strcpy(a1.nome,"Joo"); 3a1.matricula=123456; 4strcpy(a1.curso,"Engenharia"); 5a2=a1; 6if(a2==a1){ 7printf("Soiguais.\n"); 8}

Estruturas

Afunostrcpycopiaumastringdeorigem paraumastringdedestino,jqueemCno possvelrealizarestaoperaodiretamente. Porexemplo,ainstruoa1.nome=Joao seriaidentificadacomoerropelocompilador. Istoocorreporqueumastringconsiderada comoumvetoremCe,comotal,deveser manipuladaelementoaelemento.

Estruturas

AmanipulaodestringsemCfeitaatravs dassuasfunes. Acomparaodeduasstringspossvel atravsdafunostrcmp(string1, string2),quecomparaastring1coma string2. Seasduasforemidnticas,afunoretorna zero.Seelasforemdiferentes,afunoretorna umoutrovalor.

Estruturas

ALinguagemCaindaofereceumrecursodese renomeartiposdedadosprimitivos. Istofeitoatravsdocomandotypedef. Umexemplodeutilizaoparaotypedef:

typedefintTipoContador; typedefchar*TipoPalavra;

Estruturas

possvelusarotypedefnasestruturas. Exemplo:

1structtno{ 2 char*palavra; 3 intcontador; 4}; 5typedefstructtnoTipoNo;


Estruturas

Variveispodementoserdefinidasutilizando seessenovonome,comoumaespciede apelido. Noexemploseguinte,adeclaraodevarivel estsintaticamentecorreta:

TipoNomeuNo; meuNo.contador=1;

Vetores

Osvetores,tambmchamadosdearrays,so umaformadearmazenarvriosdados,em umanicavarivel,sendoestesdados acessveispormeiodeumndicenumrico.

Osvetoresdevemsempreconterdadosdo mesmotipo. Arepresentaodematrizessegueamesma regradosvetores,diferenciandoseapenas comrelaoquantidadededimenses.

Vetores

Aseguir,umexemplodadeclaraodevetores emC: Comestetipodedeclarao,ocompilador reservaumespaonamemria suficientementegrandeparapoderarmazenar onmerodeelementosquefoiespecificadono tamanho.

tipodoarray nomearray[tamanho];

Vetores

EmC,ondicedeumvetorcomeaemzero. Assim,numvetorde100posies,ondice assumirvaloresnointervalode0a99. Tentaracessarumndiceforadointervalo, levaraumerro.

Ponteiros

AmanipulaodeponteirosemC,aomesmo tempo,consideradacomoumadassuas principaiscaractersticasetambmmotivopara afugentarnovatosnalinguagem.

Ponteiros

Osponteirossoutilizadoscomumentepara resolverdiversosproblemascomputacionais como,porexemplo,permitirquediferentes partesdocdigofontesejamfacilmente compartilhadasetambmparamanipular diversasestruturascomalocaodinmica, taiscomolistasligadaservores.

Ponteiros

Comoregrageral,umponteiroumavarivel queguardaoendereodeoutrasvariveis. Umavarivelcomumpodeservistacomouma caixa,emquepossvelarmazenarosvalores deumdeterminadodado. Jumponteiropodeservistocomouma varivelqueguardaoendereodacaixa.

Ponteiros

EmC,osponteirossoidentificadosatravsde umasterisco(*). Asintaxedosponteirosimplementadada seguintemaneira:

tipodedado*NomeVar

Ponteiros
main(){ intindex,*pt1,*pt2; index=100; pt1=&index; pt2=pt1; printf("Osvaloresiniciaisdasvariveisindex,pt1 ept2so%d%d%d\n",index,*pt1,*pt2); *pt1=50; printf("Osvaloresiniciaisdasvariveisindex,pt1 ept2so%d%d%d\n",index,*pt1,*pt2);

Ponteiros

Exemplodedeclaraodeponteiros:

Ponteiros

Noexemplosodeclaradastrsvariveisdo tipointeiro,sendoqueasvariveispt1ept2 soponteirosparaotipointeiro. Avarivelindexfoicriadaecomespao alocado,pormsemterumvalor,poisa mesmaaindanofoiinicializada. Josponteirospt1ept2foramcriados,mas aindanoestoapontandoparalugaralgum.

Ponteiros

Osponteirospt1ept2foramdesenhados comumaelipse,diferentementedavarivel indexquefoidesenhadacomumretngulo, paraindicarqueaquelesnoalocamna memriaomesmoespaoqueumavarivel aloca. Naverdade,osponteirosarmazenamapenas osendereosparaosquaisapontam.

Ponteiros

Afiguraabaixoapresentaoestadodas variveisapsaexecuodalinhaindex=
100;

Ponteiros

Oponteiropt1recebeoendereodavarivel index.Portanto,nestemomento,ovalor armazenadonoponteiropt1igualao endereodavarivelindex.

Ponteiros

Noexemplo,oponteiropt2passaaapontar paraomesmoendereodoponteiropt1,ou seja,ambososponteirospassamaapontar paraoendereodavarivelindex.

Ponteiros

Ocomandoabaixoimprimeoscontedosdas trsvariveis:

printf("Osvaloresiniciaisdasvariveis index,pt1ept2so%d%d%d\n",index, *pt1,*pt2);

Oendereodememriaapontadoporpt1 passaaseriguala50.

*pt1=50;

Ponteiros

Portanto,comoastrsvariveisesto associadasaomesmoendereo,astrs variveispassamatervaloriguala50.

Ponteiros

Mudanaautomticadasvariveis.

Alocaodinmica

Alocaodinmicaatcnicadeprogramao quepermitealocarmemriaparavariveis quandooprogramaestsendoexecutado. Istopossibilitaqueoprogramadorpossacriar, porexemplo,umvetorouumamatrizcujo tamanhoserdefinidoemtempodeexecuo, evitando,destamaneira,odesperdciode memria.

Alocaodinmica

Aalocaodinmicabastanteempregadaem problemasqueenvolvemestruturasdedados como,porexemplo,pilhas,filas,rvores binriasegrafos. OpadroANSICdefineapenas4funes paraosistemadealocaodinmica, disponveisnabibliotecastdlib.h. Asfunesso:malloc(.);calloc(.); realloc(.)efree(.).

Alocaodinmica

Afunomalloc(.)empregadaparaalocar memriaepossuiaseguintesintaxe:

void*malloc(unsignedintnum);

Alocaodinmica

Aquelafunorecebecomoparmetronum, queonmerodebytesdememriaquese desejaalocar. Otipodesteparmetrodefinidoem stdlib.hcomosendouminteirosemsinal. Valeressaltarqueestafunoretornaum ponteiroquedotipovoid,podendoser atribudoaqualquertipodeponteiro.

Alocaodinmica

Amemriaalocadaporestafuno conseguidaatravsdoheap,quearegiode memrialivredocomputador. Destamaneira,necessrioverificarsea memrialivresuficienteparao armazenamento.

Alocaodinmica

Istopodeserfeitoatravsdoseguintetrecho decdigo:

if((vet=(int*)malloc(tamanho)) ==NULL){ printf("Memriainsuficiente"); exit(1); }


Alocaodinmica

Casoafunomalloc(.)devolvaovalornulo significaquenohmemriadisponvele, nestecaso,oprogramairimprimirnatelaa mensagemMemriainsuficiente. Paraevitarqueissoocorra,ouseja,quehaja indisponibilidadedememria,oprogramador responsvelporliberartodaamemria alocadadeformadinmica.Istofeitoatravs dafunofree(.).

Alocaodinmica

Afunoexit(.)podeserchamadade qualquerlugardoprogramaefazcomqueo programatermineeretorne,paraosistema operacional,ocdigoderetorno. Porconveno,afunoretornazeronocaso deumtrminonormaldoprogramaeretorna umnmerononulo,nocasodeterocorrido algumproblemanaexecuodoprograma.

Alocaodinmica

umaprticacomumdeprogramaosempre encerraroprogramaquandoumachamada funomalloc(.)retornarumvalornulo. Issopodeserfeitousandoseafuno exit(.).

Alocaodinmica

Asintaxedafunofree(.)aseguinte: Sendoqueptumponteiroqueforaalocado previamente. Nocasodaalocaofeitaanteriormente,a funofree(.)deveserchamadada seguinteforma:

voidfree(void*pt);

free(pt)

Funes

Umafunoforneceumamaneiraconveniente paraencapsulartrechosdeprogramasque podemserutilizadossemquehajaa preocupaosobreasuaimplementao. Porexemplo,aoseutilizarafuno printf(.)paraimprimiralgonatela,o programadornosabecomoafunofoi implementada,masapenascomoutilizla.

Funes

AlinguagemCfazusodefunesdemaneira fcil,convenienteeeficiente. Muitasvezes,funessoutilizadascomo formadequebraracomplexidadedos problemaseaumentaralegibilidade,tornando oprogramamaisestruturado.

Funes

EmC,asintaxedeumafuno:

tipoderetornonomedafuno (parmetros,sehouver){
corpodafuno;

Funes

Asdeclaraesdefunespodemaparecerem qualquerordemnumarquivo,oumesmoem arquivosseparados. Otipoderetornootipodavarivelquea funovairetornar. Umafunoquenotiverotipoderetorno declarado,serconsideradadotipointeiro (int).

Funes

Aseguir,umexemplodeprogramaemC,que fazoclculodeconversodeumatemperatura deClsiusparaFahrenheit.

Funes
#include<stdio.h> floatconversao (floattf){ floattc; intmain(){ floatvalor; valor= conversao(40);

tc=(tf32) printf("O *5/9; valor%f\n", valor); return(tc); return0; } }


Tipovoid

Nemtodasasfunesprecisamretornaralgum valor.EmC,paraindicarqueumafunono terretorno,bastaindicarnoinciodafunoa palavravoid. Aseguir,apresentadaasintaxebsicade umadeclaraodefunosemretorno:

voidnomedafuno(parmetros);

Arquivos

Asinformaesnocomputadorso processadasearmazenadastemporariamente namemriaprincipal. Essamemriaditavoltil,poisaodesligaro computador,todasasinformaes armazenadasnelasoperdidas.

Arquivos

Paraqueistonoocorra,necessrioo armazenamentodosdadosnumdispositivode memriasecundria,novoltil,comoodisco rgido,utilizandosedeestruturasespeciais chamadasdearquivos. Amanipulaodearquivosenvolvetrsetapas: criaoouaberturadoarquivo;gravaoou leituradedadosnoarquivo;eofechamentodo arquivo.

Arquivos

Naetapainicialverificadaaexistnciado arquivo. Seoarquivojexiste,eleserabertoparaser lidooueditado. Casocontrrio,eledeversercriado,de acordocomotipoescolhido. Osarquivospodemserdedoistipos:textoou binrio.

Arquivos

Aescolhadotipodearquivoserconformea aplicaoaserdesenvolvida. Sehouvernecessidadedequeocontedodo arquivosejalidoporoutrasaplicaes,devese escolherotipotexto.

Arquivos

Casooarmazenamentosejasobredadosque devamserprotegidos,otipomaisindicadoo binrio,poisalmdeocuparmenosespao,ele tambmdificultaaleituraporoutraspessoas, poisestasprecisaroteracessoaoprograma quefazainterpretaodoarquivobinrio.

Arquivos

Umavezqueoarquivotenhasidoabertoou criado,iniciaseasegundaetapada manipulao,queconsisteemrealizar operaodeleituraegravaodedados. AlinguagemCtemumvastoconjuntode funesparamanipulararquivos,sejamelesdo tipotexto,oudotipobinrio. Abibliotecastdio.hpossuiasdefiniesdas funesdemanipulaodearquivos.

Arquivos

EmC,osarquivosnopodemsermanipulados diretamente,masatravsdeumavariveldo tipoFILE. Adeclaraodestetipofeitadaseguinte maneira:

FILE *fp;

Arquivos

Umavezqueoponteiroparamanipularos arquivostenhasidocriado,devesetentarabrir oucriaroarquivoatravsdafunofopen(.).

Asintaxedautilizaodafunofopen(.): fp=fopen("nome.extenso","modo +tipo");

Arquivos

Opesparacriaoouaberturadearquivos.

Arquivos

Umavezqueoarquivotenhasidoabertoou criado,possvelcomearagravaroualeros dadosdestearquivo. Umaformaderealizaraleituradosdadosem umarquivoatravsdafunofscanf(.). Aseguir,mostraseumexemplodeutilizao dafunofscanf(.).

fscanf(fp,"%d",&texto);

Arquivos

Paraagravaonoarquivo,podeseutilizara funofprintf(.),quebastanteparecida comfunoprintf(.). Adiferenaqueexisteumparmetro,na primeiraposio,queindicaqualoarquivo paraondeosdadosserogravados.

Arquivos

Aseguir,apresentaseumexemplodecomose utilizarafunofprintf(.)paragravarno arquivo:

fprintf(fp,"Ocontedode%dser gravadonoarquivo.\n",variavel);

Arquivos

Ofechamentodoarquivorealizadoatravs docomandofclose(.). Estafunoescrevequalquerdadoqueainda permaneanobufferdedisconoarquivoe, ento,fechanormalmenteoarquivo. Aseguir,umexemplodeutilizaodocomando fclose(.):

fclose(fp);

Você também pode gostar