275 pág.

Pré-visualização | Página 1 de 45
LINGUAGEM C: DESCOMPLICADA Prof. Andre´ R. Backes SUMA´RIO 1 Introduc¸a˜o 2 1.1 A linguagem C . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.1 Influeˆncia da linguagem C . . . . . . . . . . . . . . . . 2 1.2 Utilizando o Code::Blocks para programar em C . . . . . . . 4 1.2.1 Criando um novo projeto no Code::Blocks . . . . . . . 4 1.2.2 Utilizando o debugger do Code::Blocks . . . . . . . . 8 1.3 Esqueleto de um programa em linguagem C . . . . . . . . . 12 1.3.1 Indentac¸a˜o do co´digo . . . . . . . . . . . . . . . . . . 14 1.3.2 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . 15 1.4 Bibliotecas e func¸o˜es u´teis da linguagem C . . . . . . . . . . 16 1.4.1 O comando include . . . . . . . . . . . . . . . . . . . 16 1.4.2 Func¸o˜es de entrada e saı´da: stdio.h . . . . . . . . . . 17 1.4.3 Func¸o˜es de utilidade padra˜o: stdlib.h . . . . . . . . . 19 1.4.4 Func¸o˜es matema´ticas: math.h . . . . . . . . . . . . . 21 1.4.5 Testes de tipos de caracteres: ctype.h . . . . . . . . . 22 1.4.6 Operac¸o˜es em String: string.h . . . . . . . . . . . . . 22 1.4.7 Func¸o˜es de data e hora: time.h . . . . . . . . . . . . . 23 2 Manipulando dados, varia´veis e expresso˜es em C 25 2.1 Varia´veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.1.1 Nomeando uma varia´vel . . . . . . . . . . . . . . . . . 26 2.1.2 Definindo o tipo de uma varia´vel . . . . . . . . . . . . 28 2.2 Lendo e escrevendo dados . . . . . . . . . . . . . . . . . . . 31 2.2.1 Printf . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1 2.2.2 Putchar . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.2.3 Scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.2.4 Getchar . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.3 Escopo: tempo de vida da varia´vel . . . . . . . . . . . . . . . 39 2.4 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.4.1 Comando #define . . . . . . . . . . . . . . . . . . . . 45 2.4.2 Comando const . . . . . . . . . . . . . . . . . . . . . . 45 2.4.3 sequ¨eˆncias de escape . . . . . . . . . . . . . . . . . . 46 2.5 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.5.1 Operador de atribuic¸a˜o: “=” . . . . . . . . . . . . . . . 47 2.5.2 Operadores aritme´ticos . . . . . . . . . . . . . . . . . 50 2.5.3 Operadores relacionais . . . . . . . . . . . . . . . . . 52 2.5.4 Operadores lo´gicos . . . . . . . . . . . . . . . . . . . 54 2.5.5 Operadores bit-a-bit . . . . . . . . . . . . . . . . . . . 55 2.5.6 Operadores de atribuic¸a˜o simplificada . . . . . . . . . 58 2.5.7 Operadores de Pre´ e Po´s-Incremento . . . . . . . . . 59 2.5.8 Modeladores de Tipos (casts) . . . . . . . . . . . . . . 61 2.5.9 Operador vı´rgula “,” . . . . . . . . . . . . . . . . . . . 62 2.5.10 Precedeˆncia de operadores . . . . . . . . . . . . . . . 62 3 Comandos de Controle Condicional 65 3.1 Comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 3.1.1 Uso das chaves {} . . . . . . . . . . . . . . . . . . . . 68 3.1.2 Expressa˜o condicional . . . . . . . . . . . . . . . . . . 69 3.2 Comando else . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.3 Aninhamento de if . . . . . . . . . . . . . . . . . . . . . . . . 75 2 3.4 Operador ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.5 Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . 79 4 Comandos de Repetic¸a˜o 85 4.1 Repetic¸a˜o por condic¸a˜o . . . . . . . . . . . . . . . . . . . . . 85 4.2 Lac¸o infinito . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.3 Comando while . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.4 Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.5 Comando do-while . . . . . . . . . . . . . . . . . . . . . . . . 97 4.6 Comando break . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.7 Comando continue . . . . . . . . . . . . . . . . . . . . . . . . 100 4.8 Goto e label . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5 Vetores e matrizes - Arrays 105 5.1 Exemplo de uso . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.2 Array com uma dimensa˜o - vetor . . . . . . . . . . . . . . . . 106 5.3 Array com duas dimenso˜es - matriz . . . . . . . . . . . . . . 110 5.4 Arrays multidimensionais . . . . . . . . . . . . . . . . . . . . 111 5.5 Inicializac¸a˜o de arrays . . . . . . . . . . . . . . . . . . . . . . 113 5.5.1 Inicializac¸a˜o sem tamanho . . . . . . . . . . . . . . . 115 5.6 Exemplo de uso de arrays . . . . . . . . . . . . . . . . . . . . 116 6 Arrays de caracteres - Strings 119 6.1 Definic¸a˜o e declarac¸a˜o de strings . . . . . . . . . . . . . . . . 119 6.2 Trabalhando com strings . . . . . . . . . . . . . . . . . . . . . 121 6.2.1 Lendo uma string do teclado . . . . . . . . . . . . . . 122 6.2.2 Escrevendo uma string na tela . . . . . . . . . . . . . 124 3 6.3 Func¸o˜es para manipulac¸a˜o de strings . . . . . . . . . . . . . 126 6.3.1 Tamanho de uma string . . . . . . . . . . . . . . . . . 126 6.3.2 Copiando uma string . . . . . . . . . . . . . . . . . . . 126 6.3.3 Concatenando strings . . . . . . . . . . . . . . . . . . 127 6.3.4 Comparando duas strings . . . . . . . . . . . . . . . . 128 7 Tipos definidos pelo programador 129 7.1 Estruturas: struct . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.1.1 Inicializac¸a˜o de estruturas . . . . . . . . . . . . . . . . 134 7.1.2 Array de estruturas . . . . . . . . . . . . . . . . . . . . 135 7.1.3 Atribuic¸a˜o entre estruturas . . . . . . . . . . . . . . . 137 7.1.4 Estruturas aninhadas . . . . . . . . . . . . . . . . . . 138 7.2 Unio˜es: union . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.3 Enumarac¸o˜es: enum . . . . . . . . . . . . . . . . . . . . . . . 143 7.4 Comando typedef . . . . . . . . . . . . . . . . . . . . . . . . 147 8 Func¸o˜es 151 8.1 Definic¸a˜o e estrutura ba´sica . . . . . . . . . . . . . . . . . . . 151 8.1.1 Paraˆmetros de uma func¸a˜o . . . . . . . . . . . . . . . 154 8.1.2 Corpo da func¸a˜o . . . . . . . . . . . . . . . . . . . . . 156 8.1.3 Retorno da func¸a˜o . . . . . . . . . . . . . . . . . . . . 160 8.2 Tipos de passagem de paraˆmetros . . . . . . . . . . . . . . . 165 8.2.1 Passagem por valor . . . . . . . . . . . . . . . . . . . 166 8.2.2 Passagem por refereˆncia . . . . . . . . . . . . . . . . 167 8.2.3 Passagem de arrays como paraˆmetros . . . . . . . . 170 8.2.4 Operador Seta . . . . . . . . . . . . . . . . . . . . . . 174 8.3 Recursa˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 4 9 Ponteiros 181 9.1 Declarac¸a˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 9.2 Manipulando ponteiros . . . . . . . . . . . . . . . . . . . . . . 183 9.2.1 Inicializac¸a˜o e atribuic¸a˜o . . . . . . . . . . . . . . . . . 183 9.2.2 Aritme´tica com ponteiros . . . . . . . . . . . . . . . . 189 9.2.3 Operac¸o˜es relacionais com ponteiros . . . . . . . . . 192 9.3 Ponteiros gene´ricos . . . . . . . . . . . . . . . . . . . . . . . 194 9.4 Ponteiros e arrays . . . . . . . . . . . . . . . . . . . . . . . . 196 9.4.1 Ponteiros e arrays multidimensionais . . . . . . . . . . 200 9.4.2 Array de ponteiros . . . . . . . . . . . . . . . . . . . . 201 9.5 Ponteiro para ponteiro . . . . . . . . . . . . . . . . . . . . . . 202 10 Alocac¸a˜o Dinaˆmica 206 10.1 Func¸o˜es para alocac¸a˜o de memo´ria . . . . . . . . . . . . . . 208 10.1.1 sizeof() . . . . . . . . . . . . . . . . . . . . . . . . . . 208 10.1.2 malloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 209 10.1.3 calloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 212 10.1.4 realloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.1.5 free() . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 10.2 Alocac¸a˜o de arrays multidimensionais . . . . . . . . . . . . . 220 10.2.1 Soluc¸a˜o 1: usando array unidimensional . . . . . . . . 220 10.2.2 Soluc¸a˜o 2: