Вы находитесь на странице: 1из 57

LINGUAGEM C UMA INTRODUO

AULA 1 Conceitos muito bsicos



1 Introduo

O C nasceu na dcada de 70. Seu inventor, Dennis Ritchie, implementou-o pela
primeira vez usando um DEC PDP-11 rodando o sistema operacional UNIX. O C
derivado de uma outra linguagem: o B, criado por Ken Thompson. O B, por sua vez,
veio da linguagem BCPL, inventada por Martin Richards.

O C uma linguagem de programao genrica que utilizada para a criao de
programas diversos como processadores de texto, planilhas eletrnicas, sistemas
operacionais, programas de comunicao, programas para a automao industrial,
gerenciadores de bancos de dados, programas de projeto assistido por computador,
programas para a soluo de problemas da Engenharia, Fsica, Qumica e outras
Cincias, etc ...

Estudaremos a estrutura do ANSI C, o C padronizado pela ANSI. Veremos
ainda algumas funes comuns em compiladores para alguns sistemas operacionais.
Quando no houver equivalentes para as funes em outros sistemas, apresentaremos
formas alternativas de uso dos comandos.

1.1 - O C " Case Sensitive"

Vamos comear o nosso curso ressaltando um ponto de suma importncia: o C
"Case Sensitive", isto , maisculas e minsculas fazem diferena. Se voc declarar
uma varivel com o nome soma ela ser diferente de Soma, SOMA, SoMa ou sOmA. Da
mesma maneira, os comandos do C if e for, por exemplo, s podem ser escritos em
minsculas pois seno o compilador no ir interpret-los como sendo comandos, mas
sim como variveis.

1.2 O Compilador

Os computadores no entendem nada alm de comandos, dados e endereos
escritos em linguagem binria. Mas, qualquer ser humano que se disponha a tentar
desenvolver um programa complexo programando diretamente em linguagem de
mquina simplesmente vai ficar louco muito antes de concluir seu trabalho.

Para resolver este impasse, surgiram as linguagens de programao, que
permitem escrever programas usando comandos fceis de lembrar e funes j prontas.
O compilador programa que permite transformar este cdigo escrito na linguagem de
drSolutions Diego Mendes Rodrigues
Pgina 1 / 9

programao em linguagem de mquina, gerando o binrio ou programa executvel.
Existem diversos compiladores disponveis no mercado, para as mais variadas
linguagens de programao. Um exemplo de compilador muito usado atualmente o
GCC da Free Software Fundation, que possui mdulos para compilar programas de
vrias linguagens. Nesse curso ser usado o compilador Dev-C++que na verdade uma
interface de desenvolvimento integrada, que possui um editor de cdigo, um
compilador, um debugador e outras coisas mais...

1.3 Cdigo fonte

O cdigo fonte de um programa o arquivo (ou conjunto de arquivos) que
contm os comandos e rotinas que formam um programa. Este cdigo ento
compilado, gerando o arquivo binrio (ou executvel) que ser executado. Ao comprar
um programa qualquer, recebemos apenas os binrios, que permitem instalar e executar
o programa, mas no o cdigo fonte, que permitiria alter-lo ou entender como ele
funciona.

Em programas comerciais, o cdigo fonte cuidadosamente guardado, mas
existe um movimento crescente de desenvolvimento de softwares livres, onde o cdigo
fonte distribudo junto com o programa, o que permite a qualquer um com
conhecimentos de programao alter-lo, corrigir bugs ou adicionar novos recursos,
desde que sejam mantidos os crditos para o criador original. O movimento de software
livre inclui o Linux e a maior parte dos aplicativos desenvolvidos para ele.

1.4 Esqueleto bsico de um programa em C

Todos os programas das primeiras aulas de nosso curso em C possuem um
esqueleto, ou seja, um conjunto de instrues bsicas. Nesse momento o leitor dever
apenas decorar e usar esse esqueleto. No decorrer do curso, todas as linhas de cdigo
desse esqueleto sero devidamente explicadas.
O autor desse material acredita que uma explicao dessas linhas nesse momento
apenas acrescenta uma complexidade adicional no processo de aprendizado, sem
acrescentar nenhum benefcio imediato.

Esqueleto bsico:
#i ncl ude <st di o. h>

i nt mai n( ) {

r et ur n 0;
}

Todos os programas que iremos escrever nessas primeiras aulas sero formados
por um conjunto de comandos (ou instrues) entre a linha int main() e a linha return
0;. Veja um exemplo de um programa (voc no precisa entend-lo agora):

Exemplo 1
#i ncl ude <st di o. h>

i nt mai n( ) {
drSolutions Diego Mendes Rodrigues
Pgina 2 / 9


i nt i dade;
pr i nt f ( Qual a sua i dade?\ n) ;
scanf ( %d, &i dade) ;
pr i nt f ( \ nNossa. . %d ani nhos! ! \ n, i dade) ;

r et ur n 0;
}

1.5 Para que serve o ponto-e-vrgula?

O ponto-e-vrgula ( ; ) deve ser usado ao final de cada comando em Linguagem
C. Isto uma regra geral, mas como todos sabem, toda regra possui excees.
Considere inicialmente essas duas excees:
As linhas de #include <>no devem possuir ponto-e-vrgula
As linhas com { ou } normalmente no devem possuir ponto-e-vrgula

Os dois programas abaixo esto errados:

Exemplo 2
#i ncl ude <st di o. h>

i nt mai n( ) {

i nt i dade;
pr i nt f ( Qual a sua i dade?\ n) ;
scanf(%d, &idade)
pr i nt f ( \ nNossa. . %d ani nhos! ! \ n, i dade) ;

r et ur n 0;
}

Exemplo 3
#include <stdio.h>;

i nt mai n( ) {
i nt i dade;
pr i nt f ( Qual a sua i dade?\ n) ;
scanf ( %d, &i dade) ;
pr i nt f ( \ nNossa. . %d ani nhos! ! \ n, i dade) ;

r et ur n 0;
};

drSolutions Diego Mendes Rodrigues
Pgina 3 / 9

2. Primeiros comandos
2.1 printf()

O comando printf() serve para exibirmos mensagens na tela. Seu uso mais simples da
forma:
pr i nt f ( seu t ext o aqui ! ) ;

Observe que o uso das aspas duplas obrigatrio, portanto os seguintes comandos
estariam errados:
pr i nt f ( seu t ext o aqui ! ) ;
pr i nt f ( seu t ext o aqui ! ) ;

Existem vrias combinaes de caracteres especiais que podem ser usados
dentro do comando printf(), como por exemplo o \n. Esse \n quer dizer quebra de
pinha, ou pule uma linha.

Observe o programa abaixo:
Exemplo 4
#i ncl ude <st di o. h>

i nt mai n( ) {

pr i nt f ( Bemvi ndo! ) ;
pr i nt f ( Est ou apr endendo Li guagemC! ) ;
pr i nt f ( Bye, bye. . . ) ;

r et ur n 0;
}

Ao compilarmos este programa, o resultado ser:


Agora, vamos introduzir quebras de linha ( \n ) dentro do segundo e do terceiro
printf(), de forma que o nosso programa fique da seguinte maneira:

Exemplo 5
#i ncl ude <st di o. h>

i nt mai n( ) {

pr i nt f ( Bemvi ndo! ) ;
pr i nt f ( \ nEst ou apr endendo Li guagemC! ) ;
pr i nt f ( \ nBye, bye. . . ) ;

r et ur n 0;
}
drSolutions Diego Mendes Rodrigues
Pgina 4 / 9


Ao compilarmos este programa, o resultado ser:


2.2 getchar()

A funo getchar() espera que o usurio digite um caracter seguido de um
<ENTER>ou que ele simplesmente pressione um <ENTER>.
Essa funo ser muito til nos primeiros programas do curso, pois se no
colocarmos esse comando no final dos programas, ao compilarmos um determinado
cdigo fonte com o DEV-C++, nosso programa ir apenas piscar na tela sair, pois o
programa ser executado e encerrado. Voc provavelmente no ver o resultado de seu
programa. Esse problema ocorre em todos os exemplos apresentados at esse
momento nesse material, portanto o ideal seria corrigir o programa anterior da seguinte
forma:

Exemplo 6
#i ncl ude <st di o. h>

i nt mai n( ) {

pr i nt f ( Bemvi ndo! ) ;
pr i nt f ( \ nEst ou apr endendo Li guagemC! ) ;
pr i nt f ( \ nBye, bye. . . ) ;
pr i nt f ( \ n\ nPr essi one <ENTER> par a sai r do pr ogr ama. ) ;
get char ( ) ;

r et ur n 0;
}

Ao compilarmos este programa, o resultado ser:


drSolutions Diego Mendes Rodrigues
Pgina 5 / 9

3. Compilando seu primeiro programa no DEV-C++

1 Passo: Abra o DEV-C++, v ao menu Arquivo, depois em Novo e finalmente
em Arquivo Fonte.





2 Passo: Digite o seu cdigo fonte (Exemplo 6) dentro do DEV-C++.



drSolutions Diego Mendes Rodrigues
Pgina 6 / 9


3 Passo: Salve o seu arquivo como um arquivo C. Parra isso primeiro v no menu
Arquivo, Salvar...



Na tela que ir abrir, escolha uma pasta para salvar o arquivo, depois escolha um nome
para o arquivo e finalmente na opo Salvar como tipo: escolha a opo C source
files (*.c), conforme a figura abaixo:



Observao: recomendado que voc crie uma pasta para salvar seus programas. Na
tela acima, eu criei uma pasta chamada ExemplosC e irei salvar todos os meus
programas dentro dela.
drSolutions Diego Mendes Rodrigues
Pgina 7 / 9

4 Passo: Compile e execute o seu programa atravs do menu Executar e Compilar e
Executar.



Caso voc tenha seguido todos os passos de forma correta, o seu programa ser
compilado e executado em uma janela de MS-DOS conforme a figura abaixo:


drSolutions Diego Mendes Rodrigues
Pgina 8 / 9

3.2 Erros de compilao

Quando voc cometer algum erro de digitao, ou erro de sintaxe no cdigo
fonte de seu programa, o DEV-C++no ir finalizar a compilao do programa. No
exemplo abaixo, um ponto-e-vrgula foi retirado para que fosse gerado um erro:



Ao compilarmos o programa, a seguinte tela gerada:



Entendendo essa tela:
O compilador est nos avisando que temos um erro na linha 8 do nosso programa
(seta laranja).
O erro que ele est apontando : sintax error before printf (seta azul), ou seja,
existe algum erro de sintaxe antes do printf() da linha 8. Esse erro exatamente o
erro que espervamos, pois foi removido o ponto-e-vrgula do final da linha 7, ento
a linha 7 no foi encerrada, logo temos um erro antes do printf() da linha 8!
O DEV-C++aponta no programa onde est o erro (seta vermelha).

drSolutions Diego Mendes Rodrigues
Pgina 9 / 9


LINGUAGEM C UMA INTRODUO


AULA 2 Conceitos bsicos

1 Identao

Um ponto fundamental organizao de escrita de cdigos fonte a identao.
Identar organizar horizontalmente de forma hierrquica as linhas de cdigo, de acordo
com o escopo onde elas se encontram. O pseudo programa abaixo exemplifica isto.

Var i avel A = 0
SE ( Var i avel A < 1) ENTO
ESCREVA " Var i vel A menor que 1. "
FI M SE

Observe que o comando ESCREVA est adiantado em relao aos outros
comandos, que fazem parte do escopo principal do algoritmo e esto alinhados
margem. Isto ocorre porque o comando ESCREVA no pertence diretamente ao escopo
do principal do programa, e sim ao escopo condicional SE..ENTO...FIM SE.

A identao independe da linguagem de programao que usamos. Mas ela varia
um pouco de acordo com a linguagem e tem comportamentos que so convencionados
de acordo com o uso dessas linguagens. No existe uma regra definida para identao.
Um exemplo prtico pode ser dado se quisermos implementar o pseudo programa acima
em Linguagem C:

Exemplo 7
#i ncl ude <st di o. h>

i nt mai n( ) {

i nt A=0;
i f ( A < 1 ) {
pr i nt f ( Var i vel A menor que 1. ) ;
}

get char ( ) ;
r et ur n 0;
}
(OBS: Esse if ser explicado em aulas posteriores aqui voc s deve observar a identao)

Observe o mesmo exemplo sem o uso de identao ficaria muito mais difcil de
ser lido e analisado:

Exemplo 8
#i ncl ude <st di o. h>
i nt mai n( ) {
i nt A=0;
i f ( A < 1 ) {
drSolutions Diego Mendes Rodrigues
Pgina 1 / 9

pr i nt f ( Var i vel A menor que 1. ) ;
}
get char ( ) ;
r et ur n 0;
}

2. Comentrios

Comentrios so blocos de programa que servem apenas para ajudar o
programador e seus colaboradores no processo de documentao do cdigo fonte. Em
programas de poucas linhas a incluso de comentrios pode parecer irrelevante, mas
quando trabalhamos com programas de centenas ou milhares de linhas, a falta de
comentrios pode prejudicar muito o entendimento do programa alguns dias depois que
ele foi escrito.

2.1 - Usando a barra dupla //

A primeira forma de incluirmos comentrios em um cdigo fonte atravs de
duas barras //. Esse tipo de comentrio serve apenas quando formos incluir um
comentrio de uma nica linha. Observe as linhas em negrito do exemplo abaixo:

Exemplo 9
#i ncl ude <st di o. h>

i nt mai n( ) {

//Mensagem de saudao
pr i nt f ( Bemvi ndo! ) ;
pr i nt f ( \ nEst ou apr endendo Li nguagemC! ) ;
pr i nt f ( \ nBye, bye. . . ) ;

//Esperando o usurio pressionar <ENTER> para sair do programa
pr i nt f ( \ n\ nPr essi one <ENTER> par a sai r do pr ogr ama. ) ;
get char ( ) ;

r et ur n 0;
}

O comentrio com barra dupla pode tambm vir no final de uma linha que
contenha um comando, como no exemplo abaixo:

Exemplo 10
#i ncl ude <st di o. h>

i nt mai n( ) {

pr i nt f ( Bemvi ndo! ) ;
pr i nt f ( \ nEst ou apr endendo Li nguagemC! ) ;
pr i nt f ( \ nBye, bye. . . ) ;
pr i nt f ( \ n\ nPr essi one <ENTER> par a sai r do pr ogr ama. ) ;

get char ( ) ; //Esperando o <ENTER>
r et ur n 0;
}
drSolutions Diego Mendes Rodrigues
Pgina 2 / 9

2.2 Comentrios com /* */

Qualquer trecho de programa entre /* e */ considerado um comentrio. A
grande diferena entre esse mtodo e o mtodo das duas barras que dessa forma
podemos criar comentrios de vrias linhas. Um grande uso desse tipo de comentrio
est nos cabealhos de programa, que normalmente so colocados no incio do cdigo
fonte para identificarmos o programa, conforme o exemplo abaixo:

Exemplo 11
/*
Programa exemplo
Linguagem C Uma Introduo
--
Diego M. Rodrigues
*/

#i ncl ude <st di o. h>

i nt mai n( ) {

pr i nt f ( Bemvi ndo! ) ;
pr i nt f ( \ nEst ou apr endendo Li nguagemC! ) ;
pr i nt f ( \ nBye, bye. . . ) ;
pr i nt f ( \ n\ nPr essi one <ENTER> par a sai r do pr ogr ama. ) ;
get char ( ) ;

r et ur n 0;
}

Normalmente usamos os dois tipos de comentrios para uma melhor organizao
dos cdigos fonte:

Exemplo 12
/*
Programa exemplo
Linguagem C Uma Introduo
--
Diego M. Rodrigues
*/

#i ncl ude <st di o. h>

i nt mai n( ) {

//Mensagem de saudao
pr i nt f ( Bemvi ndo! ) ;
pr i nt f ( \ nEst ou apr endendo Li nguagemC! ) ;
pr i nt f ( \ nBye, bye. . . ) ;

//Esperando o usurio pressionar <ENTER> para sair do programa
pr i nt f ( \ n\ nPr essi one <ENTER> par a sai r do pr ogr ama. ) ;
get char ( ) ;

r et ur n 0;
}

drSolutions Diego Mendes Rodrigues
Pgina 3 / 9

2.3 Comentrios no DEV-C++

Dentro do DEV-C++todos os comentrios ficam em cor cinza, conforme pode
ser visto na tela abaixo:



Conforme j foi dito, comentrios servem apenas para ajudar o programador e
seus colaboradores no processo de documentao do cdigo fonte e no produzem
nenhuma alterao no programa compilado. Observe a tela gerada na compilao do
exemplo anterior:



drSolutions Diego Mendes Rodrigues
Pgina 4 / 9

3. Cdigo fonte X programa executvel

Quando salvamos um cdigo fonte no DEV-C++com o tipo C source files
(*.c) um arquivo com extenso .c armazenado no nosso computador. Quando
compilamos o nosso programa, um arquivo com extenso .exe gerado na mesma pasta
em que o arquivo .c foi salvo, este arquivo .exe o nosso programa executvel, em
outras palavras, ele o resultado do processo de compilao do cdigo fonte com
extenso .c.



O arquivo .exe depois de gerado completamente independente do cdigo fonte.
Apenas um duplo clique nesse arquivo j executa o programa.



Essa independncia do programa gerado implica que quando quisermos enviar
nosso programa para outra pessoa ou copiarmos o nosso programa em outro
computador, basta enviarmos (ou copiarmos) o arquivo .exe, ou seja, no existe a
necessidade de copiarmos o cdigo fonte.
Dessa forma a pessoa que recebe o programa pronto pode apenas execut-lo,
sem poder alter-lo. Para que essa outra pessoa pudesse alterar o programa ela precisaria
possuir o cdigo fonte (arquivo .c), alterar o cdigo fonte e depois recompilar o
programa.
drSolutions Diego Mendes Rodrigues
Pgina 5 / 9

4. O que so Algoritmos?

Um Algoritmo uma seqncia de instrues ordenadas de forma lgica
para a resoluo de uma determinada tarefa ou problema.

Um algoritmo formalmente uma seqncia finita de passos que levam a
execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma
seqncia de instrues que do cabo de uma meta especfica. Estas tarefas no podem
ser redundantes nem subjetivas na sua definio, devem ser claras e precisas.

Como exemplos de algoritmos podemos citar os algoritmos das operaes
bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais decimais. Outros
exemplos seriam os manuais de aparelhos eletrnicos, como um videocassete, que
explicam passo-a-passo como, por exemplo, gravar um evento.

At mesmo as coisas mais simples, podem ser descritas por seqncias lgicas.
Por exemplo, podemos descrever o algoritmo de como chupar uma bala:

Chupar uma bala
Pegar a bala
Retirar o papel
Chupar a bala
J ogar o papel no lixo

O algoritmo acima no pode ser implementado computacionalmente atravs de
uma linguagem de programao. Vamos ento partir para um problema real, que
podemos implementar com Linguagem C. Um exemplo de algoritmo implementvel o
clculo da mdia de um aluno.

Calcular mdia
Receba a nota da prova mensal
Receba a nota da prova bimestral
Calcule a mdia com a frmula media=(mensal+bimestral)/2
Exiba a mdia na tela

O programa que realiza a tarefa acima poderia ser escrito em uma pseudo
linguagem da seguinte forma:

Var i avel mensal =0
Var i avel bi mest r al =0
Var i avel medi a=0

ESCREVA Di gi t e a not a mensal :
RECEBA mensal
ESCREVA Di gi t e a not a bi mest r al :
RECEBA bi mest r al
CALCULE medi a=( mensal +bi mest r al ) / 2
ESCREVA A mdi a do al uno :
ESCREVA medi a

drSolutions Diego Mendes Rodrigues
Pgina 6 / 9

Podemos agora escrever o nosso programa em Linguagem C baseado no
algoritmo acima (esse programa ser explicado detalhadamente durante as aulas 3 e
4):

Exemplo 13
/ *
Exempl o de al gor i t mo par a cl cul o de mdi a
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
f l oat mensal =0;
f l oat bi mest r al =0;
f l oat medi a=0;

/ / Recebendo a not a mensal
pr i nt f ( " \ nDi gi t e a not a mensal : " ) ;
scanf ( " %f " , &mensal ) ;

/ / Recebendo a not a bi mest r al
pr i nt f ( " \ nDi gi t e a not a bi mest r al : " ) ;
scanf ( " %f " , &bi mest r al ) ;

/ / Cal cul ando a mdi a
medi a = ( mensal +bi mest r al ) / 2;

/ / Most r ando a mdi a
pr i nt f ( " \ n\ nA mdi a do al uno %f " , medi a) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;
r et ur n 0;
}

Exemplo de execuo do programa acima:



Vale ressaltar que um algoritmo uma definio formal, completamente
independente de qualquer linguagem de programao especfica. Apenas como
ilustrao segue a implementao desse mesmo algoritmo Calcular mdia na
linguagem de programao COBOL:

drSolutions Diego Mendes Rodrigues
Pgina 7 / 9


exemplomedia.cob
* Exempl o do al gor i t mo CALCULAR MEDI A emCOBOL
* Li guagemC - Uma I nt r oducao
* Di ego M. Rodr i gues
I DENTI FI CATI ON DI VI SI ON.
PROGRAM- I D. exempl omedi a.
ENVI RONMENT DI VI SI ON.

DATA DI VI SI ON.
WORKI NG- STORAGE SECTI ON.
77 mensal PI C 99V9 VALUE ZERO .
77 bi mest r al PI C 99V9 VALUE ZERO .
77 medi a PI C 99v9 VALUE ZERO .

PROCEDURE DI VI SI ON.
DI SPLAY " Di gi t e a not a mensal : "
ACCEPT mensal
DI SPLAY " Di gi t e a not a bi mest r al : "
ACCEPT bi mest r al
COMPUTE medi a = ( mensal +bi mest r al ) / 2.
DI SPLAY " A medi a do al uno e: " , medi a
STOP RUN.
(No tente digitar esse cdigo no DEV-C++ que ele no sabe compilar programas na
Linguagem COBOL!)

A execuo desse programa compilado em COBOL apresenta a seguinte sada:




Apenas como um exemplo final, vamos implementar o mesmo algoritmo
Calcular mdia em um website utilizando HTML e J avaScript. Abaixo o cdigo
fonte:

media.htm
<! - - Exempl o de al gor i t mo par a cl cul o de mdi a emumwebsi t e
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
- - >
<ht ml >
<head>
<t i t l e>Exempl o de Mdi a</ t i t l e>
<scr i pt l anguage=" J avaScr i pt " >
f unct i on cal cul ar ( ) {
var xMensal = par seFl oat ( document . al uno. mensal . val ue) ;
var xBi ment r al = par seFl oat ( document . al uno. bi mest r al . val ue) ;
document . al uno. medi a. val ue = ( xMensal +xBi ment r al ) / 2;
}
</ scr i pt >
drSolutions Diego Mendes Rodrigues
Pgina 8 / 9

</ head>

<body>
<f or mname=" al uno" i d=" al uno" >
Di gi t e a not a mensal :
<i nput name=" mensal " t ype=" t ext " i d=" mensal " val ue=" 0" ><br >
Di gi t e a not a bi mest r al :
<i nput name=" bi mest r al " t ype=" t ext " i d=" bi mest r al " val ue=" 0" ><br >
<i nput t ype=" but t on" name=" Submi t " val ue=" Cal cul ar "
onCl i ck=" j avascr i pt : cal cul ar ( ) ; " >
<br ><br >
A mdi a do al uno :
<i nput name=" medi a" t ype=" t ext " i d=" medi a" val ue=" 0" di sabl ed>
</ f or m>
</ body>
</ ht ml >
(No tente digitar esse cdigo no DEV-C++ por que HTML no tem nada a ver com
Linguagem C!)

A execuo desse arquivo HTML em um Navegador resulta na seguinte tela:


drSolutions Diego Mendes Rodrigues
Pgina 9 / 9


LINGUAGEM C UMA INTRODUO


AULA 3 Variveis

1 O que so variveis

Uma varivel nada mais do que um espao na memria do computador para
armazenarmos algum tipo de informao. Todas as variveis de um programa em
Linguagem C devem ser declaradas antes de serem usadas. Isto necessrio para que
seja alocada memria para as mesmas. Existem diferentes tipos de variveis em C e o
tamanho destes tipos podem variar de acordo com o processador e a implementao do
compilador.

1.1 Tipos bsicos de variveis na Linguagem C

int: Esse tipo de varivel armazena valores numricos inteiro. Normalmente podem
ser armazenados valores entre -32.768 e +32.767 nesse tipo de varivel.
o Exemplos de valores que podem ser armazenados em uma varivel int: 100,
-28, 0, 19, 28965, -19852...
o Geralmente armazenado na memria com a tamanho de 2 bytes (ou
16bits).

float: O tipo float permite representar valores numricos pertencentes ao conjunto
dos nmeros reais. Normalmente podem ser armazenados valores entre 3.4*10
-38
e
3.4*10
+38
.
o Exemplos de valores que podem ser armazenados em uma varivel float:
75.87, -28.9985, 0.741, 199852.58, -852.87...
o Geralmente armazenado na memria com a tamanho de 4 bytes (ou 32
bits).

double: O tipo double tambm usado para representar valores numricos
pertencentes ao conjunto dos nmeros reais. A diferena entre uma varivel float e
uma varivel double que esta ltima possui o dobro da preciso, eu seja, pode
armazenar nmeros muito maiores.
o Normalmente podem ser armazenados valores entre 1.7*10
-308
e 1.7*10
+308

o Geralmente armazenado na memria com a tamanho de 8 bytes (ou 64
bits).

char: Usado para armazenar um nico caractere. Em outras palavras, este tipo
utilizado para se guardar valores definidos dentro da tabela ASCII (-127 a 127).
o Exemplos de valores que podem ser armazenados em uma varivel char: v
, t, 25...
o Geralmente armazenado na memria com a tamanho de 1 byte (ou 8 bits).
drSolutions Diego Mendes Rodrigues
Pgina 1 / 9


void: Esse tipo de varivel no armazena nenhum valor e usado normalmente
junto com ponteiros e funes, tpicos que sero abordados em outras aulas deste
curso.

1.2 - Declarando variveis

Toda varivel que ser usada em um programa em Linguagem C precisa ser
declarada. O processo de declarao de variveis fundamental para que o compilador
saiba quantos lugares (e de que tamanhos) ele dele reservar na memria do computador
para que o programa que est sendo compilado possa manipular seus dados.

O formato bsico de declarao de uma varivel em Linguagem C :

<t i po_da_var i vel > <nome_da_var i vel >;

Portanto, para declararmos uma varivel inteira chamada idade, escrevemos o
seguinte trecho de programa:

i nt i dade;

Para declararmos uma varivel inteira chamada idade e uma varivel float
(nmero real) chamada peso, escrevemos o seguinte trecho de programa:

i nt i dade;
f l oat peso;

Podemos declarar vrias variveis do mesmo tipo em uma nica linha,
separando seus nomes por uma vrgula, como abaixo:

f l oat mensal , bi mest r al , medi a;

Podemos escrever um programa bem intil, que apenas declara as variveis
idade, peso, mensal, bimestral e media e depois retorna. Esse exemplo no ir exibir
nada na tela, nem realizar nenhuma conta, nem armazenar nenhum valor nessas
variveis, ele ir apenas declarar as variveis.

Exemplo 14
#i ncl ude <st di o. h>

i nt mai n( ) {

i nt i dade;
f l oat peso;
f l oat mensal , bi mest r al , medi a;

r et ur n 0;
}
drSolutions Diego Mendes Rodrigues
Pgina 2 / 9

1.3 Nomes de variveis

Existem algumas regras bsicas que devem ser lembradas sempre que formos
nomear nossas variveis:
Escolha de nomes significativos para suas variveis, isso pode ajudar a entender o
que o programa faz e prevenir erros.
Voc pode usar quantos caracteres quiser para um nome de varivel com o primeiro
sendo obrigatoriamente uma letra ou sublinhado (_) e os demais podendo ser letras,
nmeros ou outros sublinhados.
Nunca use espaos em branco no nome de variveis.
Nunca use acentos ou caracteres especiais no nome de variveis.
Uma varivel no pode ter o mesmo nome de uma palavra reservada do C e no
dever ter o mesmo nome de uma funo. Abaixo a lista de palavras reservadas da
Linguagem C:
aut o doubl e i nt st r uct
br eak el se l ong swi t ch
case enum r egi st er t ypedef
char ext er n r et ur n uni on
const f l oat shor t unsi gned
cont i nue f or si gned voi d
def aul t got o si zeof vol at i l e
do i f st at i c whi l e
Em C maisculas e minsculas so tratadas como diferentes e distintas umas das
outras. Por isso, cont, Cont e CONT so trs variveis distintas. Isso pode ser usado
para criarmos variveis com nomes significativos, como por exemplo
mediaDoAluno, ou cotacaoDoDolar e etc...

Abaixo um exemplo com declaraes de nomes de variveis vlidos:
i nt medi aDoAnul o;
doubl e _cont ador ;
char opcao_menu;
f l oat a6y9u2;

Abaixo um exemplo com declaraes de nomes de variveis INVLIDOS:
f l oat 9i dade;
char opcao menu;
doubl e cot ao;
i nt def aul t ;

1.4 Inicializao de variveis

possvel combinar uma declarao de varivel com o operador de atribuio
(sina de igual) para que a varivel tenha um valor no instante de sua declarao. A
forma geral de inicializao :

<t i po_da_var i vel > <nome_da_var i vel > = <val or >;

Exemplos:
i nt numer o = 2;
char l et r a = a ;

drSolutions Diego Mendes Rodrigues
Pgina 3 / 9

1.5 Mostrando variveis na tela

A funo printf() foi apresentada na primeira aula do curso de uma forma
simplista. Sua forma mais geral :

pr i nt f ( expr esso de cont r ol e, l i st a de ar gument os) ;

A expresso de controle pode conter caracteres que sero exibidos na tela e
cdigos de formatao que indicam o formato em que os argumentos devem ser
impressos. A tabela abaixo mostra alguns cdigos de formatao que podem ser
utilizados pela funo printf():

Cdigo Descrio
%d Val or int ( ou deci mal )
%f Val or float
%c Car act er e si mpl es
%s Cadei a de car act er es
%e Not ao ci ent f i ca
%o Val or oct al
%u Val or int semsi nal
%x Val or hexadeci mal
%l d Val or int l ongo
%l f Val or float l ongo

A lista de argumentos pode estar vazia, pode conter valores ou pode conter variveis.
Observe os exemplos abaixo:

/ / pr i nt f ( ) coma l i st a de ar gument os vazi a
pr i nt f ( Est ou apr endendo Li nguagemC) ;

/ / pr i nt f ( ) comval or es numr i cos na l i st a de ar gument os
pr i nt f ( Eu t enho %d anos e mi nha al t ur a %f met r os, 24, 1. 7) ;

/ / pr i nt f ( ) comvar i vei s na l i st a de ar gument os
i nt i dade = 24;
f l oat al t ur a = 1. 7;
pr i nt f ( Eu t enho %d anos e mi nha al t ur a %f met r os, i dade, al t ur a) ;

Abaixo um exemplo de programa completo:
Exemplo 15
/ *
Exempl o do uso da f uno pr i nt f ( )
Li nguagemC Uma i nt r oduo
-
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {

/ / Decl ar ando e i ni ci al i zando as var i vei s
i nt i dade = 24;
f l oat al t ur a = 1. 7;

/ / pr i nt f ( ) coma l i st a de ar gument os vazi a
pr i nt f ( Est ou apr endendo Li nguagemC) ;
drSolutions Diego Mendes Rodrigues
Pgina 4 / 9



/ / pr i nt f ( ) comval or es na l i st a de ar gument os
pr i nt f ( \ nMeu nome e %s, Di ego) ;
pr i nt f ( \ nEu t enho %d i r mas. , 2) ;

/ / pr i nt f ( ) comvar i vei s na l i st a de ar gument os
pr i nt f ( \ nEu t enho %d anos e %f met r os, i dade, al t ur a) ;

/ / Esper ando o <ENTER> par a sai r do pr ogr ama
pr i nt f ( \ n\ nPr essi one <ENTER> par a sai r . . . ) ;
get char ( ) ;

r et ur n 0;
}

Compilando e executando esse programa temos:


2. Operadores aritmticos

Os operadores aritmticos so usados para calcular expresses matemticas.
Sendo classificados em duas categorias: os binrios ou unrios. Os operadores unrios
atuam na inverso de valores. Veja a tabela abaixo.

Operador binrio Descrio
= At r i bui o
+ Soma
- Subt r ao
* Mul t i pl i cao
/ Di vi so
% Rest o da di vi so

Operador unrio Descrio
- Si nal negat i vo
+ Si nal posi t i vo

A forma geral de uso dos operadores binrios :

<var i vel _que_r ecebe> = <oper ando1> <oper ador > <oper ando2>;

Exemplos:

somaDasNot as = mensal + bi mest r al ;
di asDoAno = meses * di asDoMes;
met ade = not aTot al / 2;
r est oDaDi vi sao = not aTot al %2;
drSolutions Diego Mendes Rodrigues
Pgina 5 / 9

A forma geral de uso dos operadores unrios :

<var i vel _que_r ecebe> = <oper ador ><oper ando1>;

Exemplo:

i nver soDaNot a = - mensal ;

Segue abaixo um programa completo que calcula a mdia de um aluno com base
nas notas atribudas s variveis mensal e bimestral dentro do cdigo fonte.
Exemplo 16
/ *
Exempl o do uso de oper ador es ar i t mt i cos
Li nguagemC Uma i nt r oduo
-
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {

/ / Decl ar ando as var i vei s
f l oat mensal , bi mest r al ;
f l oat soma, medi a, i nver so;

/ / Usando o oper ador de at r i bui o
mensal = 6. 3;
bi mest r al = 7. 5;

/ / Usando o oper ador de soma
soma = mensal + bi mest r al ;

/ / Usando o oper ador de di vi so
medi a = soma/ 2;

/ / Exi bi ndo a mdi a na t el a
pr i nt f ( A medi a do al uno e: %f , medi a) ;

/ / Usando o oper ador unr i o negat i vo
i nver so = - medi a;
pr i nt f ( \ nO i nver so da medi a do al uno e: %f , i nver so) ;

/ / Esper ando o <ENTER> par a sai r do pr ogr ama
get char ( ) ;

r et ur n 0;
}

Compilando e executando esse programa temos:


drSolutions Diego Mendes Rodrigues
Pgina 6 / 9

2.1 Operadores de incremento e decremento

So dois operadores bastante teis para simplificar expresses: ++ (incremento
de 1) e - - (decremento de 1).

Veja o exemplo abaixo escrito sem usar os operadores de incremento e
decremento:
i nt cont ador = 10;
i nt numer o = 2;
/ / numer o t emo val or 2 e cont ador t emo val or 10. . .
numer o = numer o + 1;
cont ador = cont ador 1;
/ / . . . agor a numer o t emo val or 3 e cont ador t emo val or 9

Agora o mesmo programa usando operadores de incremento e decremento:
i nt cont ador = 10;
i nt numer o = 2;
/ / numer o t emo val or 2 e cont ador t emo val or 10. . .
numer o++;
cont ador - - ;
/ / . . . agor a numer o t emo val or 3 e cont ador t emo val or 9

Os operadores de incremento e decremento podem ser usados junto com o
operador de atribuio, conforme os exemplos abaixo:
i nt x, var ;
x = 2;
var = ++x;
/ / Agor a o val or de var ser 3 e x ser 3
Neste caso, colocamos o operador de incremento ++antes da varivel x, ento o valor
de x ser incrementado antes de ser atribudo varivel var.

i nt y, var ;
y = 2;
var = y++;
/ / Agor a o val or de var ser 2 e y ser 3
Neste caso, colocamos o operador de incremento ++depois da varivel y, ento o valor
de y ser primeiro atribudo varivel var e depois ser incrementado.

Segue abaixo um programa completo que ilustra o uso dos operadores de
incremento e decremento:
Exemplo 17
/ *
Exempl o do uso de oper ador es de i ncr ement o e decr ement o
Li nguagemC Uma i nt r oduo
-
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {

/ / Decl ar ando as var i vei s
i nt cont ador = 10;
i nt numer o = 2;
i nt x, y, var ;

/ / Exi bi ndo val or es i ni ci ai s de cont ador e numer o
drSolutions Diego Mendes Rodrigues
Pgina 7 / 9

pr i nt f ( cont ador val e: %d numer o val e: %d, cont ador , numer o) ;

/ / Usando oper ador es de i ncr ement o e decr ement o
numer o++;
cont ador - - ;

/ / Exi bi ndo novos val or es de cont ador e numer o
pr i nt f ( \ ncont ador val e: %d numer o val e: %d, cont ador , numer o) ;

/ / Col ocando val or es i ni ci ai s emx e var
x = 2;
var = 0;

/ / Usando o oper ador de i ncr ement o j unt o como de at r i bui o
var = ++x;

/ / Exi bi ndo os val or es de x e var
pr i nt f ( \ nx val e: %d var val e: %d, x, var ) ;

/ / Col ocando val or es i ni ci ai s emx e var
y = 2;
var = 0;

/ / Usando o oper ador de i ncr ement o j unt o como de at r i bui o
var = y++;

/ / Exi bi ndo os val or es de x e var
pr i nt f ( \ ny val e: %d var val e: %d, y, var ) ;

/ / Esper ando o <ENTER> par a sai r do pr ogr ama
get char ( ) ;

r et ur n 0;
}

Compilando e executando esse programa temos:


2.2 - Operadores aritmticos de atribuies

So combinaes de operadores que simplificam (reduzem) as instrues e que
geralmente so usados por programadores experientes. As formas bsicas de uso so:

Instruo normal Instruo reduzida
var = var + expr var += expr
var = var - expr var - = expr
var = var * expr var *= expr
var = var / expr var / = expr


drSolutions Diego Mendes Rodrigues
Pgina 8 / 9

Acompanhe os exemplos abaixo:

i nt quant i dade = 10;
quant i dade = quant i dade + 3;
pode ser reduzida para:
i nt quant i dade = 10;
quant i dade += 3;

i nt quant i dade = 10;
quant i dade = quant i dade * 2;
pode ser reduzida para:
i nt quant i dade = 10;
quant i dade *= 2;

i nt quant i dade = 10;
i nt vendas = 2;
quant i dade = quant i dade - vendas;
pode ser reduzida para:
i nt quant i dade = 10;
i nt vendas = 2;
quant i dade - = vendas;

Segue abaixo um programa completo que ilustra os conceitos acima:
Exemplo 18
/ *
Exempl o do uso de oper ador es compost os
Li nguagemC Uma i nt r oduo
-
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {

/ / Decl ar ando as var i vei s
i nt quant i dade = 10;
i nt vendas = 2;

/ / Exi bi ndo o est oque i ni ci al
pr i nt f ( Pr odut os no est oque: %d, quant i dade) ;

/ / Ti r ando os i t ens vendi dos do est oque
pr i nt f ( \ nFor amvendi dos %d pr odut os, vendas) ;
quantidade -= vendas;

/ / Exi bi ndo o est oque f i nal
pr i nt f ( \ nEst oque f i nal : %d, quant i dade) ;

/ / Esper ando o <ENTER> par a sai r do pr ogr ama
get char ( ) ;
r et ur n 0;
}

Compilando e executando esse programa temos:

drSolutions Diego Mendes Rodrigues
Pgina 9 / 9


LINGUAGEM C UMA INTRODUO


AULA 4 Entrada e sada

1 Entrada, sada, hmm?

O conceito de entrada e sada j foi utilizado de forma intuitiva nos exemplos
das aulas anteriores. Entendemos por entrada qualquer forma de passarmos dados
para o programa e por sada qualquer forma do programa enviar dados para o mundo.

Tipos mais comuns:
Entrada: usurio respondendo uma pergunta, programa lendo um arquivo,
programa capturando informaes de um sensor eletrnico ligado ao computador,
parmetros passados ao programa na linha de comando...
Sada: programa mostrando informaes na tela, programa enviando dados para
uma impressora, programa acionando um equipamento eletrnico ligado ao
computador...

2 Entrada com a funo scanf()

A funo scanf() usada para recebermos dados do teclado de uma forma
formatada. Ela foi usada intuitivamente em alguns exemplos passados do curso
(exemplo 1, exemplo 3, exemplo 13, etc..) e agora chegou a hora de entendermos
melhor como ela funciona. Sua sintaxe :

scanf ( " especi f i cador de f or mat o" , &var i vel )

O primeiro ponto importante a ser observado que a funo scanf() sempre
armazena o valor digitado no teclado em uma varivel.

O segundo ponto importante que antes do nome da varivel existe um & e esse
& OBRIGATRIO. O programa no ir funcionar sem ele.

Abaixo um exemplo de como ler um valor numrico e inteiro do teclado:
i nt i dade;
scanf ( %d, &i dade) ;

O especificador de formato da funo scanf() segue a mesma sintaxe da
expresso de controle da funo printf(). Os seguintes cdigos especiais devem ser
usados:

Cdigo Descrio
%d Val or int ( ou deci mal )
%f Val or float
drSolutions Diego Mendes Rodrigues
Pgina 1 / 12

%c Car act er e si mpl es
%s Cadei a de car act er es
%e Not ao ci ent f i ca
%o Val or oct al
%u Val or int semsi nal
%x Val or hexadeci mal
%l d Val or int l ongo
%l f Val or float l ongo

Exemplos de uso da funo scanf():
f l oat peso;
scanf ( %f , &peso) ;

char l et r a;
scanf ( %c, &l et r a) ;

i nt ano;
scanf ( %d, &ano) ;

Veja abaixo um exemplo completo usando a funo scanf():
Exemplo 19
/ *
Exempl o de ent r ada de dados coma f uno scanf ( )
Li nguagemC Uma i nt r oduo
-
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {

i nt i dade, ano;

pr i nt f ( " Qual a sua i dade?\ n" ) ;
/ / Recebendo a var i vel i dade
scanf ( " %d" , &i dade) ;

/ / Most r ando a var i vel i dade na t el a
pr i nt f ( " \ nNossa. . %d ani nhos! ! \ n" , i dade) ;

pr i nt f ( " \ nQual ano voce nasceu?\ n" ) ;
/ / Recebendo a var i vel ano
scanf ( " %d" , &ano) ;

/ / Most r ando na t el a a var i vel l et r a
pr i nt f ( " \ nHum. . %d hei n. . . " , ano) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;
r et ur n 0;
}

Exemplo de execuo do programa acima:

drSolutions Diego Mendes Rodrigues
Pgina 2 / 12

2.1 Revendo o algoritmo Calcular mdia

Agora que a funo scanf() foi devidamente apresentada, podemos rever o
algoritmo Calcular mdia, apresentado na Aula 2.

Observe que sempre que encontrarmos coisas do tipo Receba, Leia e etc em
um algoritmo, podemos usar a funo scanf() para implementar essa instruo e sempre
que encontrarmos coisas do tipo Exiba, Escreva, Mostre e etc podemos usar a
funo printf() para realizar essa tarefa.

Calcular mdia
Receba a nota da prova mensal
Receba a nota da prova bimestral
Calcule a mdia com a frmula media=(mensal+bimestral)/2
Exiba a mdia na tela

O programa que realiza a tarefa acima poderia ser escrito em uma pseudo
linguagem da seguinte forma:

Var i avel mensal =0
Var i avel bi mest r al =0
Var i avel medi a=0

ESCREVA Di gi t e a not a mensal :
RECEBA mensal
ESCREVA Di gi t e a not a bi mest r al :
RECEBA bi mest r al
CALCULE medi a=( mensal +bi mest r al ) / 2
ESCREVA A mdi a do al uno :
ESCREVA medi a

Uma implementao do algoritmo Calcular mdia em Linguagem C pode ser
escrita da seguinte forma:
Exemplo 20
/ *
Exempl o de al gor i t mo par a cl cul o de mdi a
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
f l oat mensal =0;
f l oat bi mest r al =0;
f l oat medi a=0;

/ / Recebendo a not a mensal
pr i nt f ( " \ nDi gi t e a not a mensal : " ) ;
scanf ( " %f " , &mensal ) ;

/ / Recebendo a not a bi mest r al
pr i nt f ( " \ nDi gi t e a not a bi mest r al : " ) ;
scanf ( " %f " , &bi mest r al ) ;

drSolutions Diego Mendes Rodrigues
Pgina 3 / 12

/ / Cal cul ando a mdi a
medi a = ( mensal +bi mest r al ) / 2;

/ / Most r ando a mdi a
pr i nt f ( " \ n\ nA mdi a do al uno %f " , medi a) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;
r et ur n 0;
}

3. Outros exemplos com scanf() e printf()
3.1 rea do quadrado

Problema: Implemente um programa em Linguagem C para calcular a rea de
um quadrado. Esse programa deve receber o tamanho do lado do quadrado e imprimir a
sua rea na tela.

Um algoritmo para resolver o problema proposto poderia ser:
Receba o lado do quadrado
Calcule a rea com a frmula area=lado*lado
Exiba a varivel rea na tela

Implementando em Linguagem C:
Exemplo 21
/ *
Exempl o de al gor i t mo par a cl cul o da r ea de umquadr ado
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
i nt l ado=0, ar ea=0;

/ / Recebendo o l ado
pr i nt f ( " Di gi t e o t amanho do l ado: \ n" ) ;
scanf ( " %d" , &l ado) ;

/ / Cal cul ando a r ea
ar ea = l ado * l ado;

/ / Most r ando a r ea na t el a
pr i nt f ( " \ nAr ea do quadr ado: %d" , ar ea) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;

r et ur n 0;
}



drSolutions Diego Mendes Rodrigues
Pgina 4 / 12

Exemplo de execuo do programa anterior:


3.2 ndice de massa corporal

O ndice de Massa Corporal (IMC) uma frmula que indica se um adulto est
acima do peso, se est obeso ou abaixo do peso ideal considerado saudvel. A frmula
para calcular o ndice de Massa Corporal :
IMC =peso / (altura)
2

A Organizao Mundial de Sade usa a seguinte tabela para determinar a
condio de um adulto:

Condio IMC em adultos
Abai xo do peso Abai xo de 18. 5
No peso nor mal Ent r e 18. 5 e 25
Aci ma do peso Ent r e 25 e 30
Obeso Aci ma de 30

Problema: Implemente um programa em Linguagem C para calcular o IMC de
um adulto. Esse programa deve receber a altura e o peso da pessoa e exibir o IMC na
tela.

Um algoritmo para resolver o problema proposto poderia ser:
Receba a altura da pessoa
Receba o peso da pessoa
Calcule a altura ao quadrado com a frmula quadrado=altura*altura
Calcule o IMC com a frmula imc=peso/quadrado
Exiba a varivel imc na tela

Implementando em Linguagem C:
Exemplo 22
/ *
Exempl o de al gor i t mo par a cl cul o do I MC de umadul t o
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
f l oat peso=0, al t ur a=0;
f l oat quadr ado=0, i mc=0;

/ / Recebendo a al t ur a
pr i nt f ( " Di gi t e a al t ur a da pessoa emmet r os ( ex: 1. 7) : \ n" ) ;
scanf ( " %f " , &al t ur a) ;
drSolutions Diego Mendes Rodrigues
Pgina 5 / 12


/ / Recebendo o peso
pr i nt f ( " \ nDi gi t e o peso da pessoa emqui l os ( ex: 68. 5) : \ n" ) ;
scanf ( " %f " , &peso) ;

/ / Cal cul ando o quadr ado da al t ur a
quadr ado = al t ur a * al t ur a;

/ / Cal cul ando o I MC
i mc = peso / quadr ado;

/ / Most r ando o I MC na t el a
pr i nt f ( " \ nI MC: %f " , i mc) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;

r et ur n 0;
}


Exemplo de execuo do programa anterior:


4 - Tamanho de Campos na Impresso
No uso da funo printf() possvel estabelecer o tamanho mnimo para a impresso de
um campo colocando o tamanho depois do %.
Quando usamos %d, estamos dizendo para o compilador que ele deve imprimir um
nmero inteiro. J quando colocamos %4d dizemos ele deve imprimir um nmero inteiro com
no mnimo 4 posies.

Exemplo 23
/ *
Li mi t ando o t amanho da i mpr esso na f uno pr i nt f ( )
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( )
{
pr i nt f ( " Os al unos sao %3d \ n" , 350) ;
pr i nt f ( " Os al unos sao %4d \ n" , 350) ;
pr i nt f ( " Os al unos sao %5d \ n" , 350) ;

get char ( ) ;
r et ur n 0;
}
drSolutions Diego Mendes Rodrigues
Pgina 6 / 12

Exemplo de execuo do programa anterior:


Podemos tambm especificar a preciso do arredondamento de variveis float ou
double usando um ponto depois do %. Dessa forma, %.4 determina que ser impresso
um nmero real (float) com quatro casas decimais.

Observe o exemplo:
Exemplo 24
/ *
Especi f i cando o ar r edondament o na f uno pr i nt f ( )
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>
i nt mai n( )
{
pr i nt f ( %. 4f \ n, 3456. 789) ;
pr i nt f ( %. 3f \ n, 3456. 789) ;
pr i nt f ( %. 2f \ n, 3456. 789) ;
pr i nt f ( %. 1f \ n, 3456. 789) ;

get char ( ) ;
r et ur n 0;
}

Exemplo de execuo do programa anterior:


Podemos misturar os dois conceitos anteriores atravs de coisas do tipo %7.3f ou
%10.2f. Este %10.2f deve ser entendido da seguinte forma: varivel float com um
tamanho de 10 e duas casas depois da vrgula.

Observe o exemplo:
Exemplo 25
/ *
Especi f i cando o ar r edondament o e o t amanho na f uno pr i nt f ( )
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>
i nt mai n( )
{
pr i nt f ( %10. 2f %10. 2f %10. 2f \ n, 8. 0, 15. 3, 584. 13) ;
pr i nt f ( %10. 2f %10. 2f %10. 2f \ n, 834. 0, 1500. 55, 4890. 21) ;
drSolutions Diego Mendes Rodrigues
Pgina 7 / 12


get char ( ) ;
r et ur n 0;
}

Exemplo de execuo do programa anterior:


O sinal de menos (-) precedendo a especificao do tamanho do campo justifica
os campos esquerda. Exemplo:
Exemplo 26
/ *
Especi f i cando o ar r edondament o, o t amanho e al i nhando esquer da
na f uno pr i nt f ( )
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>
i nt mai n( )
{
pr i nt f ( %- 10. 2f %- 10. 2f %- 10. 2f \ n, 8. 0, 15. 3, 584. 13) ;
pr i nt f ( %- 10. 2f %- 10. 2f %- 10. 2f \ n, 834. 0, 1500. 55, 4890. 21) ;

get char ( ) ;
r et ur n 0;
}

Exemplo de execuo do programa anterior:


Alm de especificar o tamanho do campo, podemos complementar o campo todo
ou parte dele com zeros esquerda, para isso colocamos um zero depois do %.
Exemplo:
Exemplo 27
/ *
Compl et ando o t amanho do campo comzer os na f uno pr i nt f ( )
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>
i nt mai n( )
{
pr i nt f ( %04d\ n, 21) ;
pr i nt f ( %06d\ n, 21) ;

get char ( ) ;
drSolutions Diego Mendes Rodrigues
Pgina 8 / 12

r et ur n 0;
}

Exemplo de execuo do programa anterior:


5. Imprimindo Caracteres

Em Linguagem C um caractere pode ser representado de diversas maneiras: o
prprio caracter entre aspas simples ou sua representao decimal, hexadecimal ou octal
segundo a tabela ASCII.

A tabela ASCII tem 256 cdigos decimais numerados de 0 a 255. Cada cdigo
decimal corresponde um caracter distinto, por exemplo, o decimal 65 corresponde ao
caracter A, decimal 70 corresponde ao caracter F, o decimal 33 corresponde ao ponto de
exclamao...

TABELA ASCII Parte 1
cdigo caracter cdigo caracter cdigo caracter cdigo caracter
0 CTRL-@ 32 (BRANCO) 64 @ 96 `
1 CTRL-A 33 ! 65 A 97 a
2 CTRL-B 34 " 66 B 98 b
3 CTRL-C 35 # 67 C 99 c
4 CTRL-D 36 $ 68 D 100 d
5 CTRL-E 37 % 69 E 101 e
6 CTRL-F 38 & 70 F 102 f
7 CTRL-G 39 ' 71 G 103 g
8 CTRL-H 40 ( 72 H 104 h
9 CTRL-I 41 ) 73 I 105 i
10 CTRL-J 42 * 74 J 106 j
11 CTRL-K 43 + 75 K 107 k
12 CTRL-L 44 , 76 L 108 l
13 CTRL-M 45 - 77 M 109 m
14 CTRL-N 46 . 78 N 110 n
15 CTRL-O 47 / 79 O 111 o
16 CTRL-P 48 0 80 P 112 p
17 CTRL-Q 49 1 81 Q 113 q
18 CTRL-R 50 2 82 R 114 r
19 CTRL-S 51 3 83 S 115 s
20 CTRL-T 52 4 84 T 116 t
21 CTRL-U 53 5 85 U 117 u
22 CTRL-V 54 6 86 V 118 v
23 CTRL-W 55 7 87 W 119 w
24 CTRL-X 56 8 88 X 120 x
25 CTRL-Y 57 9 89 Y 121 y
26 CTRL-Z 58 : 90 Z 122 z
27 CTRL-[ 59 ; 91 [ 123 {
drSolutions Diego Mendes Rodrigues
Pgina 9 / 12

28 CTRL-\ 60 < 92 \ 124 |
29 CTRL-] 61 = 93 ] 125 }
30 CTRL-^ 62 > 94 ^ 126 ~
31 CTRL-_ 63 ? 95 _ 127 DEL

TABELA ASCII Parte 2
cdigo caracter

cdigo caracter

cdigo caracter

cdigo caracter
128

160

192 +

224
129

161

193 -

225
130

162

194 -

226
131

163

195 +

227
132

164

196 -

228
133

165

197 +

229
134

166

198

230
135

167

199

231
136

168

200 +

232
137

169

201 +

233
138

170

202 -

234
139

171

203 -

235
140

172

204

236
141

173

205 -

237
142

174

206 +

238
143

175

207

239
144

176 _

208

240
145

177 _

209

241
146

178 _

210

242 _
147

179

211

243
148

180

212

244
149

181

213 i

245
150

182

214

246
151

183

215

247
152

184

216

248
153

185

217 +

249
154

186

218 +

250
155

187 +

219 _

251
156

188 +

220 _

252
157

189

221

253
158

190

222

254 _
159

191 +

223 _

255


O seguinte trecho de programa imprime o valor ASCII da letra d:
pr i nt f ( %d, d ) ;

J o trecho abaixo faz o inverso, imprime a letra d a partir de seu cdigo
ASCII:
pr i nt f ( %c, 100) ;

Exemplo 28
/ *
I mpr i mi ndo Car act er es
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
drSolutions Diego Mendes Rodrigues
Pgina 10 / 12

*/
#i ncl ude <st di o. h>
i nt mai n( )
{
/ / Most r ando o val or deci mal da l et r a A e depoi s a l et r a A
pr i nt f ( %d %c \ n, A , A ) ;

/ / Most r ando a l et r a A usando o seu val or deci mal
pr i nt f ( %c %c \ n, A , 65) ;

get char ( ) ;
r et ur n 0;
}

Exemplo de execuo do programa anterior:


5.1 Cdigos especiais

Em quase todos os exemplos apresentados at agora usamos o cdigo especial \n
na funo printf() para pular linhas. Existem outros cdigos especiais que podem ser
usados:

Cdigo Significado
\ n Li nha Nova ( Li ne Feed)
\ b Ret r ocesso ( BackSpace)
\ f Sal t o de Pgi na ( For mFeed)
\ r Ret or no do Car r o ( cr )
\ t Tabul ao Hor i zont al ( TAB)
\ Car act er comapst r of o
\ 0 Car act er Nul o ou Fi mde St r i ng
\ x Repr esent ao hexadeci mal

Exemplo 29
/ *
Usando car act er es especi ai s
Li nguagemC - Uma i nt r oduo
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>
i nt mai n( )
{
/ / Usando a t abul ao
pr i nt f ( \ t A\ t A\ t A\ t A) ;

/ / Pul ando duas l i nhas
pr i nt f ( \ n\ n) ;

/ / Usando o r et or no
pr i nt f ( abcdef ghi j kl m) ;
pr i nt f ( \ r 111) ;

get char ( ) ;
drSolutions Diego Mendes Rodrigues
Pgina 11 / 12


r et ur n 0;
}

Exemplo de execuo do programa anterior:


A tela acima podemos notar as quatro letras A separadas por tabulaes na
primeira linha. Depois foram puladas duas linhas e a seqncia abcdefghijklm foi
impressa na tela. Finalmente foi usando um retrocesso (cursor volta para o incio da
linha) e em seguida foi impressa a seqncia 111. Observe que a seqncia 111
sobrescreveu a abcdefghijklm.
drSolutions Diego Mendes Rodrigues
Pgina 12 / 12


LINGUAGEM C UMA INTRODUO


AULA 5 Expresses e Operadores

1 Precedncia dos operadores aritmticos

Na Aula 3 do nosso curso foram apresentados os Operadores Aritmticos
(binrios, unrios, de incremento e decremento e operadores de atribuies). A primeira
parte dessa nossa Aula 5 apresentar maneiras de combinarmos esses operadores para
formarmos expresses matemticas ou expresses lgicas.

Apenas como reviso, segue uma lista com os operadores j estudados at esse
ponto de nosso curso:

Operador binrio Descrio
= At r i bui o
+ Soma
- Subt r ao
* Mul t i pl i cao
/ Di vi so
% Rest o da di vi so

Operador unrio Descrio
- Si nal negat i vo
+ Si nal posi t i vo

Operador Descrio
++ I ncr ement a 1
- - Decr ement a 1

Instruo normal Instruo reduzida
var = var + expr var += expr
var = var - expr var - = expr
var = var * expr var *= expr
var = var / expr var / = expr

At este ponto, voc deve ser capaz de entender expresses do tipo:
i nt not a1 = 7;
i nt not a2 = 8;
i nt soma = not a1 + not a2;
/ / O val or de soma 15

f l oat not a1 = 7. 3;
f l oat not a2 = 8. 4;
f l oat soma;
f l oat medi a;
soma = not a1 + not a2;
medi a = soma/ 2;
drSolutions Diego Mendes Rodrigues
Pgina 1 / 9

/ / O val or de mdi a 7. 85

i nt cont ador =1;
cont ador ++;
/ / O val or de cont ador 2

i nt cont ador =1;
cont ador += 5;
cont ador = - cont ador ;
/ / O val or de cont ador - 6

Agora comearemos a analisar expresses um pouco mais complicadas, mais
prximas de problemas reais implementados computacionalmente. Vejamos alguns
exemplos:

f l oat not a1 = 7. 3;
f l oat not a2 = 8. 4;
f l oat medi a;
medi a = not a1 + not a2 / 2; / / Expr esso 1
Pergunta 1: Qual o valor da varivel media?

f l oat not a1 = 7. 3;
f l oat not a2 = 8. 4;
f l oat medi a;
medi a = ++not a1 + not a2 / 2; / / Expr esso 2
Pergunta 2: Qual o valor da varivel media?

1.2 Tabela de precedncia

A seguinte tabela resume a ordem de precedncia dos operadores em Linguagem
C (e em praticamente todas as linguagens de programao):

Precedncia Operadores
Mai s al t a ++ - -
- ( unr i o)
* / %
Mai s bai xa + -

Com base na tabela acima, vamos analisar as duas expresses propostas
anteriormente:

Expresso 1: medi a = not a1 + not a2 / 2;
O operador diviso (/) possui uma precedncia mais alta que o operador adio
(+), portanto a primeira operao que ocorre a diviso de nota2 por 2. O resultado
dessa diviso somado ao valor de nota1 e finalmente o valor dessa soma atribudo
varivel media atravs do operador de atribuio (=).
Logo, a resposta da Pergunta 1 : 7. 3 + 4. 2 = 11. 5

Expresso 2: medi a = ++not a1 + not a2 / 2;
O operador de incremento (++) possui precedncia sobre os operadores de
diviso e soma, ento a primeira operao realizada o incremento da varivel nota1
(ela passa a valer 8.3) . Agora o operador diviso (/) possui uma precedncia mais alta
drSolutions Diego Mendes Rodrigues
Pgina 2 / 9

que o operador adio (+), portanto a prxima operao que ocorre a diviso de nota2
por 2. O resultado dessa diviso somado ao valor incrementado de nota1 e finalmente
o valor dessa soma atribudo varivel media atravs do operador de atribuio (=).
Logo, a resposta da Pergunta 4 : 8. 3 + 4. 2 = 12. 5

1.3 Parnteses

Os parnteses so utilizados para alterarmos a ordem de precedncia dos
operadores. Assim, o clculo correto da mdia poderia ser feito da seguinte forma:

f l oat not a1 = 7. 3;
f l oat not a2 = 8. 4;
f l oat medi a;
medi a = ( not a1 + not a2 ) / 2; / / Expr esso 3
Pergunta 3: Qual o valor da varivel media?

Na expresso 3, primeiro ser analisado o que est entre parnteses, ou seja,
primeiro nota1 ser somado nota2. Essa soma ento ser dividida por 2 e o resultado
da diviso ser atribudo varivel mdia.
Logo, a resposta da Pergunta 3 : ( 15. 7) / 2 = 7. 85

Devemos lembrar que dentro dos parnteses, a tabela de precedncia continua
valendo, veja o exemplo abaixo:

f l oat not a1 = 7. 3;
f l oat not a2 = 8. 4;
f l oat medi a;
medi a = ( ++not a1 + not a2 ) / 2; / / Expr esso 4
Pergunta 4: Qual o valor da varivel media?

Na expresso 4, primeiro ser analisado o que est entre parnteses, ou seja,
++not a1 + not a2. S que temos dois operadores dentro desses parnteses, ento de
acordo com a tabela de precedncia, primeiro nota1 ser incrementada e depois esse
resultado ser somado varivel nota2. Essa soma ento ser dividida por 2 e o
resultado da diviso ser atribudo varivel mdia.
Logo, a resposta da Pergunta 4 : ( 8. 3 + 8. 4) / 2 = ( 16. 7) / 2 = 8. 35

Estamos prontos para resolver o seguinte problema: A mdia de um aluno
calculada da seguinte forma:
Existem duas provas, uma mensal e uma bimestral, cada uma valendo de 0 a 10.
Existe um trabalho valendo de 0 a 10.
80% da mdia correspondem mdia de provas
20% da mdia correspondem nota de trabalho

Problema: Implemente um programa em Linguagem C que calcule a mdia de
um aluno de acordo com o critrio de avaliao acima proposto.

Um algoritmo para resolver o problema proposto poderia ser:
Receba a nota mensal
Receba a nota bimestral
drSolutions Diego Mendes Rodrigues
Pgina 3 / 9

Receba a nota de trabalhos
Calcule a mdia de provas com a frmula mediaProvas=(mensal+bimestral)/2
Calcule a mdia do aluno com a frmula media=0.8*mediaProvas+0.2*trabalhos
Exiba a mdia do aluno a tela

Implementando em Linguagem C:
Exemplo 30
/ *
Exempl o de cl cul o de mdi a Pr ecednci a de Oper ador es
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
f l oat mensal =0, bi mest r al =0, t r abal hos=0;
f l oat medi aPr ovas=0, medi a=0;

/ / Recebendo a not a mensal
pr i nt f ( " Di gi t e o not a mensal ( ex: 8. 7) : \ n" ) ;
scanf ( " %f " , &mensal ) ;

/ / Recebendo a not a bi mest r al
pr i nt f ( " \ nDi gi t e a not a bi mest r al ( ex: 7. 9) : \ n" ) ;
scanf ( " %f " , &bi mest r al ) ;

/ / Recebendo a not a bi mest r al
pr i nt f ( " \ nDi gi t e a not a de t r abal hos ( ex: 9. 2) : \ n" ) ;
scanf ( " %f " , &t r abal hos) ;

/ / Cal cul ando a mdi a
mediaProvas = (mensal + bimestral)/2;
media=0.8*mediaProvas + 0.2*trabalhos;

/ / Most r ando a mdi a na t el a
pr i nt f ( " \ nMedi a: %4. 1f " , medi a) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;

r et ur n 0;
}


Exemplo de execuo do programa anterior:


drSolutions Diego Mendes Rodrigues
Pgina 4 / 9

Poderamos deixar o programa anterior um pouco mais elegante, calculando a
mdia do aluno em uma nica linha, sem usarmos a varivel auxiliar mediaProvas. O
novo algoritmo para resolver o problema proposto poderia ser:
Receba a nota mensal
Receba a nota bimestral
Receba a nota de trabalhos
Calcule a mdia frmula media=0.8*( (mensal+bimestral)/2 ) +0.2*trabalhos
Exiba a mdia do aluno a tela

Implementando em Linguagem C:
Exemplo 31
/ *
Exempl o de cl cul o de mdi a Pr ecednci a de Oper ador es
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
f l oat mensal =0, bi mest r al =0, t r abal hos=0;
f l oat medi a=0;

/ / Recebendo a not a mensal
pr i nt f ( " Di gi t e o not a mensal ( ex: 8. 7) : \ n" ) ;
scanf ( " %f " , &mensal ) ;

/ / Recebendo a not a bi mest r al
pr i nt f ( " \ nDi gi t e a not a bi mest r al ( ex: 7. 9) : \ n" ) ;
scanf ( " %f " , &bi mest r al ) ;

/ / Recebendo a not a bi mest r al
pr i nt f ( " \ nDi gi t e a not a de t r abal hos ( ex: 9. 2) : \ n" ) ;
scanf ( " %f " , &t r abal hos) ;

/ / Cal cul ando a mdi a
media=0.8*((mensal + bimestral)/2) + 0.2*trabalhos;

/ / Most r ando a mdi a na t el a
pr i nt f ( " \ nMedi a: %4. 1f " , medi a) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;

r et ur n 0;
}


Exemplo de execuo do programa anterior:


drSolutions Diego Mendes Rodrigues
Pgina 5 / 9

Problema: Dado um nmero n maior do que 10, calcule o dobro do ltimo
algarismo desse nmero. Exemplos:
72 =>2*2 =4
257 =>2*7 =14
1095 =>2*5 =10

Um algoritmo para resolver o problema proposto poderia ser:
Receba o nmero n
Calcule o resto da diviso de n por 10
Multiplique o resto por 2
Exiba o resultado na tela

Exemplo 32
/ *
Exempl o de Pr ecednci a de Oper ador es
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
i nt n=0;
i nt r est o=0;

/ / Recebendo a not a mensal
pr i nt f ( " Di gi t e umnmer o i nt ei r o mai or que 10: \ n" ) ;
scanf ( " %d" , &n) ;

/ / Cal cul ando a mdi a
resto = n%10;
resto = resto*2;

/ / Most r ando a mdi a na t el a
pr i nt f ( " \ nResul t ado: %d" , r est o) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;

r et ur n 0;
}


Exemplo de execuo do programa anterior:








drSolutions Diego Mendes Rodrigues
Pgina 6 / 9

Podemos agrupar as linhas...
resto = n%10;
resto = resto*2;

...de vrias maneiras, por exemplo:
resto = (n%10)*2;

Na linha acima, como o operador resto (%) possui a mesma precedncia do
operador multiplicao (*), recomendado colocarmos os parnteses para garantir que o
clculo seja realmente feito na ordem que desejamos.

2. Operadores Relacionais

Os operadores relacionais so usados para determinar o relacionamento de uma
quantidade com outra. Eles sempre retornam 0 (falso) ou 1 (verdadeiro), dependendo
do resultado do teste.

Alguns programadores preferem usar as palavras true que vem do ingls
(verdadeiro) e false (do ingls falso) para representar os valores 0 ou 1 em resultados
de testes lgicos.

Tabela de Operadores relacionais:

Operador relacional Descrio
> Mai or que
>= Mai or ou i gual que
< Menor que
<= Menor ou i gual que
== I gual
! = Di f er ent e ( no i gual )

O programa seguinte ilustra o uso de cada operao e exibe o resultado de cada
uma como 0 ou 1:
Exemplo 33
/ *
Exempl o de Oper ador es Rel aci onai s
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Recebendo num1 e num2
i nt num1=0, num2=0;
pr i nt f ( " I nf or me umnumer o: " ) ;
scanf ( " %d" , &num1) ;
pr i nt f ( " I nf or me out r o numer o: " ) ;
scanf ( " %d" , &num2) ;

/ / Usando oper ador es e exi bi ndo o r esul t ado
pr i nt f ( " \ n\ nApl i cando oper ador es em%d e %d \ n\ n" , num1, num2) ;
pr i nt f ( " == r esul t ado: %d \ n" , num1 == num2) ;
pr i nt f ( " ! = r esul t ado: %d \ n" , num1 ! = num2) ;
pr i nt f ( " <= r esul t ado: %d \ n" , num1 <= num2) ;
drSolutions Diego Mendes Rodrigues
Pgina 7 / 9

pr i nt f ( " >= r esul t ado: %d \ n" , num1 >= num2) ;
pr i nt f ( " > r esul t ado: %d \ n" , num1 > num2) ;
pr i nt f ( " < r esul t ado: %d \ n" , num1 < num2) ;

/ / Esper ando o <ENTER> par a sai r comget ch( ) ao i nvs de get char ( )
get ch( ) ;
r et ur n 0;
}


Exemplos de execuo do programa anterior:

Tela A


Tela B


Tela C

Comentrios sobre os resultados anteriores:
Como j era esperado, todos os resultados das expresses com operadores
relacionais foram 0 ou 1, que equivalem falso ou verdadeiro (false ou true).

Na Tela A entramos com os valores 5 e 9, ento:
o No teste de igualdade com o operador == (5==9) o resultado foi 0 (f al so).
drSolutions Diego Mendes Rodrigues
Pgina 8 / 9

o No teste de diferena com o operador ! = (5! =9) o resultado foi 1
(ver dadei r o).
o No teste menor ou igual que com o operador <= (5<=9) o resultado foi 1
(ver dadei r o, j que 5 menor do que 9).
o No teste maior ou igual que com o operador >= (5>=9) o resultado foi 0
(f al so, j que 5 no mai or ou i gual que 9).
o No teste maior que com o operador > (5>9) o resultado foi 0 (f al so, j
que 5 no mai or que 9).
o No teste menor que com o operador < (5<9) o resultado foi 1
(ver dadei r o, j que 5 menor que 9).

Na Tela B entramos com os valores 8 e 8, ento:
o No teste de igualdade com o operador == (8==8) o resultado foi 1
(ver dadei r o).
o No teste de diferena com o operador ! = (8! =8) o resultado foi 0 (f al so).
o No teste menor ou igual que com o operador <= (8<=8) o resultado foi 1
(ver dadei r o, j que 8 i gual que 8).
o No teste maior ou igual que com o operador >= (8>=8) o resultado foi 1
(ver dadei r o, j que 8 i gual que 8).
o No teste maior que com o operador > (8>8) o resultado foi 0 (f al so, j
que 8 no mai or que 8).
o No teste menor que com o operador < (8<8) o resultado foi 0 (f al so, j
que 8 no menor que 8).

Na Tela C entramos com os valores 3 e 1, ento:
o No teste de igualdade com o operador == (3==1) o resultado foi 0 (f al so).
o No teste de diferena com o operador ! = (3! =1) o resultado foi 1
(ver dadei r o).
o No teste menor ou igual que com o operador <= (3<=1) o resultado foi 0
(f al so, j que 3 no menor ou i gual que 8).
o No teste maior ou igual que com o operador >= (3>=1) o resultado foi 1
(ver dadei r o, j que 3 mai or que 1).
o No teste maior que com o operador > (3>1) o resultado foi 1
(ver dadei r o, j que 3 mai or que 8).
o No teste menor que com o operador < (3<1) o resultado foi 0 (f al so, j
que 3 no menor que 1).


ATENO

O operador = usado para atribuio e o operador == usado para comparao!

Para testarmos se a varivel opcao possui o valor 3, devemos usar opo==3 , nunca
opcao=3 !!



drSolutions Diego Mendes Rodrigues
Pgina 9 / 9


LINGUAGEM C UMA INTRODUO


AULA 6 Estruturas de deciso

As estruturas de deciso esto presentes em qualquer linguagem de
programao. Com elas podemos realizar testes ao longo de nosso programa e decidir se
o fluxo do mesmo deve ser desviado para outra direo ou no.
1 O comando if()

If quer dizer se e a estrutura de deciso mais usada em Linguagem C. Sua
forma mais simples de uso :

i f ( expr esso de t est e ) {
i nst r ues;
i nst r ues;
}

Se a expresso de teste for verdadeira (algo diferente de 0), o comando if
executa as instrues entre { e }. Caso contrrio, o programa salta para a linha
imediatamente aps }. As expresses de teste normalmente so realizadas com
operadores relacionais (==, ! =, >=, <=, >, <).

Problema: Escreva um programa em Linguagem C que teste se um valor
digitado pelo usurio menor do que 10.

Um algoritmo para resolver o problema proposto poderia ser:
Receba o nmero n
Se n <10
o Escreva Ok.. o nmero menor do que 10
Se n >=10
o Escreva O nmero no menor do que 10

Implementando em Linguagem C:
Exemplo 34
/ *
Pr i mei r o exempl o comI F
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
i nt n=0;

/ / Recebendo a var i vel n
pr i nt f ( " Di gi t e umnumer o i nt ei r o menor do que 10: \ n" ) ;
drSolutions Diego Mendes Rodrigues
Pgina 1 / 9

scanf ( " %d" , &n) ;

/ / Test ando se n menor do que 10
i f ( n < 10 ) {
pr i nt f ( " \ nOk. . . o numer o e menor do que 10\ n" ) ;
}

i f ( n >= 10 ) {
pr i nt f ( " \ nO numer o NAO e menor do que 10! ! ! \ n" ) ;
}

/ / Esper ando o <ENTER> par a sai r
get ch( ) ;

r et ur n 0;
}

Exemplos de execuo do programa anterior:




2. O comando else

Podemos pensar no comando else como um complemento (ou uma negao) do
comando if. A forma um pouco mais completa da estrutura if-else tem a seguinte forma
geral:

i f ( expr esso de t est e ) {
i nst r ues1;
i nst r ues2;
} el se {
i nst r ues3;
i nst r ues4;
}

A expresso de teste ser avaliada. Se ela for verdadeira (diferente de zero) o
primeiro bloco de instrues ser executado (instues1; instrues2;). Caso a
expresso de teste seja falsa (ou igual a zero) o segundo bloco de instrues ser
executado (instues3; instrues4;). importante ressaltar que quando usamos a
estrutura if-else, estamos garantindo que um dos dois blocos de instrues ser
executado. Nunca sero executados os dois blocos ou nenhum deles.

Problema: Uma grande dificuldade em viagens internacionais a converso dos
valores de temperatura de C para F. Faa um programa em Linguagem C que receba
drSolutions Diego Mendes Rodrigues
Pgina 2 / 9

uma temperatura em F e calcule seu equivalente em C. O programa deve exibir a
mensagem Levar roupas de frio. quando a temperatura em C for menor ou igual 20
e mostrar a mensagem No levar roupas de frio. caso contrrio.

Um algoritmo para resolver o problema proposto poderia ser:
Receba a temperatura F em f
Calcule a converso para C com a frmula c =( (f-32)*5 )/9
Se c <=20
o Escreva a temperatura em C na tela
o Escreva Levar roupas de frio.
Caso contrrio
o Escreva a temperatura em C na tela
o Escreva No levar roupas de frio.

Implementando em Linguagem C:
Exemplo 35
/ *
Exempl o comI F- ELSE Conver so Fahr enhei t - Cent gr ados
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
f l oat f =0, c=0;

/ / Recebendo a t emper at ur a f
pr i nt f ( " Di gi t e a t emper at ur a emFahr enhei t : \ n" ) ;
scanf ( " %f " , &f ) ;

/ / Cal cul ando a conver so
c=( ( f - 32) *5 ) / 9;

/ / Test ando se n menor do que 10
i f ( c <= 20 ) {
pr i nt f ( " \ nTemper at ur a: %4. 1f gr aus C\ n" , c) ;
pr i nt f ( " \ nLevar r oupas de f r i o. \ n" ) ;
}
el se {
pr i nt f ( " \ nTemper at ur a: %4. 1f gr aus C\ n" , c) ;
pr i nt f ( " \ nNo l evar r oupas de f r i o. \ n" ) ;
}

/ / Esper ando o <ENTER> par a sai r
get ch( ) ;

r et ur n 0;
}

Exemplos de execuo do programa anterior:
drSolutions Diego Mendes Rodrigues
Pgina 3 / 9






Problema: Escreva um programa em Linguagem C que calcule a mdia de um
aluno, com base em duas provas (mensal e bimestral) e mostre a mensagem Aluno
Aprovado se a mdia for maior ou igual do que 5 e Aluno Reprovado caso contrrio.

Um algoritmo para resolver o problema proposto poderia ser:
Receba a nota da prova mensal
Receba a nota da prova bimestral
Calcule a mdia com a frmula media=(mensal+bimestral)/2
Se media >=5
o Escreva Aluno aprovado!
Caso contrrio
o Escreva Aluno Reprovado!
Exiba a mdia na tela


O programa que realiza a tarefa acima poderia ser escrito em uma pseudo
linguagem da seguinte forma:

Implementando em Linguagem C:
Exemplo 36
/ *
Exempl o comI F- ELSE Cl cul o de mdi a
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {

/ / Decl ar ando as var i vei s
f l oat mensal =0;
f l oat bi mest r al =0;
f l oat medi a=0;

/ / Recebendo a not a mensal
pr i nt f ( " \ nDi gi t e a not a mensal : " ) ;
scanf ( " %f " , &mensal ) ;

drSolutions Diego Mendes Rodrigues
Pgina 4 / 9

/ / Recebendo a not a bi mest r al
pr i nt f ( " \ nDi gi t e a not a bi mest r al : " ) ;
scanf ( " %f " , &bi mest r al ) ;

/ / Cal cul ando a mdi a
medi a = ( mensal +bi mest r al ) / 2;

/ / Most ando mensagens
i f ( medi a >= 5 ) {
pr i nt f ( " \ n\ nAl uno apr ovado! " ) ;
}
el se {
pr i nt f ( " \ n\ nAl uno r epr ovado! " ) ;
}

/ / Most r ando a mdi a
pr i nt f ( " \ nA medi a do al uno e: %4. 1f " , medi a) ;

/ / Esper ando o <ENTER> par a sai r
get ch( ) ;
r et ur n 0;
}

Exemplos de execuo do programa acima:




3 O else if

Em todos os testes realizados nos exemplos anteriores nossos programas
escolhiam uma dentre duas opes (se... caso contrrio...). Em muitos casos precisamos
realizar testes mais elaborados, com mais de duas opes (se... se no, se... caso
contrrio...), para isso podemos usar o else if.

Dessa forma, chagamos forma completa, if - else if - else:





drSolutions Diego Mendes Rodrigues
Pgina 5 / 9

i f ( expr esso de t est e 1 ) {
i nst r ues1;
i nst r ues2;
}
el se i f ( expr esso de t est e 2 ) {
i nst r ues3;
i nst r ues4;
}
el se {
I nst r ues5;
I nst r ues6;
}

A expresso de teste 1 ser a primeira avaliada. Se ela for verdadeira
(diferente de zero) o primeiro bloco de instrues ser executado (instues1;
instrues2;). Caso a expresso de teste 1 seja falsa (ou igual a zero), a expresso de
teste 2 ser avaliada. Caso ela seja verdadeira, o segundo bloco de instrues ser
executado (instues3; instrues4;). Caso tanto a expresso de teste 1 quanto a
expresso de teste 2 sejam falsas, o terceiro bloco de instrues ser executado
(instues5; instrues6;).

Problema: Escreva um programa em Linguagem C que receba um nmero n e
imprima na tela:
O nmero positivo, se o usurio digitar um nmero positivo
O nmero negativo, se o usurio digitar um nmero negativo
Voc digitou zero, se o usurio digitar o nmero zero

Um algoritmo para resolver o problema proposto poderia ser:
Receba o nmero n
Se n >0
o Escreva Nmero positivo!
Se no, se n <0
o Escreva Nmero negativo!
Caso contrrio
o Escreva Voc digitou zero!

Exemplo 37
/ *
Exempl o comI F - ELSE I F - ELSE Numer os posi t i vos ou negat i vos
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {

/ / Decl ar ando as var i vei s
i nt n=0;

/ / Recebendo o nmer o
pr i nt f ( " \ nDi gi t e umnumer o: " ) ;
scanf ( " %d" , &n) ;


/ / Most ando mensagens
drSolutions Diego Mendes Rodrigues
Pgina 6 / 9

i f ( n > 0 ) {
pr i nt f ( " \ n\ nO numer o e posi t i vo! " ) ;
}
el se i f ( n < 0 ) {
pr i nt f ( " \ n\ nO numer o e negat i vo! " ) ;
}
el se {
pr i nt f ( " \ n\ nVoce di gi t ou zer o! " ) ;
}

/ / Esper ando o <ENTER> par a sai r
get ch( ) ;
r et ur n 0;
}

Exemplos de execuo do programa acima:






Problema: Desenvolva uma calculadora simples em Liguagem C. Essa
calculadora deve ser capaz de realizar as 4 operaes bsicas (+, - , *, / ) sobre dois
nmeros quaisquer.
Observaes:
Para ler a operao que ser realizada ( +, - , *, / ) , use o %c dentro do
scanf().
Como a operao ser lida com %c (como caractere), voc deve usar
aspas simples na expresso de teste, coisas do tipo:
if ( operador == +)
Voc pode ler mais de uma varivel dentro do mesmo scanf(), desde
que elas fiquem separadas por espaos. Ex:
scanf(%d %d, &num1, &num2)

Um algoritmo para resolver o problema proposto poderia ser:
Escreva uma mensagem de boas vindas
Receba o operando 1
Receba o operador
drSolutions Diego Mendes Rodrigues
Pgina 7 / 9

Receba o operando 2
Se oper ador == +
o Calcular resultado =operando1 +operando2
Se no, se oper ador == -
o Calcular resultado =operando1 - operando2
Se no, se oper ador == *
o Calcular resultado =operando1 * operando2
Se no, se oper ador == /
o Calcular resultado =operando1 / operando2
Escreva o resultado na tela

Exemplo 38
/ *
Exempl o comI F - ELSE I F - ELSE Numer os posi t i vos ou negat i vos
Li nguagemC - Uma i nt r oduo
- -
Di ego M. Rodr i gues
*/
#i ncl ude <st di o. h>

i nt mai n( ) {
/ / Decl ar ando as var i vei s
f l oat num1=0, num2=0, r esul t ado=0;
char oper ador ;

/ / Mensagemde boas vi ndas
pr i nt f ( Bemvi ndo a super cal cul ador a! ) ;
pr i nt f ( \ nVoce deve di gi t ar expr essoes da f or ma: num1 op num2) ;
pr i nt f ( \ nExempl os: ) ;
pr i nt f ( \ n2 + 5) ;
pr i nt f ( \ n8 * 3) ;
pr i nt f ( \ nNao esqueca dos espacos! ) ;

/ / Recebendo o nmer o
pr i nt f ( \ n\ nDi gi t e uma expr essao no f or mat o: num1 op num2: ) ;
scanf ( %f %c %f , &num1, &oper ador , &num2) ;

/ / Most ando mensagens
i f ( oper ador == + ) {
r esul t ado = num1 + num2;
}
el se i f ( oper ador == - ) {
r esul t ado = num1 - num2;
}
el se i f ( oper ador == * ) {
r esul t ado = num1 * num2;
}
el se i f ( oper ador == / ) {
r esul t ado = num1 / num2;
}

/ / Most r ando o r esul t ado
pr i nt f ( \ n\ nO r esul t ado = %4. 1f , r esul t ado) ;

/ / Esper ando o <ENTER> par a sai r
get ch( ) ;
r et ur n 0;
}

drSolutions Diego Mendes Rodrigues
Pgina 8 / 9

Exemplos de execuo do programa anterior:




Observaes finais sobre esse exemplo:

A expresso matemtica foi lida na linha:
scanf ( %f %c %f , &num1, &oper ador , &num2) ;
Como j foi dito, podemos ler mais de uma varivel do teclado dentro de um
mesmo scanf(), desde que tudo fique separado por espaos. No scanf() acima o primeiro
%f indica que a primeira varivel (num1) ir receber um valor do tipo float. O %c indica
que a segunda varivel (operador) ir receber um char e finalmente o ltimo %f indica
que a ltima varivel (num3) ir receber um valor float.

scanf ( %f %c %f , &num1, &oper ador , &num2) ;



Vamos dar outro exemplo de scanf() composto, mas dessa vez com quatro
variveis: idade(int), peso(float), sexo(char) e saldo(double):

scanf ( %d %f %c %g, &i dade, &peso, &sexo, &sal do) ;

Outra coisa que deve ser ressaltada que sempre que usamos caracteres
isolados no programa, estes devem estar em ASPAS SIMPLES. Observe como
exemplo o pequeno trecho de cdigo abaixo que recebe um char dentro de uma varivel
sexo para testar se o valor digitado foi H ou M.
char sexo;
pr i nt f ( \ nQual o sexo ( H/ M) ? ) ;
scanf ( %c, &sexo) ;
i f ( sexo == H ) {
pr i nt f ( Homem! ) ;
} el se i f ( sexo == M ) {
pr i nt f ( Mul her ! ) ;
} el se {
pr i nt f ( Opo i nvl i da! ) ;
}
drSolutions Diego Mendes Rodrigues
Pgina 9 / 9

Вам также может понравиться