Table Of ContentIntrodução ao C em 10 aulas
Marcelo Otone Aguiar
Rodrigo Freitas Silva
Alegre
Marcelo Otone Aguiar
2016
Marcelo Otone Aguiar
Rodrigo Freitas Silva
INTRODUÇÃO AO C EM 10 AULAS
1º Edição
Alegre
Marcelo Otone Aguiar
2016
IntroduçãoaoCem10aulasdeMarceloOtoneAguiar;RodrigoFreitasSilvaestálicenciadocom
umaLicençaCreativeCommons-Atribuição-NãoComercial-SemDerivações4.0Internacional.
DadosInternacionaisdeCatalogaçãonaPublicação(CIP)
Fichacatalográficafeitapeloautor
A282i Aguiar,MarceloO.
IntroduçãoaoCem10aulas./MarceloOtoneAguiar;RodrigoFreitas
Silva.-1.ed.-Alegre:MarceloOtoneAguiar,2016.
294p.;19x26,5cm.
ISBN978-85-922790-0-4
1.Linguagemdeprogramaçãoparacomputadores.2.LinguagemC.
3.Sintaxe.4.Introduçãoàlinguagemdeprogramação.
1.Título
CDD000
CDU004.43C
Lista de ilustrações
Figura1 – Etapasdaconstruçãodeumaaplicação . . . . . . . . . . . . . . . . . 10
Figura2 – Processodecompilaçãoelinkagem . . . . . . . . . . . . . . . . . . . 11
Figura3 – Saídadeexemplodafunçãoprintf() . . . . . . . . . . . . . . . . . . . 18
Figura4 – Saídadeexemplodafunçãoprintf()ajustada . . . . . . . . . . . . . . 19
Figura5 – Saídadeexemplodoprintf()com3parâmetros . . . . . . . . . . . . 19
Figura6 – Saídadeexemplocomdoisprintf() . . . . . . . . . . . . . . . . . . . . 20
Figura7 – Saídadeexemplocomdoisprintf()ajustado . . . . . . . . . . . . . . 20
Figura8 – Saídadeexemplodafunçãoscanf()paratexto . . . . . . . . . . . . . 23
Figura9 – Saídadeexemploparaleituradetextocomposto. . . . . . . . . . . . 23
Figura10 – Códigocomindentaçãoesemindentação. . . . . . . . . . . . . . . . 34
Figura11 – Exemplodeaplicaçãodosoperadoreslógicos . . . . . . . . . . . . . . 38
Figura12 – NºdeinstruçõesexecutadosxLaçosaninhados . . . . . . . . . . . . 54
Figura13 – Saídadeexemplodelaçoaninhadocomfor . . . . . . . . . . . . . . 55
Figura14 – Representaçãodeumvetorde10posições . . . . . . . . . . . . . . . 79
Figura15 – Representaçãodeumvetorcomalgunsvaloresarmazenados . . . . 80
Figura16 – Exemplosdematrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Figura17 – Exemplo1detabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Figura18 – Exemplo2detabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Figura19 – Exemplodeacessoàmatriz . . . . . . . . . . . . . . . . . . . . . . . . 90
Figura20 – Exemplodeestrutura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Figura21 – Exemplodevetordeestrutura . . . . . . . . . . . . . . . . . . . . . . . 104
Figura22 – Funçãodecálculodaáreadoretângulo . . . . . . . . . . . . . . . . . 118
Figura23 – Testedemesacomafunçãofatorialrecursiva. . . . . . . . . . . . . . 130
Figura24 – Testedemesacomafunçãofatorialrecursivaseminterrupçãodas
recursões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Figura25 – Testedemesacomafunçãofatorialrecursivaseminterrupçãodas
recursões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Figura26 – Representaçãodidáticadealocaçãodinâmica . . . . . . . . . . . . . 153
Figura27 – Representaçãodidáticadealocaçãodinâmicadematriz . . . . . . . 160
Figura28 – Formatodepreenchimentodamatrizparaoexercício . . . . . . . . 163
Figura29 – Formatodepreenchimentodamatrizparaoexercício . . . . . . . . 291
Lista de tabelas
Tabela1 – TiposbásicosdalinguagemC . . . . . . . . . . . . . . . . . . . . . . . 14
Tabela2 – Situaçõesincorretasnanomenclaturadasvariáveis . . . . . . . . . . 15
Tabela3 – PalavrasreservadasdalinguagemC . . . . . . . . . . . . . . . . . . . 15
Tabela4 – Operadoresaritméticoseunários . . . . . . . . . . . . . . . . . . . . . 16
Tabela5 – Operadoresdeatribuição . . . . . . . . . . . . . . . . . . . . . . . . . 17
Tabela6 – FormatadoresdetipoemC . . . . . . . . . . . . . . . . . . . . . . . . 18
Tabela7 – Códigosdebarrainvertida . . . . . . . . . . . . . . . . . . . . . . . . . 21
Tabela8 – Operadoresrelacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Tabela9 – Operadoreslógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Tabela10 – TamanhodostiposbásicosnalinguagemC . . . . . . . . . . . . . . . 78
Sumário
Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1 Introdução à Linguagem C . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1 ProgramaçãoemLinguagemC . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 MeuprimeiroProgramaemC . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4 Atribuição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5 EntradaeSaída . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.6 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.7 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2 Estruturas de Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1 EstruturasdeDecisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2 Cláusulaif-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Indentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4 Cláusulaif-elsecomnblocosdeinstruções . . . . . . . . . . . . . . . . . 34
2.5 Cláusulaif-elsecomcondiçõescompostas . . . . . . . . . . . . . . . . . 36
2.6 Cláusulaif-elsecomcondiçõesaninhadas . . . . . . . . . . . . . . . . . . 39
2.7 Cláusulaswitch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.8 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.9 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3 Estruturas de Iteração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.1 EstruturasdeIteração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.2 Cláusulafor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3 Cláusulaforcomlaçosaninhados . . . . . . . . . . . . . . . . . . . . . . . 54
3.4 Loopinfinitonacláusulafor . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.5 Cláusulawhile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.6 Validaçãodedadoscomwhile . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.7 Cláusulawhilecomlaçosaninhados . . . . . . . . . . . . . . . . . . . . . 61
3.8 Loopinfinitonacláusulawhile . . . . . . . . . . . . . . . . . . . . . . . . 62
3.9 Cláusulado-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.10 Exemplosadicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.11 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.12 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.2 Atribuiçãoeobtençãodevaloresemvetor . . . . . . . . . . . . . . . . . . 79
4.3 Atribuiçãoeacessoavalorescomestruturadeiteração . . . . . . . . . . 81
4.4 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.5 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.1 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.2 DimensionandoumaMatriz . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.3 Atribuiçãoeobtençãodevaloresemmatriz . . . . . . . . . . . . . . . . . 90
5.4 Atribuiçãoeacessoavalorescomestruturadeiteração . . . . . . . . . . 91
5.5 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.6 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6 Tipos de Dados definidos pelo Programador . . . . . . . . . . . . . . . 97
6.1 Tipodedado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.2 Estruturasdedados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.3 EstruturasdedadosemlinguagemC . . . . . . . . . . . . . . . . . . . . . 99
6.4 Variáveisetiposdedadosdeestruturas . . . . . . . . . . . . . . . . . . . 100
6.5 Vetoresdeestruturasetiposdedados . . . . . . . . . . . . . . . . . . . . 103
6.6 Estruturasaninhadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.7 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.8 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
7 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.1 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.2 FunçõespresentesnalinguagemC . . . . . . . . . . . . . . . . . . . . . . 112
7.3 Aformageraldeumafunção . . . . . . . . . . . . . . . . . . . . . . . . . . 116
7.4 Protótiposdefunções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
7.5 EscopodasVariáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
7.6 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.7 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8 Recursividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
8.1 Recursividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
8.2 Loopinfinitonarecursividade . . . . . . . . . . . . . . . . . . . . . . . . . 130
8.3 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.4 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
9 Ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.1 Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
9.2 Ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
9.3 OperaçõescomPonteiros. . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
9.4 UsodePonteiroscomVetores/Matrizes . . . . . . . . . . . . . . . . . . . 143
9.5 PonteirosGenéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
9.6 PonteiroparaPonteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
9.7 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
9.8 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10 Alocação Dinâmica de Memória . . . . . . . . . . . . . . . . . . . . . . . 151
10.1 AlocaçãoEstáticadeMemória . . . . . . . . . . . . . . . . . . . . . . . . . 152
10.2 AlocaçãoDinâmicadeMemória . . . . . . . . . . . . . . . . . . . . . . . . 152
10.3 ImplementaçãodeAlocaçãoDinâmica. . . . . . . . . . . . . . . . . . . . 153
10.4 AlocaçãoDinâmicadeMatrizes . . . . . . . . . . . . . . . . . . . . . . . . 159
10.5 ResumodaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
10.6 ExercíciosdaAula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
A Exercícios Resolvidos da Aula 1 . . . . . . . . . . . . . . . . . . . . . . . 165
B Exercícios Resolvidos da Aula 2 . . . . . . . . . . . . . . . . . . . . . . . 173
C Exercícios Resolvidos da Aula 3 . . . . . . . . . . . . . . . . . . . . . . . 189
D Exercícios Resolvidos da Aula 4 . . . . . . . . . . . . . . . . . . . . . . . 213
E Exercícios Resolvidos da Aula 5 . . . . . . . . . . . . . . . . . . . . . . . 227
F Exercícios Resolvidos da Aula 6 . . . . . . . . . . . . . . . . . . . . . . . 241
G Exercícios Resolvidos da Aula 7 . . . . . . . . . . . . . . . . . . . . . . . 255
H Exercícios Resolvidos da Aula 8 . . . . . . . . . . . . . . . . . . . . . . . 269
I Exercícios Resolvidos da Aula 9 . . . . . . . . . . . . . . . . . . . . . . . 277
J Exercícios Resolvidos da Aula 10 . . . . . . . . . . . . . . . . . . . . . . 285
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Description:Como fazer então para entrar com dados na fronteira do programa? Neste caso, deve-se utilizar a função scanf(). Similar à função printf(), a função