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
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):
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