Apostila do curso de Introdução à Linguagem de Programação C. Com exercícios resolvidos no GITHUB
Size: 2.28 MB
Language: pt
Added: Dec 21, 2021
Slides: 87 pages
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)
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
//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
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
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
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" ,¬a1);
printf("Digite segunda nota: ");
scanf("%f" ,¬a2);
//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
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
// 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
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
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
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ã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
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
#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
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