ebook img

Linguagem C: descomplicada PDF

346 Pages·5.988 MB·Portuguese
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Linguagem C: descomplicada

LINGUAGEM C: DESCOMPLICADA Prof. Andre´ R. Backes SUMA´RIO 1 Introduc¸a˜o 9 1.1 A linguagem C . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.1.1 Influeˆncia da linguagem C . . . . . . . . . . . . . . . . 9 1.2 Utilizando o Code::Blocks para programar em C . . . . . . . 11 1.2.1 Criando um novo projeto no Code::Blocks . . . . . . . 11 1.2.2 Utilizando o debugger do Code::Blocks . . . . . . . . 15 1.3 Esqueleto de um programa em linguagem C . . . . . . . . . 19 1.3.1 Indentac¸a˜o do co´digo . . . . . . . . . . . . . . . . . . 21 1.3.2 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . 22 1.4 Bibliotecas e func¸o˜es u´teis da linguagem C . . . . . . . . . . 23 1.4.1 O comando #include . . . . . . . . . . . . . . . . . . . 23 1.4.2 Func¸o˜es de entrada e sa´ıda: stdio.h . . . . . . . . . . 24 1.4.3 Func¸o˜es de utilidade padra˜o: stdlib.h . . . . . . . . . 26 1.4.4 Func¸o˜es matema´ticas: math.h . . . . . . . . . . . . . 28 1.4.5 Testes de tipos de caracteres: ctype.h . . . . . . . . . 29 1.4.6 Operac¸o˜es em String: string.h . . . . . . . . . . . . . 29 1.4.7 Func¸o˜es de data e hora: time.h . . . . . . . . . . . . . 30 2 Manipulando dados, varia´veis e expresso˜es em C 32 2.1 Varia´veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.1.1 Nomeando uma varia´vel . . . . . . . . . . . . . . . . . 33 2.1.2 Definindo o tipo de uma varia´vel . . . . . . . . . . . . 35 2.2 Lendo e escrevendo dados . . . . . . . . . . . . . . . . . . . 39 2.2.1 Printf . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1 2.2.2 Putchar . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.2.3 Scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.2.4 Getchar . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.3 Escopo: tempo de vida da varia´vel . . . . . . . . . . . . . . . 47 2.4 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.4.1 Comando #define . . . . . . . . . . . . . . . . . . . . 53 2.4.2 Comando const. . . . . . . . . . . . . . . . . . . . . . 53 2.4.3 sequ¨eˆncias de escape . . . . . . . . . . . . . . . . . . 54 2.5 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.5.1 Operador de atribuic¸a˜o: “=” . . . . . . . . . . . . . . . 55 2.5.2 Operadores aritme´ticos . . . . . . . . . . . . . . . . . 58 2.5.3 Operadores relacionais . . . . . . . . . . . . . . . . . 60 2.5.4 Operadores lo´gicos . . . . . . . . . . . . . . . . . . . 62 2.5.5 Operadores bit-a-bit . . . . . . . . . . . . . . . . . . . 63 2.5.6 Operadores de atribuic¸a˜o simplificada . . . . . . . . . 66 2.5.7 Operadores de Pre´ e Po´s-Incremento . . . . . . . . . 67 2.5.8 Modeladores de Tipos (casts) . . . . . . . . . . . . . . 69 2.5.9 Operador v´ırgula “,” . . . . . . . . . . . . . . . . . . . 70 2.5.10 Precedeˆncia de operadores . . . . . . . . . . . . . . . 71 3 Comandos de Controle Condicional 73 3.1 Definindo uma condic¸a˜o . . . . . . . . . . . . . . . . . . . . . 73 3.2 Comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.2.1 Uso das chaves {} . . . . . . . . . . . . . . . . . . . . 78 3.3 Comando else . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.4 Aninhamento de if . . . . . . . . . . . . . . . . . . . . . . . . 83 2 3.5 Operador ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.6 Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.6.1 Uso do comando break no switch . . . . . . . . . . . . 91 3.6.2 Uso das chaves {}no case . . . . . . . . . . . . . . . 94 4 Comandos de Repetic¸a˜o 96 4.1 Repetic¸a˜o por condic¸a˜o . . . . . . . . . . . . . . . . . . . . . 96 4.1.1 Lac¸o infinito . . . . . . . . . . . . . . . . . . . . . . . . 97 4.2 Comando while . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.3 Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.3.1 Omitindo uma clausula do comando for . . . . . . . . 104 4.3.2 Usando o operador de v´ırgula (,) no comando for . . . 107 4.4 Comando do-while . . . . . . . . . . . . . . . . . . . . . . . . 109 4.5 Aninhamento de repetic¸o˜es . . . . . . . . . . . . . . . . . . . 112 4.6 Comando break . . . . . . . . . . . . . . . . . . . . . . . . . 113 4.7 Comando continue . . . . . . . . . . . . . . . . . . . . . . . . 115 4.8 Goto e label . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 5 Vetores e matrizes - Arrays 119 5.1 Exemplo de uso . . . . . . . . . . . . . . . . . . . . . . . . . 119 5.2 Array com uma dimensa˜o - vetor . . . . . . . . . . . . . . . . 120 5.3 Array com duas dimenso˜es - matriz . . . . . . . . . . . . . . 124 5.4 Arrays multidimensionais . . . . . . . . . . . . . . . . . . . . 125 5.5 Inicializac¸a˜o de arrays . . . . . . . . . . . . . . . . . . . . . . 127 5.5.1 Inicializac¸a˜o sem tamanho . . . . . . . . . . . . . . . 129 5.6 Exemplo de uso de arrays . . . . . . . . . . . . . . . . . . . . 130 3 6 Arrays de caracteres - Strings 133 6.1 Definic¸a˜o e declarac¸a˜o de uma string . . . . . . . . . . . . . 133 6.1.1 Inicializando uma string . . . . . . . . . . . . . . . . . 134 6.1.2 Acessando um elemento da string . . . . . . . . . . . 134 6.2 Trabalhando com strings . . . . . . . . . . . . . . . . . . . . . 135 6.2.1 Lendo uma string do teclado . . . . . . . . . . . . . . 136 6.2.2 Escrevendo uma string na tela . . . . . . . . . . . . . 139 6.3 Func¸o˜es para manipulac¸a˜o de strings . . . . . . . . . . . . . 140 6.3.1 Tamanho de uma string . . . . . . . . . . . . . . . . . 140 6.3.2 Copiando uma string . . . . . . . . . . . . . . . . . . . 141 6.3.3 Concatenando strings . . . . . . . . . . . . . . . . . . 142 6.3.4 Comparando duas strings . . . . . . . . . . . . . . . . 142 7 Tipos definidos pelo programador 144 7.1 Estruturas: struct . . . . . . . . . . . . . . . . . . . . . . . . . 144 7.1.1 Inicializac¸a˜o de estruturas . . . . . . . . . . . . . . . . 149 7.1.2 Array de estruturas . . . . . . . . . . . . . . . . . . . . 150 7.1.3 Atribuic¸a˜o entre estruturas . . . . . . . . . . . . . . . 152 7.1.4 Estruturas aninhadas . . . . . . . . . . . . . . . . . . 153 7.2 Unio˜es: union . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.3 Enumarac¸o˜es: enum . . . . . . . . . . . . . . . . . . . . . . . 158 7.4 Comando typedef . . . . . . . . . . . . . . . . . . . . . . . . 163 8 Func¸o˜es 167 8.1 Definic¸a˜o e estrutura ba´sica . . . . . . . . . . . . . . . . . . . 167 8.1.1 Declarando uma func¸a˜o . . . . . . . . . . . . . . . . . 168 8.1.2 Paraˆmetros de uma func¸a˜o . . . . . . . . . . . . . . . 171 4 8.1.3 Corpo da func¸a˜o . . . . . . . . . . . . . . . . . . . . . 173 8.1.4 Retorno da func¸a˜o . . . . . . . . . . . . . . . . . . . . 176 8.2 Tipos de passagem de paraˆmetros . . . . . . . . . . . . . . . 181 8.2.1 Passagem por valor . . . . . . . . . . . . . . . . . . . 182 8.2.2 Passagem por refereˆncia . . . . . . . . . . . . . . . . 183 8.2.3 Passagem de arrays como paraˆmetros . . . . . . . . 186 8.2.4 Passagem de estruturas como paraˆmetros . . . . . . 190 8.2.5 Operador Seta . . . . . . . . . . . . . . . . . . . . . . 193 8.3 Recursa˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 9 Ponteiros 200 9.1 Declarac¸a˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 9.2 Manipulando ponteiros . . . . . . . . . . . . . . . . . . . . . . 202 9.2.1 Inicializac¸a˜o e atribuic¸a˜o. . . . . . . . . . . . . . . . . 202 9.2.2 Aritme´tica com ponteiros . . . . . . . . . . . . . . . . 208 9.2.3 Operac¸o˜es relacionais com ponteiros . . . . . . . . . 211 9.3 Ponteiros gene´ricos . . . . . . . . . . . . . . . . . . . . . . . 213 9.4 Ponteiros e arrays . . . . . . . . . . . . . . . . . . . . . . . . 215 9.4.1 Ponteiros e arrays multidimensionais . . . . . . . . . . 219 9.4.2 Array de ponteiros . . . . . . . . . . . . . . . . . . . . 220 9.5 Ponteiro para ponteiro . . . . . . . . . . . . . . . . . . . . . . 221 10 Alocac¸a˜o Dinaˆmica 225 10.1 Func¸o˜es para alocac¸a˜o de memo´ria . . . . . . . . . . . . . . 227 10.1.1 sizeof() . . . . . . . . . . . . . . . . . . . . . . . . . . 227 10.1.2 malloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 228 10.1.3 calloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 231 5 10.1.4 realloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 233 10.1.5 free() . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 10.2 Alocac¸a˜o de arrays multidimensionais . . . . . . . . . . . . . 238 10.2.1 Soluc¸a˜o 1: usando array unidimensional . . . . . . . . 238 10.2.2 Soluc¸a˜o 2: usando ponteiro para ponteiro . . . . . . . 240 10.2.3 Soluc¸a˜o 3: ponteiro para ponteiro para array . . . . . 244 11 Arquivos 248 11.1 Tipos de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . 248 11.2 Sobre escrita e leitura em arquivos . . . . . . . . . . . . . . . 250 11.3 Ponteiro para arquivo . . . . . . . . . . . . . . . . . . . . . . 251 11.4 Abrindo e fechando um arquivo . . . . . . . . . . . . . . . . . 251 11.4.1 Abrindo um arquivo . . . . . . . . . . . . . . . . . . . 251 11.4.2 Fechando um arquivo . . . . . . . . . . . . . . . . . . 256 11.5 Escrita e leitura em arquivos . . . . . . . . . . . . . . . . . . 257 11.5.1 Escrita e leitura de caractere . . . . . . . . . . . . . . 257 11.5.2 Fim do arquivo . . . . . . . . . . . . . . . . . . . . . . 261 11.5.3 Arquivos pre´-definidos . . . . . . . . . . . . . . . . . . 262 11.5.4 Forc¸ando a escrita dos dados do “buffer” . . . . . . . 263 11.5.5 Sabendo a posic¸a˜o atual dentro do arquivo . . . . . . 264 11.5.6 Escrita e leitura de strings . . . . . . . . . . . . . . . . 265 11.5.7 Escrita e leitura de blocos de bytes . . . . . . . . . . . 269 11.5.8 Escrita e leitura de dados formatados . . . . . . . . . 277 11.6 Movendo-se dentro do arquivo . . . . . . . . . . . . . . . . . 282 11.7 Excluindo um arquivo . . . . . . . . . . . . . . . . . . . . . . 284 11.8 Erro ao acessar um arquivo . . . . . . . . . . . . . . . . . . . 285 6 12 Avanc¸ado 287 12.1 Diretivas de compilac¸a˜o . . . . . . . . . . . . . . . . . . . . . 287 12.1.1 O comando #include . . . . . . . . . . . . . . . . . . . 287 12.1.2 Definindo macros: #define e #undef . . . . . . . . . . 287 12.1.3 Diretivas de Inclusa˜o Condicional . . . . . . . . . . . . 294 12.1.4 Controle de linha: #line . . . . . . . . . . . . . . . . . 297 12.1.5 Diretiva de erro: #error. . . . . . . . . . . . . . . . . . 298 12.1.6 Diretiva #pragma . . . . . . . . . . . . . . . . . . . . . 298 12.1.7 Diretivas pre´-definidas . . . . . . . . . . . . . . . . . . 299 12.2 Trabalhando com Ponteiros . . . . . . . . . . . . . . . . . . . 299 12.2.1 Array de Ponteiros e Ponteiro para array . . . . . . . . 299 12.2.2 Ponteiro para func¸a˜o . . . . . . . . . . . . . . . . . . . 300 12.3 Argumentos na linha de comando . . . . . . . . . . . . . . . 308 12.4 Recursos avanc¸ados da func¸a˜o printf() . . . . . . . . . . . . . 311 12.4.1 Os tipos de sa´ıda . . . . . . . . . . . . . . . . . . . . 312 12.4.2 As “flags” para os tipos de sa´ıda . . . . . . . . . . . . 317 12.4.3 O campo “largura” dos tipos de sa´ıda . . . . . . . . . 320 12.4.4 O campo “precisa˜o” dos tipos de sa´ıda . . . . . . . . 320 12.4.5 O campo “comprimento” dos tipos de sa´ıda . . . . . . 323 12.4.6 Usando mais de uma linha na func¸a˜o printf() . . . . . 323 12.5 Recursos avanc¸ados da func¸a˜o scanf() . . . . . . . . . . . . 324 12.5.1 Os tipos de entrada . . . . . . . . . . . . . . . . . . . 325 12.5.2 O campo asterisco “*” . . . . . . . . . . . . . . . . . . 329 12.5.3 O campo “largura” dos tipos de entrada . . . . . . . . 329 12.5.4 Os “modificadores” dos tipos de entrada . . . . . . . . 330 12.5.5 Lendo e descartando caracteres . . . . . . . . . . . . 331 7 12.5.6 Lendo apenas caracteres pre´-determinados . . . . . . 332 12.6 Classes de Armazenamento de Varia´veis . . . . . . . . . . . 333 12.6.1 A Classe auto. . . . . . . . . . . . . . . . . . . . . . . 334 12.6.2 A Classe extern . . . . . . . . . . . . . . . . . . . . . 334 12.6.3 A Classe static . . . . . . . . . . . . . . . . . . . . . . 335 12.6.4 A Classe register . . . . . . . . . . . . . . . . . . . . . 337 12.7 Trabalhando com campos de bits . . . . . . . . . . . . . . . . 338 12.8 O Modificador de tipo “volatile” . . . . . . . . . . . . . . . . . 340 12.9 Func¸o˜es com nu´mero de paraˆmetros varia´vel . . . . . . . . . 342 8 1 INTRODUC¸A˜O 1.1 A LINGUAGEM C A linguagem C e´ uma das mais bem sucedidas linguagens de alto n´ıvel ja´ criadas e considerada uma das linguagens de programac¸a˜o mais utiliza- das de todos os tempos. Define-se como linguagem de alto n´ıvel aquela que possui um n´ıvel de abstrac¸a˜o relativamente elevado, que esta´ mais pro´ximo da linguagem humana do que do co´digo de ma´quina. Ela foi cri- adaem1972noslaborato´riosBellporDennisRitchie,sendorevisadaepa- dronizada pela ANSI (Instituto Nacional Americano de Padro˜es, do ingleˆs American National Standards Institute) em 1989. Trata-se de uma linguagem estruturalmente simples e de grande portabi- lidade. Poucas sa˜o as arquiteturas de computadores para que um compi- lador C na˜o exista. Ale´m disso, o compilador da linguagem gera co´digos mais enxutos e velozes do que muitas outras linguagens. A linguagem C e´ uma linguagem procedural, ou seja, ela permite que um problema complexo seja facilmente decomposto em mo´dulos, onde cada mo´dulo representa um problema mais simples. Ale´m disso, ela fornece acessodebaixon´ıvela` memo´ria,oquepermiteoacessoeaprogramac¸a˜o diretadomicroprocessador. Elatambe´mpermiteaimplementac¸a˜odepro- gramas utilizando instruc¸o˜es em Assembly, o que permite programar pro- blemas onde a dependeˆncia do tempo e´ critica. Por fim, a linguagem C foi criada para incentivar a programac¸a˜o multi- plataforma, ou seja, programas escritos em C podem ser compilado para uma grande variedade de plataformas e sistemas operacionais com ape- nas pequenas alterac¸o˜es no seu co´digo fonte. 1.1.1 INFLUEˆNCIA DA LINGUAGEM C AlinguagemCteminfluenciado,diretaouindiretamente,muitaslinguagem desenvolvidas posteriormente, tais como C++, Java, C# e PHP. Na figura abaixo e´ poss´ıvel ver uma bre histo´ria da evoluc¸a˜o da linguagem C e de suainflueˆncianodesenvolvimentosdeoutraslinguagensdeprogramac¸a˜o: 9

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.