Introdução à Linguagem de Programação C

josecintra 475 views 87 slides Dec 21, 2021
Slide 1
Slide 1 of 87
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87

About This Presentation

Apostila do curso de Introdução à Linguagem de Programação C. Com exercícios resolvidos no GITHUB


Slide Content

Prof. José Augusto Cintra
http://www.josecintra.com/blog
Com exercícios resolvidos no GITHUB
Introdução à Linguagem de Programação
C
Revisão 2 –Julho/2020 (Quarto mês da quarentena)

Apresentação
EstecursodeIntroduçãoàLinguagemCéumacontinuaçãodo
cursoAlgoritmose&Lógicadeprogramação.
Supõe-se,portanto,queoestudantejápossuaconhecimento
teóricodasestruturasbásicasdosalgoritmos,bemcomonoções
sobreostiposeestruturasdedadoselementarescomoVetorese
Strings.
Paraummelhoraproveitamentodocursoacesseosexercícios
resolvidosnoGITHUB
2

Temporada 1
Conceitos básicos
3

Histórico
CriadaporDenisRitchienadécadade
1970parausoemumcomputadorDEC
PDP-7emUnix,alinguagemCFoi
baseadanalinguagemB,deKenneth
Thompson.
4
OsistemaUnix,assimcomoamaioriadossoftwaredebaseforam
escritosemC,queaindaéumadaslinguagensmaisutilizadasno
mundo,existindocompiladoresparapraticamentetodosos
processadoresexistentes.
NãoconfundaCeC++.Asegundaéumaextensãoorientadaa
objetosdaprimeiraefoicriadaporBjarneStroustrupem1985.

Ranking das Linguagens
Fonte: Tiobe
5

Ambientes de Desenvolvimento
ExistemdiversoscompiladoreseIDEsparaalinguagemC.Neste
cursoestouutilizandooGCC(TheGNUCompilerCollection),
pré-instaladonamaioriadasdistribuiçõesLINUX,juntamentecom
aIDEGeany.AGeanyestádisponívelparasistemasWindows
também.
Outrasopçõesopensource:
PellesC→Ambientecompletodedesenvolvimento,exclusivo
paraalinguagemCemWindows
Mingw64→GCCparaWindows
My-Dev-CPP→IDEqueincluioGCCparaWindows
Alémdisso,épossívelconfiguraramaioriadasIDEspopulares,
comooVisualStudioCode,paratrabalharcomvários
compiladoresC.
6

Estrutura Básica de um Programa C
Umarquivodecódigo-fontepadrãodalinguagemCsegueo
seguinteesqueleto:
// diretivas para o pré -processamento
// declaração de variáveis globais
main()
{
// declaração de variáveis locais
// Sequência de comandos
}
Aseguir,explicaremoscadaumadessaslinhas...

7

Diretivas de Pré-processamento
Antesdecompilaraaplicação,ocompiladorCrealizaalgumas
tarefasiniciaischamadasdeetapadepré-processamentooupré-
compilação.
Odesenvolvedorpodeentãocolocarnoiníciodocódigo-fonte
algumasinstruçõeschamadasdediretivas.
Essasdiretivaspossuemoprefixo“#”.
Nãoédoescopodessetrabalhodescrevertodasasdiretivas,masvou
citarduasdelascomoexemplo.
Adiretiva#definepermitedefinirumaabreviaturaconhecidacomo
MACRO.
Exemplo:#defineMAX100
Dessaforma,opré-processadorvaisubstituirnocódigotodasas
ocorrênciasdeMAXpor100.
Pode-sedefinirabreviaturasqueenvolvaminclusivecomandosda
linguagemC
8

A Diretiva “include”
OnúcleodalinguagemCébemcompactoesuaarquiteturaé
modularizada.Dessaforma,grandepartedasfuncionalidadessão
definidasemgruposdearquivos,osquaisrecebemonomede
BibliotecaPadrãodaLinguagemC.
ADiretivadepré-processamento#includepermiteincluiruma
bibliotecaquecontenhafunçõespré-definidasquepodemser
utilizadasnosprogramas
Vejamosasprincipais:
Funções de texto#include <string.h>
Funções matemáticas#include <math.h>
Funções padrão#include <stdlib.h>
Funções de entrada e saída#include <stdio.h>
9

Considerações Sobre o “include”
Umabibliotecaéumconjuntodefunçõesagrupadasemumarquivofonte.EmCé
comum,porémopcional,acriaçãodearquivosdecabeçalho(extensão.h).Esses
arquivosagrupamasdefiniçõesdasfunçõesutilizadasemcadapacotede
biblioteca
Adiretiva#includeéusadaparaavisaraocompiladorquevamosusaruma
bibliotecaexternanonossoprograma.Dessaforma,ocódigodessabibliotecaé
incluídonacompilaçãoeseuscomandos/funçõesserãovalidadoseficarão
disponíveisparautilização.
Exemplo:
#include<stdio.h>
#include“my_library.h”
Quandousamos<>,avisamosaocompiladorparaprocuraroarquivonapasta
padrãodasbibliotecasdoseucompilador(bibliotecasdosistema).
Quandousamos“”,avisamosaocompiladorquevamosusarumabiblioteca
definidapelousuáriooudeterceiros.Nessecaso,ocompiladorvaiprocurarno
caminhoqueestádefinidodentrodasaspas,quepodeserapastaatual.
10

Comentários
Oscomentários,emqualquerlinguagem,sãoinserçõesexplicativas
nocódigofontequesãoignoradaspelocompilador,masajudama
documentarasaplicações.Noentanto,excessodecomentáriosou
explicaçõesóbvias,maisatrapalhamqueajudam.Porissousecom
moderaçãoesabedoria.
EmC,oscomentários,sãoidentificadospor//ou/**/.
Veja:
/*Istoéumcomentário ocupandovárias
linhas*/
//Istoéumcomentáriodeumalinhasó
11

//AlôMundonalinguagemC
#include<stdio.h>
intmain()
{
printf("AlôMundo!");
}
UmprogramaemCécompostoporumconjuntodefunções.Afunçãopela
qualoprogramacomeçaaserexecutadodevechamar-semain.
Aschaves{}marcamoinícioefimdefunçõeseblocosdecódigo
Afunçãoprintf,definidaemstdio.h,imprimeumaexpressãonodispositivo
padrão(TeladoMonitor).
AsinstruçõesCsãosensíveisaocaso.PRINTFédiferentedeprintf.
Todososcomandosdevemterminarcompontoevirgula(;).
UmarquivodecódigodevepossuiraextensãoC.Nesseexemplo,alo.c
Alô Mundo!
12
Comentário
Inclusão da biblioteca de IO
Função principal
Imprime a mensagem
Demarca o início da função principal
Demarca o fim da função principal

Compilando...
NaIDEGeanyemLinuxouWindows,oprocessodecompilação
consistesimplesmenteemselecionaraopçãoBuild(Construir)no
menuedepoisaopçãoExecute.
ParaquemestáusandoGCCnoWindowsequercompilar“na
mão”:
gccalo.c–oalo.exe
13

Tipos de Dados
•O modificador UNSIGNED define umnúmero positivo (sem faixa negativa)
•O tamanho do tipo intdepende do processador 14
Tipo Tamanho Faixa de valores
char 1 byte -128 até127
unsignedchar 1 byte 0 até 255
signedchar 1 byte -128 até 127
int 2 ou 4 bytes-32,768 até32,767 ou-2,147,483,648 até2,147,483,647
unsignedint 2 ou 4 bytes0 até65,535 ou0 até4,294,967,295
short 2 bytes -32,768 até 32,767
unsignedshort 2 bytes 0 até 65,535
long 8 bytes -9223372036854775808 até 9223372036854775807
unsignedlong 8 bytes 0 até 18446744073709551615 -6 decimal places
float 4 byte 1.2E-38 até 3.4E+38 -6 decimal places
double 8 byte 2.3E-308 até 1.7E+308 -15 decimal places
longdouble 10 byte 3.4E-4932 até 1.1E+4932 -19 decimal places

Declaração de variáveis
DiferentementedoPortugol,avariáveisemCpodemser
declaradasemqualquerpontodoprograma.Nãoexisteumaárea
VARparadeclarações.
Osnomesdasvariáveisdevemconterapenasletras,dígitosouo
underscore.Edeveminiciarcomletraouunderscore.
Cdiferencialetrasmaiúsculasdeminúsculas!
Deinício,trabalharemoscomostiposabaixo:
Portugol C
inteiro int
real float
15

Declaração de variáveis
Em Portugol
var
media : real
idade : inteiro
Na Linguagem C
floatmedia;
intidade;
16
Obs:Oprocessodedeclararumavariávelconsisteemdefinirseu
nomeetipodedado.Ocompiladorentãoiráreservarumespaço
namemóriadeacordocomtipodavariável.
Oprocessodeinicializaçãoéoutraetapaeconsisteematribuirum
valorinicialparaavariáveldeclarada.
OcompiladorC,diferentedoVisuALG,nãoinicializaasvariáveis
comnenhumvalor.Dessaformaasvariáveisdeclaradasno
exemploacimaconterãooquechamamosdeLIXOemseu
conteúdo.Ouseja,CUIDADO,ainicializaçãoprecisaserfeita
peloprogramador

Operação de Atribuição
Aoperaçãodeatribuiçãoconsisteemfornecerumvalorparaa
variável.Comovimos,adeclaraçãoapenasreservaumespaçoem
memória,sematribuirnenhumvalor.Paraatribuirumvalorparaa
variável,usamosooperadordeatribuição
OoperadordeatribuiçãodoCéosinaldeigual(=)queseriao
equivalenteao<-doPortugol.
Exemplo:
intidade, nova_idade;
idade = 18;
nova_idade=nova_idade+1;
Ocorreráumerro,casoovaloratribuídosejadeumtipo
diferentedodeclarado.
Podemosdeclarareinicializaravariávelnomesmocomando:
intidade=18
17

Operadores de atribuição
Equivale a x = x % yx %= y%=
Equivale a x = x / yx /= y /=
Equivale a x = x * yx *= y *=
Equivale a x = x –yx -= y-=
Equivale a x = x + yx += y +=
Atribui o valor de y a xx = y=
ComentárioExemploOperador
18

Entrada de Dados
Oquechamamosaquideentradadedadosseriaaatribuiçãode
umvalorparaavariávelpeloprópriousuáriodoprogramaem
tempodeexecução.Paraissousaremosafunção“scanf”queseráo
equivalenteàfunção“leia”doPortugol.
scanf("formatos",&var1,&var2,...)
Oprimeiroparâmetrodafunçãoscanf,chamadodestringde
formatodescrevecomodeveserconvertidaasequênciade
caracteresdaentrada.Oprefixo“&”nafrentedosnomesda
variáveiséumoperadordeendereçoeéobrigatório.Veremosmais
detalhessobreesseoperadorquandofalarmosdeponteiros
De início, usaremos os seguintes formatos
“%d” →Números inteiro (int)
“%f” →Números de ponto flutuante( float)
19

Entrada de Dados
Em Portugol
Para as variáveis
N1 do tipo inteiro e
N2 do tipo real
leia(N1)
leia(N2)
leia(N1,N2)
Na Linguagem C...
Para as variáveis
n1 do tipo inte
n2 do tipo float
scanf("%d",&n1);
scanf("%f",&n2);
scanf(“%d%f”,&n1,&n2);
20

Saída de dados
Paraexibirumaexpressãonodispositivopadrão(telado
computador)usaremosafunçãoprintfqueseráoequivalenteà
funçãoescrevadoPortugol.
printf("formatos", var1, var2,...)
Os formatos que usaremos, por enquanto são:
“%d” →inteiro (int)
“%f” →Ponto Flutuante (float)
Obs: Veja que as variáveis do printfnão são precedidas de “&”.
21

Saída de Dados
Em Portugol
Para as variáveis
N1 do tipo inteiro e
N2 do tipo real
escreva(N1)
escreva(N2)
escreva(N1,N2)
Na Linguagem C...
Para as variáveis
N1 do tipo inte
N2 do tipo float
printf("%d“,n1);
printf("%f“,n2);
printf(“%d%f”,n1,n2);
22

Considerações sobre a Função “printf”
Comovimos,afunçãoprintféusadaparaimprimirqualquertipo
deexpressãoenvolvendovariáveiseconstantesliteraiseaceita
algunscaracteresdecontroleparaformatarasaída.Asconstantes
literais,comovimosnaaplicaçãoAlôMundo,devemestarentre
aspasduplasepodemincluircaracteresESCAPEdecontroleque
devemserprecedidosdosinal“\”.
Osprincipaissão:
\n–NewLine=Pulaumalinha
\t-Tabulaçãohorizontal=EquivaleàteclaTAB
Osinalde%,comovimos,éparaformataçãodevariáveis
Exemplos:
printf(“AlôMundo\n”);//Imprimeafraseepulalinha
printf(“Ovalordavariávelxéiguala%d”,x);
Nesseexemplo,vejaqueavariávelxnãoestáentreaspasevaiser
impressanaposiçãoondeapareceocódigo%d(inteiros)
23

Otipodedadochar,comovimosrepresentaumúnicocaractere
detexto,masinternamentesãotratadoscomoumtipointeirode
umbytee,inclusive,podemosrealizaroperaçõesaritméticascom
eles.
Exemplo:
charc='A’;
c++;
printf("%c\n",c);
printf("%d\n",c);
Iráimprimir:
B
66
O tipo “char”
24
Veja que valores do tipo char devem
ser delimitados por aspas simples
Imprimindo a variável com o
formato de caracteres
Imprimindo a mesma variável
com o formato de inteiros
Código ASC da letra ‘B’
Somando 1 ao caractere ‘A’

Operações e Operadores matemáticos
Decrementa em 1 o valor de xx----
Incrementa em 1 o valor de xx++++
Resto da divisão de x por yx % y %
Divide x por y x / y /
Multiplica x e yx * y*
Subtrai y de xx –y -
Soma x e yx + y+
ComentárioExemploOperador
25

Exemplo de um Programa C Típico
// Cálculo da média entre 2 números informados pelo usuário
#include <stdio.h>
main()
{
//Declaração de variáveis
floatnota1, nota2, media;
//Entrada de dados
printf("Digite primeira nota: ");
scanf("%f" ,&nota1);
printf("Digite segunda nota: ");
scanf("%f" ,&nota2);
//Processamento
media = (nota1 + nota2) / 2;
// Saída de dados
printf(“A média é igual a %f", media);
}
26
Confira mais exercícios resolvidos no GITHUB

Temporada 2
Estruturas de Decisão
27

Estruturas de Decisão
28
Sãoestruturasque,dadaaavaliaçãodeumaexpressãológica
(condição),permitemaescolhadeumfluxodeinstruçõesaser
executado
Nomáximosópodemexistirdoisfluxosdeinstruções:
Um,seacondiçãoforVerdadeira,eoutroseacondiçãoforFalsa
Paraavaliarasexpressões,podemosusarosoperadoresrelacionais
eosoperadoreslógicos

Operadores Relacionais (Comparação)
29
O conteúdo de x é maior que o de y?x > y>
O conteúdo de x é menor que o de y?x < y <
O conteúdo de x é maior ou igual ao de y?x >= y >=
O conteúdo de x é menor ou igual ao de y?x <= y<=
O conteúdo de x é diferente do de y?x != y !=
O conteúdo de x é igual ao de y?x == y==
SignificadoExemploOperador
Importante:Nãoconfundaooperadordeatribuição(=)como
operadorcomparaçãoporigualdade(==)

&&(Elógico):retornaverdadeiroseambososoperandossão
verdadeirosefalsonosdemaiscasos.
Exemplo:if(a>2&&b<3).
||(OUlógico):retornaverdadeirosepelomenosumdos
operandoséverdadeiro,efalsoseambossãofalsos.
Exemplo:if(a>2||b<3).
!(NÃOlógico):usadacomapenasumoperando.Retorna
verdadeiroseooperandoéfalsoouvice-versa.
Exemplo:if(!(a>2)).
As expressões lógicas em C retornam:
0 = Falso
Qualquer outro valor = Verdadeiro.
Operadores Lógicos
30

F ou F →FF e F →F
F ou V →VF e V →F
Não V →FV ou F →VV e F →F
Não V →FV ou V →VV e V →V
Tabela NÃOTabela OUTabela E
Tabela Verdade
31

Em portugol, o
comando de decisão
tem a seguinte
sintaxe:
se <condição> entao
<bloco de comandos>
senao
<bloco de comandos>
fimse
Estrutura de Decisão
Na linguagem C a
sintaxe é esta:
if(<condiçao>) {
<bloco de comandos>
}
else{
<bloco de comandos>
}
32

Observações:
EmC,acondiçãodeveestarentreparênteses;
Nãoexisteacláusulaentaooufimse;
Oblocodecomandosdeveestarentrechaves{}(amenosque
sejaumúnicocomando);
Acláusulaelseéopcional;
Aexpressãoéavaliada.Seelaforverdadeira,oblocoifé
executado.Casocontrário,oblocodoelse(seexistir)é
executado;
Lembre-se:Apenasocódigoassociadoaoifouelseserá
executado,nuncaambos.
Estrutura de Decisão
33

// Ler uma idade e determinar se é maior de idade
#include <stdio.h>
main (){
int idade;
printf("Digitea idadeda pessoa: ");
scanf("%d", &idade);
if (idade>= 18) {
printf("Pessoa é maiorde idade.\n");
} else {
printf("Pessoa é menorde idade.\n");
}
}
Exemplo “if-else”
34

Aestruturaif-else-ifemCpermiteselecionarentremaisdeduasAlternativas
dedecisão.
Exemplo:Determinarseumnúmeroépositivo,negativoouzero(três
alternativas):
#include <stdio.h>
int main ()
{
int num;
printf("Digiteum numero: ");
scanf("%d",&num);
if (num>0) {
printf("O numeroe Positivo");
} else if (num == 0) {
printf("O numeroe iguala 0");
} else {
printf("O numeroe negativo");
}
}
Exemplo “if-else-if”
35
Confira mais exercícios resolvidos no GITHUB

É uma forma de reduzir a complexidade de decisões encadeadas.
Oconteúdodeumavariávelécomparadosucessivamentecom
umvalorconstante,ecasoacomparaçãosejaverdadeira,um
determinadocomandoéexecutado.
switch(variável){
caseconstante1:
Instruções;
break;
caseconstante2:
Instruções;
break;
default
Instruções;
}
Estrutura de Decisão “switch case”
36

#include<stdio.h>
main(){
intvalor;
printf("Digiteumvalorde1a7:");
scanf("%d",&valor);
switch(valor){
case1:
case7:
printf("Fimdesemana\n");
break;
case2...5:
printf("Diadesemana\n");
break;
default:
printf("Valorinvalido!\n");
}
Exemplo “switch case”
37

Temporada 3
Estruturas de Repetição
38

Sãoestruturasquepermitemexecutarumtrechodecódigovárias
vezesdeacordocomumacondiçãodeparada.
NalinguagemCpodemosescolherentretrêstiposdeestruturasde
repetição:
while(avaliaacondiçãonoiníciodolaço)
dowhile(avaliaacondiçãonofimdolaço)
for(usadaprincipalmenteemcontagens)
Comoveremosaseguir...
Estruturas de Repetição
39

while(condição){
<blocos de comandos>
}
Nãoesquecerdosparênteses;
Oblocodecomandosseráexecutadoenquantoa
condiçãoforverdadeira;
Oprogramadordevecuidarparaqueacondiçãofique
falsaemalgummomento,docontráriooprograma
ficaindefinidamenterepetindooscomandos.
Estrutura “while”
40

Exemplo “while”
//Exibir números de 1 a 10 usando while
#include <stdio.h>
main()
{
intcont= 1 ;
while(cont<= 10) {
printf("%d \n", cont);
cont++;
}
}
Pergunta:Oquevaiacontecersevocêinicializaravariávelcont
comovalor11?
41

do {
<blocos de comandos>
} while(condição);
•Nãoesquecerdos parênteses;
•Oscomandosserãoexecutadospelomenosumavez. E
continuarãosendoexecutadosenquantoa condiçãofor
verdadeira;
•O programadordevecuidarpara que a condiçãofique falsa em
algummomento, do contrárioo programaficaindefinidamente
repetindooscomandos.
Estrutura “do while”
42

Exemplo “do while”
//Exibir números de 1 a 10 usando while
#include <stdio.h>
main()
{
intcont= 1 ;
do {
printf("%d \n", cont);
cont++;
} while(cont<=10)
}
Pergunta:Oquevaiacontecersevocêinicializaravariávelcont
comovalor11?
43

for (var=inicio; condição; incremento){
<bloco de comandos>
}
Nãoesquecerdos parênteses;
Oscomandosserãoexecutadosenquantoa condiçãofor
verdadeira
O incrementooudecrementoé executadoautomaticamente
apósa execuçãodos comandos
Estrutura “for”
44

//Exibir números de 1 a 10 usando FOR
#include <stdio.h>
main()
{
intcont;
for (cont= 1; cont<= 10; cont++ )
{
printf("%d \n", cont);
}
}
Exemplo “for”
45

E para forçaro términoda repetição? Use um break.
Exemplo: Saída:
1
2
3
4
5
Apóso FOR: 5
#include <stdio.h>
#include <stdlib.h>
main(){
int i;
for (i=1; i<=10; i=i+1){
printf("%d\n",i);
if (i==5) break;
}
printf(“Apóso FOR: %d\n",i);
}
Comando “break”
46
Confira mais exercícios resolvidos no GITHUB

Temporada 3
Estruturas de Dados Básicas
47

Asestruturasdedadosbásicas,disponibilizadasnativamentena
linguagemCsãoostiposdedadoscompostos,quesãoformados
apartirdostiposdedadosprimitivos.
SãodivididosemHomogêneos,quandocompostosdeapenasum
tipoeHeterogêneos,comtiposdedadosdiferentes:
Homogêneos:Arrays(VetoreseMatrizes)eStrings(Cadeiasde
caracteres).
Heterogêneos:Structs(Registros)eUnions(Nãoabordada
nessecurso).
Estruturas de Dados Básicas
48

Vetores (Array)
Umvetor(=arraydeumadimensão)éumaestruturadedados
quearmazenaumasequênciadevalores(variáveis),todosdo
mesmotipo,emposiçõesconsecutivasdamemória.
Cadaelementodovetoréidentificadoporsuaposiçãodentrodo
vetor(índicedovetor).
SãoconhecidoscomoEstruturasdeDadosUnidimensionais
Homogêneas.Unidimensionais,poisformaumasequência
lineardevaloresconsecutivos.Homogêneas,poistodosos
valoressãodomesmotipo
49

Vetores (Arrays)
Aquantidadedeelementos(tamanhodovetor)eseutipodevem
serdefinidasnomomentodadeclaraçãoesãoimutáveis;
Oselementospossuemordinalidade,cadaumpodeser
identificadopelasuaposição(índicedovetor);
EmC,osíndicesdosvetorescomeçamem0(zero)evãoaté
(tamanho-1)
Cadaelementodovetor,pormeiodoseuíndice,podeser
acessadocomoumavariávelindividual.
Novetorabaixodenome“idades”,ovalordoelementodeíndice
4é81.
idades
Índices
Valores
50
17332167811045297998
0123456789

Sintaxe:<tipo> <nome> [ tamanho];
Exemplo:
intvet[5];
vet[0] = 3;
vet[1] = 5;
vet[2] = 13;
vet[3] = 10;
vet[4] = 5;
Declaração e Inicialização de Vetores
51
EndereçoConteúdoÍndicevet
0022FF74 3 0vet[0]
0022FF76 5 1vet[1]
0022FF78 13 2vet[2]
0022FF80 10 3vet[3]
0022FF82 5 4vet[4]
Localização na memória
Nome do vetor
Cadauma
das variáveis
identificadas
peloíndice
Declaração
Inicializaçãode cadaelementodo vetor.
Vejaque o índicevaide 0 atétamanho-1
No exemplo acima,
declaramos e
inicializamos um vetor de
nome vetcom
capacidade para 5
números inteiros. Outra
forma rápida de fazer
isso, seria:
intvet[] = {3,5,13,10,5};

Leitura e Escrita de Vetores
Podemsermanipuladoscomovariáveiscomuns,bastandoindicar
oíndice.
Exemplo:
intvet[5];
printf("Digite o valor do primeiro elemento: ");
scanf("%d",&vet[0]);
printf("O valor do primeiro elemento é %d", vet[0]);
52

#include <stdio.h>
intmain()
{
intvet[10];
inti = 0;
for(i = 0; i < 5; i++) {
vet[i] = i * 2;
printf(“índice = %d e valor = %d \n",i,vet[i]);
}
} Na tela: Na memória:
Resultado:
Exemplo de Algoritmo com Vetor
53
indice= 0 e valor = 0
indice= 1 e valor = 2
indice= 2 e valor = 4
indice= 3 e valor = 6
indice= 4 e valor = 8
Este exemplo cria um vetor inteiro com 5 elementos
e inicializa cada elemento com o valor do dobro de
seu próprio índice, usando uma estrutura for.
Repetição variando i de 0 até 4
01468
01234
Confira mais exercícios resolvidos no GITHUB

Deformaabstrata,Umastringéumtipodedadoquerepresenta
umtexto,umapalavraoufrasequalquer,ouseja,umconjuntode
caracteres.
AlinguagemCnãopossuiumtipoespecíficoparastrings.Ao
invésdissoumastringéumvetordecaracteres(arrayofchars)
terminadapelocaracterenulo(\0).
Porexemplo:Astring“ALGORITMO”seriarepresentadana
memóriacomo:
Strings
54
ALGORITMO\0
0123456789Índices
String
Terminador

AsstringsemCdevemserinicializadasnadeclaração,de
modosimilaraosvetores,deacordocomosexemplos:
charfrase[]=“minhastring”;
OU
charfrase[13]=“minhastring”;
OU
charfrase[20]=“minhastring”;
OU
charfrase[6]={‘t’,‘e’,‘s’,‘t’,‘e’,0};
AoperaçãoabaixoNÃOépermitida:
charfrase[];
frase=“minhastring”;
Declaração e Inicialização de Strings
55

Paralereimprimirstringspodemosusarasfunçõesprintfe
scanfcomocódigodeformatação“%s”.
Exemplo:
#include<stdio.h>
main(){
charnome[50];
printf("Digiteseunome:");
scanf(“%s”,&nome);
printf("Olá%s!",nome);
}
Leitura e Impressão de Strings
56
Cuidado com a função scanfcom strings.
Essa função não verifica se a entrada
ultrapassou o tamanho da string.
Uma alternativa para isso é a função fgets
que toma esse cuidado.

AbibliotecapadrãodalinguagemC,atravésdoheaderstring.h,
ofereceumasériedefunçõesparamanipulaçãodestringsque.
Citaremos,aseguirasprincipais:
Função: strlen
Protótipo:int strlen(char *string)
Descrição:Retornaonúmerodecaracteresdeumastring(excetoo
caracteredefimdestring).
Exemplo:
char nome[] = “José Cintra”;
printf(“O nome possui %d letras”, strlen(nome));
Manipulação de Strings
57

Função: strcpy
Protótipo:
char *strcpy(char *string1, char *string2)
Descrição:
Copia o conteúdo de string2em string1
Exemplo:
char str1[10];
char str2[] = “Palavra”;
strcpy(str1, str2); // str1 também contém “Palavra”
Manipulação de Strings
58

Função: strcat
Protótipo:
int strcmp(char *string1, char *string2)
Descrição: Compara os conteúdos de string1 e string2 e retorna:
= 0 se string1 = string2
< 0 se string1 < string2
> 0 se string1 > string2
Manipulação de Strings
59
Exemplo:
char nome1[] = “José da Silva”
char nome2[] = “José Silva”;
if(strcmp(nome1, nome2) == 0) {
printf(“Nomes são iguais”);
} else{
printf(“Nomes são diferentes);
}

Função: strcmp
Protótipo:
strcat(char *str_destino, char str_origem)
Descrição: Concatena os conteúdos de string1 e string2
Exemplo:
char primeiro_nome[] = “José”
char sobrenome[] = “da Silva”;
char nome[30] = “”;
strcat(nome, primeiro_nome);
strcat(nome, sobrenome);
printf(“%s\n”, nome);
Manipulação de Strings
60

/* Concatena 2 stringsinformadas pelo usuário
e exibe a stringresultante com o seu tamanho */
#include <stdio.h>
#include <string.h>
main() {
char str1[20],str2[20],str3[40];
inttamanho ;
printf("Informe a string1: "); scanf("%s",&str1);
printf("Informe a string2: "); scanf("%s",&str2);
strcat( str3, str1); strcat( str3, str2);
printf("%s\n", str3 );
tamanho = strlen(str3);
printf("Tamanho: %d\n", tamanho );
}
Strings-Exemplo
61
Confira mais exercícios resolvidos no GITHUB

Structssãoestruturasdedadoscompostasheterogêneasformadas
porumconjuntodevariáveis,possivelmente,detiposdiferentes,
masrelacionadasentresi.
Sãomuitoparecidascomregistrosemtabelasdebancosdedados
e,porissoasvariáveisqueascompõemsãocomumentechamadas
decampos.
Sintaxe:
struct<identificador>{
<listagemdostiposecampos>;
};
Paradefiniravariáveldotipostruct:
struct<identificador><variavel>;
Structs
62

Umastructpararepresentarumapessoapoderiapossuiraseguinte
definição:
structregistro_pessoa {
char[50]nome;
floatpeso;
floataltura;
};
Paracriarumavariáveldessetipo,fazemos:
structregistro_pessoa joao;
Dessaforma,oscampospodemseracessadosindividualmente,por
exemplo,daseguinteforma:
joao.peso=72.5;
printf(“%d”,joao.peso);
Structs
63

#include<stdio.h>
#include<string.h>
main(){
structregistro_pessoa {
charnome[50];
floatpeso;
floataltura;
};
structregistro_pessoa joao;
strcpy(joao.nome,"JoséCintra");
joao.peso=72.5;
joao.altura=1.68;
printf("Nome:%s\n",joao.nome);
printf("Peso:%f\n",joao.peso);
printf("Altura:%f\n",joao.altura);
}
StructsExemplo
64

Structssãoúteisquandoutilizadasemconjuntocomvetorespara
utilizaçãoemarquivosoubancosdedados:
structregistro_pessoa pessoas[10];
strcpy(pessoas[0].nome,"JoséCintra");
pessoas[0].peso=72.5;
pessoas[0].altura=1.68;
printf("Nome:%s\n",pessoas[0].nome);
printf("Peso:%f\n",pessoas[0].peso);
printf("Altura:%f\n",pessoas[0].altura);
Nesseexemploatribuímosvaloresapenasparaoprimeiroelemento
dovetor.Oidealseriatrabalharcomestruturasderepetiçãopara
manipularumgrandenúmerosderegistros.
Vetores de Structs
65
Criando um vetorde
nome pessoascom
10 elementos do tipo
struct

Ponteirosnãosãoestruturasdedadoscompostas,massão
importantíssímosparadesenvolvermosprogramasprofissionaisem
C.Vamosdarumavisãogeralsobreelesnessecurso.
Comosabemos,todavariáveléarmazenadaemumlocalde
memóriaetodolocaldememóriatemumendereçobemdefinido.
Umponteiroéumavariávelcujovaloréoendereçodeoutra
variável,istoé,oendereçodiretodalocalizaçãodamemória.
ExistemdoisoperadoresemCparamanipularmosponteirose
endereçosdememória:
Ponteiros
66
OperadorNome Objetivo
* “Derreferência”
Retorna o valor armazenado em um endereço da
memória
& ReferênciaRetorna o endereço de memória de uma variável

Ooperadorde“derreferência”podeserusadotambémpara
declaramosumponteiro,deacordocomoseguinteexemplo:
#include<stdio.h>
intmain(){
intvar=5;//Declaraçãodeumavariávelsimples
int*ip;//Aquideclaramosumponteiroparaint
ip=&var;//Atribuímosparaipoendereçodavariávelvar
printf("Endereçodavariávelvar:%x\n",&var);
printf("Endereçoarmazenadonaponteiroip:%x\n",ip);
printf("Valorarmazenadonoponteiroip:%d\n",*ip);
printf("Valorarmazenadonavariávelvar:%d\n",var);
}
Endereçodavariávelvar:61fe14
Resultado:Endereçoarmazenadonoponteiroip:61fe14
Valorarmazenadonoponteiroip:5
Valorarmazenadonavariávelvar:5
Ponteiros Exemplo
67
%x é o formato para hexadecimal
em minúsculas

Temporada 3
Funções
68

Funções
Comovimosnaapostiladealgoritmos,umafunçãoéumatécnica
demodularizaçãoqueconsisteemencapsularumblocode
códigoquepossuiumadeterminadafuncionalidadedetalmodo
quepossaserreutilizadoporoutrosmódulosdosistema.
UmafunçãoCpossuiasseguintescaracterísticas:
Possuiumnome
Pode,opcionalmente,receberparâmetrosdeentradadediversos
tipos
Retornaumúnicovalordeumdeterminadotipo
Podeserdeclaradadentrodoprópriomóduloqueachamouou
ficaremmódulosseparados
Podeserusadaemexpressões
Suainterfacepodeserdescritasemprotótipos
69

Funções
UmafunçãoemCédefinidaatravésdaseguintesintaxe:
<tipo_retorno> <nome_funcao>( [lista_parametros]) {
[corpoda função]
[return valor_retorno]
}
tipo_retorno→Éotipodedadoretornadopelafunção.Casoa
funçãonãoretornevalores,otiposerávoid.
nome_função→Éonomedafunçãoquedeveseguirasregrasde
nomeaçãodeidentificadores.
lista_parâmetros→consistenadeclaraçãodosparâmetrosde
entradarecebidospelafunção.
return→Determinaovalorqueseráretornadoparaomódulo
chamador,quandootipodoretornoédiferentevoid.
70

Exemplodeumafunçãosemparâmetrosdeentradanemvaloresde
retorno.Essafunçãoimprimeumasterisconatela
#include <stdio.h>
void imprime() {
printf("*");
}
main () {
imprime();
}
Funções -Exemplos
71
Função sem retorno (void).
Função sem parâmetros de entrada.
Os parênteses são obrigatórios.
Chamada da função no código principal.
A função será executada e o programa
prosseguirá
Vai imprimir:
*

Comamesmafunçãodefinidaanteriormente,vamosagorachamá-
la5vezespeloprogramaprincipal:
#include<stdio.h>
void imprime() {
printf("*");
}
main () {
int i;
for(i= 1; i<= 5; i++){
imprime();
}
}
Funções -Exemplos
72
Vai imprimir:
*****

Vamosagorainverteralógica.Alteramosafunçãoparaimprimir5
vezesoasterisco.Afunçãoseráchamadaapenas1vezpelo
programaprincipal:
#include<stdio.h>
void imprime() {
int i;
for(i= 1; i<= 5; i++){
printf(“*”);
}
}
main () {
imprime();
}
Funções -Exemplos
73
Vai imprimir:
*****

Agoraalteramosafunçãoecolocamosumparâmetrodeentrada
paraqueelaimprimaoasteriscoonúmerodevezessolicitado:
#include<stdio.h>
voidimprime(intvezes){
inti;
for(i=1;i<=vezes;i++){
printf("*");
}
}
main(){
imprime(3);
}
Funções -Exemplos
74
Vai imprimir:
***
O parâmetro inteiro vezes
será usado na repetição for
para determinar o número de
vezes que o texto será impresso
Aqui chamamos a função imprime passando
o valor 3que será atribuído para o parâmetro
vezesda função

Dessavezalteramosafunçãoecolocamosumsegundoparâmetro
deentradaparaqueelaimprimaqualquercaractereenãomaissóo
asterisco:
#include<stdio.h>
voidimprime(intvezes,charchr){
inti;
for(i=1;i<=vezes;i++){
printf("%c",chr);
}
}
main(){
imprime(7,'@');
}
Funções -Exemplos
75
Vai imprimir:
@@@@@@@

Comovimosatéagora,quandotrabalhamoscomfunçõesexistem
doismomentosdistintos:
Adefiniçãodafunção(suaassinatura).
Achamadaàfunçãoquepodesernafunçãomainouqualquer
outrafunçãodosistema.
Nadefiniçãodafunçãopodemosespecificarosparâmetrosque
serãousadosnocorpodafunção
NachamadadafunçãoPodemospassarosvaloresparaos
parâmetros.Essesvaloresrecebemonomedeargumentos.
Argumentoseparâmetrosnãoprecisampossuiromesmonome
(identificador)masprecisamserdomesmotipo.
Vamosveraseguirumexemplodefunçãoquepossuiparâmetros
deentradaevalorderetornoepoderemosentendermelhoros
conceitosaquiapresentados.
Funções –Parâmetros e Argumentos
76

#include<stdio.h>
//Funçãoquesomadoisnúmerospassadoscomoparâmetros
floatsoma(floatn1,floatn2){
floatresultado=n1+n2;
returnresultado;
}
main(){
floatv1,v2,r;
printf("Informeoprimeironúmero:");
scanf("%f",&v1);
printf("Informeosegundonúmero:");
scanf("%f",&v2);
r=soma(v1,v2);
printf("asomadosnúmeros%fe%fé:%f",v1,v2,r);
}
Funções –Parâmetro e Argumentos
77
Aqui definimos uma função de nome soma
com 2 parâmetros do tipo floate retorno do
tipo float.
No corpo da função é calculada a soma
dos parâmetros e o resultado é retornado
para a função main.
Na chamada da função são passados 2 argumentos
do tipo float:v1é atribuído ao parâmetro n1e
v2ao parâmetro n1
O valor de retorno da função soma é atribuído à
variávelr

Existemduasformasdepassarmososvaloresdosargumentospara
osparâmetrosdasfunções:
Passagemporvalor:ovalordasvariáveisdosargumentosnãose
alteram,mesmoqueosparâmetrossejammodificadonafunção.
Passagemporreferência:Osvaloresdasvariáveisdos
parâmetrossrefletemnosargumentos.
NalinguagemC,asvariáveispassadascomoargumentosparaas
funçõessãosemprepassadosporvalore,portanto,seusvalores
nãosãoalteradosdentrodafunção.
Parapassamosvaloresporreferência,Podemosusarooperadores
dereferência(&)quevimosnoestudodosponteiros.Dessaforma
passamosoendereçodavariável.
Passagem por Valor ou Referência
78

#include<stdio.h>
voidf(inta,int*b){
a=2;
*b=2;
printf("%d\n",a);//Imprime:2
printf("%d\n",*b);//Imprime:2
}
main(){
intc=1;
intd=1;
f(c,&d);
printf("%d\n",c);Imprime:1
printf("%d\n",d);Imprime:2
}
Passagem por Valor ou Referência
79
Neste exemplo, o parâmetro a é passado
por valore o parâmetro bpor referência.
Veja que o valor da variável dfoi alterado
pela função f() pois foi passado por referência
O mesmo não aconteceu com a variável
cque foi passada por valor.

Oescopodevariáveistemavercomoprincípiodoocultamento
deinformaçõesepermitequeasvariáveissópossamseracessadas
dedentrodafunçãoqueascriou.Issoémaisseguro,poisnão
permitequemódulosexternosinterfiramnalógicadasfunções.
AlinguagemCpossuiosseguintesescoposdevariáveis:
Global:Sãoasvariáveisdeclaradasforadequalquerfunçãoe
sãoacessíveisemtodooSistema.Otempodevidadessas
variáveisseencerraquandooprogramaseencerra.
Local:Sãovariáveisdeclaradasdentrodeumafunçãooubloco
deCódigoesãovistassomentenafunção/blocoemqueforam
declaradas.Otempodevidadessasvariáveisseencerraquando
afunção/blocoseencerra
Estática:Variáveislocaisquemantémseusvaloresentreas
chamadas.Sãoidentificadaspelomodificadorstatic.Tempode
vida:“Global”.
Escopo de Variáveis e Tempo de Vida
80

#include<stdio.h>
inta=1;intb=1;
voidf(){
intc=2;
staticintd=3;
printf("%d\n",c);
printf("%d\n",d);
c++;d++;
}
main(){
inta=4;inte=5;
printf("%d\n",a);
printf("%d\n",b);
//printf("%d\n",c);
//printf("%d\n",d);
printf("%d\n",e);
f();f();
}
Escopo de Variáveis Exemplo
81
Variáveis ae bsão globais, visíveis em todo módulo
Variável cé local e visível somente na função f()
A variável dé local e estática, visível somente
na função f()
Somente a variável d vai ser incrementada, pois
é estática. A variável cvai manter sempre o
mesmo valor
As variáveis ae esão locais,
As variáveis ce dnão são acessíveis aqui.
Vai ocorrer um erro. Por isso estão comentados
O valor da variável local avai prevalecer
sobre a variável global a
As chamadas para a função f() vão mostrar que
somente a variável dserá incrementada

Outrasconsiderações:
Parâmetrosdefunçõessãovariáveislocais.
Variáveiscriadasdentrodeblocosdecódigossãolocais.
Exemplo:
#include<stdio.h>
intmain(intargc,char**argv)
{
inti=1;
for(inti=0;i<=10;i++){
printf("%d\n",i);//Ovalorfinaldavariávelié11
}
printf("%d\n",i);//Imprime1
return0;
}
Escopo de Variáveis e Tempo de Vida
82
Nesse caso, a variável i declarada
na função mainé diferente da variável i
declarada dentro do bloco for
O tempo de vida da variável ido bloco
termina quando termina o for

Vetoressãopassados,porpadrão,porreferência.Vamosmodificar
afunçãoimprimeparareceberumvetordecaracteres(uma
string)aoinvésdeumchar:
voidimprime(intvezes,char*texto){
inti;
for(i=1;i<=vezes;i++){
printf(texto);
}
}
main(){
charstr[]=“abc";
imprime(2,str);
}
Passando Vetores como Parâmetros
83
Vai imprimir:
abcabc

Considerações Sobre a Função “main”
Afunçãomainéumafunçãocomotodasasoutras,mastemum
comportamentoespecial.Elaéobrigatóriaemprogramas
executáveiseindicamopontodepartidaondeaexecuçãodo
programavaiiniciar.
Quandoafunçãomainseencerra,oprogramatambémseencerrae
ovalorderetornodemainserárecebidopelosistemaoperacional
indicandoseoprogramaexecutoucomsucessoounão.Um
retorno0(zero)indicaqueoprogramafoiexecutadosemerros.
Elapodereceberparâmetrosdeentradaquerepresentamos
parâmetrosdalinhadecomandopassadosquandooprogramafoi
executado.Umaassinaturacompletadafunçãomainentãoseria:
intmain(intargc,char**argv)
E, no corpo da função main, deve haver um comando de retorno:
return0;
84

Exercícios Propostos
1)Umsistemadeequaçõeslinearesdotipo: podeserresolvido
segundo:
EscrevaumalgoritmoemCquelêoscoeficientesa,b,c,d,eefecalculedexey.
2)EscrevaumalgoritmoemCqueleia3númerosinteirosemostreomaiordeles.
3) Leia um número N e escreva os N número maiores que N.
Exemplo: N = 4 →escrever: 5,6,7,8
4) Leia um vetor com 5 números inteiros e um número inteiro N. Calcule o produto
escalar entre o número N e o vetor.
5)EscrevaumafunçãoemCparaverificarseumapalavrainformadapelousuárioé
palíndromaounão.
85

FIM
Obrigado!
NestecursofizemosumapequenaintroduçãoàlinguagemCcomo
objetivodedarcondiçõesaoalunoparaseaprofundarnosestudose
nosassuntosnãoabordadosaqui,taiscomo:
Aritméticadeponteiros
Headerseprotótiposdefunções
Estruturasdedadoscomplexas
Manipulaçãodalinhadecomando
Etc...
Vejaabibliografiaaseguirparamaisinformações.
86

Saiba mais...
Links
https://www.tutorialspoint.com/cprogramming/index.htm
https://www.learn-c.org/
https://www.pucsp.br/~so-comp/cursoc/index.html
https://www.it.uc3m.es/pbasanta/asng/course_notes/ctut.pdf
Livros
LinguagemC,porLuisDamas
C:ComoProgramar,porDeitel
Exercíciosresolvidos
GitHub
http://www.josecintra.com/blog
87