Sunteți pe pagina 1din 258

Centro de Formao Profissional da Indstria Electrnica

PROGRAMAO
Lin!aem C
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 2
Introd!o"
A #roramao de computadores pode ser uma tarefa
complexa. Podemos simplificar esta tarefa se
di$idirmos o #ro%lema &!e temos #ara resol$er
em #ro%lemas mais #e&!enos' de resol!o mais
f(cil)
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 3
Devemos ter em conta duas fases importantes:
ase de resolu!"o do pro#lema
ase de implementa!"o da sua solu!"o.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia $
%a fase de resol!o criamos uma se&u'ncia de
passos (opera!)es* &ue+ &uando executados+ produ, o
resultado do pro#lema (Aloritmo*.
Os #assos de !m aloritmo de$em ser sim#les e
efica*es+ e devem ser executados numa ordem
predefinida.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia -
%a fase de im#lementao utili,amos uma linguagem
de programa!"o (.asic+ Pascal+ C+C,,+ etc* para
proceder / execu!"o da se&u'ncia de passos
mencionada acima.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 0
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 1
-efinio de Aloritmo"
Podemos considerar um aloritmo como uma
se&u'ncia de racioc2nios ou opera!)es &ue nos permite
c3egar / solu!"o+ ou mel3or+ a uma das poss2veis
solu!)es de um determinado pro#lema.
Centro de Formao Profissional da Indstria Electrnica
Com#ilao de !m Prorama
4uando um programa 5 compilado+ o seu c6digo
fonte 5 transformado em c6digo #in7rio espec2fico
para uma determinada plataforma8
Para cada plataforma ser7 necess7ria uma
compila!"o.
Linguagem C - Algoritmia 9
Centro de Formao Profissional da Indstria Electrnica
Com#ilao de !m Prorama
Linguagem C - Algoritmia :
Centro de Formao Profissional da Indstria Electrnica
Com#ilao de !m Prorama
.e/em#lo0
Linguagem C - Algoritmia ;<
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia ;;
1otao Alor2tmica"
Cada algoritmo deve ser identificado com um nome.
= nome do algoritmo deve ser seguido de uma
#reve descri!"o das tarefas &ue ele executa e de
todas as suposi!)es &ue ten3am sido feitas. A
descri!"o deve conter o nome e tipo das vari7veis
utili,adas.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia ;2
Os aloritmos #odem' ento' ser re#resentados
de d!as maneiras"
utili,ando uma linguagem pr6xima da implementa!"o+
o #se!docdio8
utili,ando uma linguagem gr7fica+ por exemplo:
fl!/oramas.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia ;3
= #se!docdio 5 uma linguagem interm5dia &ue
pode ser tradu,ida para uma linguagem de
programa!"o8
>tili,a a linguagem natural em con?unto com estruturas
utili,adas em linguagens de programa!"o.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia ;$
= #se!do3cdio possui as seguintes caracter2sticas:
- >tili,a!"o de certas #ala$ras3c4a$e+ &ue indicam a
nature,a da opera!"o a ser executada
- >tili,a!"o de es#aos no come!o das lin3as do
algoritmo para ressaltar a estrutura do algoritmo
- >tili,a!"o do #onto3e3$2r!la para separar os
passos consecutivos do algoritmo
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia ;-
E/em#lo"
@%@C@=
Ascrever(B@ntrodu,a duas idades:C*8
Ler(idade;+ idade2*8
DomaEidade;Fidade28
Ascrever(Doma*8
@G
Centro de Formao Profissional da Indstria Electrnica
Hnome da vari7velI = Hvalor ou express"oI
Derve para atri%!ir $alores 5 $ari($eis+ o valor pode
ser o res!ltado de !ma e/#resso.
E/" media E (nota; F nota2* J 2
Instr!o de Atri%!io
Linguagem C - Algoritmia ;0
Centro de Formao Profissional da Indstria Electrnica
O#eradores Aritm6ticos
O#erador O#erao E/#resso
- Dim5trico - x
K
J
Gultiplica!"o
Divis"o
x K L
x J L
M Nesto da Divis"o @nteira x M L
F
-
Adi!"o
Du#trac!"o
x F L
x L
A prioridade pode ser alterada com o uso de
par'ntesis. Axemplo: (A F .* J 2.
Gaior
Prioridade
Genor
Prioridade
Linguagem C - Algoritmia ;1
Centro de Formao Profissional da Indstria Electrnica
O#eradores Relacionais
O#erador 1ome E/em#lo 7inificado do E/em#lo
EE @gualdade x EE ; x i!al a ;O
I Gaior 4ue x I ;< x maior &!e ;<O
IE Gaior ou @gual 4ue x IE ; x maior o! i!al &!e ;O
H Genor 4ue x H < x menor &!e <O
HE Genor ou @gual 4ue x HE - x menor o! i!al &!e -O
PE Desigualdade x PE 9 x diferente de 9O
Linguagem C - Algoritmia ;9
Centro de Formao Profissional da Indstria Electrnica
O#eradores Licos
O#erador 1ome E/em#lo 7inificado do E/em#lo
QQ A x I 3 88 x H 9 x maior &ue 3 e x menor &ue 9O
RR =u x EE < 99 x EE ; x igual a < o! x igual a ;O
P %ega!"o :L@SAD=
contr(rio de L@SAD=+ pode ser
interpretado como BdesligadoOC
Linguagem C - Algoritmia ;:
Centro de Formao Profissional da Indstria Electrnica
;a%elas de <erdade E' O= e 1EGAO
> ? > 88 ?
also also also
also Terdadeiro also
Terdadeiro also also
Terdadeiro Terdadeiro <erdadeiro
> ? > 99 ?
also also also
also Terdadeiro <erdadeiro
Terdadeiro also <erdadeiro
Terdadeiro Terdadeiro <erdadeiro
> :>
also <erdadeiro
Terdadeiro also
Linguagem C - Algoritmia 2<
Centro de Formao Profissional da Indstria Electrnica
Prioridades entre O#eradores Relacionais e Licos
A prioridade pode ser alterada com o uso de par'ntesis.
Gaior
Prioridade
Genor
Prioridade
O#erador
P
H HE I IE
EE PE
QQ
RR
Linguagem C - Algoritmia 2;
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 22
=utra forma de estruturar o programa a desenvolver 5
recorrer aos fl!/oramas.
Fl!/orama
Cond
Verdadeira
?
N
Processo
V
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 23
Asta t5cnica surge para re#resentar raficamente o
desen$ol$imento de aloritmos. = fluxograma
mostra a l6gica do algoritmo+ dando uma representa!"o
glo#al das interliga!)es entre os diversos passos.
A seguir mostram-se alguns s2m#olos utili,ados na
constru!"o de fl!/oramas:
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 2$
Fl!/oramas
LImites do Algoritmo (Incio
e Fim)
Processamento
Entrada ou Sada de dados
Decises
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 2-
E/em#lo"
INUCIO
FIM
Introduza
idades
Apresentar
resultado - soma
Soma=idade1+idade2
Ler idade1 e
idade 2
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 20
Pse!docdio $s Fl!/orama
INUCIO
FIM
Introduza
idades
Apresentar
resultado - soma
Soma=idade1+idade2
Ler idade1 e
idade 2
@%@C@=
Ascrever(B@ntrodu,a duas idades:C*8
Ler(idade;+ idade2*8
DomaEidade;Fidade28
Ascrever(Doma*8
@G
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 21
E/erc2cio @"
Ascreva o pseudo-c6digo e desen3e o respectivo
fluxograma para um programa &ue pe!a um valor em
metros e o converta para &uil6metros.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 29
E/erc2cio A"
Ascreva o pseudo-c6digo e desen3e o respectivo
fluxograma para um programa &ue calcule a 7rea de um
triVngulo.
Centro de Formao Profissional da Indstria Electrnica
Estr!t!ra condicional 3 If
Fl!/orama
Linguagem C - Algoritmia 2:
Cond
Verdadeira
?
Processo 1 S
N
Centro de Formao Profissional da Indstria Electrnica
E/em#lo
Pse!docdio+Fl!/orama
%=WA E 98
De (%=WA H ;<*
Ascrever(BNeprovado.C*8
Ascrever(BAstuda GaisPC*8
Algoritmia - Pseudoc6digo 3<
Centro de Formao Profissional da Indstria Electrnica
Estr!t!ra condicional 3 If+else .7e+7eno0
Fl!/orama
Linguagem C - Algoritmia 3;
Cond
Verdadeira
?
Processo 1 Processo 2 S N
Centro de Formao Profissional da Indstria Electrnica
E/em#lo
Pse!docdio+Fl!/orama
%=WA E ;<8
De (%=WA H ;<*
Ascrever(BNeprovado.C*8
Ascrever(BAstuda GaisPC*8
Den"o
Ascrever(BAprovado.C*8
Algoritmia - Pseudoc6digo 32
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 33
E/erc2cio B"
Ascreva o pseudo-c6digo e desen3e o respectivo
fluxograma para um programa &ue pe!a uma
classifica!"o de uma disciplina e diga se o utili,ador est7
BAprovadoC ou BNeprovadoC.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 3$
E/erc2cio C"
Ascreva o pseudo-c6digo e desen3e o respectivo
fluxograma para um programa &ue pe!a ao utili,ador
tr's nXmeros inteiros e apresente &ual o maior nXmero
inserido.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 3-
Resol!o"
escrever(B@ntrodu,a 3 nXmeros distintos:C*8
ler(A+.+C*8
De (AI.*
De (AIC*
maiorEA8
Den"o
maiorEC8
Den"o
De (.IC*
maiorE.8
Den"o
maiorEC8
escrever(maior*8
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia 30
Resol!o"
Centro de Formao Profissional da Indstria Electrnica
Estr!t!ra de re#etio D E4ile .en&!anto0
Fl!/orama
Linguagem C - Algoritmia 31
Processo
Cond
Verdadeira
?
V
N
Derve para a re#etir uma parte de c6digo mediante !ma
condio.
Centro de Formao Profissional da Indstria Electrnica
E/em#lo
Pse!docdio+Fl!/orama
Linguagem C - Algoritmia 39
Processo
Cond
Verdadeira
?
V
N
E4ile (condi!"o verdadeira*
HprocessoJinstru!"oI8
HprocessoJinstru!"oI8
...
Centro de Formao Profissional da Indstria Electrnica
Estr!t!ra de re#etio D do3E4ile
Fl!/orama
Linguagem C - Algoritmia 3:
Cond
Verdadeira
?
N
Processo
V
Derve para a re#etir uma parte de c6digo mediante !ma
condio. 4ual a diferen!a para o E4ileO
Centro de Formao Profissional da Indstria Electrnica
E/em#lo
Pse!docdio+Fl!/orama
Linguagem C - Algoritmia $<
Cond
Verdadeira
?
N
Processo
V
do
HprocessoJinstru!"oI8
HprocessoJinstru!"oI8
Y
E4ile (condi!"o l6gica*8
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia $;
E/erc2cio F"
Ascreva o pseudo-c6digo e desen3e o respectivo
fluxograma para um programa &ue+ imprima todos
nXmeros do intervalo Za+ #[.
Centro de Formao Profissional da Indstria Electrnica
Estr!t!ra de re#etio D for
Fl!/orama
Linguagem C - Algoritmia $2
Cond
(I < N)
?
N
Inicio
(I = 0)
Processo
Incremento
(I = I+1)
V
Derve para a e/ec!o re#etida de c6digo de forma
determin2stica.
Centro de Formao Profissional da Indstria Electrnica
E/em#lo
Pse!docdio+Fl!/orama
Linguagem C - Algoritmia $3
For Hvari7velI G Hin2cioI ;o HfimI Z 7te# HvalorI[
HprocessoJinstru!"oI8
HprocessoJinstru!"oI8
...
Cond
(I < N)
?
N
Inicio
(I = 0)
Processo
Incremento
(I = I+1)
V
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia $$
E/erc2cio H"
Ascreva o pseudo-c6digo e desen3e o respectivo
fluxograma para um programa &ue+ imprima os de,
nXmeros seguintes ao nXmero inserido pelo utili,ador.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - Algoritmia $-
E/erc2cio I"
Ascreva o pseudo-c6digo ou desen3e o fluxograma para
um programa &ue+ dado um nXmero positivo+ transforme
esse nXmero sucessivamente at5 ;+ as transforma!)es
poss2veis s"o:
Dividir por 2 se o valor for par
Domar ; se o valor for 2mpar
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - @ntrodu!"o $0
E7;R=;=RA -E =M PROGRAMA EM C
Centro de Formao Profissional da Indstria Electrnica
Jello Korld:
/* Programa Hello World! */
#include <stdio.h>
int main() {
printf(Hello World!\n);
return 0;
}
Linguagem C - @ntrodu!"o $1
Centro de Formao Profissional da Indstria Electrnica
Coment(rios
Come!am com a se&u'ncia +L e terminam com a
se&u'ncia L+8
Axemplo:
/* Programa Hello World! */
Linguagem C - @ntrodu!"o $9
Centro de Formao Profissional da Indstria Electrnica
=so de Mi%liotecas
%a parte inicial do programa s"o inclu2das+ atrav5s da
directiva Nincl!de+ as %i%liotecas necess7rias para
execu!"o de fun!)es e procedimentos externos+ como
5 o caso do procedimento #rintf8
Axemplo:
#include <stdio.h>
#include <math.h>
A extens"o )4 designa o 4eader file da #i#lioteca.
Linguagem C - @ntrodu!"o $:
Centro de Formao Profissional da Indstria Electrnica
A f!no main
Wodos os programas em C iniciam a sua execu!"o
c3amando esta fun!"o8
\ delimitada por c3avetas8
Axemplo:
main() /* Funo principal */
{ /* Incio de funo */

} /* Fim da funo */
Linguagem C - @ntrodu!"o -<
Centro de Formao Profissional da Indstria Electrnica
A f!no main
A fun!"o main pode retornar um valor8
Axemplo:
int main()
{
return 0;
}
Wipicamente+ o valor de retorno 5 interpretado pelo
Distema =perativo (c6digos de sucesso+ erro+ etc.*
Linguagem C - @ntrodu!"o -;
Centro de Formao Profissional da Indstria Electrnica
Linguagem C -2
= C 5 OCase 7ensiti$eP
Tamos come!ar real!ando um ponto de grande importVncia: o C 5
]Case Densitive]+ isto 5+ maisc!las e minsc!las fa*em diferena.
De se declarar uma vari7vel com o nome soma ela ser7 diferente de
7oma+ 7OMA+ 7oMa ou sOmA.
Da mesma maneira+ os comandos do C if e for+ por exemplo+ s
#odem ser escritos em minsc!las pois seno o com#ilador no
ir( inter#ret(3los como sendo comandos+ mas sim como $ari($eis.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C -3
1omes de <ari($eis
As vari7veis no C podem ter &ual&uer nome se duas
condi!)es forem satisfeitas:
o nome de !ma $ari($el no #ode ser i!al a
!ma #ala$ra reser$ada
nem i!al ao nome de !ma f!no declarada
#elo #roramador' o! #elas %i%liotecas do C
Centro de Formao Profissional da Indstria Electrnica
Linguagem C -$
Q!anto aos nomes de $ari($eis)))
\ uma pr7tica tradicional do C+ usar letras minsc!las #ara
nomes de $ari($eis e maisc!las #ara nomes de
constantes.
4uando se escreve c6digo usando nomes de $ari($eis em
#ort!!Rs+ evita-se poss2veis conflitos com nomes de rotinas
encontrados nas diversas #i#liotecas+ &ue s"o em sua maioria
a#soluta+ palavras em ingl's
Centro de Formao Profissional da Indstria Electrnica
Linguagem C --
>m nome de uma vari7vel pode ter um ou v7rios
caracteres. = primeiro caractere deve ser uma letra ou o
BunderscoreC ( ^ * e os caracteres seguintes podem ser
letras+ nXmeros ou B^C.
E/em#los"
nome contagem; soma2
teste23 numero^conta ^var;
Centro de Formao Profissional da Indstria Electrnica
Linguagem C -0
=s nomes de vari7veis n"o devem ter mais de 32 caracteres+ mas 6
aconsel4($el o !so de identificadores s!esti$os com o
menor nmero #oss2$el de caracteres e sem es#aos entre
eles:
E/em#lo"
soma^de^dois^numeros^inteiros soma2int
Gel3or
Centro de Formao Profissional da Indstria Electrnica
Linguagem C -1
Pala$ras reser$adas"
auto dou#le int struct
#rea_ else long s`itc3
case enum register tLpedef
c3ar extern return union
const float s3ort unsigned
continue for signed void
default goto si,eof volatile
do if static `3ile
asm ^cs ^ds ^es
^ss cdecl far 3uge
interrupt near pascal
Centro de Formao Profissional da Indstria Electrnica
Linguagem C -9
;i#os de -ados"
Am C todas as $ari($eis de$em ser declaradas
antes de serem !sadas.
E/istem cinco ti#os de dados %(sicos: caractere
(c3ar*+ inteiro (int*+ #onto fl!t!ante (float*+ #onto
fl!t!ante de d!#la #reciso (dou#le* e sem $alor
(void*.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C -:
;i#os de -ados"
As vari7veis do tipo c4ar s"o usadas #ara conter
caracteres ADC@@+ ou &ual&uer nXmero de 9 #its. As
vari7veis do tipo int s"o geralmente usadas para
controlar loops e comandos condicionais. Tari7veis do
tipo float e do!%le utili,am-se com nmeros
fraccion(rios+ ou &uando precisamos de manipular
nXmeros muito grandes.
Centro de Formao Profissional da Indstria Electrnica
Iniciali*ao de <ari($eis
@niciali,ar uma vari7vel significa atri%!ir3l4e !m $alor8
Wanto pode ser no momento da declarao o! mais tarde+ no
entanto+ ela no #ode ser PlidaS sem ter sido iniciali*ada8
Axemplos:
int nota = 20; /* nota mxima! ou ser 20%? */
float saldo;

saldo = 5.25;
Linguagem C - @ntrodu!"o 0<
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 0;
;i#o ;aman4o Gama de $alores
unsigned c3ar 9 #its < Y 2--
c3ar 9 #its -;29 Y ;21
enum ;0 #its -32+109 Y 32+101
unsigned int ;0 #its < Y 0-+-3-
s3ort int ;0 #its -32+109 Y 32+101
int 32 #its -2+;$1+$93+0$9 .. 2+;$1+$93+0$1
unsigned long 32 #its < Y $+2:$+:01+2:-
long 32 #its -2+;$1+$93+0$9 .. 2+;$1+$93+0$1
float 32 #its 3.$ x ;<
-39
* Y 3.$ x ;<
F39
*
dou#le 0$ #its ;.1 x ;<
-3<9
* Y ;.1 x ;<
F3<9
*
long dou#le 9< #its 3.$ x ;<
-$:32
* Y ;.; x ;<
F$:32
*
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 02
Como vimos na ta#ela anterior+ para cada um dos tipos
de vari7veis existem os modificadores de tipo.
=s modificadores de tipo do C s"o &uatro: sined+
!nsined+ lon e s4ort.
=s modificadores signed+ unsigned+ s3ort e long podem
ser aplicados aos tipos c4ar e int. = modificador long
tam#5m se pode aplicar ao tipo do!%le.
Centro de Formao Profissional da Indstria Electrnica
-efinio de Constantes
As constantes s"o vari7veis cu?o $alor atri%!2do no
momento da iniciali*ao no #ode ser alterado8
>sa-se &ualificador const8
Wipicamente s"o usados nomes em maisc!las8
Axemplos:
const float PI = 3.14;
const int LIMITE_MAX = 100;
Linguagem C - @ntrodu!"o 03
Centro de Formao Profissional da Indstria Electrnica
<ari($eis Glo%ais e Locais
>ma $ari($el lo%al 6 con4ecida #or todo o
#rorama e #ode ser !sada em &!al&!er #arte do
cdioT
>ma $ari($el local s 6 con4ecida dentro do %loco
onde foi declaradaT
U desaconsel4($el o !so de $ari($eis lo%ais+ por
&uest)es de conflito e por tend'ncia a gerar mau c6digo8
a7 as constantes de$em ser lo%ais.
Linguagem C - @ntrodu!"o 0$
Centro de Formao Profissional da Indstria Electrnica
-eclarao de Constantes Glo%ais
Axemplo:
#include <stdio.h>

const float PI = 3.14;

int main()
{

Linguagem C - @ntrodu!"o 0-
Centro de Formao Profissional da Indstria Electrnica
Aritm6tica em C
O#erador Aco
+ Doma
- Du#trac!"o
* Gultiplica!"o
/ Divis"o
% Nesto de divis"o
++ @ncremento
33 Decremento
Linguagem C - @ntrodu!"o 00
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 01
O#eradores Relacionais e Licos
O#erador Aco
V Gaior do &ue
VG Gaior ou igual a
W Genor do &ue
WG Genor ou igual a
G G @gual a
:G Diferente de
88 A%D
99 =N
: %=W
1O;A" Os o#eradores relacionais retornam $erdadeiro .@0 o! falso .X0)
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 09
I1;RO-=O AO I1P=;+O=;P=;
09 Linguagem C
Centro de Formao Profissional da Indstria Electrnica
Introd!o ao In#!t+O!t#!t
A forma mais comum em C para opera!)es de entrada e
sa2da 5 recorrer aos procedimentos scanf e #rintf8
D"o dois procedimentos para entrada e sa2da formatada8
= dom2nio destes procedimentos 5 fundamental para o
programador8
Directiva de inclus"o:
#include <stdio.h>
Linguagem C - @ntrodu!"o 0:
Centro de Formao Profissional da Indstria Electrnica
#rintf
Permite imprimir texto ou o valor de vari7veis no ecrVn8
Astrutura:
printf(Hstring de formata!"oI,Hlista de argumentosI);
Dtring de formata!"o:
cont5m o texto &ue se &uer imprimir e os c6digos de formata!"o desse texto8
os c6digos de formata!"o permitem alterar a forma como 5 apresentado o texto
eJou imprimir vari7veis.
Lista de argumentos:
lista de vari7veis &ue se &uer imprimir.
Linguagem C - @ntrodu!"o 1<
Centro de Formao Profissional da Indstria Electrnica
E/em#los de !so de #rintf
Cdio Im#rime
printf ("Nmero: %d", 10); 10
printf ("%f", 49.67923); 49.671230
printf ("%0.2f", 49.67923); 49.68
printf ("%d + %d = %d", 2, 2, 4); 2 + 2 = 4
printf ("Um %c", 'C'); Um C
Linguagem C - @ntrodu!"o 1;
Centro de Formao Profissional da Indstria Electrnica
Es#ecificadores de Formato
Cdio Formato
Yd inteiro (int* na forma decimal
Yf ponto flutuante
Yc um caracter (c3ar*
Ys uma string
Linguagem C - @ntrodu!"o 12
Centro de Formao Profissional da Indstria Electrnica
Cdios de Formatao de ;e/to
Cdio 7inificado
Zn nova lin3a
Z% apaga Xltimo caractere impresso
Zt imprime avan!o de texto fixo (WA.*
ZS imprime o caractere B
Z[ imprime o caractere b
ZZ imprime o caractere c
YY imprime o caractere M
Linguagem C - @ntrodu!"o 13
Centro de Formao Profissional da Indstria Electrnica
E/em#lo de !so de #rintf
C6digo:
float media = 17.23;
int soma = 20;
printf(media = %0.1f\nsoma = %d, media, soma);
Da2da:
media = 17.2
soma = 20
Linguagem C - @ntrodu!"o 1$
Centro de Formao Profissional da Indstria Electrnica
scanf
Permite atrav5s do teclado atri#uir valor a vari7veis8
Astrutura:
scanf(Hstring de formata!"oI,Hlista de argumentosI);
Dtring de formata!"o:
cont5m a formata!"o de entrada pretendida.
Lista de argumentos:
lista de vari7veis precedidas de &.
Linguagem C - @ntrodu!"o 1-
Centro de Formao Profissional da Indstria Electrnica
E/em#los de !so de scanf
int i;
scanf("%d", &i);
arma,ena na vari7vel i o valor inteiro lido do teclado
float n;
scanf("%f", &n);
arma,ena na vari7vel n o valor em ponto flutuante lido do
teclado
Linguagem C - @ntrodu!"o 10
Centro de Formao Profissional da Indstria Electrnica
E/em#lo de !so de scanf
C6digo:
int dia, mes, ano;
printf(Introduza uma data (DD MM AAAA):\n);
scanf(%d %d %d, &dia, &mes, &ano);
printf(Data introduzida: %d-%d-%d\n,ano,mes,dia);
Nesultado:
Introduza uma data (DD MM AAAA):
25 12 2010
Data introduzida: 2010-12-25
Linguagem C - @ntrodu!"o 11
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 19
E/erc2cio @"
= &ue fa, o seguinte programaO Compile e execute-o.
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
printf(\n%d",x);
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 1:
E/erc2cio A"
Wendo por #ase o programa anterior+ crie um programa
&ue pe!a dois nXmeros inteiros ao utili,ador e apresente
os resultados da $ opera!)es matem7ticas elementares.
Axemplo: Doma: x F L E ,
Du#tra!"o: x L E ,
etc...
Centro de Formao Profissional da Indstria Electrnica
PROGRAMAO E7;R=;=RA-A
E ;IPO7 -E -A-O7
LI1G=AGEM C D E7;R=;=RA7 -E CO1;ROLO
Centro de Formao Profissional da Indstria Electrnica
Estr!t!ras de Controlo de Fl!/o
D"o fundamentais na maioria das linguagens de
programa!"o8
Atrav5s delas 5 poss2vel alterar a maneira como o
programa 5 executado8
D"o constitu2das por condi\es' re#eti\es e saltos.
Linguagem C - Astruturas de Controlo 9;
Centro de Formao Profissional da Indstria Electrnica
if
A estrutura if representa uma tomada de decis"o do tipo
]DA isto A%Wd= a&uiloB8
A sua forma geral 5:
if(<condio>) { <cdigo> }
Linguagem C - Astruturas de Controlo 92
Centro de Formao Profissional da Indstria Electrnica
if
Fl!/orama Cdio C
if(cond) {
/* cdigo a
executar se cond
for verdadeiro */
}
Linguagem C - Astruturas de Controlo 93
Cond
Verdadeira
?
Processo 1 S
N
Centro de Formao Profissional da Indstria Electrnica
if
A condi!"o 5 uma express"o &ue ser7 avaliada. De o
resultado for ,ero o corpo n"o ser7 executado. De o
resultado for &ual&uer coisa diferente de ,ero o corpo
ser7 executado8
= corpo pode ser um #loco de c6digo ou apenas uma
instru!"o.
Linguagem C - Astruturas de Controlo 9$
Centro de Formao Profissional da Indstria Electrnica
O#eradores Licos e Relacionais
O#erador 7inificado
I Gaior do &ue
IE Gaior ou igual a
H Genor do &ue
HE Genor ou igual a
E E @gual a
PE Diferente de
QQ A%D
RR =N
P %=W
1O;A" Os o#eradores relacionais retornam X .falso0 o! !m $alor diferente de
X .$erdadeiro0)
Linguagem C - Astruturas de Controlo 9-
Centro de Formao Profissional da Indstria Electrnica
if3else
A estrutura if3else tem a seguinte forma geral:
if(<condio>)
{ <cdigo 1> }
else
{ <cdigo 2> }
Pode-se ver a componente else como um complemento
da componente if.
Linguagem C - Astruturas de Controlo 90
Centro de Formao Profissional da Indstria Electrnica
if3else
Fl!/orama Cdio C
if(cond)
{ /* cdigo a executar se
cond for Verdadeiro */
}
else
{ /* cdigo a executar se
cond for Falso (0) */
}
Linguagem C - Astruturas de Controlo 91
Cond
Verdadeira
?
Processo 1 Processo 2 S N
Centro de Formao Profissional da Indstria Electrnica
if3else
A express"o da condi!"o 5 avaliada. De ela for diferente
de ,ero o corpo do if ser7 executado. De for ,ero o corpo
do else ser7 executado.
\ importante nunca es&uecer &ue+ &uando usamos a
estrutura if3else+ garantimos &ue uma das duas
componentes ser7 sempre executada.
Linguagem C - Astruturas de Controlo 99
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 9:
E/erc2cio"
Ascreva um programa &ue pe!a ao utili,ador &ue
introdu,a dois nXmeros decimais e apresente o resultado
da opera!"o &ue pretende efectuar+ inserindo o s2m#olo
do operador respectivo ( K+ J + - + F *.
Centro de Formao Profissional da Indstria Electrnica
E4ile
E4ile tem a seguinte forma geral:
while(<condio>){ <cdigo> }
Derve para executar c6digo en&uanto a condi!"o for
verdadeira.
Linguagem C - Astruturas de Controlo :<
Centro de Formao Profissional da Indstria Electrnica
E4ile
Fl!/orama Cdio C
while(cond){
/* cdigo a ser
executado enquanto
cond for Verdadeiro
*/
}
Linguagem C - Astruturas de Controlo :;
Processo
Cond
Verdadeira
?
V
N
Centro de Formao Profissional da Indstria Electrnica
do3E4ile
do3E4ile tem a seguinte forma geral:
do{ <cdigo> }while(<condio>);
Axecuta c6digo en&uanto a condi!"o for verdadeira.
Linguagem C - Astruturas de Controlo :2
Centro de Formao Profissional da Indstria Electrnica
do3E4ile
Fl!/orama Cdio C
do{
/* cdigo a
executar */
}while(<condio>);
Linguagem C - Astruturas de Controlo :3
Cond
Verdadeira
?
N
Processo
V
Centro de Formao Profissional da Indstria Electrnica
do3E4ile
A estrutura do3E4ile executa o corpo+ testa a condi"o
e+ se esta for verdadeira+ volta a executar o corpo.
A grande diferena desta estrutura face ao E4ile 5 &ue
a do3E4ile garante &ue o cor#o ser( e/ec!tado
#elo menos !ma $e*)
Linguagem C - Astruturas de Controlo :$
Centro de Formao Profissional da Indstria Electrnica
for
A sua forma geral 5:
for(<inicializao>; <condio>; <ps-iterao>)
{ <cdigo> }
A estrutura for 5 !sada #ara re#etir !ma instr!o'
o! %loco de instr!\es' di$ersas $e*es8
Seralmente ela repete c6digo % ve,es mediante um
incremento+ no entanto+ em C esta estr!t!ra #ode
ass!mir formas mais com#le/as)
Linguagem C - Astruturas de Controlo :-
Centro de Formao Profissional da Indstria Electrnica
for
Fl!/orama Cdio C
/* forma clssica */
int i;
for(i = 0; i < n; i++){
/* cdigo a ser
executado n vezes */
}
Linguagem C - Astruturas de Controlo :0
Cond
(I < N)
?
N
Inicio
(I = 0)
Processo
Incremento
(I = I+1)
V
Centro de Formao Profissional da Indstria Electrnica
=so de %rea]
A instru!"o %rea] 6 !sada #ara a interr!#o da
e/ec!o de !m ciclo8
Linguagem C - Astruturas de Controlo :1
Centro de Formao Profissional da Indstria Electrnica
E/em#lo do !so de %rea]
Cdio C
int i = 1;
while (i <= 10) {
if (i == 6)
break;
printf(%d\n);
i++;
}
Res!ltado
1
2
3
4
5
Linguagem C - Astruturas de Controlo :9
Centro de Formao Profissional da Indstria Electrnica
=so de contin!e
A instru!"o contin!e 6 !sada #ara saltar #ara a
#r/ima iterao de !m ciclo8
Linguagem C - Astruturas de Controlo ::
Centro de Formao Profissional da Indstria Electrnica
E/em#lo do !so de contin!e
Cdio C
int i;
for (i = 0; i < 5; i++) {
if (i == 2)
continue;
printf(%d\n);
}
Res!ltado
0
1
3
4
Linguagem C - Astruturas de Controlo ;<<
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<;
Estr!t!ras de controlo de fl!/o
O Comando sEitc4"
= comando s`itc3 5 pr6prio para se testar uma
vari7vel em rela!"o a diversos valores pr5-
esta#elecidos.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<2
Estr!t!ras de controlo de fl!/o
A sua forma geral 5:
switch (varivel)
{
case constante_1:
declarao_1;
break;
.
.
.
case constante_n:
declarao_n;
break;
default
declarao_default;
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<3
E/em#lo"
#include <stdio.h>
int main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
switch (num)
{
case 9:
printf ("\n\nO numero e igual a 9.\n");
break;
case 10:
printf ("\n\nO numero e igual a 10.\n");
break;
default:
printf ("\n\nO numero nao e nem 9 nem
10.\n");
}
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<$
E/erc2cio"
Ascreva um programa &ue pede ao utili,ador um
nXmero correspondente a um dia da semana e &ue
apresente na tela o nome do dia correspondente a
esse nXmero+ utili,ando o comando s`itc3.
exemplo: 2 -I Degunda
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<-
int main ()
{
int ch;
printf ("Digite um numero: ");
scanf ("%d",&ch);
switch(ch)
{
case 2:
printf("\tSegunda feira\n");
break;
...
case 8:
printf("\tDomingo\n");
break;
default:
printf("\tNenhuma opcao seleccionada\n");
}
system("PAUSE");
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<0
Estr!t!ras de controlo de fl!/o
O loo# infinito"
= loop infinito tem a forma:
for .iniciali*aoT Tincremento0
declaraoT
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<1
Estr!t!ras de controlo de fl!/o
Aste loop c3ama-se loo# infinito por&ue ser7 executado para
sempre (no e/istindo a condio' ela ser( sem#re
considerada $erdadeira*+ a n"o ser &ue ele se?a interrompido.
Para interrom#er !m loo# como este !samos o comando
%rea]. = comando %rea] vai &ue#rar o loop infinito e o
programa continuar7 a ser executado normalmente.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<9
Estr!t!ras de controlo de fl!/o
Como exemplo vamos ver um programa &ue fa, a
leitura e impress"o de uma tecla+ at5 &ue o utili,ador
introdu,ir a tecla sinali,adora de final (uma LAS*.
A nossa LAS ser7 a letra efe. Neparem &ue temos
&ue usar dois scanf.0 dentro do for.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;<:
E/em#lo"
int main ()
{
int Count;
char ch;
for (Count=1;;Count++)
{
printf(" Digite uma letra - <X para sair> ");
//scanf("%c", &ch);
scanf("%c", &ch);
if (ch == 'X')
break;
}
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;<
E/erc2cio"
a!a um programa &ue simule uma calc!ladora. = programa deve
fa,er as opera!)es #7sicas e s de$e sair do #rorama &!ando
o !tili*ador assim o dese^ar.
Antes de come!ar a fa,er este programa dispense algum tempo a
definir a sua estrutura no papel (luxograma ou Pseudo-c6digo*.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;;
E/em#lo"
int main ()
{
int i;
do
{
printf("\n\n***************MENU***************\n\n");
printf ("OPCOES:\n");
printf ("\t(1)...\n");
printf ("\t(2)...\n");
printf ("\t(3)...\n\n");
scanf("%d", &i);
system("cls");
} while ((i<1)||(i>3));
system("PAUSE");
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;2
7trins
%o C uma strin 6 !m $ector de caracteres
terminado com !m caracter n!lo.
= caracter n!lo 5 um caracter com valor inteiro igual a
,ero ou+ usando a conven!"o de #arra invertida do C
como sendo _ZX`)
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;3
7trins
Para declarar uma string+ podemos usar o seguinte
formato geral:
char nome_da_string [tamanho];
@sto declara um vector de caracteres (uma string* com
nXmero de posi!)es igual a taman3o.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;$
7trins
%ote &ue+ como temos &!e reser$ar !m caractere
#ara ser o caracter terminador n!lo+ temos &ue
declarar o comprimento da string como sendo+ no
m2nimo+ um caractere maior &ue a maior string &ue
pretendemos arma,enar.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;-
7trins
Tamos supor &ue declaramos uma string de 1 posi!)es e
colo&uemos a palavra ao"o nela.
Weremos: a o a o c< ... ...
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;0
7trins
%o caso anterior+ as duas c5lulas n"o usadas t'm valores
indeterminados. @sto acontece por&ue o C no iniciali*a
$ari($eis+ ca#endo ao programador esta tarefa.
Portanto as Xnicas c5lulas &ue s"o iniciali,adas s"o as &ue cont'm
os caracteres eae+ eoe+ eae+ eoe e ec<e .
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;1
7trins
De &uisermos ler !ma strin fornecida pelo utili,ador
podemos usar a f!no gets()) >m exemplo do uso
desta fun!"o 5 apresentado de seguida.
A f!no gets() coloca o terminador n!lo `ZX[ na
strin' &!ando se carrea na tecla OEnterO)
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;9
E/em#lo:
#include <stdio.h>
int main ()
{
char string[100];
printf ("Digite uma string: ");
gets (string);
printf ("\n\nVoce digitou %s",string);
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;;:
7trins
Como as strings s"o vectores de caracteres+ #ara se
aceder a !m determinado caracter de !ma strin'
%asta Oinde/armosO' ou se?a+ !sarmos !m 2ndice
#ara acedermos ao caracter dese^ado dentro da
strin.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;2<
7trins
Dupon3amos uma string c3amada str. Podemos aceder /
segunda letra de str da seguinte forma:
stra@b G _a_T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;2;
7trins
Por&ue ser7 &ue estamos a aceder / segunda letra e n"o
/ primeiraO 1a lin!aem C' o 2ndice comea em
*ero. Assim+ a primeira letra da string estar7 sempre na
posi!"o <. A segunda letra estar7 sempre na posi!"o ; e
assim sucessivamente.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;22
E/em#lo"
#include <stdio.h>
int main()
{
char str[10] = "Joao";
printf("\n\nString: %s", str);
printf("\nSegunda letra: %c", str[1]);
str[1] = 'U';
printf("\nAgora a segunda letra e: %c", str[1]);
printf("\n\nString resultante: %s", str);
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;23
7trins
%o programa anterior+ Ys indica &ue printf(* deve
imprimir uma string no ecr". Wal como ?7 tin3amos visto
anteriormente:
Cdio 7inificado
Yd @nteiro
Yf loat
Yc Caractere
Ys Dtring
YY Coloca na tela um M
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;2$
E/em#los:
printf ("Teste %% %%") -> Teste % %
printf ("%f",40.345) -> 40.345
printf ("Um caractere %c e um inteiro %d",'D',120)
-> Um caractere D e um inteiro 120
printf ("%s e um exemplo","Este")
-> Este e um exemplo
printf ("%s%d%%","Juros de ",10) -> Juros de 10%
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;2-
E/erc2cios:
;. Ascreva um programa &ue leia um caracter e imprima
esse caracter.
2. Ascreva um programa &ue leia duas strings e as
colo&ue no ecr". @mprima tam#5m a segunda letra de
cada string.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;20
7trins
Algumas fun!)es da #i#lioteca C+ Xteis para
manipula!"o de strings:
strc#c .0 strcat .0 strcm# .0 strlen .0
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;21
7trins
Para podermos utili,ar &ual&uer uma destas fun!)es
devemos incluir no nosso programa a livraria:
Nincl!de Wstrin)4V
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;29
7trins
strc#c .0
strcpL (destino+ origem*8
-escrio"
Copia uma string para outra. Copia a string origem para destino+
terminando a c6pia &uando tiver sido copiado o caractere nulo
(bc<g*.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;2:
E/em#lo"
#include <stdio.h>
#include <string.h>
int main()
{
char string[10];
char str1[10];
printf("\nIntroduza uma string:\n");
gets(string);
strcpy(str1, string);
printf("\n%s\n",str1);
system("PAUSE");
return 0;
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;3<
7trins
strcat .0
strcat (destino+ origem*8
-escrio"
Acrescenta uma string a outra. strcat acrescenta a string
origem / string destino. = comprimento da string resultado 5
com#rimento de destino , com#rimento de oriem)
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;3;
E/em#lo"
int main()
{
char string[10];
char str1[20];
printf("\nIntroduza uma string:\n");
gets(string);
strcpy(str1, string);
strcat(str1, string);
printf("\n%s\n",str1);
system("PAUSE");
return 0;
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;32
7trins
strcm# .0
strcmp (string;+ string2*8
-escrio"
Compara duas strings e devolve X se elas forem iguais.
Netornando um nXmero diferente de X se forem diferentes.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;33
E/em#lo"
int main()
{
char string[10];
char str1[20];
printf("\nIntroduza duas strings:\n");
gets(string);
gets(str1);
if( strcmp(str1, string) )
printf("\ndiferentes\n");
else
printf("\niguais\n");
system("PAUSE");
return 0;
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;3$
7trins
strlen .0
strlen (string*8
-escrio"
Netorna o nXmero de caracteres numa string+ n"o
contando o caracter nulo.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;3-
E/em#lo"
int main()
{
char str1[20];
int comp;
printf("\nIntroduza uma string:\n");
gets(str1);
comp=strlen(str1);
printf("\nComprimento: %d\n",comp);
system("PAUSE");
return 0;
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;30
E/erc2cio"
>tili,ando uma das estruturas de controlo de fluxo
dadas+ escreva um programa &ue pe!a ao utili,ador para
introdu,ir uma frase+ &ue leia essa frase e &ue indi&ue
no final o nXmero de caracteres &ue comp)em essa
frase.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;31
7ol!o e/erc2cio"
int main ()
{
char texto[100];
int i=0;
printf("\n\nIntroduza uma frase:\n");
gets(texto);
while(texto[i]!='\0')
i++;
printf("\n\nO numero de caracteres introduzido e:
%d\n\n",i);
system("PAUSE");
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;39
E/erc2cio"
Ascreva um programa &ue rece#a numa string um nome
e imprima na vertical esse nome lido.
Para isso deve utili,ar o ciclo for(*.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;3:
E/erc2cio"
Ascreva um programa &ue utili,e as &uatro fun!)es
referidas e apresente os seus resultados.
Copiar string+ concatenar strings+ comparar strings e
por fim apresentar dimens"o de uma string.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;$<
E/erc2cio"
Ascreva um programa &ue imprima no ecr" a palavra
BverdadeiroC caso o utili,ador acerte na pass`ord
arma,enada numa string+ escrevendo falso no caso
contr7rio.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;$;
7ol!o"
int main()
{
char str1[4],string[4];
int comp;
str1[0]='o';
str1[1]='l';
str1[2]='a';
printf("\nIntroduza password:\n");
gets(string);
if( strcmp(str1, string) )
printf("\nerrado\n");
else
printf("\ncerto\n");
system("PAUSE");
return 0;
}
Centro de Formao Profissional da Indstria Electrnica
PROGRAMAO E7;R=;=RA-A
E ;IPO7 -E -A-O7
LI1G=AGEM C D F=1dE7 E PROCE-IME1;O7
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - un!)es e Procedimentos ;$3
I1;RO-=O
Centro de Formao Profissional da Indstria Electrnica
F!n\es e Procedimentos
un!)es e procedimentos s"o #locos de c6digo &ue
podem ser usados diversas ve,es durante a execu!"o de
um programa8
= uso de fun!)es e de procedimentos permite &ue o
programa fi&ue mais #em estruturado e de mais f7cil
manuten!"o8
A diferen!a entre uma fun!"o e um procedimento 5 &ue
a fun!"o retorna algo e o procedimento n"o.
Linguagem C - un!)es e Procedimentos ;$$
Centro de Formao Profissional da Indstria Electrnica
F!n\es e Procedimentos
Forma eral uma fun!"oJprocedimento:
<tipo de retorno> <nome> (<lista de argumentos>)
{
<corpo>
}
Linguagem C - un!)es e Procedimentos ;$-
Centro de Formao Profissional da Indstria Electrnica
E/em#lo de !ma F!no
#include <stdio.h>
/* funo para somar dois inteiros */
int soma (int num1, int num2)
{
return num1 + num2;
}
int main ()
{
printf (%d + %d = %d\n, 2, 3, soma(2, 3));
return 0;
}
Linguagem C - un!)es e Procedimentos ;$0
Centro de Formao Profissional da Indstria Electrnica
E/em#lo de !m Procedimento
#include <stdio.h>
/* procedimento para imprimir uma mensagem de boas vindas */
void msgEntrada()
{
printf(Bom dia!\n");
}
int main ()
{
msgEntrada();
return 0;
}
Linguagem C - un!)es e Procedimentos ;$1
Centro de Formao Profissional da Indstria Electrnica
F!n\es e Procedimentos
%os exemplos apresentados+ tanto a fun!"o como o
procedimento s"o c3amados a partir de main()+ &!e
tam%6m 6 !ma f!no8
un!)es e procedimentos #odem internamente
c4amar f!n\es+#rocedimentos8
A diferen!a fundamental entre a fun!"o main() e as
outras fun!)es 5 &ue a f!no main() 6 a #rimeira
f!no a ser e/ec!tada n!m #rorama.
Linguagem C - un!)es e Procedimentos ;$9
Centro de Formao Profissional da Indstria Electrnica
Ar!mentos+Paremetros
Argumentos+ ou parVmetros+ so entradas &ue fun!)es
e procedimentos #odem rece%er #ara serem
com#!tadas internamente8
1o 6 o%riatrio o !so de #aremetros+ no entanto+
sem#re &!e #oss2$el !sar+ pois torna o c6digo mais
estruturado e reutili,7vel+ evitando assim o uso de
vari7veis glo#ais (muitas ve,es causadoras de #ugs e m7
estrutura!"o*8
Para ti#os #rimiti$os .int' float' do!%le' c4ar0 6
feita !ma #assaem #or $alor+ ou se?a+ 6 feita !ma
c#ia #ara dentro da f!no+#rocedimento.
Linguagem C - un!)es e Procedimentos ;$:
Centro de Formao Profissional da Indstria Electrnica
Ar!mentos+Paremetros
%o caso de v7rios argumentos+ eles s"o separados por
v2rgula e com indica!"o do tipo8
A&uando da passagem (invoca!"o*+ estes podem ser
literais (exemplo: 2+ ;.3$+ bag*+ vari7veis+ constantes+ etc8
%o caso de tipos primitivos a sua passagem 5 feita por
valor.
Linguagem C - un!)es e Procedimentos ;-<
Centro de Formao Profissional da Indstria Electrnica
Passaem #or <alor
#include <stdio.h>
void imprimirValorMais2(int valor) {
valor = valor + 2;
printf("valor: %d\n", valor);
}
int main() {
int numero = 2;
imprimirValorMais2(numero);
printf("numero: %d\n", numero); /* SER QUE numero CONTM AGORA 4? */
return 0;
}
Linguagem C - un!)es e Procedimentos ;-;
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;-2
E/em#lo @"
#include <stdio.h>
int square (int x) /*Funo: Calcula o quadrado de x*/
{
printf ("O quadrado e %d",(x*x));
return(0);
}
int main ()
{
int num;
printf ("Entre com um numero: ");
scanf ("%d",&num);
printf ("\n\n");
square(num);
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;-3
%a defini!"o de s&!are.0 di,emos &ue a fun!"o rece#er7 um
argumento inteiro /.
4uando fa,emos a c3amada / fun!"o+ o inteiro n!m 5 passado
como argumento.
%"o 5 importante o nome da vari7vel &ue se passa como
argumento+ ou se?a+ a vari7vel n!m+ ao ser passada como
argumento para s&!are.0 5 copiada para a vari7vel /
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;-$
E/em#lo"
#include <stdio.h>
int mult (float a, float b,float c) /*Multiplica 3 numeros*/
{
printf ("%f",a*b*c);
return(0);
}
int main ()
{
float x,y;
x=23.5;
y=12.9;
mult (x,y,3.87);
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;--
Nepare &ue+ neste caso+ os argumentos s"o separados
por v2rgula e &ue deve-se explicitar o tipo de cada um
dos argumentos+ um a um.
%ote+ tam#5m+ &ue os argumentos passados para a
fun!"o n"o necessitam ser todos vari7veis por&ue
mesmo sendo constantes ser"o copiados para a vari7vel
de entrada da fun!"o.
Centro de Formao Profissional da Indstria Electrnica
Ar!mentos Constantes
7e no se #retende alterar o $alor de !m
ar!mento de uma fun!"oJprocedimento+ de$e3se
!sar o modificador const8
Axemplo:
void imprimirValorMais2(const int valor) {
valor = valor + 2; /* ERRO NA COMPILAO */
printf("valor: %d\n", valor);
}
Linguagem C - un!)es e Procedimentos ;-0
Centro de Formao Profissional da Indstria Electrnica
Retorno de F!n\es
As f!n\es #or definio retornam alo' esse alo
em C #ode ser m!ita coisa: um int+ um float+ um
c3ar+ uma string+ um arraL+ um apontador+ etc.
%o entanto o &!e se retorna est( %em definido.
Linguagem C - un!)es e Procedimentos ;-1
Centro de Formao Profissional da Indstria Electrnica
Retorno de Procedimentos
Os #rocedimentos #or definio no retornam
nada)
Para indicar isso !sa3se o ti#o void na defini!"o.
Linguagem C - un!)es e Procedimentos ;-9
Centro de Formao Profissional da Indstria Electrnica
Retorno de F!n\es+Procedimentos
4uando se necessita de retornar usa-se a instru!"o
return+ cu?a forma geral 5:
return <valor ou expresso>; (fun!)es*
ou
return; (procedimentos*
>ma fun!"o retorna um valor ou o resultado de uma
express"o+ um procedimento simplesmente aca#a e
retorna-se ao ponto de execu!"o ap6s a sua c3amada8
Linguagem C - un!)es e Procedimentos ;-:
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;0<
E/em#lo"
#include <stdio.h>
int prod (int x, int y)
{
return (x*y);
}
int main ()
{
int saida;
saida=prod (12,7);
printf ("A saida e: %d\n",saida);
return(0);
}
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;0;
%este caso+ a fun!"o #rod retorna o valor de ;2
multiplicado por 1+ &ue depois foi imprimido no ecr" na
fun!"o main e n"o na fun!"o #rod.
De n"o especificarmos o tipo de retorno de uma fun!"o+
o compilador C automaticamente supor7 &ue este tipo 5
inteiro. Por5m+ n"o 5 uma #oa pr7tica n"o se especificar
o valor de retorno.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C - un!)es e Procedimentos ;02
-ECLARAO
Centro de Formao Profissional da Indstria Electrnica
Protti#o+Assinat!ra
D7-se o nome de #rotti#o ou assinat!ra ao
ca#e!al3o de uma fun!"oJprocedimento sem o
respectivo corpo e terminado por ponto e v2rgula8
Axemplos:
int soma (int num1, int num2);
void msgEntrada();
Linguagem C - un!)es e Procedimentos ;03
Centro de Formao Profissional da Indstria Electrnica
Protti#o+Assinat!ra
=s prot6tipos de fun!)es e procedimentos s"o usados
para indica!"o ao compilador da especifica!"o de tipos8
ha#itualmente s"o colocados ap6s as directivas de
pr5-processador (#include+ #define+ etc.* de forma a
evitar pro#lemas de compila!"o relativamente / ordem
como est"o definidas as fun!)es e procedimentos8
Linguagem C - un!)es e Procedimentos ;0$
Centro de Formao Profissional da Indstria Electrnica
Protti#o+Assinat!ra
Dem o uso de prot6tipos todas as fun!)es e
procedimentos t'm &ue estar definidos antes da sua
invoca!"o8
Com o uso de prot6tipos n"o 37 necessidade de uma
ordem espec2fica na defini!"o das fun!)es e
procedimentos.
Linguagem C - un!)es e Procedimentos ;0-
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;00
E/erc2cio"
Ascreva um programa &ue pe!a dois valores inteiros e
&ue efectue a soma desses dois valores numa fun!"o
c3amada soma.
%otas:
A fun!"o deve retornar o resultado da soma.
%o final do programa o resultado deve ser imprimido
para o ecr".
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;01
Matri*es
a7 vimos como declarar vectores unidimensionais. Tamos
tratar agora de $ectores %idimensionais ou+ como 5
mais usual c3amar-se matri*es. A forma geral da
declara!"o de uma matri, #idimensional 5 muito parecida
com a declara!"o de um vector:
tipo^da^vari7vel nome^da^vari7vel Zaltura[Zlargura[8
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;09
Matri*es
\ muito importante real!ar &ue+ nesta estrutura+ o
2ndice da es&uerda indexa as lin3as e o da direita
indexa as colunas.
Gais uma ve, 5 #om lem#rar &ue+ na linguagem C+ os
2ndices come!am sempre em <.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;0:
E/erc2cio"
Ascreva um programa &ue leia - strings+ &ue as
guarde numa matri, e &ue no fim imprima no ecr" as
- strings lidas.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;1<
Resol!o do e/erc2cio"
iinclude Hstdio.3I
int main (*
j
c3ar strings Z-[Z;<<[8
int count8
for (countE<8countH-8countFF*
j
printf (]cncnDigite uma string: ]*8
gets (stringsZcount[*8
k
printf (]cncncnAs strings &ue voce digitou foram:cncn]*8
for (countE<8countH-8countFF*
printf (]Mscn]+stringsZcount[*8
return(<*8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;1;
E/erc2cio"
a!a um programa &ue leia &uatro palavras pelo teclado+
e arma,ene cada palavra em numa string. Depois+
concatene todas as strings lidas numa Xnica string. Por
fim apresente esta como resultado no final do programa.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;12
A#ontadores .Ponteiros0
>m a#ontador 6 !ma $ari($el &!e cont6m !m
endereo de memria. De uma vari7vel contem o
endere!o de outra vari7vel+ di,emos &ue a primeira
aponta para a segunda.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;13
A#ontadores
=s int[s guardam inteiros. =s float[s guardam
nXmeros de ponto flutuante. =s c4ar[s guardam
caracteres. =s a#ontadores guardam endere!os de
mem6ria.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;1$
A#ontadores
Para declarar um apontador temos a seguinte forma
geral:
ti#ofdof#onteiro Lnomefdaf$ari($elT
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;1-
A#ontadores
\ o asterisco (L* &ue fa, o compilador sa#er &ue
a&uela vari7vel n"o vai guardar um valor mas sim um
endere!o para a&uele tipo especificado. Tamos ver
exemplos de declara!)es:
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;10
A#ontadores
As lin3as a seguir declaram tr's apontadores (#+
tem# e inicio*:
c3ar Kp8 JK apontador para caracteres KJ
int Ktemp+ Kinicio8 JK apontadores para inteiros KJ
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;11
A#ontadores
= primeiro exemplo declara um apontador para um
caracter. = seguintes declaram dois apontadores para
inteiros. De notar &ue eles ainda n"o foram iniciali,ados.
Isto sinifica &!e eles a#ontam #ara !m l!ar
indefinido)
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;19
A#ontadores
Aste lugar pode estar+ por exemplo+ na por!"o da
mem6ria reservada ao sistema operativo do computador.
>sar o apontador nestas circunstVncias pode levar a um
#lo&ueio do computador+ ou a algo pior.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;1:
A#ontadores
O #onteiro de$e ser sem#re iniciali*ado
(apontado para algum lugar con3ecido* antes de ser
!sado:
@sto 5 muito importantePPP
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;9<
A#ontadores
Para atri#uir um valor a um apontador rec5m-criado
poder2amos igual7-lo a um valor de mem6ria. Gas+ como
sa#er a posi!"o na mem6ria de uma vari7vel do nosso
programaO
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;9;
A#ontadores
Deria muito dif2cil sa#er o endere!o de cada vari7vel
&ue usamos+ por&ue estes endere!os s"o
determinados pelo compilador na 3ora da compila!"o
e realocados na execu!"o.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;92
A#ontadores
Podemos ent"o deixar &ue o compilador fa!a este
tra#al3o por n6s. Para sa#er o endere!o de uma
vari7vel #asta usar o operador 8. Te?amos os
exemplos:
int co!ntG@XT
int L#tT
#tG8co!ntT
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;93
A#ontadores
Criamos um inteiro co!nt com o valor ;< e um
apontador para um inteiro #t. A express"o 8co!nt
d7-nos o endere!o de count+ o &ual arma,enamos em
#t.
Neparem &ue n"o alteramos o valor de co!nt+ &ue
continua valendo ;<.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;9$
A#ontadores
Como n6s colocamos um endere!o em #t+ ele est7
agora pronto a ser usado.
Podemos+ por exemplo+ alterar o valor de co!nt
usando #t.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;9-
A#ontadores
Para isso vamos usar o operador ]inverso] do
operador 8+ &ue 5 o operador L. %o exemplo
anterior+ escrevemos #tG8co!nt' a express"o L#t 5
e&uivalente ao pr6prio co!nt.
@sto significa &ue+ se &uisermos mudar o valor de
count para ;2+ #asta fa,er L#tG@A.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;90
A#ontadores
>ma o#serva!"o importante:
Apesar do s2m#olo ser o mesmo+ o operador L
(multiplica!"o* n"o 5 o mesmo operador &ue o L
(refer'ncia de ponteiros*+ o compilador consegue
diferenci7-los.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;91
A#ontadores
Nesumindo:
= caracter 8 pode ser lido como Bo endereo
deC.
= caracter L pode ser lido como Bcontedo deC.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;99
A#ontadores
Dupondo &ue a vari7vel soma est7 locali,ada no
endere!o @CHX+ e tem o valor de FF+ isto 5 soma G
FF:
@) pont E Qsoma8 5 o mesmo &ue #ont G @CHX
A) valor E Kpont8 5 o mesmo &ue $alor G FF
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;9:
E/em#lo"
iinclude Hstdio.3I
int main (*
j
int num+valor8
int Kp8
numE--8
pEQnum8 JK aponta para o endere!o de num KJ
valorEKp8 JK valor 5 igualado a num de uma maneira indirecta KJ
printf (]cncnMdcn]+valor*8
printf (]Andereco para onde o ponteiro aponta: Mpcn]+p*8
printf (]Talor da variavel apontada: Mdcn]+Kp*8
return(<*8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:<
E/em#lo"
iinclude Hstdio.3I
int main (*
j
int num+Kp8
numE--8
pEQnum8 JK aponta para o endere!o de num KJ
printf (]cnTalor inicial: Mdcn]+num*8
KpE;<<8 JK Guda o valor de num de uma maneira indirecta KJ
printf (]cnTalor final: Mdcn]+num*8
return(<*8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:;
A#ontadores
%os exemplos anteriores vimos um primeiro exemplo
do funcionamento dos apontadores. %o primeiro
exemplo+ o c6digo Y# usado na fun!"o #rintf.0
indica / fun!"o &ue ela deve imprimir um endere!o.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:2
A#ontadores
As pr6ximas opera!)es+ tam#5m muito usadas+ s"o o
incremento e o decremento.
Dupondo &ue # 5 um apontador+ o &ue significar"o as
opera!)es seguintesO
pFF8
p--8
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:3
A#ontadores
4uando incrementamos um apontador ele passa a apontar
para o pr6ximo valor do mesmo tipo para o &ual o
apontador aponta (pr6xima posi!"o de mem6ria*.
Neparem &ue estamos a falar de opera!)es com
apontadores e n"o de opera!)es com o conteXdo das
vari7veis para as &uais eles apontam.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:$
A#ontadores
De &uisermos incrementar o conteXdo da vari7vel em
ve, da posi!"o de mem6ria apontada pelo apontador
#+ devemos escrever:
(Kp*FF8 JKincrementoKJ
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:-
A#ontadores
\ importante notar &ue:
Cada ve, &ue um apontador 5 incrementado
(pFF*+ ele aponta para o local de mem6ria do
#r/imo elemento do se! ti#o3%ase.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:0
A#ontadores
Ax:
c3ar Kc3 E 2<<<8 JK apontador c3 E 2<<< KJ
int Ki E 2<<<8 JK apontador i E 2<<< KJ
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:1
A#ontadores
Neparem &ue+ como a vari7vel c4 5 um apontador
para caracteres (; #Lte* e aponta para a posi!"o de
mem6ria 2<<<+ a pr6xima posi!"o vai ser 2<<;.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;:9
A#ontadores
%o entanto+ como a vari7vel i 5 um apontador para
inteiros (2 #Ltes* e aponta tam#5m para o endere!o
2<<<+ a pr6xima posi!"o ser7 2<<2.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C ;::
A#ontadores
h7 no entanto opera!)es &ue n"o podemos efectuar
com apontadores. %"o podemos dividir ou multiplicar
apontadores+ adicionar dois apontadores+ adicionar ou
su#trair float[s ou do!%le[s de apontadores.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<<
E/erc2cios"
a* Axpli&ue a diferen!a entre:
pFF8 (Kp*FF8 K(pFF*8
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<;
E/erc2cios"
#* 4ual o valor de L no final do programa seguinteO
Wente primeiro desco#rir e depois verifi&ue no
computador o resultado. A seguir+ escreva um JK
coment7rio KJ em cada comando de atri#ui!"o
explicando o &ue ele fa, e o valor da vari7vel /
es&uerda do eEe ap6s sua execu!"o.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<2
E/erc2cio %0
int main(*
j
int L+ Kp+ x8
L E <8
p E QL8
x E Kp8
x E $8
(Kp*FF8
x--8
(Kp* E xF(Kp*8
printf (]L E Mdcn]+ L*8
return(<*8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<3
7ol!o e/erc2cio %0
int main(*
j
int L+ Kp+ x8
L E <8 JK atri#ui o valor < a lKJ
p E QL8 JK P aponta para a posi!"o de mem6ria de l KJ
x E Kp8 JK atri#ui a f o valor apontado por P (fE<* KJ
x E $8 JK atri#ui o valor $ a f KJ
(Kp*FF8 JK incrementa o valor apontado por P (PE;* KJ
x--8 JK decrementa o valor de f (fE3* KJ
(Kp* E xF(Kp*8 JK o valor apontado por P E 3F; (PE$* KJ
printf (]L E Mdcn]+ L*8 JJ imprime o valor de l &ue 5 o apontado por P
return(<*8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<$
E/erc2cio"
Ascreva um programa &ue+ recorra a apontadores para somar
dois nXmeros inteiros introdu,idos pelo utili,ador e imprima no
final o resultado da soma e endere!o de mem6ria de cada
apontador.
1ota" %"o se es&ue!a de iniciali,ar logo no in2cio do programa
os apontadores.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<-
7ol!o"
int x+ L+ KpL+ Kpx+ resultado8
pxEQx8
pLEQL8
printf(]cn@ntrodu,a o primeiro valor:cn]*8
scanf(]Md]+Qx*8
printf(]cn@ntrodu,a o segundo valor:cn]*8
scanf(]Md]+QL*8
resultadoE(Kpx*F(KpL*8
printf(]cnNesultado: Mdcn]+ resultado*8
printf(]cnPosicao apontador x: MpcnPosicao apontador L: Mpcn]+ px+pL*8
sLstem(]PA>DA]*8
return <8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<0
-irecti$as de com#ilao"
= pr5-processador C 5 um programa &ue examina o
programa fonte escrito em C e executa modifica!)es+
#aseadas nas Directivas de Compila!"o. As directivas
de compila!"o s"o comandos &ue n"o s"o
compilados.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<1
-irecti$as de com#ilao"
Wodas as directivas de compila!"o s"o iniciadas pelo
caracter N. As directivas podem ser colocadas em
&ual&uer parte do programa (preferencialmente no
in2cio*.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<9
-irecti$as de com#ilao"
a7 vimos+ e usamos muito+ a directiva Nincl!de.
Da#emos &ue ela n"o gera c6digo mas di, ao
compilador &ue ele deve incluir um ar&uivo externo
na 3ora da compila!"o. As directivas do C s"o
identificadas por come!arem por N.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2<:
-irecti$as de com#ilao"
>ma outra directiva 5 a directiva Ndefine e tem a
seguinte forma geral:
Ndefine nomefdafmacro se&!Rnciafdefcaracteres
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;<
-irecti$as de com#ilao"
4uando usamos esta directiva+ estamos a di,er ao
compilador &ue sempre &ue ele encontrar o
nome^da^macro no programa a ser compilado+ ele deve
su#stitui-lo pela se&u'ncia^de^caracteres fornecida.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;;
E/em#lo"
iinclude Hstdio.3I
idefine P@ 3.;$;0
idefine TANDA= ]2.<2B
int main (*
j
printf (]Programa versao Ms]+TANDA=*8
printf (]= numero pi vale: Mf]+P@*8
return <8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;2
-irecti$as de com#ilao"
=utra directiva+ 5 a directiva N!ndef &ue tem a
seguinte forma geral:
N!ndef nomefdafmacro
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;3
-irecti$as de com#ilao"
Asta directiva fa, com &ue a macro &ue a segue se?a
apagada da ta#ela interna &ue guarda as macros. =
compilador passa a partir deste ponto a n"o con3ecer
mais esta macro.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;$
E/erc2cio"
Ascreva um programa &ue calcule a 7rea de uma
circunfer'ncia cu?o raio 5 introdu,ido pelo utili,ador.
Para calcular a 7rea use a f6rmula .r
2
e use uma
directiva para especificar o valor de .
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;-
Fic4eiros"
Para manipularmos fic3eiros+ a linguagem C disp)e de
uma s5rie de fun!)es+ cu?os prot6tipos est"o reunidos em
stdio)4 . Wodas estas fun!)es tra#al3am com o conceito
de Bapontador para fic3eiro].
Podemos declarar um apontador de fic3eiros da seguinte
maneira:
FILE L#T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;0
Fic4eiros"
FILE L#
= apontador # ser7 ent"o um apontador para um
fic3eiro. \ usando este tipo de apontadores &ue
podemos manipular fic3eiros em C.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;1
Fic4eiros"
A primeira fun!"o de &ue vamos falar 5 a fun!"o:
fo#en.0
Asta 5 a fun!"o de a#ertura de fic3eiros. = seu prot6tipo
5:
FILE Lfo#en .c4ar Lnomefdoffic4eiro' c4ar Lmodo0T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;9
Fic4eiros"
= nome^do^fic3eiro determina &ual o fic3eiro a a#rir.
= modo de a#ertura di, / fun!"o fo#en.0 &ue tipo
de opera!)es se v"o fa,er so#re o fic3eiro. A ta#ela
seguinte mostra alguns dos poss2veis modos de
a#ertura:
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2;:
Godo Dignificado
BrC
A#re um ar&uivo texto para leitura. = ar&uivo deve existir antes de ser a#erto.
B`C
A#rir um ar&uivo texto para escrita. De o ar&uivo n"o existir+ ele ser7 criado. De ?7 existir+ o
conteXdo anterior ser7 destru2do.
BaC
A#rir um ar&uivo de texto para escrita. =s dados ser"o adicionados no fim do ar&uivo
(BappendC*+ se ele ?7 existir+ ou um novo ar&uivo ser7 criado+ no caso de n"o existir.
Br#C
A#re um ar&uivo #in7rio para leitura. @gual ao modo BrC anterior+ s6 &ue o ar&uivo 5 #in7rio.
Ba#C
Acrescenta dados #in7rios no fim do ar&uivo+ como no modo BaC anterior+ s6 &ue o ar&uivo 7
#in7rio.
BrFC
A#re um ar&uivo texto para leitura e escrita. = ar&uivo deve existir e pode ser modificado.
B`FC
Cria um ar&uivo texto para leitura e escrita. De o ar&uivo existir+ o conteXdo anterior ser7
destru2do. De n"o existir ser7 criado.
BaFC
A#re um ar&uivo texto para escrita e leitura. =s dados ser"o adicionados no fim do ar&uivo se
ele ?7 existir+ ou um novo ar&uivo ser7 criado+ no caso de ar&uivo existente anteriormente.
BrF#C
A#re um ar&uivo #in7rio para leitura e escrita. = mesmo &ue BrFC acima+ s6 &ue o ar&uivo 5
#in7rio.
B`F#C
Cria um ar&uivo #in7rio para leitura e escrita. = mesmo &ue B`FC acima+ s6 &ue o ar&uivo 5
#in7rio.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 22<
Fic4eiros"
Poder2amos ent"o+ para a#rir um ar&uivo #in7rio para
escrita+ escrever:
@LA Kfp8 JK Declara!"o do apontadorKJ
fpEfopen (]exemplo.#in]+]`#]*8
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 22;
Fic4eiros"
De notar &ue no exemplo anterior apenas indicamos o
nome do fic3eiro (exemplo.#in*+ neste caso 5 necess7rio
&ue ele este?a no direct6rio do nosso programa.
De o fic3eiro n"o estiver no direct6rio do nosso programa+
devemos indicar todo o camin3a at5 ao fic3eiro (por
exemplo: C:c=s Geus Documentoscexemplo.#in*.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 222
Fic4eiros"
>ma ve, a#erto um fic3eiro+ podemos ler ou escrever nele
utili,ando as fun!)es &ue ser"o apresentadas a seguir.
Dempre &ue estivermos a tra#al3ar com fic3eiros+ existe
uma esp5cie de posi!"o actual nesse fic3eiro. Asta 5 a
posi!"o onde ser7 lido ou escrito o pr6ximo caracter.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 223
Fic4eiros"
4uando aca#amos de usar um fic3eiro &ue a#rimos+ devemos
fec37-lo. Para isso usa-se a fun!"o fclose.0:
int fclose .FILE Lf#0T
= ponteiro f# passado / fun!"o fclose.0 determina o fic3eiro a
ser fec3ado. A fun!"o retorna ,ero no caso de sucesso.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 22$
Fic4eiros"
ec3ar um fic3eiro fa, com &ue &ual&uer caracter &ue
ten3a permanecido no ]#uffer] associado ao fluxo de
sa2da se?a gravado. Gas+ o &ue 5 este ]#uffer]O
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 22-
Fic4eiros"
4uando enviamos caracteres para serem gravados num
fic3eiro+ estes caracteres s"o arma,enados
temporariamente numa 7rea da mem6ria (o ]#uffer]* em
ve, de serem escritos em disco imediatamente.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 220
Fic4eiros"
D6 &uando o ]#uffer] estiver c3eio+ 5 &ue o seu
conteXdo 5 escrito no disco e de uma s6 ve,. A ra,"o
para se fa,er isto tem a ver com a efici'ncia nas leituras
e grava!)es de fic3eiros.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 221
Fic4eiros"
De+ para cada caracter &ue fossemos gravar+
tiv5ssemos &ue posicionar a ca#e!a de grava!"o num
ponto espec2fico do disco+ apenas para gravar a&uele
caracter+ as grava!)es seriam muito lentas.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 229
Fic4eiros"
Assim estas grava!)es s6 ser"o efectuadas &uando
3ouver um volume ra,o7vel de informa!)es a serem
gravadas ou &uando o fic3eiro for fec3ado.
A fun!"o e/it.0 fec3a todos os ar&uivos &ue um
programa tiver a#erto.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 22:
Fic4eiros"
#!tc .0
A fun!"o #!tc.0 5 a primeira fun!"o de escrita de
fic3eiros &ue vamos estudar. = seu prot6tipo 5:
int #!tc .int c4' FILE Lf#0T
Ascreve um caracter no ar&uivo.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 23<
Fic4eiros"
etc .0
Netorna um caracter lido do fic3eiro. Prot6tipo:
int etc .FILE Lf#0T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 23;
Fic4eiros"
feof .0
A= (]And of file]* indica o fim de um fic3eiro. ms ve,es+ 5
necess7rio verificar se um fic3eiro c3egou ao fim. Para isto
podemos usar a fun!"o feof.0. Ala retorna n"o-,ero se o
fic3eiro c3egou ao A=+ caso contr7rio retorna ,ero. = seu
prot6tipo 5:
int feof .FILE Lf#0T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 232
Fic4eiros"
=utra forma de se verificar se o final do fic3eiro foi
atingido 5 comparar o caracter lido por etc.0 com
EOF.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 233
E/em#lo"
iinclude Hstdio.3I
iinclude Hstdli#.3I
int main(*
j
@LA Kfp8
c3ar stringZ;<<[8
int i8
fp E fopen(]ar&uivo.txt]+]`]*8
printf(]Antre com a string a ser gravada no ar&uivo:]*8
gets(string*8
for(iE<8 stringZi[8 iFF*
putc(stringZi[+ fp*8
fclose(fp*8
return <8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 23$
E/erc2cio"
Ascreva um programa &ue a#ra o fic3eiro utili,ado no
programa anterior (ar&uivo.txt* e &ue conte o nXmero
de caracteres nele presenteJescritos.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 23-
7ol!o"
int main(*
j
@LA Kfp8
c3ar c8
int nE<8
fp E fopen(]ar&uivo.txt]+]r]*8
`3ile((c E getc(fp** PE A=* j JK An&uanto n"o c3egar ao final do ar&uivo KJ
printf(]Mc]+ c*8 JK imprime o caracter lido KJ
nFF8 k
fclose(fp*8
printf(]cn= numero de caracteres E Mdcn]+n*8
sLstem(]PA>DA]*8
return <8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 230
Fic4eiros"
F!n\es Padro
As fun!)es padr"o permitem ao programador ler e
escrever em fic3eiros de uma forma padr"o como ?7
l2amos e escrev2amos no ecr".
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 231
Fic4eiros"
f#rintf .0
A fun!"o f#rintf.0 funciona como a fun!"o #rintf.0. A
diferen!a 5 &ue a sa2da de f#rintf.0 5 um fic3eiro e n"o o
ecr" do computador. Prot6tipo:
int f#rintf .FILE Lf#' c4ar Lstr' )))0T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 239
Fic4eiros"
Como ?7 era de esperar+ a Xnica diferen!a do prot6tipo
de f#rintf.0 para o de #rintf.0 5 a especifica!"o do
fic3eiro destino atrav5s do apontador para esse fic3eiro.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 23:
Fic4eiros"
fscanf .0
A fun!"o fscanf.0 funciona como a fun!"o scanf.0.
A diferen!a 5 &ue fscanf.0 l' de um fic3eiro e n"o do
teclado do computador. Prot6tipo:
int fscanf .FILE Lf#' c4ar Lstr')))0T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$<
E/em#lo"
int main(*
j
@LA Kp8
c3ar strZ9<[+c8
printf(]cncn Antre com um nome para o ar&uivo:cn]*8
gets(str*8
p E fopen(str+]`]*8
fprintf(p+]Aste e um ar&uivo c3amado:cnMscn]+ str*8
fclose(p*8
p E fopen(str+]r]*8
`3ile (Pfeof(p** j
fscanf(p+]Mc]+Qc*8
printf(]Mc]+c*8 k
fclose(p*8
sLstem(]PA>DA]*8
return(<*8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$;
Fic4eiros"
fsee] .0
Para se fa,er procuras e acessos aleat6rios em
fic3eiros usa-se a fun!"o fsee].0. Asta move a
posi!"o corrente de leitura ou escrita no fic3eiro de
um ponto para outro / escol3a. = seu prot6tipo 5:
int fsee] .FILE Lf#' lon n!m%ctes' int oriem0T
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$2
Fic4eiros"
= parVmetro origem determina a partir de onde os n!m%ctes de
movimenta!"o ser"o contados. =s valores poss2veis s"o definidos
por macros em Wstdio)4V e s"o:
1ome <alor 7inificado
DAAn^DAW < @n2cio do ar&uivo
DAAn^C>N ; Ponto corrente no ar&uivo
DAAn^A%D 2 im do ar&uivo
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$3
Fic4eiros"
reEind .0
A fun!"o reEind.0 tem o seguinte prot6tipo:
$oid reEind .FILE Lf#0T
Desloca a posi!"o corrente do fic3eiro para o in2cio.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$$
Fic4eiros"
remo$e .0
Prot6tipo:
int remo$e .c4ar Lnomefdofar&!i$o0T
Apaga um fic3eiro especificado.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$-
E/erc2cio"
Ascreva um programa &ue pe!a ao utili,ador os seus
dados pessoais (%ome+ Gorada e @dade* e escreva esses
dados num fic3eiro c3amado BDados^pessoaisC.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$0
int main(*
j
int idadeE<8
c3ar nomeZ2<[+ moradaZ$<[8
@LA Kp8
printf(]cn@ntrodu,a o seu nome:cn]*8 gets(nome*8
printf(]cn@ntrodu,a a sua morada:cn]*8 gets(morada*8
printf(]cn@ntrodu,a a sua idade:cn]*8 scanf(]Md]+Qidade*8
pEfopen(]Dados^pessoais.txt]+]aF]*8
printf(]cnA escrever no fic3eiro...cn]*8
fprintf(p+]cnctKKKDAD=D PADD=A@DKKKcncn%ome: MscnGorada: Mscn@dade: -I
-I Mdcn]+nome+morada+idade*8
fclose(p*8
printf(]cnAscrita concluida...cncn]*8
sLstem(]PA>DA]*8
return <8
k
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$1
E/erc2ciosg
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$9
E/erc2cio"
Ascreva um programa &ue pe!a um valor em metros e o
converta para &uil6metros.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2$:
E/erc2cio"
Ascreva um programa &ue calcule a 7rea de um triVngulo.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2-<
E/erc2cio"
Ascreva um programa &ue pe!a ao utili,ador para inserir
as classifica!)es das disciplinas de Gatem7tica+
Portugu's e @ngl's. = programa deve apresentar a
m5dia das tr's disciplinas.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2-;
E/erc2cio"
Ascreva um programa &ue pe!a uma classifica!"o de
uma disciplina e diga se o utili,ador est7 BAprovadoC ou
BNeprovadoC.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2-2
E/erc2cio"
Ascreva um programa &ue pe!a ao utili,ador tr's
nXmeros inteiros e apresente &ual o maior nXmero
inserido.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2-3
E/erc2cio"
Ascreva um programa &ue permita ao utili,ador calcular
e&ua!)es de 2 grau. Para isso o programa deve pedir os
coeficientes (a+ # e c* de cada elementos da e&ua!"o. =
programa deve indicar se a e&ua!"o d7 valores
imagin7rios ou n"o.
Axemplo: ax
2
F#xFc
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2-$
E/erc2cio"
Ascreva um programa &ue permita ao utili,ador calcular
a 7rea de um c2rc!lo+ de um trien!lo+ de um
tra#6*io e de um recten!lo. = programa deve
apresentar um menu &ue permita escol3er &ual a figura
geom5trica para a &ual se pretende calcular a 7rea e &ue
permita sair do programa apenas &uando o utili,ador
&uiser.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2--
Frm!las e/erc2cio anterior"
C2rc!lo" pi K raio
2
;rien!lo" (#aseKaltura* J 2
;ra#6*io" Z (#ase maiorF#ase menor* K altura [ J 2
Recten!lo" lado K lado
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2-0
E/erc2cio"
Crie um programa &ue leia um vector #idimensional de
$x$ posi!)es em &ue cada lin3a representa o nXmero
dum aluno e cada coluna a cota!"o o#tida pelo mesmo
numa unidade de avalia!"o. = programa dever7 calcular
a m5dia de cada aluno #em como as suas mel3or e pior
perguntas e o nXmero de aprova!)es.
Centro de Formao Profissional da Indstria Electrnica
Linguagem C 2-1
E/erc2cio"
a,er um programa em C &ue leia ;< nXmeros e os
arma,ene num vector. De seguida deve ser lido um
nXmero a ser pes&uisado nesse vector. = programa deve
escrever no ecr" a posi!"o em &ue o mesmo se encontra
ou uma mensagem informando &ue o nXmero n"o est7
no vector.
Centro de Formao Profissional da Indstria Electrnica
E/erc2ciosg
Convers"o decimal para #in7rio
Pes&uisa e ordena!"o de arraL
%Xmero m7gico
C7lculo valor das resist'ncias
Auromil3)es
Conversor de temperaturas (nelvin+ Celsius e a3ren3eit* e
comprimento (nms+ metros+ polegadas*
Dimula!"o de elevador
aogo do Salo
Linguagem C 2-9

S-ar putea să vă placă și