Você está na página 1de 97

Programao I

Snia Virginia Alves Frana

Volume 1

Recife, 2009

Universidade Federal Rural de Pernambuco Reitor: Prof. Valmar Corra de Andrade Vice-Reitor: Prof. Reginaldo Barros Pr-Reitor de Administrao: Prof. Francisco Fernando Ramos Carvalho Pr-Reitor de Extenso: Prof. Paulo Donizeti Siepierski Pr-Reitor de Pesquisa e Ps-Graduao: Prof. Fernando Jos Freire Pr-Reitor de Planejamento: Prof. Rinaldo Luiz Caraciolo Ferreira Pr-Reitora de Ensino de Graduao: Prof. Maria Jos de Sena Coordenao Geral de Ensino a Distncia: Prof Marizete Silva Santos Produo Grfica e Editorial Capa e Editorao: Allyson Vila Nova, Rafael Lira e Italo Amorim Reviso Ortogrfica: Marcelo Melo Ilustraes: Diego Almeida Coordenao de Produo: Marizete Silva Santos

Sumrio
Apresentao ........................................................................................5 Conhecendo o Volume 1 ......................................................................6 Captulo 1 Introduo ao C ...............................................................9 1.1. Programas e Programao de Computadores ............................9 1.2. Linguagens de Programao..................................................... 11 1.3. Breve Histrico da Linguagem de Programao C ...................14 1.4. Criao, Compilao e Execuo de um Programa ..................15 Captulo 2 Conceitos Preliminares para Programar em C ...........20 2.1. Estrutura de um Programa Bsico em C ...................................21 2.2. Palavras Reservadas do C ........................................................24 2.3. Uso de Comentrios ..................................................................25 2.4. Os Fundamentos do Ambiente C...............................................27 2.5. Conhecendo o Dev-cpp .............................................................30 Captulo 3 Tipos de Dados, Variveis e Constantes .....................36 3.1. Tipos de dados ..........................................................................36 3.2. Variveis e Constantes ..............................................................38 3.3. Operador de Atribuio (=) ........................................................45 Captulo 4 Comandos de Entrada e Sada de Dados....................50

4.1. Entrada de Dados ......................................................................50 4.2. Sada de Dados .........................................................................55 4.3. Erros Frequentes no Uso dos Comandos de Entrada e Sada .61 4.4. Primeiros programas em C ........................................................62 Captulo 5 Operadores, Expresses e Funes Matemticas .....71 5.1. Operadores Bsicos ..................................................................71 5.2. Operadores Aritmticos de Atribuio ......................................83 5.3. Operadores ++ e -- ....................................................................83 5.4. Converso de tipo......................................................................84 5.5. Funes Matemticas (biblioteca math.h) .................................86 Consideraes Finais .........................................................................96 Conhecendo a Autora .........................................................................97

Apresentao
Caro(a) cursista, Seja bem-vindo (a) ao primeiro mdulo da disciplina Programao I. Nesta disciplina, voc ir aprender a programar na linguagem de programao C, uma das mais utilizadas mundialmente. Desenvolver programas e garantir que estes sejam confiveis, eficientes e agradveis de usar requer conhecimento tcnico e muito treinamento. Este livro foi escrito pensando em voc, que est iniciando neste mundo da programao de computadores e que precisa ser apresentado, com tranquilidade, a um conjunto de novos conceitos. Os assuntos sero transmitidos gradativamente, de forma que voc os absorva com naturalidade. Este livro contm muitos exemplos de questes resolvidas, comentadas em detalhes, para que voc no encontre dificuldades para aprender cada assunto. Alm de apresentar dicas para que voc desenvolva seus programas de forma eficiente e no cometa os principais erros de programao que ocorrem com quem est iniciando a programar. Ao final de cada captulo, voc poder testar o seu aprendizado e assimilar melhor o que foi estudado, atravs da resoluo de exerccios. Isto muito importante! No deixe de resolv-los. De antemo, informamos que programar muito bom, voc vai gostar! Nada melhor do que ver um programa rodando e saber que foi voc quem o criou. Mas, no desanime se encontrar alguma dificuldade durante esta caminhada. s vezes ocorre um erro no programa e no sabemos onde est o problema. Seja persistente! Ao longo do tempo, a experincia vai te deixar mais seguro e voc conseguir encontrar tais erros com facilidade. O objetivo deste primeiro mdulo fazer uma introduo linguagem C, conhecer um pouco da sua histria e iniciar o estudo da sintaxe da linguagem, que possibilitar o desenvolvimento de programas bsicos. Ao final deste primeiro mdulo, voc j estar desenvolvendo seus primeiros programas em C. O que voc est esperando? Vamos comear? Bons estudos! Professora Snia Virginia Alves Frana

Programao I

Conhecendo o Volume 1
Neste primeiro volume, voc ir encontrar o mdulo 1 da disciplina: Programao I. Este volume est estruturado em cinco captulos, que sero estudados ao longo de 15h/aula. Para facilitar seus estudos, veja a organizao deste primeiro volume. Captulo 1: Introduo ao C Carga Horria do Captulo 1: 2 h/aula Objetivos do Captulo 1: Introduzir os conceitos bsicos da rea de programao e apresentar um breve histrico sobre a linguagem C. Contedo Programtico do Captulo 1 Conceito de programas e programao de computadores; Linguagens de programao; Breve histrico da linguagem de programao C; Etapas do desenvolvimento de um programa. Captulo 2: Conceitos Preliminares para Programar em C Carga Horria do Captulo 2: 3 h/aula Objetivos do Captulo 2: Apresentar detalhes mais especficos da linguagem, necessrios para dar incio programao em C. Neste captulo, tambm ser apresentado o ambiente de programao que utilizaremos no desenvolvimento dos programas. Contedo Programtico do Captulo 2 Estrutura de um programa bsico C; Palavras reservadas do C; Uso de comentrios; Fundamentos do ambiente C; Conhecendo o Dev-cpp.

Programao I

Captulo 3: Tipos de Dados, Variveis e Constantes Carga Horria do Captulo 3: 2 h/aula Objetivos do Captulo 3: Apresentar os tipos de dados suportados pelo C e introduzir o conceito de variveis e constantes Contedo Programtico do Captulo 3 Tipos de dados; Variveis e constantes; Operador de atribuio; Captulo 4: Comandos de Entrada e Sada de Dados Carga Horria do Captulo 4: 4 h/aula Objetivos do Captulo 4: Apresentar os comandos de entrada e sada de dados do C. Neste captulo, voc ter acumulado conhecimento suficiente para desenvolver os primeiros programas em C. Contedo Programtico do Captulo 4 Entrada de dados; Sada de dados; Desenvolvimento dos primeiros programas C. Captulo 5: Operadores, Expresses e Funes Matemticas Carga Horria do Captulo 5: 4 h/aula Objetivos do Captulo 5: Apresentar os operadores bsicos (aritmticos, relacionais e lgicos), alm de funes complementares para o desenvolvimento de programas que executem expresses mais complexas. Contedo Programtico do Captulo 5 Operadores aritmticos, lgicos e relacionais; Operadores aritmticos de atribuio; Operadores ++ e --; 7

Programao I

Converso de tipos; Funes matemticas. Ao final de cada captulo voc encontrar: A seo Atividades e Orientaes de Estudo: que contm exerccios para a fixao do assunto estudado, alm de indicao de fruns de discusso. A seo Conhea Mais: que contm dicas de sites e livros que devem ser lidos para ampliar os seus conhecimentos. A seo Vamos Revisar?: que apresenta um resumo dos principais tpicos abordados no captulo.

Programao I

Captulo 1 Introduo ao C
Vamos conversar sobre o assunto? Neste primeiro captulo, ser feita uma apresentao do que programao e quais as principais linguagens de programao do mercado, dando nfase linguagem C. Este captulo importante, porque conheceremos um pouco da histria da linguagem de programao que iremos aprender nesta disciplina. Sempre que conhecemos uma pessoa nova, queremos saber alguns detalhes da sua vida, no mesmo? Quantos anos ela tem, onde nasceu, quem so seus pais, etc. Neste captulo, tambm sero introduzidos conceitos utilizados na rea de programao, visando a nossa preparao para nos lanarmos nesse mundo intrigante da criao de programas computacionais. Ento, prontos (as) para o desafio?

Saiba Mais
1 Alm dos software aplicativo e software de sistema, ainda possivel utilizar a categoria software embutido ou embarcado, destinado a funcionar dentro de uma mquina que no um computador. Normalmente, estes software tm um propsito muito especfico, como, por exemplo: controlar a injeo eletrnica de um carro ou gerenciar o cozimento dos alimentos no forno de microondas. Mais recentemente, surgiu tambm o software como servio, que um software que roda diretamente na internet, no sendo necessrio instalar nada no computador do usurio.

1.1. Programas e Programao de Computadores


Um programa de computador um conjunto de instrues que descrevem uma tarefa que ser executada por um computador. Um programa de computador tambm conhecido como software, software aplicativo, software de sistema ou simplesmente programa. O termo software mais utilizado quando feita uma referncia parte no fsica do sistema computacional, juntamente com o termo hardware, que faz referncia ao conjunto de componentes eletrnicos que constituem um computador. Os programas que permitem ao usurio fazer uma ou mais tarefas especficas, como as planilhas eletrnicas, editores de texto e jogos so chamados de software aplicativo ou aplicao. J os programas que do suporte funcional aos computadores, como os sistemas operacionais e drivers de dispositivos, so chamados de software de sistema1. O ato de desenvolver programas chamado de programao de computadores. A programao o processo de escrita, teste e manuteno de um programa (ASCENIO e CAMPOS, 2002). O desenvolvimento de programas baseado em metodologias ou processos formalizados conhecido por engenharia de software. 9

Programao I

Os programas so escritos em uma linguagem de programao. Assim como o Portugus, o Ingls e o Espanhol, as linguagens de programao tm as suas regras e devemos segu-las para escrever nossos programas corretamente. Portanto, a programao de computadores uma cincia e, por isso, devemos seguir uma metodologia para termos como resultado: programas seguros e eficientes. Em uma disciplina anterior, vocs aprenderam a desenvolver algoritmos, que so uma sequncia de passos para realizar uma tarefa ou resolver um problema. Utilizamos algoritmos no nosso cotidiano para realizar atividades corriqueiras, definindo a sequncia de passos que deve ser executada para atingirmos um objetivo, como, por exemplo, os passos que executamos para tomar banho, calibrar um pneu ou fazer um bolo (Figura 1.1).

Figura 1.1: Exemplos de algoritmos

Para efetuarmos estas atividades, seguimos uma sequncia lgica de passos. Se esses passos no tiverem uma lgica, podemos no conseguir atingir o nosso objetivo. Se vocs observarem, para fazer um bolo, existe uma ordem em que os ingredientes devem ser adicionados receita, caso no sigamos esta ordem, o bolo no ficar bom. Na programao ir ocorrer a mesma coisa, devemos passar as instrues ao computador, utilizando uma linguagem de programao, seguindo uma lgica a lgica computacional. Na prxima seo vamos abordar as linguagens de programao, de uma forma mais abrangente, tratando os principais conceitos que envolvem este assunto. Vamos seguir em frente?

10

Programao I

1.2. Linguagens de Programao


atravs das linguagens de programao que poderemos criar nossos programas. Uma linguagem de programao um conjunto de regras sintticas e semnticas usadas para definir um programa. O conjunto de cdigos (palavras e smbolos), compostos de acordo com essas regras, constituem o cdigo fonte do nosso programa. Para ser executado pelo processador, o cdigo fonte precisa ser traduzido para cdigo de mquina. Aprender uma linguagem de programao um pouco similar a aprender um novo idioma. Temos que saber o significado das palavras, as regras da estruturao das frases, etc., para podermos nos comunicar corretamente no novo idioma.

Por que voc no faz o que eu quero?

Figura 1.2: Aprenda a dar ordens ao seu computador

Existem vrias linguagens de programao. Vocs sabiam que cada linguagem de programao possui o seu conjunto de regras e um modo de funcionamento prprio? A escolha de uma linguagem de programao para o desenvolvimento de um programa deve estar atrelada ao tipo de problema que deseja resolver. Existem linguagens 11

Programao I

que so melhores para resolver um certo tipo de questo do que outras. De acordo com Sebesta (2003), as linguagens de programao vm sendo classificadas de vrias formas: por gerao, de acordo com o paradigma de programao, quanto ao grau de abstrao, de acordo com a estrutura de tipos, dentre outras. Uma das classificaes mais utilizadas quanto ao grau de abstrao. Segundo esta classificao, as linguagens de programao so divididas em trs grupos: linguagens de mquina, linguagens de baixo nvel e linguagens de alto nvel. A linguagem de mquina a linguagem natural dos computadores. Estas linguagens so ininteligveis para o ser humano no treinado. As linguagens de mquina so representadas por sequncias de bits (zeros e uns). Estas sequncias representam instrues que sero executadas pelo processador do computador. As instrues correspondem a sequncias muito simples de operaes, tais como: transferir um dado em memria para a CPU ou somar dois valores. As linguagens de mquina so dependentes do processador, isto , uma determinada linguagem de mquina s poder usada por um tipo de computador.
Saiba Mais
No contexto da informtica, a portabilidade de um programa a sua capacidade de ser compilado ou executado em diferentes arquiteturas (seja de hardware ou de software).
2

Esse termo tambm vem sendo utilizado pelas empresas de telefonia mvel, quando se referem portabilidade de nmero, ou seja, voc muda de operadora, mas no muda o nmero do celular.

As linguagens de baixo nvel so prximas da linguagem de mquina. No entanto, os zeros e uns que formam uma instruo foram substitudos por palavras que representam tais instrues, tornando-as um pouco mais legveis. Estas linguagens so mais voltadas para a mquina, isto , so escritas usando as instrues do microprocessador do computador. So chamadas de linguagens Assembly (que significa montagem). Estas linguagens apresentam as seguintes vantagens: os programas so executados com maior velocidade de processamento (j que so executadas diretamente pela mquina) e ocupam menos espao na memria. No entanto, de modo geral, os programas em Assembly tm pouca portabilidade2 (um cdigo gerado para um tipo de processador no serve para outro) e no so estruturados, tornando a programao mais difcil. As linguagens de alto nvel so mais prximas linguagem humana (do Ingls, por exemplo) e mais distantes das linguagens de mquina. Por isso, so linguagens mais simples de entender, j que, em geral, utilizam uma sintaxe estruturada, tornando seu cdigo mais legvel. Necessitam de compiladores ou interpretadores para gerar instrues do microprocessador. Interpretadores fazem 12

Programao I

a interpretao de cada instruo do programa fonte executando-a dentro de um ambiente de programao, Basic e Java so exemplos de linguagens interpretadas. Os compiladores fazem a traduo de todas as instrues do programa fonte gerando um programa executvel. Estes programas executveis (*.exe) podem ser executados fora dos ambientes de programao. A linguagem C e Pascal so exemplos de linguagens compiladas. As linguagens de alto nvel ainda podem ser divididas de acordo com a sua aplicao: genricas (como C, Java e Pascal, que servem para o desenvolvimento de programas de propsito geral) ou especficas (como Fortran - utilizada para execuo de clculos matemticos, LISP - desenvolvimento de aplicaes na rea de inteligncia artificial e CLIPPER utilizada para aplicaes que manipulam bancos de dados). As vantagens das linguagens de alto nvel so: portabilidade (por serem compiladas ou interpretadas podem ser executadas em vrias plataformas com pouqussimas modificaes) e facilidade de desenvolvimento de programas. No entanto, as rotinas geradas so mais genricas (e mais complexas) e por isso so mais lentas e ocupam mais memria. A figura 1.3, a seguir, apresenta um trecho de cdigo escrito em linguagem de mquina, linguagem de baixo nvel e linguagem de alto nvel, respectivamente.
Linguagem de Mquina 10110101 11100110 11000100 Linguagem de Baixo Nvel LOAD BASE ADD BONUS STORE SALARIO Linguagem de Alto Nvel

Salario = Base + Bonus

Figura 1.3: Trecho de cdigo em diferentes linguagens

Notem como o cdigo em linguagem de mquina incompreensvel. Difcil entender essas sequncias de zeros e uns, no mesmo? O cdigo na linguagem de baixo nvel mais legvel e passamos a entender as instrues. Na linguagem de alto nvel, o cdigo fica menor e muito mais simples. Em qual tipo de linguagem vocs querem programar? Nem precisamos parar para pensar, no mesmo?

13

Programao I

Figura 1.4: Linguagens de baixo nvel x linguagens de alto nvel

1.3. Breve Histrico da Linguagem de Programao C


Vamos conhecer um pouco sobre a histria do C? A linguagem de programao C nasceu em 1972 nos laboratrios Bell, Estados Unidos. Seus criadores so Brian Kernighan e Dennis M. Ritchie. A linguagem C foi criada a partir da linguagem B (sugestivo, no ?), que havia sido desenvolvida no final dos anos 60 por Ken Thompson. O C uma linguagem de alto nvel, compilada e estruturada3. No entanto, o C possui instrues de baixo nvel, bem prximas linguagem de mquina, que s o Assembler possui. O objetivo dos seus criadores era usar o C para desenvolver o sistema operacional UNIX, que originalmente foi escrito em Assembly (linguagem de baixo nvel). Desde ento, espalhou-se por muitos outros sistemas e tornouse uma das linguagens de programao mais usadas, e influenciando o desenvolvimento de muitas outras linguagens como C++ e Java. Com a linguagem C podemos construir programas organizados e concisos (caractersticas dos programas das linguagens de alto 14

Saiba Mais
3 Uma linguagem considerada estruturada quando permite que o programador pegue trechos de maior uso do seu programa e transforme-os em pequenos mdulos (procedimentos e funes) que sero reutilizados sempre que necessrio.

Programao I

nvel), ocupando pouco espao de memria e com alta velocidade de execuo (como o Assembler). Infelizmente, dada toda a flexibilidade da linguagem, tambm poderemos escrever programas desorganizados e difceis de serem compreendidos. Portanto, cabe ao programador de C utilizar boas prticas de programao, para ter programas legveis e de fcil manuteno. Existem inmeras razes para que o C seja uma das linguagens mais preferidas dos programadores. As caractersticas da linguagem C mostram o porqu de sua ampla aceitao. Vejamos algumas caractersticas da linguagem C. Portabilidade entre mquinas e sistemas operacionais; Dados compostos em forma estruturada; Programas estruturados; Total interao com o sistema operacional; Cdigo compacto e rpido, quando comparado ao cdigo de outras linguagens de alto nvel. Agora que j conhecemos um pouco mais da linguagem C, vamos entender o processo de desenvolvimento de um programa. Quais so os passos que devemos seguir para termos um programa pronto? Vamos comear a falar sobre isto agora mesmo. Continuem firmes na leitura!

1.4. Criao, Compilao e Execuo de um Programa


Nesta seo, vamos estudar as etapas de desenvolvimento de um programa em C. O desenvolvimento de um programa dividido em trs etapas, como mostra a figura 1.5.

Figura 1.5: Estados do desenvolvimento de um programa em C

A primeira etapa para o desenvolvimento de um programa em C 15

Programao I

a criao do programa fonte, que consiste no texto formado pelo conjunto de comandos que ns desejamos que o computador execute. O programa fonte deve ser escrito respeitando as regras da linguagem. De modo geral, os programas fontes so digitados em editores de texto genricos ou especficos dos ambientes de programao. No prximo captulo deste volume, vamos conhecer detalhadamente o ambiente de programao que ser utilizado para o desenvolvimento dos nossos programas em C. Com o programa fonte pronto, passamos para a etapa de compilao. O compilador um programa que verifica se o programa fonte no apresenta nenhum erro de sintaxe e gera o programa executvel. Quando o programa fonte apresenta algum problema, dizemos que ocorreu um erro de compilao. Assim, o programador dever avaliar o programa fonte, para a retirada de tais erros. Normalmente, os compiladores indicam os provveis erros de sintaxe cometidos pelo programador. Se o programa no tiver erros de sintaxe, o compilador ir gerar o programa executvel. A etapa final consiste na execuo do programa executvel. Neste momento, o programador dever testar se o programa est produzindo os resultados esperados. Quando o programa apresenta algum erro nesta fase, como, por exemplo, mostrar um resultado incorreto, dizemos que ocorreu um erro de lgica ou erro de execuo. Isso ocorre porque, apesar do programa no ter apresentado erros de sintaxe, o que tornou possvel a gerao do programa executvel, a sequncia de comandos no foi definida de forma correta. Quando ocorre um erro de lgica, o programador dever revisar o seu programa fonte e pass-lo novamente pela fase de compilao, para que um novo executvel, sem erros, seja gerado. Como o compilador no nos avisa onde esto os erros de lgica, estes so mais difceis de serem corrigidos. Aps ter certeza que o programa executvel est correto, sem erros de lgica, o programador poder entreg-lo ao seu cliente. importante fazermos vrios testes nos nossos programas. Testar com vrios valores e verificar se est realmente tudo como esperado. No fica bem nosso cliente ficar ligando, dizendo que o programa est com BUG!4 Lembrem-se sempre, o computador s executa as instrues que ns mandarmos. Se houver erros, a responsabilidade ser nossa que no fizemos o programa corretamente! Vocs no vo querer passar por uma situao como essa? Vo? 16

Saiba Mais
Bug um erro no funcionamento de um programa. tambm chamado de erro de lgica, e pode causar discrepncias no objetivo ou impossibilidade de utilizao de um programa de computador. O uso do termo bug para descrever defeitos inexplicveis foi parte do jargo da engenharia por vrias dcadas. Acredita-se que o termo foi criado por Thomas Edison quando um inseto (bug, em Ingls) causou problemas de leitura em seu fongrafo em 1878.
4

Programao I

Nesta fase de execuo do programa executvel, ns tambm devemos verificar a usabilidade do programa, ou seja, se o programa ficou fcil de ser utilizado pelo seu usurio. Quando o programa de difcil utilizao ou confunde o usurio, induzindo-o ao erro, ele perde o interesse em utiliz-lo ou compr-lo. Tambm devemos verificar se nosso programa tem um bom desempenho, ou seja, se ele processa rapidamente as operaes. Usurio no gosta de programa lento, no mesmo?

Atividades e Orientaes de Estudo Agora o momento de analisarmos se os assuntos abordados neste captulo foram bem absorvidos. Foram vistos muitos conceitos novos, no mesmo? Vamos responder as questes a seguir. Caso sintam necessidade, releiam alguma seo que no foi muito bem assimilada ou complementem as respostas com a leitura dos sites indicados na prxima seo. Vocs esto preparados(as)? 1. Para que serve uma linguagem de programao? 2. Quais as desvantagens das linguagens de baixo nvel? 3. Por que desejamos programas portveis? 4. O que motivou a criao da linguagem C? 5. A linguagem C de baixo ou alto nvel? 6. A linguagem C compilada ou interpretada? 7. Por que os erros de lgica so mais difceis de serem corrigidos? 8. Por que devemos nos preocupar com a usabilidade dos nossos programas?

Conhea Mais Para ampliar os seus conhecimentos sobre os assuntos tratados neste captulo, visite o site da OReilly. Neste endereo, 17

Programao I

http://oreilly.com/pub/a/oreilly/news/languageposter_0504.html, foi disponibilizado

um pster, muitssimo interessante, como uma rvore genealgica das principais linguagens de programao dos ltimos 50 anos. Vale a pena dar uma olhada. muito importante que vocs se cadastrem em algum frum de discusso sobre a linguagem C. Assim, vocs podero conversar e trocar ideias com programadores de C mais experientes. Exemplos de fruns de C: DevMedia e Linha de cdigo.

Vamos revisar? Vamos dar uma reforada em nosso aprendizado com esta pequena reviso dos principais conceitos apresentados neste captulo. Observem o resumo a seguir: Programa: um conjunto de instrues que descrevem uma tarefa que ser executada por um computador. Programao de computadores: o processo de escrita, teste e manuteno de um programa. Algoritmo: sequncia de passos para realizar uma tarefa ou resolver um problema. Linguagem de programao: um conjunto de regras sintticas e semnticas usadas para definir um programa. Linguagem de mquina: a linguagem natural dos computadores. As instrues so formadas por zeros e uns. Estas linguagens no so legveis para um programador sem experincia. Linguagens de baixo nvel: so linguagens escritas usando as instrues do microprocessador do computador. Estas linguagens so mais difceis de entender e criar programas. Linguagens de alto nvel: so linguagens mais prximas linguagem humana e mais distantes das linguagens de mquina. So linguagens mais simples de entender, j que, em geral, utilizam uma sintaxe estruturada, tornando seu cdigo mais legvel. Compiladores: so programas que fazem a traduo de todas as instrues do programa fonte gerando um programa executvel.

18

Programao I

Interpretadores: so programas que interpretam cada instruo do programa fonte executando-a dentro de um ambiente de programao. Compilao: o processo, executado pelo compilador, que verifica se existem erros de sintaxe no cdigo fonte e gera um programa executvel. Erro de sintaxe: ocorre durante o processo de compilao do programa, quando o programador, ao editar o seu programa fonte, no respeita alguma regra de sintaxe da linguagem de programao. Erro de lgica: ocorre durante a execuo de um programa, devido um erro na lgica dos comandos.

19

Programao I

Captulo 2 Conceitos Preliminares para Programar em C


Vamos conversar sobre o assunto? Neste captulo, sero abordados conceitos preliminares que iro nos preparar para programar em C. Estes conceitos esto relacionados estrutura de um programa bsico em C. Aqui, tambm, ser apresentado o ambiente de programao que utilizaremos para o desenvolvimento dos nossos programas o Dev-cpp. Este ambiente apresenta uma interface amigvel, que facilitar o processo de programao. Vocs devem baixar e instalar o Dev-Cpp5, o quanto antes, no computador que ser utilizado para a prtica desta linguagem. importante que vocs tenham pacincia neste incio de aprendizado, j que precisamos, inicialmente, acumular o conhecimento necessrio para a construo de um programa completo em C. Visando facilitar o aprendizado, em alguns momentos, ser feito um paralelo entre a sintaxe do C e do Portugol do VisuAlg6 (linguagem utilizada para escrever algoritmos).

Saiba Mais
5 O Dev-cpp uma ferramenta gratuita e pode ser baixada acessando o site: www.bloodshed. net/devcpp.html

Saiba Mais
Conhea mais o VisuAlg pesquisando no site: http://www. apoioinformatica. inf.br/visualg/ linguagem.htm
6

20

Programao I

Figura 2.1: Qualidades de um programador: ateno, pacincia e persistncia

Vale lembrar que qualquer linguagem de programao assimilada atravs da resoluo de exerccios. importantssimo que a prtica de programar faa parte da rotina de vocs. Assim, separem sempre um tempo para resolver as questes propostas neste material. Vocs vo perceber o quanto bom ver um programa rodando! Que venha o C!

2.1. Estrutura de um Programa Bsico em C


Nesta seo, vamos estudar a estrutura de um programa bsico em C. Visando facilitar o entendimento e no sobrecarregar vocs com muitos detalhes, alguns elementos da estrutura do programa sero omitidos. Mas, no momento certo, abordaremos tais elementos, certo? Assim, a estrutura do programa que ser apresentada nesta seo, a estrutura mnima de um programa em C. Nas linguagens de programao em geral, existe uma estrutura que indica a ordem em que deve ser disposto cada elemento do programa. Esta ordem deve ser respeitada para que nossos programas fiquem corretos. Como ser a estrutura de um programa em C? A estrutura bsica de um programa C deve seguir a seguinte ordem: 1. Incluso de bibliotecas (quando necessrio); 2. Declarao das constantes (quando necessrio); 3. Programa principal; 21

Programao I

Declarao de variveis (quando necessrio); Sequncia de comandos. Para entendermos melhor a estrutura bsica de um programa C, vamos analisar o programa de exemplo 2.1, abaixo. Este programa calcula o cubo de um nmero inteiro fornecido pelo usurio. Na sequncia, temos este programa resolvido utilizando o portugol, que do conhecimento de vocs. Assim, fica fcil compararmos a estrutura do programa em C, com a estrutura do algoritmo. No se preocupem em entender cada comando do exemplo abaixo, estamos apenas comeando a estudar a linguagem C, certo?
Exemplo 2.1: Programa C Clculo do cubo de um nmero

1 2 3 4 5 6 7 8 9 10 11

#include <stdio.h> main() { int num,c; printf(Cubo de um numero\n\n); printf(Digite o numero: ); scanf(%d,&num); c = num*num*num; printf(\nCubo de %d = %d,num,c); getche(); }

Segue abaixo o algoritmo, escrito no VisuAlg, que calcula o cubo de um nmero.

22

Programao I

Exemplo 2.2: Algoritmo Calculo do cubo de um nmero

1 2 3 4 5 6 7 8 9 10

algoritmo Cubo var num, c: inteiro inicio escreval(Cubo de um numero) escreva(Digite o numero: ) leia(num) c <- num*num*num escreval(Cubo de , num, = , c) fimalgoritmo

Um programa em C inicia com a incluso de bibliotecas. Uma biblioteca um arquivo que contm comandos complementares, que so utilizados pelo nosso programa. Para a incluso de uma biblioteca devemos usar um comando que chamado de diretiva de compilao. Este comando informa ao compilador quais bibliotecas devem ser anexadas ao programa executvel. Assim, o comando para a incluso de uma biblioteca tem a seguinte sintaxe:
Sintaxe #include <nome_do_arquivo_da_ biblioteca>

De acordo com a sintaxe, para incluir uma biblioteca ao nosso programa devemos colocar a diretiva de compilao #include e, entre os smbolos < e >, colocamos o nome do arquivo da biblioteca. De maneira geral, os arquivos de biblioteca tm a terminao .h (esse h vem de header, ou seja, este um arquivo de cabealho). Para cada biblioteca, que ser includa no nosso programa, devemos colocar um comando #include. No exemplo 2.1, na linha 1, feita a incluso de uma biblioteca: stdio.h. Na medida em que formos aprendendo os comandos, sero indicadas quais bibliotecas devem ser includas no programa. A quantidade de bibliotecas e quais bibliotecas sero 23

Programao I

Saiba Mais
7 Do Ingls, main significa principal. Todo programa C comea a sua execuo a partir do programa principal. Assim, o programa principal uma parte obrigatria na estrutura de um programa C.

includas dependem dos comandos que sero utilizados no programa. Pode ser que em um programa no seja necessrio incluir nenhuma biblioteca. O segundo item da estrutura de um programa C a declarao das constantes, esse item opcional, s constar no nosso programa, caso seja necessrio. Veremos a declarao de constantes, em detalhes, no prximo captulo. No exemplo 2.1 no foi necessrio o uso de constantes. O terceiro item da estrutura do programa C o programa principal. no programa principal que colocaremos a sequncia de comandos que deve ser executada para a soluo do problema que desejamos resolver. Ns devemos informar onde comea e termina o programa principal. O programa principal inicia com: main()7, como mostra a linha 2, do exemplo 2.1. A sequncia de comandos do programa principal delimitada por um par de chaves: { (abre chaves) e } (fecha chaves). As chaves que delimitam o corpo do programa principal8 aparecem nas linhas 3 e 11, do exemplo 2.1. Fazendo uma comparao com o algoritmo do exemplo 2.2, as chaves fazem o papel do inicio e fimalgoritmo, das linhas 4 e 10. Logo no incio do programa principal, devem ser declaradas as variveis (que sero abordadas no prximo captulo). A declarao de variveis um item opcional, pode acontecer de no precisarmos declarar variveis no nosso programa. No exemplo 2.1, a declarao de variveis feita na linha 4. Foram declaradas duas variveis do tipo inteiro: num e c. No algoritmo, exemplo 2.2, as variveis so declaradas fora do programa principal, na seo de declarao de variveis (linhas 2 e 3). Aps a declarao das variveis, colocamos a sequncia de comandos que o programa dever executar. O programa termina com o fecha chaves que delimita o programa principal. Agora que j sabemos como a estrutura de um programa bsico em C, vamos comear a aprender a sintaxe dos comandos para darmos incio ao desenvolvimento dos nossos programas.

Saiba Mais
8 Chamamos de corpo do programa principal toda a sequncia de comandos que faz parte do programa principal. Ou seja, a sequncia de comando que aparece entre as chaves de abertura e trmino do programa principal.

2.2. Palavras Reservadas do C


Como mencionado no captulo anterior, as linguagens de programao so formadas por um conjunto de regras de sintaxe e 24

Programao I

semntica que ditam como o programa deve ser escrito. Com isso, dentro dessas regras, existe um conjunto de palavras que tem um significado para a linguagem de programao so as palavras reservadas. Uma palavra reservada , essencialmente, um comando e, na maioria das vezes, as palavras reservadas de uma linguagem definem o que pode ser feito e como pode ser feito. As palavras reservadas so de uso exclusivo da gramtica da linguagem, por isso, no podem ser utilizadas, pelo programador, para dar nome a alguma varivel, constante ou funo do seu programa. Assim, um programador no pode ter uma varivel chamada int no seu programa C, j que int uma palavra reservada que indica um tipo de dado. Na linguagem C temos 32 palavras reservadas. Todas as palavras reservadas do C so escritas em minsculo. A tabela abaixo mostra as palavras reservadas, conforme definido pelo padro ANSI9, para a linguagem C.
auto break case char const switch volatile continue default do double else typedef while enum extern float for goto union if int long register unsigned return short signed sizeof static struct void

Saiba Mais
9 A sigla ANSI significa: American National Standards Institute (Instituto Nacional Americano de Padronizao). uma organizao que tem por objetivo facilitar a padronizao dos trabalhos de seus membros.

No Dev-cpp, ambiente de programao que ser utilizado, sempre que digitarmos uma palavra reservada no nosso programa, esta aparecer em negrito. Isto facilita no momento da programao, pois no precisaremos decorar esta lista de palavras reservadas. Que alvio! Assim que uma palavra ficar em negrito no nosso programa, poderemos verificar se estamos utilizando-a de forma correta.

Saiba Mais
Ao desenvolver nossos programas utilizando boas prticas de programao, teremos como resultado um cdigo fonte mais legvel e um progama executvel mais seguro e eficiente. Ao longo deste material sero ensinadas boas prticas de programao.
10

2.3. Uso de Comentrios


Os comentrios so utilizados para documentar um programa. A colocao de comentrios em um programa uma das boas prticas de programao10. Os comentrios iro facilitar o entendimento e manuteno de programas. Por exemplo, um programador responsvel por desenvolver o sistema de controle de vendas 25

Programao I

da sua empresa. Como o sistema grande, aps um tempo, ele no lembrar mais o porqu de ter colocado uma sequncia de comandos no seu programa. Se o programa estiver bem comentado, o programador poder, rapidamente, ter esta resposta. Alm disso, quando desenvolvemos programas em grupo, importante que os demais membros do grupo entendam o raciocnio do nosso programa e isso pode ser explicado atravs dos comentrios. Os comentrios podem ser colocados em qualquer parte do programa. Quando o compilador identifica um comentrio, ele os ignora, j que os comentrios so apenas informaes para o programador. A linguagem C fornece dois tipos de comentrios: de linha e de bloco. Vamos detalhar como funciona cada um deles. Os comentrios de linha so mais utilizados quando desejamos comentar uma nica linha do nosso programa. Um comentrio de linha possui a sintaxe a seguir:
Sintaxe // texto do comentrio

Saiba Mais
No Dev-cpp, quando colocamos um comentrio, as letras do texto comentado ficam cinza.
11

Um comentrio de linha inicia com duas barras // e, na sequncia, vem o texto do comentrio. O exemplo 2.3, a seguir, apresenta um programa comentado. Na linha 7, temos o exemplo de um comentrio de linha. Este comentrio serviu para informar para que serve a varivel C. Assim que o compilador encontra //, ele ignora todo texto que vem aps as duas barras11. Este tipo de comentrio age apenas na linha que ele inserido. O segundo tipo de comentrio disponvel na linguagem C o comentrio de bloco. Os comentrios de bloco so utilizados quando queremos fazer um comentrio maior, que compreenda mais de uma linha de comentrio. A sintaxe do comentrio de bloco a seguinte:
Sintaxe /* texto do comentrio texto do comentrio texto do comentrio */

Um comentrio de bloco inicia com barra-asterisco /* e termina por asterisco-barra */. O compilador ir ignorar tudo o que encontrar 26

Programao I

entre estes dois smbolos. Veja no exemplo 2.3, que nas linhas 2, 3, e 4 aparece um comentrio de bloco. Este tipo de comentrio do exemplo utilizado para identificar quem o programador quando o programa foi feito e o que o programa faz. Devemos adotar este tipo de comentrio no incio dos nossos programas. Assim, ao abrir um programa, rapidamente, saberemos para que ele serve. Devemos tomar cuidado para no esquecer o */ que fecha o comentrio de bloco.
Exemplo 2.3: Programa C Comentado Clculo do cubo de um nmero

1 2 3 4 5 6 7 8 9 10 11 12 13 14

#include <stdio.h> /* Programador: Snia Frana Data: 09/03/2009 Programa calcular o cubo de um nmero main() { int Num, C; // C guarda o cubo do numero printf(Cubo de um numero\n\n); printf(Digite o numero: ); scanf(%d,&Num); C = Num*Num*Num; printf(\nCubo de %d = %d,Num,C); getche(); } */

2.4. Os Fundamentos do Ambiente C


Na seo 1.5, do captulo anterior, foram abordados os processos de criao, compilao e execuo de um programa. Nesta seo, vamos detalhar um pouco mais estes processos, entendendo os 27

Programao I

fundamentos do ambiente C. A figura 2.2 apresenta um ambiente C, com as seis fases pelas quais passa um programa, desde a sua edio, at a sua execuo.

Figura 2.2: Ambiente C

A fase 1 compreende a edio do nosso programa. O programa criado com a utilizao de um editor e armazenado no disco do computador (HD - Hard Disk). O arquivo que contm o nosso programa tem a terminao .c, e este chamado de programa fonte ou cdigo fonte. Ao terminar a edio do programa, o programador solicita que o seu cdigo fonte seja compilado. O compilador traduz o cdigo fonte para o cdigo em linguagem de mquina (tambm chamado de cdigo objeto). Vocs se lembram das diretivas de compilao? Antes da traduo, temos a fase 2, em que o pr-processador 28

Programao I

analisa o cdigo fonte, executando as diretivas de compilao. O pr-processador tambm responsvel por eliminar os comentrios que o programador colocou no seu cdigo fonte. O pr-processador ativado automaticamente pelo compilador. Na fase 3, que ocorre o processo de compilao, aps o cdigo fonte ter sido pr-processado. Para que o processo de compilao seja concludo, o programa no pode apresentar erros de sintaxe. Na fase 4, ocorre o processo de linking, que consiste na ligao do cdigo objeto, gerado pelo compilador, com o cdigo das funes que esto disponveis nas bibliotecas que inclumos no nosso programa. Ou seja, no exemplo 2.1, em que foi includa uma biblioteca, o linker dever localizar o arquivo da biblioteca e fazer a ligao com o cdigo objeto. Esta fase termina com a gerao do programa executvel, armazenando-o no disco do computador. No Dev-cpp, o programa executvel armazenado no mesmo diretrio que estiver armazenado o cdigo fonte. Na Figura 2.3, temos um diretrio contendo o arquivo do cdigo objeto (.c C source file) e o programa executvel (.exe application). O arquivo do programa executvel no pode ser editado, o que ns podemos editar o arquivo do cdigo fonte.

Figura 2.3: Diretrio contendo cdigo objeto e o programa executvel

Saiba Mais
CPU a sigla para Central Processing Unit, em Ingls, ou Unidade Central de Processamento. A CPU a parte do computador que processa as instrues contidas em um programa.
12

As fases 5 e 6 consistem na execuo do programa executvel. Para dar incio a execuo de um programa, necessrio que o mesmo esteja na memria principal do computador. Isto feito na fase 5, pelo carregador do programa. O carregador pega o programa executvel que est armazenado no disco e o transfere para memria principal. Assim que o programa est na memria principal do computador, ele est pronto para ser executado. A execuo de um programa feita pela CPU12, que executa as instrues do programa, uma aps a outra, at o seu trmino. 29

Programao I

Na prxima seo, vamos conhecer o Dev-Cpp, que possibilitar a criao, compilao e execuo dos nossos programas. Com o Devcpp poderemos observar as fases aqui descritas.

2.5. Conhecendo o Dev-cpp


Saiba Mais
C++ uma linguagem de programao que surgiu a partir do C.
13

O Dev-Cpp um ambiente de programao que edita, compila e executa programas C e C++13. Sabem porque iremos usar o Devcpp para desenvolver nossos programas? O Dev-cpp gratuito (muito importante!) e possui uma interface bastante amigvel (mais importante ainda!). A Figura 2.4 apresenta a tela principal do Devcpp.

Figura 2.4: Tela principal do Dev-cpp

Como mencionado no incio deste captulo, vocs devero baixar o Dev-cpp e instalar no seu computador, para que possamos fazer os nossos programas. O processo de instalao no apresenta dificuldades. Vocs s devem ficar atentos no momento que for questionado sobre qual idioma deseja utilizar, para que faa a escolha do idioma correto (Portugus), certo? Assim, a interface do Dev-cpp ficar toda em Portugus, facilitando os seus estudos. Vamos analisar a tela principal do Dev-cpp, apresentada na figura 2.4. Na parte 1 temos o menu principal do Dev-cpp, que disponibiliza 30

Programao I

as seguintes opes: Arquivo: o menu arquivo disponibiliza, basicamente, as opes para criar, salvar, imprimir e fechar arquivos. Editar: neste menu encontraremos as opes: copiar, colar, selecionar, refazer e desfazer. Localizar: as opes deste menu nos possibilitam localizar alguma palavra no programa fonte, alm de permitir substituies de uma palavra por outra. Exibir: neste menu temos as opes que nos permite exibir ou esconder itens da interface do ambiente, como por exemplo: barra de ferramenta e barra de status. Projeto: permite a adio ou remoo de arquivos em um projeto. Executar: atravs deste menu que iremos chamar as opes para a compilao e execuo do nosso programa. Debug: o debugador auxilia o programador a encontrar erros no programa, tornando possvel acompanhar passo a passo a execuo dos comandos do programa. Neste menu teremos as opes para utilizao do debugador. Ferramentas: no menu ferramentas temos as opes para configurar o ambiente (mudar cores, tipo de letra, dentre outros) e tambm a opo para atualizao do Dev-cpp. CVS14: este menu utilizado por quem faz o controle de verses dos programas. Apesar de ser uma funo bastante interessante, mais utilizado quando trabalhamos em grupo ou com programas grandes. Janela: neste menu esto disponveis as opes que nos permitem escolher qual janela de edio deve ficar visvel no momento. Utilizamos esta opo quando temos vrios programas abertos ao mesmo tempo. Ajuda: neste menu encontramos o help do Dev-cpp. Na parte 2, da Figura 2.4, temos os cones de atalhos para as opes mais utilizadas no Dev-Cpp. Se vocs deixarem o mouse sobre o cone, aparecer um texto, que informa o que ele faz. Na parte 3 temos a rea de edio do programa. Para a rea de edio ficar 31
Saiba Mais
O CVS, ou Concurrent Version System (Sistema de Verses Concorrentes) um sistema de controle de verses que permite que se trabalhe com diversas verses do mesmo arquivo. Este sistema mantm as verses antigas do seu arquivo e os logs de quem e quando manipulou os arquivos.
14

especialmente til para se controlar verses de um software durante seu desenvolvimento, ou para composio colaborativa de um documento.

Programao I

disponvel, vocs devero escolher a opo Arquivo/Novo/Arquivo Fonte. nesta rea que digitaremos os nosso programas (cdigo fonte). A parte 4 fica visvel quando nosso programa apresenta algum erro de compilao. O compilador indicar em qual linha foi encontrado um erro, e fornece uma dica do que pode ser o erro. Mesmo que vocs tenham instalado o Dev-cpp em Portugus, as mensagens de erro so apresentadas em Ingls. Por isso, importante que vocs comecem a se familiarizar com estas mensagens, para que consigam tirar mais rapidamente os erros dos programas. Segue abaixo um roteiro do que vocs precisam fazer para editar, compilar e executar seus programas no Dev-cpp: 1. Crie um arquivo fonte novo na opo: Arquivo/Novo/Arquivo Fonte; 2. Digite o programa fonte na rea de edio. Ao terminar de editlo, salve o arquivo;
Saiba Mais
O erro de compilao pode no estar na linha que o complilador est indicando. O erro poder estar: na linha que ele est indicando, na linha imediatamente acima, ou ainda, em linhas mais acima (menos comum de acontecer).
15

3. Compile o programa na opo: Executar/Compilar; 4. Se der algum erro no programa, vejam as indicaes de erro fornecidas pelo compilador15. Conserte os erros, salve o arquivo e compile novamente. Isto deve ser feito at que seja apresentada uma mensagem indicando que o programa no tem erros de compilao. 5. Se vocs acessarem o diretrio que o arquivo do cdigo fonte foi armazenado, notaro que foi criado um arquivo com a extenso .exe (com o mesmo nome do arquivo do cdigo fonte). Este programa executvel. Para execut-lo, escolha a opo Executar/Executar no Dev-cpp. Imediatamente, aparecer a janela de execuo do programa, como mostra a Figura 2.5.

Figura 2.5: Janela do programa em execuo

nesta janela que o programa ser executado. Aqui o usurio 32

Programao I

dever fornecer os dados solicitados pelo programa, neste caso o programa est solicitando que seja digitado um nmero. Alm disso, tambm receber os resultados fornecidos pelo programa. Quando a execuo de um programa finalizada, esta janela ser fechada automaticamente. Agora que j conhecemos o ambiente de desenvolvimento de programa C, precisamos aprender os comandos para fazer um programa completo. Nos prximos captulos iremos ver tais comandos, para podermos comear a programar. No fiquem ansiosos(as), a nossa hora de programar est chegando!

Atividades e Orientaes de Estudo Vamos resolver mais uma lista de exerccios? Note que estamos conhecendo, aos poucos, os detalhes que envolvem a programao de computadores. A resoluo das atividades propostas far com que estes conceitos sejam assimilados de forma mais natural. sempre importante complementar o nosso conhecimento com a leitura de livros e materiais disponveis na Internet, indicados na seo Conhea Mais. Ser que vocs esto lembrados (as) das respostas para as questes abaixo? 1. Quando que precisamos incluir uma biblioteca em um programa C? 2. O que diretiva de compilao? 3. O que deve ter no corpo do programa principal? 4. O que uma palavra reservada? 5. Por que devemos comentar nossos programas? 6. Qual a funo do pr-processador no momento da compilao de um programa? 7. Qual o papel do linker no processo de compilao? 8. Qual elemento do computador responsvel pela execuo do programa?

33

Programao I

Conhea Mais Vocs podero aprender mais sobre boas prticas de programao nos sites:
http://www.ibm.com/developerworks/aix/library/au-hook_duttaC.html http://www2.eletronica.org/artigos/eletronica-digital/programando-em-cboas-praticas

Para conhecer mais detalhes do ambiente de programao que iremos utilizar, acessem os sites:
http://www.bloodshed.net/dev/index.html http://www.uniqueness-template.com/devcpp/

Vamos revisar? Nesta seo iremos revisar os principais tpicos vistos neste captulo. Vale a pena dar uma lida para verificar como est o nosso aprendizado. Observem o resumo a seguir: A estrutura bsica de um programa C deve seguir a seguinte ordem: incluso de bibliotecas, declarao das constantes e programa principal. No corpo de programa principal temos: declarao de variveis e sequncia de comandos. Uma biblioteca um arquivo que contm comandos complementares, que so utilizados pelo programa. Para a incluso de uma biblioteca devemos usar um comando que chamado de diretiva de compilao. As palavras reservadas de uma linguagem definem o que pode ser feito e como pode ser feito. O programador no pode utilizar uma palavra reservada da linguagem para dar nome as suas variveis, constantes e funes. O uso de comentrio nos programas uma boa prtica de programao, e facilita o entendimento do cdigo fonte.

34

Programao I

Passos para o desenvolvimento de um programa: edio, prprocessamento, compilao, ligao (linking), carregamento e execuo. O compilador traduz o cdigo fonte para o cdigo em linguagem de mquina. O pr-processador analisa o cdigo fonte, executando as diretivas de compilao. O linker faz a ligao do cdigo objeto, gerado pelo compilador, com o cdigo das funes que esto disponveis nas bibliotecas que inclumos no programa. Ao ser executado, um programa deve ser carregado na memria. O carregador, tambm conhecido por loader, e responsvel por acessar o programa armazenado no disco e carreg-lo para a memria principal do computador. Os programas so executados passo a passo pelo processador do computador.

35

Programao I

Captulo 3 Tipos de Dados, Variveis e Constantes


Saiba Mais
A linguagem C no possui o tipo lgico, que armazena verdadeiro ou falso.
16

Vamos conversar sobre o assunto? Programas so feitos para manipular dados. Armazenar notas, calcular mdias, alterar um endereo, etc. Os dados so a essncia de um programa. Dados precisam ser armazenados e modificados ao longo da execuo do programa. Neste captulo, iremos conhecer os tipos de dados suportados pela linguagem C e aprender a definir constantes e variveis. Inicialmente, os comandos sero apresentados em separado. Mas, logo em seguida, veremos o ponto em que cada comando deve ser colocado na estrutura do programa, certo? Tenham pacincia! Vocs iro notar que muito dos conceitos estudados nos captulos anteriores sero referenciados neste captulo. Mas isto no problema, no mesmo? Vamos continuar os nossos estudos, conhecendo mais um pouco da linguagem C.

Saiba Mais
Bit uma abreviatura de Binary Digit (dgito binrio). Este termo foi criado pelo engenheiro belga Claude Shannon que em 1949 para simbolizar uma unidade de informao. Tudo na informtica medido em bits, desde o tamanho de um nmero at a velocidade de transferncia de dados em uma rede. Por ser uma unidade binria, pode ter apenas dois valores, zero ou um.
17

3.1. Tipos de dados


Nesta seo, vamos aprender um conceito importante em programao, que : tipo de dados. De maneira geral, os programas manipulam dados, armazenando-os e, muitas vezes, modificando seus valores. Primeiramente, vamos conhecer quais os tipos de dados so manipulados na linguagem C. Basicamente, a linguagem C, manipula quatro tipos de dados: inteiro, real, caractere e void16. Para cada tipo de dado, necessria uma quantidade de bits17 para armazen-lo. Alm disso, cada tipo de dado possui um conjunto de operaes que pode ser executada sobre ele. Nas subsees seguintes, vamos detalhar cada tipo de dado separadamente. 3.1.1. Inteiro Os dados do tipo inteiro so toda e qualquer informao numrica que pertena ao conjunto dos nmeros inteiros relativos (negativo, nulo ou positivo). Os nmeros inteiros, em C, se dividem em trs tipos, como mostra a tabela a seguir.

A partir do bit, surgiu o byte, que nada mais do que um conjunto de 8 bits. Existem diversos mltiplos dos bytes: um kilobyte (KB), equivalente a 1.024 bytes; um megabyte (MB), equivalente a 1.024 KB; e um gigabyte, equivalente a 1.024 MB.

36

Programao I

Tipo short int long

Tamanho 16 bits 32 bits 64 bits

Intervalo Suportado -32.768 a +32.767 -2.147.483.648 a + 2.147.483.647 -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807 Ateno


A memria a parte do computador que tem como funo o armazenamento de dados. Quando um dado vai ser armazenado, precisamos reservar uma quantidade de memria para isto.
18

Qual a diferena entre cada um deles? A diferena entre os tipos short, int e long a quantidade de memria18 que reservada para armazen-los. Veja como simples: medida que se utiliza mais memria, aumenta o intervalo do valor que pode ser armazenado. Por exemplo, para armazenar um dado do tipo short, so reservados 16 bits de memria. Com isso, o tipo short pode suportar um nmero inteiro no intervalo de -32.768 a +32.767, como apresentado na tabela. Portanto, dependendo do valor que ser armazenado, deve ser escolhido um tipo (short, int ou long) que comporte tal valor. Por exemplo, para armazenar a idade de um funcionrio, o tipo short o mais adequado (j que a idade de uma pessoa um valor que raramente ultrapassa 100). No entanto, para armazenar a quantidade de eleitores de uma cidade, deve-se usar o tipo int (note que em muitas cidades, a quantidade de eleitores ultrapassar o maior valor suportado pelo tipo short: 32.767). Para facilitar nosso estudo, neste material, sempre ser usado o tipo int para armazenar os dados inteiros. 3.1.2. Real Os dados do tipo real so toda e qualquer informao numrica que pertena ao conjunto de nmeros reais (negativo, positivo ou nulo). Os nmeros reais, em C, podem ser de dois tipos, como mostra a tabela abaixo:
Tipo float double Tamanho 32 bits 64 bits Intervalo Suportado 3.4E-38 a 3.4E+38 1.7E-308 a 1.7E+308

Para o tipo float so reservados 32 bits de memria, o que possibilita armazenar um valor no intervalo 3.438 a 3.438. Como o tipo float suporta valores bem altos, neste material, sempre ser usado o tipo float para armazenar os dados reais. 37

Programao I

3.1.3. Caractere Na linguagem C, os caracteres so do tipo char, representados por toda e qualquer informao composta por um nico caractere alfa numrico (a, b, c,...z, A, B, C,...Z, 0...9) ou especial (como por exemplo: ; # ? @ ! < ?). O tipo char armazena um nico caractere. Quando se deseja armazenar vrios caracteres, necessrio definir um vetor de caractere (mais detalhes na seo 3.2.2). Por exemplo, o nome de um aluno formado por uma cadeia de caracteres, assim, ser necessrio usar um vetor de caracteres. Cada caractere armazenado ocupa o espao de 8 bits de memria. Um caractere deve ser representado entre apstrofo, por exemplo: a. Mas, quando temos uma cadeia de caracteres, esta deve ser representada entre aspas dupla, por exemplo: Pedro Goncalves. 3.1.4. Void Em Ingls, void quer dizer vazio e isto mesmo que o void . Void um tipo que no armazena nada (um tanto esquisito, no ?). Este tipo serve para indicar que um resultado no tem um tipo definido. Ele utilizado quando estamos definindo funes nos nossos programas. Permite-nos desenvolver funes que no retornam nada e funes que no tm parmetros. Voltaremos a falar do tipo void no Volume 2, no captulo que aborda modularizao.

3.2. Variveis e Constantes


Agora que j sabemos os tipos de dados manipulados pela linguagem C, vamos aprender como reservar espaos de memria para o armazenamento dos nossos dados. Qualquer dado que seja manipulado pelo programa deve ficar armazenado na memria principal do computador. Para que o armazenamento seja possvel, precisaremos reservar espaos na memria principal do computador. As variveis e constantes so unidades bsicas de armazenamento dos dados em programao. Elas so um espao de memria reservado para armazenar um certo tipo de dado e possuem um identificador (nome) para referenciar o seu contedo. Dessa forma, nossos dados ficam armazenados em constantes ou variveis. Uma varivel pode conter, a cada instante, valores diferentes. No 38

Programao I

entanto, as constantes referem-se a valores fixos que no podem ser alterados durante a execuo do programa. O modo como cada constante representada depende do seu tipo (este assunto ser detalhado um pouco mais a frente). Para entender o conceito de variveis e constantes, vamos fazer a seguinte analogia: um armrio cheio de gavetas de tamanhos diferentes. Acompanhem o raciocnio: Pedro tem um armrio e decide que em cada gaveta ser guardado um tipo de roupa: camisa, bermuda, cala, etc.

Figura 3.1: Armrio cheio de gavetas

Em uma dada gaveta, s podem ser armazenadas camisas. No ser permitido o armazenamento de calas nesta gaveta. Para facilitar a identificao, Pedro coloca uma etiqueta informando o que cada gaveta guarda. Com isso, Pedro poder identificar, rapidamente, em qual a gaveta esto guardadas suas camisas. Agora vamos associar a ideia das gavetas com a ideia de variveis, constantes e tipo. As gavetas que guardam as roupas so como os espaos de memria que armazenam nossos dados. Assim como uma gaveta s pode armazenar um tipo de roupa, os espaos de memria so especificados para armazenar um tipo de dado. Dependendo do tipo de roupa, a gaveta precisa ser maior ou menor. Da mesma forma, dependendo do tipo de dado, feito uma reserva de mais ou menos memria para armazen-lo (de acordo com as tabelas da seo 3.1). As etiquetas das gavetas so os identificadores dos nossos 39

Programao I

espaos de memria. Assim, facilmente iremos encontrar um dado armazenado nos nossos espaos de memria. Quando temos uma varivel, o contedo da nossa gaveta pode mudar ao longo do tempo. Mas, no caso de uma constante, seu contedo ser sempre o mesmo. Nas prximas sees, vamos aprender as regras para dar nomes s nossas variveis e constantes e como criar as nossas gavetas espaos de memria (variveis e constantes). 3.2.1. Identificadores Para que o compilador saiba quais dados estamos querendo manipular, eles precisam ter um nome. como ns, todos temos um nome. Sabemos quando algum est nos chamando quando falam o nosso nome. Vai acontecer a mesma coisa com os espaos de memria dos nossos programas, precisamos identific-los de alguma forma. Os identificadores so os nomes que damos s nossas variveis, constantes, funes e procedimentos usados no programa. Para criar um identificador necessrio respeitar as regras a seguir: O primeiro caractere deve ser uma letra ou _ (underscore); O restante do nome deve ser formado por caracteres pertencentes ao seguinte conjunto: a,b,c,..z, A,B,C,...Z, 0,1,2,...,9, _ (ou seja: letras, nmeros e underscore); No deve haver espao em branco (ou seja, no existem identificadores compostos, formados por dois ou mais nomes); No utilizar acentos, nem cedilha; Os identificadores podem ter at 32 caracteres; No deve haver identificadores repetidos (Se dermos o mesmo nome para duas variveis do nosso programa, o compilador no vai saber qual delas ser chamada, e isso no pode acontecer). A linguagem C faz distino de maisculas e minsculas. Assim, os identificadores: Media, MEDIA, MediA e media so diferentes. O fato de termos uma nica letra de forma diferente (maiscula ou minscula), j faz com que os identificadores se diferenciem. Esta propriedade chamada de case sensibility (sensibilidade a letras maisculas e minsculas).

40

Programao I

DICA: Boa Prtica de Programao Escolham bem os nomes das variveis e constantes do programa. Os identificadores escolhidos devem ser claros, a fim de explicitar o contedo que ser armazenado, mas tambm no devem ser extensos para no dificultar a escrita.

A seguir, vamos verificar exemplos de identificadores corretos e incorretos: Identificadores corretos: a, x2, Nome_Aluno, Media, SalarioFuncionario. Note que, quando queremos usar identificadores com mais de uma palavra, que foi o caso de Nome_Aluno, usamos o _ para ligar uma palavra a outra. Ou usamos as palavras juntas, como o exemplo SalarioFuncionario. Lembrando que no podemos usar espao em branco. Identificadores incorretos: 2m (comeou com nmero), media* (caractere * no permitido), Nome disciplina (no pode haver espao em branco), funcionrio (no pode acentuar). At este momento, vimos os conceitos de tipos de dados, variveis, constantes e identificadores. Na prxima seo, estes conceitos sero utilizados em conjunto, para que possamos declarar as nossas variveis, ou seja, criar espaos de memria para armazenar os dados manipulados pelo nosso programa. Continuemos a nossa leitura. 3.2.2. Declarao de Variveis Para que se possa usar uma varivel em um programa, primeiramente, necessrio fazer a declarao dela. A declarao de uma varivel informa ao processador duas coisas: o identificador (nome) da varivel e o seu tipo de dado. As variveis precisam de um nome para que o processador saiba onde desejamos armazenar o nosso dado. Alm disso, toda varivel precisa ser associada a um tipo de dado, para que o processador reserve o espao de memria necessrio para o seu armazenamento. Como visto na seo 3.1, cada tipo de varivel, ocupa uma quantidade de bits diferente. Resumindo, toda varivel possui um nome, um tipo e um contedo (ou valor que armazenado na varivel).

41

Programao I

A declarao de variveis deve obedecer a seguinte sintaxe:


Sintaxe tipo [variavel_1, variavel_2, ...];

Onde tipo o tipo de dado (int, float, char) e variavel_1 o nome da varivel a ser declarada. O nome da varivel deve seguir a regra dos identificadores (mencionadas na seo 3.2.1). Se houver mais de uma varivel do mesmo tipo, seus nomes so separados por vrgulas. Notem que, no final do comando, aparece um ponto e virgula (;), indicando ao compilador que o comando terminou.
Exemplo 3.1: Declarao de Variveis 1 2 3 int float char idade, matricula; media, total; letra, nome_aluno[20];

As variveis idade e matricula so espaos de memria que armazenam nmeros inteiros. As variveis media e total armazenam nmeros reais. Note que na linha 3, temos as variveis letra e nome_aluno. Quando uma varivel caractere tem apenas um nico caractere, na sua declarao, necessrio apenas dar um nome a esta varivel. Quando houver necessidade de armazenar vrios caracteres, temos o que chamado de cadeia de caracteres, vetor de caracteres ou string. Uma cadeia de caracteres forma uma palavra ou frases. Para declarar uma varivel capaz de armazenar uma cadeia de caracteres, devemos colocar ao lado do nome da varivel, entre colchetes, um valor inteiro, que significa quantos caracteres podem ser armazenados nesta cadeia. Assim, a varivel nome_aluno, declarada na linha 3, tem capacidade de armazenar uma palavra/frase com at 20 caracteres. A figura 3.2 representa a memria do computador, aps a declarao das variveis do exemplo. Cada caixa representa uma varivel. E, cada varivel possui o seu identificador. Assim, esta declarao de variveis resultou na reserva de seis espaos na memria. Toda vez que precisarmos acessar ou armazenar o contedo de uma varivel, utilizaremos o seu identificador.

42

Programao I

Figura 3.2: Representao da memria do computador aps a declarao de um conjunto de variveis

Ateno Como dito anteriormente, o C difere as letras minsculas das maisculas. Assim, os tipos de dados e comandos que iremos aprender ao longo da disciplina, DEVEM ser escritos em minsculo. Se vocs fizerem a seguinte declarao : Int x,y; Vai ocorrer um erro no momento da compilao do seu programa, j que o C no conhece o tipo Int com I maisculo. Fiquem atentos, pois esse um erro comum para quem est comeando a programar em C.

De acordo com o que foi visto, quando estudamos a estrutura da um programa C, as variveis devem ser declaradas logo quando inicia o corpo do programa principal. Vamos estudar, a seguir, como fazemos para declarar as nossas constantes. 3.2.3. Declarao de Constantes Diferente das variveis, as constantes mantm seu valor ao longo do programa. Para indicar ao compilador que se trata de uma constante, a diretiva de compilao #define utilizada. Segue a sintaxe da declarao de uma constante.
Sintaxe #define <identificador> <valor>

43

Programao I

No necessrio colocar o ponto e vrgula no final da linha e tambm no precisa informar o tipo de dado da constante. O valor de uma constante no pode ser modificado, de maneira alguma, ao longo da execuo do programa. O modo como cada constante representada depende do seu tipo. Constantes do tipo inteiro so representadas por nmeros sem o componente fracionrio, por exemplo, 123 e 2009. Constantes reais precisam do uso de ponto decimal seguido do componente fracionrio do nmero, por exemplo, 302.54. Constantes caractere so colocadas entre apstrofos, por exemplo, a. Constantes cadeia de caractere so colocadas entre aspas duplas, por exemplo, Casa e Maria. A seguir so apresentadas as declaraes de quatro constantes:
Exemplo 3.2: Declarao de Constantes 1 2 3 4 #define DIAS 7 #define PI 3.1416 #define RESPOSTA s #define DISCIPLINA Matemtica

De acordo com o exemplo, a constante DIAS ir armazenar sempre 7. Como o valor que esta constante recebeu foi um valor inteiro, o compilador entende, automaticamente, que esta uma constante inteira. Da mesma forma, como a constante PI recebeu 3.1416 (um nmero real), o compilador saber que se trata de uma constante do tipo real. A constante RESPOSTA armazena um char e DISCIPLINA uma cadeia de caracteres. interessante declarar uma constante quando sabemos que um valor no ser modificado ao longo da execuo do programa. Por questes de padronizao, declare as suas constantes com todas as letras em maisculo, como apresentado nos exemplos. Assim voc estar diferenciando-as das variveis. De acordo com a estrutura de um programa C, as nossas constantes so declaradas no incio do programa, logo aps incluirmos as bibliotecas que sero utilizadas. Esto lembrados(as) disso? Se no esto, deem uma revisada na seo 2.1, certo? Ao serem criadas, as constantes j recebem o valor que elas vo armazenar ao longo do programa. Isto no acontece com as variveis. 44

Programao I

Mas como fazemos para armazenar um valor em uma varivel? Esta resposta vocs encontraro na prxima seo.

3.3. Operador de Atribuio (=)


Esse operador utilizado para armazenar um valor em uma dada varivel. Assim, o operador de atribuio nos possibilita armazenar um dado em um espao de memria, que foi previamente declarado. importante que o dado que ser armazenado seja compatvel com o tipo da varivel que receber a atribuio. Por exemplo, as variveis reais podem receber valores reais e inteiros. No entanto, uma varivel inteira no pode receber um valor real. Segue a sintaxe do operador de atribuio.
Sintaxe Variavel = Valor; Variavel_1 = Variavel_2; Variavel = Expresso Aritmtica; Variavel = funo; Variavel_1 = variavel_2 = variavel_3 = valor;

O operador de atribuio representado pelo smbolo =. No lado esquerdo do operador da atribuio, temos a varivel que vai receber o valor. No lado direito do operador, temos o valor que ser atribudo varivel. Ao final da linha de atribuio deve ter um ponto e vrgula. Notem que o operador de atribuio permite vrias possibilidades. Para um melhor entendimento, o exemplo 3.3 apresenta cada uma das possibilidades do operador de atribuio.

45

Programao I

Exemplo 3.3: Comando de atribuio

1 2 3 4 5 6 7 8 9

float Media, X, Y, Z; int J, L, M, K, A, B; char Letra; Media = 7.5; Letra = D; X = Y; K = A + B; Z = sqrt(4); J = L = M = 10;

Nas linhas 1, 2 e 3, temos a declarao das variveis. Lembrem que s podemos armazenar algum valor, caso tenhamos declarado as variveis. Uma vez que necessrio ter reservado espaos de memria para nossos dados, entendido?
Saiba Mais
Onde aparece o = do comando de atribuio, nos lemos: recebe. Assim, o comando da linha 4 do exemplo 3.3, seria lido: Media recebe 7.5.
19

Na linha 4, a varivel Media recebeu 7.5 (para nmeros reais, devemos utilizar ponto ao invs de virgula, para separar a parte inteira da parte fracionria do nmero)19. Na linha 5, temos uma atribuio para uma varivel char com um nico caractere. Note que, neste caso, o valor que a varivel receber vem entre apstrofo. Assim, a varivel Letra est recebendo D.

Ateno O operador de atribuio no usado para variveis do tipo char com vrios caracteres. Este tipo de atribuio ser visto no captulo Comandos de Manipulao de Caracteres, do Volume 4.

Na linha 6, a varivel X receber o valor que est armazenado na varivel Y. Na linha 7, a varivel K ir receber o resultado da 46

Programao I

expresso A + B, ou seja, ser obtido o valor armazenado na varivel A, depois o valor da varivel B, os valores so somados e o resultado atribudo a varivel K. Uma varivel sempre recebe um valor. Quando a atribuio tem uma expresso matemtica, a expresso resolvida e o resultado atribudo varivel. Na linha 8, a varivel Z receber o resultado da chamada da funo sqrt (que faz o clculo da raiz quadrada de um nmero). Veremos mais detalhes sobre estas funes no captulo 5. Na linha 9, aparece o que chamamos de atribuio em cadeia. Quando vrias variveis vo receber o mesmo valor, ao invs de ser feita uma atribuio de cada vez, podemos dizer: variavel1 = variavel2 = variavel3 = valor. Ns podemos atribuir o mesmo valor a quantas variveis quisermos. Coloquei um exemplo com trs variveis, certo? No exemplo da linha 9, as variveis K, L e M vo receber 10. Mas tem um detalhe, ns s podemos usar a atribuio em cadeia quando todas as variveis que iro receber o valor so do mesmo tipo. Assim, nesta atribuio do exemplo, as trs variveis K, L e M so do mesmo tipo: int.

Atividades e Orientaes de Estudo Temos agora mais uma lista de exerccios para consolidar o nosso entendimento do assunto visto neste captulo. Vocs perceberam quantas coisas novas ns j aprendemos at aqui? Como uma linguagem de programao envolve vrios detalhes, so os exerccios que vo nos ajudar a no esquecer deles. Prontos (as) para acertar todas as questes? 1. Identifique os tipos dos valores abaixo (int, float, char de um caractere ou char de vrios caracteres):
1) 1000 5) 456 9) BRASIL 2) 09 6) 34 10) l 3) 1.56 7) C 11) - 5.6 4) VERDADE 8) 45.8976 12) 300

2. A seguir, temos exemplos de identificadores. Assinale os identificadores vlidos e descreva o erro dos operadores invlidos. 47

Programao I

1) endereco 5) usuario6 9) nome aluno

2) 21brasil 6) nome*usuario 10) mdia

3) fone$com 7) end*a-6 11) _pais

4) nome_usuario 8) #media 12) Media_da_Turma

3. De acordo com as declaraes abaixo, assinale os comando de atribuio invlidos e descreva o erro. int NUM, X, SOMA; float MEDIA, K, L; ( ( ( ( ( ( ( ( ) SOMA = NUM + 2; ) MEDIA = SOMA; ) NUM = K + L; ) X = X + 1 ) L = SOMA - K;

) SOMA + 2 = NUM + 10; ) S = SOMA; ) X = SOMA - NUM;

Conhea Mais Comece a aprofundar mais seus conhecimentos com a leituras dos livros clssicos da linguagem C: O mais autntico de todos, tem como autores os criadores desta linguagem: C - A Linguagem de Programao, de B. W. Kernighan e D. M. Ritchie, editora Campus. Este um livro relativamente difcil de ler, mas a Bblia da linguagem. Dois textos mais didticos so: C Completo e Total, de Herbert Schildt, pela editora MAKRON Books. Como programar em C, de H. M. Deitel e P. J. Deitel, pela editora LTC. 48

Programao I

A vantagem de ver vrios livros que um autor acaba complementado o que o outro escreveu. Alm disso, um autor pode explicar um certo assunto de forma mais clara que o outro. Por isso bom sempre dar uma olhada em livros novos e materiais disponveis na Internet.

Vamos revisar? Vamos fazer uma reviso do assunto que foi visto neste captulo, fazendo a leitura do resumo a seguir: Os tipos de dados manipulados pelo C so: inteiro, real, caractere e void. O tipo inteiro se divide em: int, short ou long. A diferena entre os trs tipos a quantidade de memria reservada para armazenlos. O tipo real se divide em: float e double. O tipo char armazena um caractere. Quando desejamos armazenar vrios caracteres, para formar um nome ou frase, precisamos declarar uma cadeia de caracteres. As variveis so espaos de memria onde armazenamos nossos dados. Uma varivel possui um nome, um tipo e um valor. Para que um varivel passe a existir, precisamos fazer a sua declarao. Ao declarar uma varivel, damos a ela um nome, e informamos que tipo de dado pode ser armazenado na varivel. Os nomes das variveis so os identificadores. Para dar um nome a uma varivel, precisamos seguir a regra de criao de identificadores. As constantes so espaos de memria onde armazenamos um valor que no ser alterado durante a execuo do programa. O comando de atribuio utilizado quando desejamos armazenar um valor em uma varivel. A atribuio de um valor a uma varivel s poder ser executada se o tipo de dado que a varivel armazena for compatvel com o valor que ser atribudo.

49

Programao I

Captulo 4 Comandos de Entrada e Sada de Dados


Vamos conversar sobre o assunto? Um programa que no fornece resultados, nem recebe valores para serem processados, no tem muita utilidade. De um modo geral, o objetivo pelo qual escrevemos programas a obteno de resultados (Sadas) depois da realizao de clculos ou pesquisas (Processamento) atravs do fornecimento de um conjunto de dados (Entradas). Neste captulo, iremos a estudar os comandos de entrada e sada de dados. Assim, com o comando de entrada poderemos fornecer dados para que sejam processados pelo programa. Com o comando de sada poderemos receber os resultados do processamento dos nossos dados. Uma boa notcia que, a partir deste captulo, teremos adquirido conhecimento suficiente para construir um programa completo em C! Ficaram felizes? Ento no vamos perder mais tempo, vamos logo aprender os comandos de entrada e sada de dados.

Saiba Mais
Voce sabe quem inventou o mouse? Embora tenha sido inventado por Bill Enghlish, a sua patente pertence a Douglas Engelbart. Ele apresentou este perifrico pela primeira vez em 1968 e o chamou de XY Position Indicator For A Display System. O primeiro mouse era feito de madeira, com apenas um boto. O invento de Engelbart ficou sem muita utilizao devido a falta de necessidade de tal dispositivo, j que a maioria dos computadores utilizavam apenas textos sem cursores na tela. Vocs se imaginam sem um mouse em seus computadores?
20

4.1. Entrada de Dados


O comando de entrada de dados utilizado quando desejamos fornecer um valor para um nosso programa. A entrada de dados feita atravs de um dispositivo de entrada de dados. Os dispositivos mais comuns so: teclado, mouse20, tela sensvel ao toque, scanner, dentre outros. A figura 4.1 apresenta alguns destes dispositivos.

Figura 4.1: Dispositivos de Entrada de Dados

50

Programao I

Nesta seo, iremos aprender como executar a entrada de um dado (ou a leitura de um dado, como tambm chamada) atravs do teclado. A execuo do comando de leitura pressupe que os dados sero fornecidos do meio externo (teclado), e sero armazenados na memria (variveis). O comando que faz a leitura de um dado fornecido via teclado e o armazena em uma varivel do programa o scanf. Fazendo um paralelo com o Portugol, o scanf o comando leia. Vamos ver a sua sintaxe.
Sintaxe scanf(string de controle, &variavel);

O comando scanf tem um certo nvel de detalhes, para entend-lo, vamos por partes. Na primeira parte do scanf, entre as aspas, aparece a string de controle. O que vem a ser a string de controle? A string de controle indicar que tipo de dado ser lido neste momento. A string de controle deve assumir um dos valores abaixo:
String de Controle %d %f %c %s Significado leitura de nmeros inteiros leitura de nmeros reais leitura de um caractere leitura de cadeia de caracteres
21

Saiba Mais
Ns acessamos uma varivel atravs do seu nome. No entanto, o processador acessa uma varivel utilizando o endereo de memria dela. Cada varivel criada no nosso programa possui um endereo de memria. Ns no precisamos conhecer o endereo de memria de uma varivel, certo? S precisamos saber o nome dela.

Assim, quando formos ler um dado que vai ser armazenado em uma varivel do tipo inteiro, a string de controle deve ser %d. Se o valor a ser lido, for um nmero real, a string de controle ser %f. Quando o dado a ser lido for um nico caractere, a string de controle %c e para ler uma cadeia de caracteres, utilizado %s. Com a resoluo de exerccios, vocs no esquecero o significado de cada string de controle, certo? Na segunda parte do scanf, colocamos o nome da varivel que vai armazenar o valor que ser fornecido via teclado, entendido? Notem que antes do nome da varivel, aparece um & (e-comercial). O & faz parte da sintaxe do scanf e no pode ser esquecido. NUNCA! Na linguagem C, o & significa: Endereo de memria21. Assim, o comando scanf indica que o dado ser lido via teclado e ser 51

Programao I

armazenado no endereo de memria da varivel. O comando scanf tambm termina com ponto e vrgula. Vamos analisar o exemplo 4.1, que apresenta o uso do scanf.
Exemplo 4.1: Comando de Entrada - scanf 1 2 3 4 5 6 int idade; float salario; char letra, nome[20]; scanf(%d, &idade); scanf(%f, &salario); scanf(%c, &letra);

Nas linhas 1 a 3, temos as declaraes das nossas variveis. No scanf da linha 4, temos a leitura da varivel idade. Como esta varivel do tipo int, a string de controle %d. Na linha 5, temos a leitura da varivel salrio, que do tipo float. Assim, a string de controle %f. Por fim, na linha 6, temos a leitura da varivel letra, que do tipo char, contendo apenas um caractere. Por conta disso, a string de controle foi %c. A string de controle vem sempre entre aspas duplas, certo? Note que tambm foi declarada uma varivel chamada nome, que uma cadeia de 20 caracteres. No entanto, o comando scanf no funciona corretamente nas leituras de cadeias de caractere. Portanto, quando for necessrio fazer a leitura de variveis deste tipo, teremos que usar um outro comando, que ser visto na prxima seo. 4.1.1. Entrada de Cadeia de Caracteres Como mencionado, o comando scanf no funciona de maneira correta ao ler uma cadeia de caracteres. O problema que, se nesta cadeia de caractere tiver um espao em branco, separando uma palavra da outra, ao encontrar o espao em branco, o processador entende que a leitura terminou, desprezando parte do nosso dado. Ento j viu, no d para ficar com o dado pela metade, no mesmo? A soluo usar outro comando de leitura, especfico para a leitura de cadeias de caracteres. Este comando o gets. A sintaxe do gets a seguinte: 52

Programao I

Sintaxe fflush(stdin); gets(varivel);

Para a execuo de um gets, precisamos informar apenas a varivel que ir receber o valor lido. Note tambm que antes do gets, temos o comando fflush. assim mesmo. Sempre que tivermos um gets, antes temos que executar um fflush. No esquea disso, certo? O comando fflush um comando que limpa o buffer de entrada de dados (stdin). Esto querendo saber o que o buffer de entrada? O buffer um espao de memria que armazena, temporariamente, os nossos dados. assim, suponha que o programa est solicitando que seja digitado o nome do usurio. O usurio vai teclando cada letra que forma seu nome. Ao terminar de digitar, ele tecla enter. O enter indica ao processador que o usurio encerrou aquela entrada de dados. Enquanto no for teclado o enter, o processador vai armazenado cada tecla que est sendo pressionada, no buffer de entrada. Aps o enter ser pressionado, o processador pega o nome completo do usurio, que est no buffer de entrada, e transfere para a varivel. Pode parecer complexo, mas no . A questo que, enquanto no terminamos de digitar o dado, ele est sendo formado. S depois de finalizada a entrada, que ele pode ser transferido para a varivel. A Figura 4.2 ilustra o esquema da entrada de dados.

4.2: Esquema da entrada de dados

A execuo do fflush nos assegura que o buffer de entrada est limpo, sem o contedo de algum dado que foi teclado anteriormente. 53

Programao I

No caso de entradas de dados usando o scanf, no necessrio limpar o buffer de entrada.

Ateno O gets e o fflush so comandos que se encontram em uma biblioteca chamada stdio.h. Portanto, se voc for utilizar estes comandos, esta biblioteca dever ser includa na seo de incluso de bibliotecas do programa. A incluso feita com a diretiva de compilao #include e fica assim: #include <stdio.h>.

Vamos agora analisar o exemplo 4.2, que apresenta o uso do comando gets.
Exemplo 4.2: Comando de Entrada - fgets 1 2 3 4 5 char nome_aluno[20], endereco[50]; fflush(stdin); gets(nome_aluno); fflush(stdin); gets(endereco);

Na linha 1, temos as declaraes das variveis nome_aluno e endereco. A varivel nome_aluno armazena at 20 caracteres e a varivel endereco armazena at 50 caracteres. Antes de executar o gets da linha 3, responsvel por ler o nome_aluno, temos, na linha 2, o fflush, responsvel por limpar o buffer de entrada. Na sequncia, temos a leitura da varivel endereco. Assim, necessria a execuo de um novo fflush antes do gets da linha 5. Notem que na leitura de uma varivel cadeia de caractere, s usamos o nome dela, desprezamos o colchetes e o nmero que indica quantos caracteres ela armazena. Agora que sabemos como fazer a entrada de dados via teclado, vamos aprender a apresentar os dados na tela. S falta este comando para darmos incio a criao dos nossos programas. Estamos bem perto! Vamos em frente!

54

Programao I

4.2. Sada de Dados


O comando de sada de dados utilizado quando desejamos ver o resultado do processamento do nosso programa. Este comando tambm utilizado para passar mensagens na tela, solicitando que o usurio faa algo, como por exemplo, digitar a idade dele. Os dispositivos de sadas de dados mais comuns so: monitor, impressora e caixas de som. A figura 4.3 apresenta tais dispositivos.

Figura 4.3: Dispositivos de sada de dados

Vamos agora aprender o comando que fornece a sada de dados para o dispositivo de sada padro que a tela do computador. Este comando o printf. Fazendo um paralelo com o Portugol, o printf o comando escreva. Vamos ver a sua sintaxe.
Sintaxe printf(string de controle); printf(string de controle, lista de argumentos);

Existem duas sintaxes para o printf. Na primeira, s temos a string de controle, entre as aspas dupla. Usamos esta sintaxe quando queremos escrever apenas texto na tela. Na segunda, alm da string de controle, temos a lista de argumentos. Esta sintaxe aplicada quando iremos escrever texto e valores armazenados nas variveis. Apesar de aparecer aqui uma string de controle, ela no similar a do scanf, certo? No printf, a string de controle uma mscara que especifica (formata) o que ser impresso e de que maneira ser impresso. Na string de controle pode conter: texto, cdigos especiais e especificadores de formatos. Calma! Vamos detalhar mais. Primeiramente, vamos ver quais so os cdigos especiais que podem aparecer na string de controle do printf. Os cdigos especiais so formados por uma barra invertida (\), seguida de uma letra. O cdigo especial, indica uma ao que deve ser executada pelo printf. 55

Programao I

A tabela a seguir apresenta os cdigos especiais e o seu significado.


Cdigo Especial \n \t \ \\ \a Ao Muda o cursor para o incio da linha seguinte. tabulao (tab) Escreve uma aspas dupla na tela Escreve uma barra invertida na tela D um alerta sonoro

Vamos analisar exemplos bem simples de printf, que escrevem, apenas um texto na tela.
Exemplo 4.3: Comando de Sada printf Escrevendo textos apenas

1 2 3 4

printf(Ola Mundo!); printf(\nBom Dia...); printf(\n\nIsso eh um teste.\a); printf(\n\nAte \nmais... \ntchau);

A execuo desta sequncia de printf do exemplo 4.3, resulta na seguinte tela (Figura 4.4).

Saiba Mais
A tela tem as seguintes dimenses: 80 colunas x 25 linha. Assim, conseguimos escrever 80 caracteres em uma linha de tela. E conseguimos ter uma tela com at 25 linhas.
22

Figura 4.4: Tela de execuo de um programa: uso do printf

Vamos entender cada printf do exemplo 4.3. Um detalhe essencial que devemos saber: o printf escreve um texto na tela, a partir do ponto em que o cursor se encontra no momento. Quando um programa executado, o cursor se encontra na primeira coluna, da primeira linha da tela22. No primeiro printf do exemplo, a string de controle tem 56

Programao I

apenas o texto que queremos colocar na tela: Ola Mundo!23. Aps terminar este printf, o cursor estar posicionado aps a exclamao. Na sequncia, na linha 2, temos um printf cuja string de controle : \nBom Dia.... O \n serviu para fazer com que o cursor mudasse para o incio da linha seguinte e logo em seguida, o texto Bom dia.. foi impresso, e o cursor ficou no final desta linha. No printf da linha 3, temos a string de controle: \n\nIsso eh um teste.\a. A string de controle comea com dois \n. Isso faz com que o cursor mude de linha duas vezes. Assim, teremos uma linha em branco na tela. Alm disso, na string de controle, tambm temos um \a, que faz com que seja disparado um beep(sinal sonoro) quando este printf for executado. interessante usar o sinal sonoro quando quisermos chamar a ateno do usurio. Finalmente, na linha 4, temos o printf com a string de controle: \n\nAte \nmais... \ntchau. Como a string de controle comea com dois \n, o cursor muda de linha duas vezes, e escreve Ate. Na sequncia, temos outro /n, o que fez o cursor mudar novamente de linha e escrever mais.... Por fim, temos outro \n, o cursor vai mudar de linha e escreve tchau. Notem que um nico printf, pode resultar em um texto em vrias linhas da tela. Isso no possvel no Portugol. Vamos ver agora, como escrevemos textos e valores, armazenados nas nossas variveis, na tela do computador. Para isto, temos que saber mais um detalhe que vai aparecer na string de controle, que so os especificadores de formato. Um especificador de formato marca o lugar e o formato de impresso das variveis, contidas na lista argumentos (vejam a segunda sintaxe do printf). Deve haver um especificador de formato para cada varivel a ser impressa. Todos os especificadores de formato comeam com um %. Os especificadores de formato so apresentados na tabela a seguir.
Especificador de Formato %d %f %c %s %% Uso Escrever um valor do tipo inteiro Escrever um valor do tipo real Escrever um caractere Escrever uma cadeia de caracteres Escrever o caractere %
23

Saiba Mais
Ateno: No use acentos nos textos que sero escritos na tela. No volume 4, aprenderemos como acentuar nossos textos.

57

Programao I

Neste caso de impresso na tela, quando temos textos e valores, na string de controle, devemos colocar um especificador de formato, no ponto onde queremos que um valor seja impresso. O especificador deve ser relativo ao tipo de dado que ser impresso. Aps a string de controle, coloca-se uma vrgula, e na sequncia vem a lista de variveis que ser impressa. Assim, ns primeiro montamos a frase (string de controle), informando em que ponto entraro os valores (usando os especificadores de formato) e, depois, informamos quais variveis sero utilizadas. Vamos ver alguns exemplos.
Exemplo 4.4: Comando de Sada printf Escrevendo textos e valores

1 2 3 4 5 6 7 8 9 10

int X, Y, mat, idade; float A; X = 1; Y = 3; A = 7.5; mat = 123; idade = 25; printf(O valor de A = %f, A); printf(\n\nO aluno de matricula %d tem %d anos, mat, idade); printf(\n\nResultado da soma: %d, X+Y);

A sequncia do exemplo 4.4 iniciada com a declarao das variveis e com a atribuio de valores, para que possamos entender melhor a montagem dos printf. No primeiro printf, da linha 8, queremos que seja apresentado o valor da varivel float A. Assim, montamos a string de controle, informando o ponto da frase onde deve ser colocado o valor da varivel A, utilizando o especificador de formato de valores reais, o %f. Veja na Figura 4.5, a tela resultante da execuo desta sequncia de comandos.

58

Programao I

Figura 4.5: Tela de execuo de um programa usando printf com textos e valores

Quando pedimos para que um nmero real seja apresentado na tela, este mostrado com uma preciso de seis casas decimais. Por isso, o valor da varivel A, aparece como 7.500000. Podemos decidir quantas casas decimais devem ser apresentadas, uma vez que nem sempre queremos trabalhar com tantas casas decimais, bem como, poderemos precisar trabalhar com um nmero maior de casas decimais. Aprenderemos daqui a pouco como informar quantas casas decimais devem ser apresentadas, quando um nmero real for impresso na tela. Por enquanto, vamos continuar a anlise do exemplo 4.4, certo? No segundo printf, na linha 9, queremos que seja apresentado o nmero de matrcula do aluno e a sua idade. Aqui temos um printf que ir apresentar mais de um valor. O raciocnio o mesmo. Montamos a string de controle, informando onde vai aparecer o valor das variveis, utilizando o especificador de formato. O que muda depois da string de controle. Aps a vrgula, devemos colocar as variveis que sero impressas, na ordem que elas devem aparecer na frase. Ou seja, se na ordem da frase, vem primeiro a matrcula do aluno, ento, colocase primeiro a varivel mat. Quando temos mais de uma varivel, elas so separadas por vrgula. Notem que continuamos usando os cdigos especiais na string de controle, neste caso foi colocado o /n, para mudar o cursor de linha. Na linha 10, temos um printf que ir apresentar o resultado de um expresso matemtica. Isto tambm possvel. Assim, na parte do printf que indicamos a varivel que ser impressa, ns colocamos a expresso matemtica. A expresso resolvida e o seu resultado apresentado na tela. Vamos ver agora como fazer para que nossos nmeros reais sejam apresentados com a quantidade de casa decimais que quisermos. O que vai mudar o especificador de formato dos nmeros reais, o %f. Agora ele deve ser assim: entre o % e o f, colocaremos um ponto, 59

Programao I

seguido de um nmero, que representa quantas casas decimais ns queremos que sejam apresentadas. Vejam os printf do exemplo 4.5.
Exemplo 4.5: Comando de Sada printf formatando nmeros reais

1 2 3 4 5 6 7

float A, B,C; A = 3.4; B = 1.12345; C = 7.56789; printf(A = %.1f, A); printf(\n\nB = %.2f, B); printf(\n\nC = %.2f, C);

Primeiro, temos as declaraes e atribuies para trs variveis reais. Na linha 5, temos o printf que imprime o valor da varivel A, vejam como ficou o especificador de formato: %.1f. Neste caso, queremos que seja apresentada apenas uma casa decimal deste nmero. Vejam a Figura 4.6, que apresenta a tela resultante da execuo desta sequncia de comandos.

Figura 4.6: Tela de execuo de programa: formatao de nmeros reais

Nas linhas 6 e 7, temos os printf que imprimem os valores das variveis B e C. Neste caso, queremos que sejam apresentadas duas casas decimais, por isso, o especificador de formato ficou: %.2f. S vamos ver mais um detalhe. Notem que, quando pedimos para que um nmero seja apresentado com poucas casas decimais, o printf apresenta um valor arredondado. Como assim? Veja o valor que foi atribudo a varivel C, na linha 4 do exemplo: 7.56789. Veja 60

Programao I

agora o valor que foi apresentado na tela de execuo do programa: 7.57. Funciona assim: se queremos que sejam apresentadas apenas duas decimais, o printf vai verificar qual valor tem na terceira casa decimal, se tiver um valor maior ou igual a cinco, ele arredonda o valor apresentado. Se for um nmero menor que 5, ele no arredonda. Observe o valor da varivel B. Terminamos aqui os comandos de entrada e sada. Como estes comandos tem muitos detalhes, ficamos sujeitos a cometer vrios erros quando os utilizamos: esquecer uma vrgula, uma aspa, dentre outros. Na prxima seo, iremos ver uma lista dos erros mais comuns que ocorrem com o uso destes comandos. Com esta lista, poderemos encontrar os erros dos nossos programas mais rapidamente, certo?

4.3. Erros Frequentes no Uso dos Comandos de Entrada e Sada


Nesta seo, ser apresentada uma lista com os erros que so mais frequentemente cometidos por quem est iniciando a programar, e que precisa ficar atento a tantos detalhes da sintaxe dos comandos. Vamos ver, na tabela abaixo, os erros que podemos cometer no uso do scanf, gets e printf.
Comando Scanf Erros Esquecer o & antes do nome da varivel. Trocar a string de controle. Por exemplo, no lugar de um %d, usar um %f. Esquecer o ; no final do comando. Esquecer as aspas da string de controle. Esquecer a vrgula entre a string de controle e a varivel. Fazer a leitura de uma varivel que no foi declarada. Consequncia O programa compila, como se no tivesse erro, mas durante a execuo ele trava. O programa compila, mas a varivel receber um valor esquisito (normalmente, um valor bem grande) O compilador avisa que tem erro. O compilador avisa que tem erro. O compilador avisa que tem erro.

O compilador avisa que tem erro.

61

Programao I

Gets

Esquecer de colocar o comando fflush antes do gets.

O programa compila, como se no tivesse erro, mas durante a execuo, o processador pula a execuo do comando gets. O compilador avisa que tem erro. O compilador avisa que tem erro. O compilador avisa que tem erro.

Esquecer de incluir a biblioteca stdio.h. printf No fechar a string de controle. Esquecer a vrgula entre as variveis que sero impressas. Usar um especificador de formato incompatvel com o valor que ser impresso. Esquecer de colocar um especificador de formato.

O programa compila, mas ser impresso um valor esquisito.

O programa compila, mas no imprime o valor da varivel.

Notem na coluna consequncia, que mesmo que sejam cometidos alguns tipos de erros, o programa vai compilar e s durante a execuo que notaremos algo estranho. Ateno: podem ocorrer outros erros que no foram mencionados nesta lista, estes so apenas os mais comuns. Pronto, enfim poderemos comear a fazer os nossos primeiros programas! J sabemos declarar variveis, atribuir valores a elas, ler valores via teclado e apresentar resultados na tela. Com esses comandos, j podemos fazer uns programas simples em C. Para comear, vocs j tem devem ter instalado o Dev-cpp nos seus computadores. Na prxima seo, veremos dois programas completos comentados. Agora de verdade, vamos programar!

4.4. Primeiros programas em C


isso, vamos comear com o nosso primeiro programa em C. Ele ser simples, mas com o tempo iremos aumentado o nvel de complexidade dos nossos programas. Antes de tudo, vamos a alguns detalhes (Mais detalhes?). Primeiro, vocs devem executar o Devcpp e escolher a opo: Arquivo/Novo/Arquivo Fonte. NO devemos trabalhar com projetos, certo? Em seguida, comecem a digitar o programa.

62

Programao I

Ateno Por padro, o Dev-cpp salva os nossos programas no formato do c++ (ou seja, .cpp). Sempre que forem salvar os programas, lembrem de informar que vocs querem que este seja salvo no formato .c. Fiquem atentos a isso! A Figura 4.7 mostra a tela de como devemos salvar nossos programas. No momento que solicitamos que o programa seja salvo, aberta uma janela para escolha do diretrio que o programa ser salvo, o nome dele e podemos tambm escolher o formato, na opo: Save as Type. Nesta opo, voc deve escolher: C source files (*.c). S isso. Se voc salvar seu programa como .cpp, ele ficar dando erros.

Figura 4.7: Tela do Dev-cpp: salvando um programa c.

O nosso primeiro programa em C ir ler dois nmeros inteiros e apresenta a soma destes dois nmeros. Segue abaixo o programa completo. Em seguida, vamos comentar cada linha.

63

Programao I

Programa Completo 4.1: Ler dois nmeros inteiros e calcula a soma

1 2 3 4 5 6 7 8 9 10 11 12 13

//Ler dois numeros e calcula a soma main() { int n1, n2, soma; printf(Calcular a soma de dois numeros\ n\n); printf(Primeiro valor: ); scanf(%d, &n1); printf(Segundo valor: ); scanf(%d, &n2); soma = n1 + n2; printf(\n\nA soma dos dois numeros = %d\n\ n,soma); system(pause); }
Comentrios sobre cada linha do Programa completo 4.1

Saiba Mais
Ao ler um enunciado de uma questo procure identificar as variveis de entrada, ou seja, quais valores sero fornecidos pelo usurio e qual resultado o programa precisa processar. E assim, faa a declarao das suas variveis.
24

Linha 1: De acordo com a estrutura de um programa C, este inicia com incluso das bibliotecas, quando necessrio. Neste exemplo, no utilizamos nenhum comando que se fez necessria a incluso de biblioteca. Assim, na linha 1 temos um comentrio, indicando o que o programa faz. Sempre coloquem esse tipo de comentrio no programa. Assim, ele ficar bem documentado. Linha 2: incio do programa principal, que definido pelo: main(). Linha 3: temos um abre chaves, que ir delimitar o corpo do programa principal. Linha 4: temos as declaraes das trs variveis do programa24: 64

Programao I

n1 e n2 (para armazenar os nmeros que sero fornecidos pelo usurio) e soma (que armazena a soma dos dois nmeros). Linha 5: um printf que serve para colocar, no incio da tela, o ttulo do que o programa faz. Isso importante para que o usurio saiba para que serve o programa. Linha 625: colocamos este printf para que o usurio saiba que precisa fornecer o primeiro valor. Linha 7: scanf que l o primeiro valor e armazena na varivel n1. Linha 8: printf para que o usurio saiba que precisa fornecer o segundo valor. Linha 9: scanf que l o segundo valor e armazena na varivel n2. Linha 10: agora que j temos os dois valores armazenados nas variveis n1 e n2, podemos executar a soma. Nesta linha, temos o comando que atribui a soma das variveis n1 e n2 para a varivel soma. Linha 11: printf que apresenta o resultado, que est armazenado na varivel soma. Linha 12: nesta linha, temos um comando novo. o seguinte, assim que terminada a execuo do nosso programa, o processador fecha, automaticamente, a janela onde o programa estava sendo executado. Por conta disso, acabamos sem ver algum resultado que tenha sido impresso na tela. Para fazer com que a janela no feche ao trmino da execuo, foi colocado o comando system(pause). Este comando d uma pausa na execuo do programa e fica aguardando que o usurio pressione alguma tecla26. Com esta pausa, poderemos ver os resultados apresentados. Assim que pressionamos algo no teclado, a janela ir fechar. Portanto, no final dos nossos programas, teremos que colocar o system(pause), certo? Um outro comando que faz a mesma coisa o getche(), no prximo exemplo, usaremos o getche(), para que vocs possam conhec-lo. Linha 13: fecha chaves, indicando o final do programa principal. 65
25

Importante
Sempre que temos que fazer uma leitura de dados (com scanf ou gets), devemos colocar uma mensagem para que o usurio saiba o que ele deve digitar. Assim, todo scanf (ou gets), deve ter um printf antes, informado o que o usurio tem que fazer. O programa precisa se comunicar com o usurio.

Saiba Mais
O comando system(pause) escreve na tela de execuo do programa a seguinte mensagem: Press any key to continue... ou Pressione qualquer tecla para continuar...
26

Programao I

Vocs devem digitar, compilar e executar este programa utilizando o Dev-cpp. Comecem a se familiarizar com a sintaxe do C. Tambm procurem se familiarizar com o ambiente de programao. Em breve, vocs no estaro mais tendo que consultar as sintaxes dos comandos com tanta frequncia. Vamos logo fazer outro programa! Nosso segundo programa ir ler o nome do usurio e o ano em que ele nasceu e como resultado imprime uma mensagem dizendo quanto anos o usurio tem.
Programa Completo 4.2: Ler o nome e a idade do usurio e informar a sua idade.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#include <stdio.h> //Ler o nome e a idade do usurio e informar a sua idade. main() { char nome[20]; int ano, idade; printf(Calcular a idade o usuario\n\n); printf(Seu nome: ); fflush(stdin); gets(nome); printf(Ano que voce nasceu: ); scanf(%d, &ano); idade = 2009 - ano; printf(\n\n%s, voce esta com %d anos., nome, idade); getche(); }

66

Programao I

Programa Completo 4.2: Ler o nome e a idade do usurio e informar a sua idade. Vamos ver o que est sendo feito em cada linha do programa completo 4.2. Linha 1: Neste programa ns teremos que ler uma varivel que uma cadeia de caractere: o nome do usurio. Assim, precisaremos usar o gets e o fflush. Estes comandos ficam na biblioteca stdio.h. Na linha 1, temos a incluso desta biblioteca. Linha 2: Comentrio indicando o que o programa faz. Linha 3: incio do programa principal, que definido pelo: main(). Linha 4: temos um abre chaves, que ir delimitar o corpo do programa principal. Linha 5: declarao da varivel do tipo char, que armazena o nome do usurio. Linha 6: declarao das variveis inteiras: ano (que armazena o ano de nascimento do usurio) e idade (que armazenar a idade do usurio, que ser calculada pelo programa). Linha 7: printf que indica o que o programa faz, no incio da tela de execuo. Linha 8: printf que solicita que seja digitado o nome do usurio. Linha 9: temos o comando fflush, que DEVE sempre vir antes do comando gets. Linha 10: gets que efetuar a leitura do nome do usurio. Linha 11: printf para que o usurio saiba que precisa fornecer o ano de nascimento. Linha 12: scanf que l o ano de nascimento do usurio. Linha 13: atribuio que descobre quantos anos o usurios tem. Para isso, subtramos o ano atual (2009), do ano que o usurio nasceu. O resultado atribudo para a varivel idade. Linha 14: printf que apresenta o resultado. Notem que o nome do usurio vai aparecer na frase. A string de controle comea no dois \n, solicitando que o cursor mude de linha e logo temos 67

Programao I

um %s, isto porque queremos que a resposta seja iniciada com o nome do usurio. Um exemplo de frase de resposta : Carolina, voc esta com 10 anos. Linha 15: temos o comando getche(), similar ao system(pause), faz com que a tela de execuo no feche ao final do programa. A vantagem do getche() que ele no escreve nada na tela. Lembram que o system(pause) coloca uma frase na tela? Linha 16: fecha chaves, indicando o final do programa principal. A seguir, temos as telas de execuo dos programas completos 4.1 e 4.2.
Tela de execuo do Programa completo 4.1 Tela de execuo do Programa completo 4.2

Figura 4.8: Telas de execuo dos programas completos 4.1 e 4.2

Com esses dois programa completamente comentados, j d para vocs comearem a treinar sozinhos. No queiram acertar tudo de primeira, vo com calma e sejam persistentes. Vejam que a sintaxe da linguagem C cheia de detalhes que precisamos ter muita ateno. Na prxima seo, vocs encontraro sugestes de exerccios.

Atividades e Orientaes de Estudo Como vocs j devem ter notado, uma linguagem de programao envolve muitos detalhes. Vocs s iro aprender realmente, se fizerem muitos exerccios. a prtica que far com que esta gama de detalhes seja assimilada. Portanto, aqui vai mais uma lista de exerccios. Esta para ser resolvida no computador, certo? Podem comear a ligar seus computadores!

68

Programao I

1. Faa um programa que leia dois nmeros reais A e B e os imprima na tela. O valor da varivel A deve ser apresentado com duas casa decimais e o valor da varivel B com trs casas decimais. 2. Faa um programa que leia o nome do usurio e escreva uma frase de saudao, desejando um bom dia de trabalho para o mesmo. A resposta deve ter o formato deste exemplo: Ola Joao, tenha um otimo dia de trabalho!. Faca o programa soar um sinal sonoro(beep) ao escrever esta frase. 4. Faa um programa que leia dois nmeros inteiros A e B e imprima o resultado da subtrao de A por B. A resposta deve ter o seguinte formato: 6 2 = 4. 3. Faca um programa que leia o nome do usurio e a sua idade e imprima quantos anos ele ter em 2020. A resposta deve ter o formato deste exemplo: Carlos, em 2020 voce estara com 45 anos. 5. Faa um programa que leia o nome do usurio, a idade do usurio, o nome da me do usurio e a idade da me do usurio. O programa dever imprimir na tela quantos anos a me do usurio tinha quando ele nasceu. A resposta deve ter o formato deste exemplo: Carlos, quando voce nasceu, Dona Cecilia tinha 27 anos.

Conhea Mais Aumente os seus conhecimentos sobre comandos de entrada e sada de dados acessando site especializados na linguagem C. Muitos professores e instituies disponibilizam materiais na rede e o principal, vocs podem encontrar muitos enunciados de exerccios. Vocs j se inscreveram em um frum de discusso da linguagem de programao C? Nessa fase em que estamos iniciando a programar, ter auxlio de programadores experientes muito importante. No deixem de se inscrever, certo?

69

Programao I

Vamos revisar? Para dar uma revisada nos tpicos tratados neste captulo, leiam o resumo a seguir: Dispositivos de entrada: so utilizados para passar informaes para o computador. So exemplos de tais dispositivos: teclado e mouse. Dispositivos de sada: so utilizados para apresentar informaes processadas pelo computador. scanf: um dos comandos de leitura do C. Este comando no adequado para a leitura de cadeia de caracteres. gets: comando especfico para a leitura de cadeia de caracteres. Para utiliz-lo, necessrio incluir no programa a biblioteca stdio.h. fflush: comando que faz a limpeza do buffer de entrada de dados. Sempre que fizermos uma leitura de cadeia de caracteres, devemos colocar o comando fflush. printf: comando de sada de dados. O printf pode ser usado para imprimir textos, valores de variveis e resultados de expresses aritmticas. getche() e system(pause): comandos para provocar uma parada na tela de execuo, fazendo com que o usurio possa conferir o resultado processado pelo programa.

70

Programao I

Captulo 5 Operadores, Expresses e Funes Matemticas


Vamos conversar sobre o assunto? Gostaram de ter feito os primeiros programas em C? Foram programas simples, que utilizavam o assunto visto at o momento. Vamos continuar avanando no estudo da linguagem C e aumentando, gradativamente, o nvel de complexidade dos nossos programas. Neste captulo, iremos aprender quais operadores esto disponveis na linguagem C e como utiliz-los, atravs da montagem de expresses aritmticas, relacionais e lgicas. Tambm iremos abordar as principais funes da biblioteca matemtica. Com o assunto deste captulo, teremos habilidades para resolver questes que requerem a construo de expresses, seja aritmtica, relacional ou lgica. Vamos em frente!

5.1. Operadores Bsicos


Em toda linguagem de programao, existem operadores que nos permitem armazenar, modificar, comparar e avaliar dados no computador. Aqui veremos trs tipos de operadores: aritmticos, relacionais e lgicos. Nas prximas sees, ser feito o detalhamento de cada um dos tipos de operadores. 5.1.1 Operadores Aritmticos Usamos os operadores aritmticos quando precisamos executar operaes aritmticas (matemticas) sobre os nossos dados (variveis). A tabela abaixo apresenta os operadores aritmticos do C. Notem que o operador da multiplicao um asterisco.
Operador + * Descrio Adio Subtrao Multiplicao

71

Programao I

/ % ()

Diviso Retorna o resto da diviso inteira de a por b Parnteses

Vamos dar uma ateno especial aos operadores da diviso(/) e resto(%). O resultado de uma diviso, em C, depende dos tipos dos dados que esto sendo divididos. A tabela abaixo apresenta o resultado da operao de diviso, de acordo com os tipos de dados do numerador e do denominador.
numerador / denominador inteiro / inteiro inteiro/ real real / inteiro real/real resultado inteiro real real real

Quando dois nmeros inteiros so divididos, o resultado a parte inteira do quociente da diviso. Quando pelo menos um dos elementos (numerador e/ou denominador) real, o resultado um nmero real. Vamos analisar a sequncia de comandos a seguir:
Exemplo 5.1: Uso de Operadores Aritmticos

1 2 3 4 5 6 7 8 9

int X, Y, Z, W; float K, L, M; X = 19; Y = 3; Z = X/Y; W = X % Y; K = 19; L = 3; M = K/L;

72

Programao I

Nas linhas 1 e 2, temos as declaraes das variveis: quatro inteiras (X, Y, Z e W) e trs reais (K, L, e M). Nas linhas 3 e 4 so atribudos valores nas variveis X e Y, que passam a armazenar tais valores. Na linha 5, temos um comando de atribuio, em que a varivel Z receber o resultado da diviso entre a varivel X (19) e a varivel Y (3). Como as variveis X e Y so inteiras, o resultado ser a parte inteira do quociente da diviso. Assim, se temos: 19/3 = 6.333333, ser considerado apenas a parte inteira do resultado, ou seja, 6. Portanto, nesta atribuio da linha 5, a varivel Z vai receber 6. Na linha 6, a varivel W vai receber o resto da diviso de X por Y, ou seja, o resto da diviso de 19 por 3. A figura 5.1 ilustra como a operao do resto feita.

Figura 5.1: Resto de uma diviso

A operao do resto funciona da seguinte forma: os dois nmeros vo sendo divididos, neste caso: 19 dividido por 3 (primeiro quadro da figura 5.1). Assim, 19 por 3 d 6 e sobra 1. Como o 1 no d pra ser dividido por 3, a conta para e pega o resto da diviso que 1. Portanto, o resultado da operao X%Y (neste caso, 19%3) 1. Este resultado ser atribudo a varivel W.

Ateno O operador do resto (%) s pode ser usado quando as variveis envolvidas so do tipo inteiro. No poderemos usar tal operador para obter resto de diviso de nmeros reais. Outra coisa: o operador % no tem nada haver com percentagem, certo? Nas linhas 7 e 8, so atribudos valores nas variveis K e L, que passam a armazenar tais valores. Na linha 9, temos um comando 73

Programao I

de atribuio, em que a varivel M receber o resultado da diviso entre a varivel K (19) e a varivel L (3). As variveis K e L so reais (float). Dessa forma, teremos 19/3 = 6.333333. O resultado completo ser atribudo a varivel M, ou seja 6.33333, sem desprezar a parte fracionria do resultado. A figura 5.2 apresenta o valor que ficou armazenado em cada uma das variveis, aps a execuo da sequncia de comandos. Note que, nas variveis reais, mesmo que seja atribudo um valor inteiro, como por exemplo, na linha 7, que foi atribudo 19 varivel K, no momento que o valor armazenado, ele passa a ter a parte fracionria do nmero. Por isso, a varivel K aparece com 19.000000 de contedo (lembrem-se que o ponto deste nmero, est representando uma virgula, certo?).

Figura 5.2: Resultado final das variveis

5.1.1.1 Prioridade dos Operadores Uma questo que devemos tomar bastante cuidado ao montar uma expresso aritmtica a prioridade dos operadores. A prioridade que o operador aritmtico tem sob o outro que vai determinar como a expresso ser resolvida. Na matemtica, quando montamos uma expresso, usamos parnteses, colchetes e chaves. Nas linguagens de programao, ns s temos os parnteses. Os parnteses tm um papel importante nas expresses e possibilitam que a ordem das operaes seja alterada. Expresses entre parnteses so calculadas primeiro, portanto eles fornecem o maior grau de prioridade s expresses que envolvem. Podemos ter pares de parnteses envolvendo outros pares. Dizemos que os parnteses esto aninhados. Neste caso, as expresses dentro dos parnteses mais internos so avaliadas primeiro. 74

Programao I

A tabela abaixo apresenta a prioridade de resoluo dos operadores aritmticos:


Prioridade 1 2 3 Operador Operaes embutidas em parnteses mais internos % (resto) e/ou * (multiplicao) e/ou / (diviso) + (adio) e/ou (subtrao)

De acordo com a tabela, as expresses entre parnteses tem maior prioridade, portanto, so resolvidas primeiro. Na sequncia, resolve os operadores resto e/ou multiplicao e/ou diviso, e, finalmente, resolve os operadores de adio e/ou subtrao. Quando aparecem operadores de mesma prioridade em uma expresso, o operador mais esquerda ser avaliado primeiro. Vamos analisar o exemplo 5.2, a seguir, e verificar qual o valor final das variveis A, B, C e D.
Exemplo 5.2: Prioridade de Operadores

1 2 3 4 5 6 7 8 9

int X, Y, Z, W, A, B, C, D; X = 19; Y = 3; Z = 4; W = 2; A = X + Y * Z; B = (X + Y) * Z; C = X Y * Z / W; D = (X-Y) * (Z/W);

Na linha 1, temos as declaraes das variveis que sero usadas (todas elas so do tipo int). Nas linhas 2 a 5, so atribudos valores s variveis X, Y, Z e W. Vamos acompanhar a resoluo de cada expresso das linhas 6 a 9 na figura 5.3. A parte da expresso que 75

Programao I

aparece circulada, a que tem prioridade de resoluo.

Figura 5.3: Acompanhamento da resoluo das expresses aritmticas

No primeiro quadro (atribuio para a varivel A), aparecem na expresso os operadores da adio e multiplicao. Como a multiplicao tem prioridade, esta resolvida primeiro. Posteriormente, o operador da adio resolvido e assim o resultado que ser atribudo varivel A. No segundo quadro (atribuio para a varivel B), a expresso tambm composta por operadores de adio e multiplicao. No entanto, a adio aparece entre parnteses. Sabe-se que a operao dentro dos parnteses ter prioridade. Assim, a adio resolvida e, posteriormente, a multiplicao. No terceiro quadro (atribuio para a varivel C), aparecem na expresso os operadores de subtrao, multiplicao e diviso. O operador de subtrao o de menor prioridade. No entanto, os operadores de multiplicao e diviso tem a mesma prioridade. Dessa forma, o operador da multiplicao ser resolvido primeiro, j que ele aparece mais esquerda da expresso. Na sequncia, a diviso resolvida. E, finalmente, a subtrao. Finalmente, no quarto quadro (atribuio para a varivel D), aparecem na expresso os operadores de subtrao, multiplicao, diviso e parnteses. Primeiro, resolvida a expresso dentro do parntese mais esquerda. Posteriormente, a expresso entre parnteses mais direita. Finalizando com a resoluo da multiplicao.

76

Programao I

5.1.2 Operadores Relacionais Os operadores relacionais so utilizados para comparar valores de variveis ou expresses aritmticas. Uma expresso aritmtica tem como resultado um valor numrico. No caso de uma expresso relacional, o resultado ser sempre um valor lgico: Verdade ou Falso. Na tabela abaixo so apresentados os operadores relacionais do C.
Operador == != < > <= >= Descrio Igualdade Diferena () Menor Maior Menor ou Igual () Maior ou Igual ()

Vamos aprender como montar uma expresso relacional. Segue abaixo as possveis sintaxes de expresses relacionais.
Sintaxe Variavel operador Valor Varivel1 operador varivel2 Variavel operador Expresso Aritmtica Expresso Aritmtica operador Expresso Aritmtica

Notem que podemos montar a expresso relacional de vrias formas. Na tabela abaixo so apresentados exemplos de expresses relacionais.
Exemplo 5.3: Expresses relacionais

1 2 3 4

X == 10 X > Y X < Y + Z X * Y > Z / W

77

Programao I

Na linha 1, temos uma expresso relacional que verifica se a varivel X igual a 10 (ou ela ser igual a 10 ou no, resultando em verdade ou falso). Na linha 2, temos uma expresso relacional que compara duas variveis. Esta expresso verifica se o valor da varivel X maior que o valor da varivel Y. Na linha 3, a expresso relacional compara o valor da varivel X com o resultado da expresso aritmtica Y + Z. Por fim, na linha 4, temos uma expresso relacional que compara o resultado de duas expresses aritmticas. Suponha que X = 1, Y = 5, Z = 8 e W = 2. Vamos ver o resultado das expresses do exemplo 5.3 (V verdade e F falso):
Resultados das expresses relacionais do exemplo 5.3

1 2 3 4

X == 10 X > Y X < Y + Z X * Y > Z / W

=> 1 == 10 => 1 > 5 => 1 < 5 + 8 => 1 * 5 > 8 / 2

=> F => F => 1 < 13 => 5 > 4 => V => V

Quando as expresses relacionais so compostas por expresses aritmticas (como os exemplos das linhas 3 e 4), a prioridade de resoluo da expresso aritmtica. Assim, primeiro resolve-se a expresso aritmtica e a comparao feita com o resultado da mesma. 5.1.3 Operadores Lgicos Os operadores lgicos servem para interligar duas ou mais expresses relacionais. Uma expresso lgica representa a unio de expresses relacionais, permitindo que os resultados de vrias expresses relacionais sejam transformados em um nico resultado lgico (verdade ou falso). Os operadores lgicos so: E, OU e NO. A tabela a seguir apresenta como os operadores lgicos so representados na linguagem C.

78

Programao I

Operador Lgico E OU NO

Operador Lgico em C && || !

Os resultados das expresses lgicas obedecem s tabelas que veremos a seguir, que dependem dos resultados das expresses relacionais envolvidas. Quando montamos uma expresso lgica, as expresses relacionais devem ser colocadas entre parnteses. Comearemos estudando a tabela de resultados do operador lgico E. Quando este operador interliga duas expresses relacionais, o resultado da expresso lgica s ser verdade se as duas expresses relacionais forem verdade. Em qualquer outra situao, o resultado ser falso.
Tabela de Resultado do Operador Lgico E (&&) Expresso Relacional 1 V V F F Expresso Relacional 2 V F V F Resultado V F F F

Vejamos um exemplo: um aluno s ser aprovado se a sua mdia for maior ou igual a 7. E, se a quantidade de faltas for menor que 15. As duas condies precisam ser verdade, para o aluno ser aprovado. Se o aluno tem a mdia maior que 7, mas tem mais de 15 faltas, ele no ser aprovado. A expresso lgica para testar esta situao apresentada na linha 1 do exemplo 5.4, a seguir.
Exemplo 5.4: Expresses Lgicas com operador e (&&)

1 2 3

(media >= 7.0) && (faltas < 15) (A < 5) && (B <> 5) (X > 10) && (Y > 50) && (Z < 25)

79

Programao I

Quando temos mais de duas expresses relacionais, como o caso do exemplo da linha 3, a expresso lgica vai sendo resolvida da esquerda para a direita. Para acompanhar a resoluo das expresses do exemplo, vamos supor que: media = 8.0, faltas = 18, A=3, B=4, X = 15, Y= 70 e Z=30. Vejamos a figura 5.4 a seguir.

Figura 5.4: Resultado das expresses lgicas do operador &&

No primeiro quadro da figura, a primeira expresso relacional verdade e a segunda expresso falsa. De acordo com a tabela de resultados do operador lgico E, verdade && falso d falso. No segundo quadro, as duas expresses relacionais so verdade. Assim, de acordo com a tabela de resultados do operador lgico E, verdade && verdade d verdade. Finalmente, no terceiro quadro temos trs expresses relacionais. Neste caso, iremos resolver a expresso lgica, da esquerda para a direita. Comeamos encontrando o resultado da primeira expresso relacional, com a segunda (ou seja, (X>10) && (Y>50)). E depois, pegamos este resultado e continuamos resolvendo o restante da expresso, sempre da esquerda para a direita. Podemos interligar vria expresses relacionais, atravs dos operadores lgicos. Agora vamos analisar a tabela de resultados do operador lgico OU. Quando tivermos duas expresses relacionais interligadas pelo operador lgico ou, o resultado da expresso lgica s ser falso se as duas expresses relacionais forem falsas. Nos demais casos, o resultado da expresso ser verdade.
Tabela de Resultado do Operador Lgico OU (||) Expresso Relacional 1 V V F F Expresso Relacional 2 V F V F Resultado V V V F

80

Programao I

Vejamos um exemplo: para o aluno ingressar em um curso superior - ele deve ser aprovado no vestibular OU ele deve ser um portador de diploma. Apenas uma situao precisa ser verdade. Assim, se o aluno nem passou no vestibular, nem portador de diploma, no poder ingressar no curso. A expresso lgica para testar esta situao apresentada na linha 1 do exemplo 5.5, a seguir. Vejam outros exemplos de expresses lgicas com o operador OU.
Exemplo 5.5: Expresses Lgicas com operador ou (||)

1 2 3

(Aprove_Vestibular == S) || (Portador_Diploma == S) (A < 3) || (B < 2) (X < 12) || (Y > 1) || (Z < 35)

A tabela de resultados do operador lgico NO apresentada a seguir. Notem que a finalidade deste operador inverter(ou negar, como comumente chamado) o resultado de uma expresso relacional. Assim, se a expresso relacional verdade, a sua negativa falso.
Tabela de Resultado do Operador Lgico No (!) Expresso Relacional V F Resultado F V

No exemplo 5.6, temos duas expresses lgicas com o operador NAO. Este operador deve ser colocado na frente da expresso relacional.
Exemplo 5.6: Expresses Lgicas com operador no (!)

1 2

!(X < 12) !(Y == 10)

A figura 5.5, ilustra uma situao cotidiana, do uso de operadores lgicos.

81

Programao I

Figura 5.5: Uso cotidiano de operadores lgicos

Ns tambm poderemos ter expresses lgicas, em que aparecem mais de um tipo de operadores lgicos, alm de operadores aritmticos. Vejamos o exemplo 5.7.
Exemplo 5.7: Expresses Lgicas com vrios operadores

1 2 3 4

(X > 10) && (Y < 30) || (Z == 1) (A == 2) || (B <> C) && (D < 1) || (E > 10) !(A == 1) || (B <= C + B)

(X + Y < Z + W) && (A < 3 + D) || (F < 5)

Nestes casos, vamos ver a tabela de prioridade de operadores, para a resoluo de tais expresses.
Prioridade 1 2 3 4 5 Operador Operaes embutidas em parnteses mais internos; Resto e/ou multiplicao e/ou diviso; Adio e/ou Subtrao; Operadores Relacionais; Operadores Lgicos.

Primeiro, resolveremos as expresses aritmticas (seguindo a prioridade dos operadores aritmticos), depois as expresses relacionais e, finalmente, as expresses lgicas. 82

Programao I

5.2. Operadores Aritmticos de Atribuio


A linguagem C oferece um conjunto de operadores que uma combinao de operador de atribuio e operador aritmtico, so os operadores aritmticos de atribuio. Eles so utilizados para representar de maneira reduzida uma operao aritmtica, seguida de uma atribuio. A prxima tabela apresenta os operadores aritmticos de atribuio e como utiliz-los em nossos programas.
Operador += -= *= /= %= Exemplos de Uso X += 4; Y -= X; Z *= W; K /= 7; L %= M; Descrio Equivale a X = X + 4; Equivale a Y = Y X; Equivale a Z = Z * W; Equivale a K = K / 7; Equivale a L = L % M

Como pode ser visto, a sintaxe do operador aritmtico de atribuio : um operador aritmtico(+, -, *, /, %) seguido do operador da atribuio (=). Uma expresso com este tipo de operador, significa que a varivel do lado esquerdo da atribuio, alm de receber o resultado, tambm far parte da expresso aritmtica. Vejamos o exemplo dado para o operador +=. A expresso X += 4, quer dizer que: ser obtido o valor da varivel X, adiciona 4, e este resultado atribudo a prpria varivel X. Neste caso, como se fosse um acumulador: acumule 4 ao valor que j tem na varivel X.

5.3. Operadores ++ e -Os operadores ++ e -- so utilizados aps o nome de uma varivel e servem para incrementar (++) ou decrementar (--) uma unidade da varivel, ou seja, somar 1 ou subtrair 1 do valor da varivel. A tabela abaixo apresenta os operadores ++ e --, seguidos de exemplos de uso. Aps o ++ ou --, devemos colocar um ponto e vrgula.
Operador ++ -Exemplos de Uso X++; Y--; Descrio Equivale a X = X + 1; Equivale a Y = Y -- 1;

83

Programao I

Saiba Mais
Os operadores ++, -- e operadores aritmticos de atribuio fazendo com que as nossas expresses fiquem menores, j que precisamos escrever menos coisas para a montagem da expresso.
28

No exemplo X++, significa que, se X=5, ser somado 1 ao valor da varivel X, e assim, X finalizar com 6. Da mesma forma, no exemplo Y--, significa que, se Y=5, ser subtrado 1 do valor da varivel Y, e assim, Y finalizar com 428.

5.4. Converso de tipo


Quando usamos operadores aritmticos, temos que lembrar que o resultado da expresso depende do tipo das variveis envolvidas. Por exemplo, quando dividimos dois nmeros inteiros, o resultado a parte inteira do quociente da diviso. Mas quando dividimos nmeros reais, o resultado vem completo, a parte inteira e a parte fracionria do quociente. Outro detalhe que precisamos lembrar que alguns operadores s podem ser usados por um tipo de dado. Este o caso do operador do resto, ns s podemos utiliz-lo com dados do tipo inteiro. Por conta disso, algumas vezes desejamos, momentaneamente, modificar o tipo do contedo de uma varivel. Isto , queremos que uma varivel se comporte como se ela fosse de um tipo diferente do que ela foi declarada. Por exemplo: declaramos uma varivel como int e queremos, momentaneamente, que seu contedo seja utilizado como um float. Este procedimento chamado de converso de tipo ou casting (moldagem, em Ingls). A converso de tipo usada em uma expresso aritmtica e feita da seguinte forma: antes da varivel, colocamos entre parnteses, o tipo que queremos que a varivel seja nesta expresso aritmtica. importante salientar que a converso de tipo feita com o dado armazenado em uma varivel, mas a varivel continua tendo o seu tipo original. Vamos ver o exemplo 5.8, que apresenta uso de converso de tipo.

84

Programao I

Exemplo 5.8: Converso de tipo

1 2 3 4 5 6 7

int A,B,C; float X,Y; A=3; B=5; X=6.5; C = (int)X % B; Y = (float)A/B;

Nas linhas 1 e 2, temos as declaraes de cinco variveis. Nas linhas 3, 4, e 5 foram atribudos valores as variveis A, B e X. Na linha 6, precisamos executar uma operao para obter o resto da diviso entre a varivel X (que do tipo float) e a varivel B (que do tipo int). Esta operao no seria possvel, j que o operador do resto no aceita nmeros reais na expresso. No entanto, esta operao se torna possvel, se fizermos a converso de tipo da varivel X. Queremos que, nesta expresso, o contedo de X seja um inteiro. Para isso, colocamos (int) na frente da varivel X, como mostra a linha 6 do exemplo. Como a varivel X tem 6.5 armazenado, nesta conta, a parte fracionria ser desprezada e a conta ser feita considerando que X 6. Assim, 6 % 5 = 1. Ento, 1 o valor que ser atribudo a varivel C. Vamos ver agora a atribuio da linha 7. Neste caso, estamos querendo fazer a diviso entre dois nmeros inteiros. Esta conta possvel, mas ela traz como resultado, apenas a parte inteira do quociente. No entanto, h situaes em que queremos dividir dois nmeros inteiros, e receber o resultado completo, parte inteira e fracionria do quociente. Este o caso da linha 7. Para que o resultado venha completo, basta que o contedo de uma das variveis se comporte como um float. Com isso, um float dividido por um int, temos como resultado um float. Dessa forma, fizemos a converso de tipo da varivel A, solicitando que seu contedo se comporte como um float. Nesta linha 7 teremos, ento, 3.0/5 = 0.6. Este o valor que ser atribudo a varivel Y. 85

Programao I

5.5. Funes Matemticas (biblioteca math.h)


A linguagem de programao C possui uma biblioteca que agrupa um conjunto de funes matemticas. a biblioteca math.h. Nesta seo, vamos ver quatro funes matemticas, da biblioteca math.h, que utilizaremos com mais frequncia nos nossos programas. So as funes para encontrar a raiz quadrada de um nmero, potncia (elevar um nmero a uma potncia) e duas funes de arredondamento. Esta biblioteca possui outras funes, mas estas so as mais utilizadas nos nossos programas. As funes matemticas precisam receber um ou vrios parmetros e nos retornam um resultado. Por exemplo, para descobrir a raiz quadrada de um nmero, a funo precisa saber de que nmero ser calculada a raiz quadrada. Este nmero que fornecido funo o parmetro. Vamos ver a tabela a seguir, em que feita a descrio destas funes.
Funo sqrt Descrio Funo para encontrar a raiz quadrada de um nmero. A funo sqrt precisa receber como parmetro, o nmero que desejamos encontrar a sua raiz quadrada. O resultado desta funo um nmero real. Como uma funo retorna um resultado, devemos atribu-lo a uma varivel. Funo para encontrar a potncia de um nmero, ou seja, eleva um nmero a um expoente: AB. Assim, se A = 4 e B = 3, 4 elevado a 3 64. A funo pow ir receber dois parmetros. O primeiro a base (neste exemplo o A) e o segundo o expoente (neste caso o B). Esta funo retorna um nmero real como resultado. A funo ceil serve para arredondar um nmero real. Esta funo arredonda o nmero para cima. Assim, ela retornar como resultado: o primeiro nmero inteiro maior que o nmero que desejamos arredondar. Por exemplo: se x = 1.34, e desejamos arredondar com a funo ceil, o resultado ser 2.0. Ou seja, o primeiro nmero inteiro acima de 1.34. Apesar do arredondamento, esta funo retorna um nmero real como resultado. Exemplos de uso R = sqrt(16); R = sqrt(A);

pow

P = pow(3,4); P = pow(A, 3);

ceil

Z = ceil(1.67); Z = ceil(Z);

86

Programao I

floor

A funo floor serve para arredondar um nmero real. Esta funo arredonda o nmero para baixo. Assim, ela retornar como resultado: o primeiro nmero inteiro menor que o nmero que desejamos arredondar. Por exemplo: se x = 1.34, e desejamos arredondar com a funo floor, o resultado ser 1.0. Ou seja, o primeiro nmero inteiro abaixo de 1.34. Apesar do arredondamento, esta funo retorna um nmero real como resultado.

Z = floor(1.67); Z = floor(Z);

Ateno Sempre que usarmos estas funes nos nossos programas, devemos incluir a biblioteca matemtica, com a diretiva de compilao: #include <math.h>. Devemos ficar atentos ao tipo de dado que a funo retorna, para que seja feita a atribuio para uma varivel compatvel com o tipo do resultado. Por exemplo, no podemos atribuir o resultado da funo pow, para uma varivel inteira.

Programas Resolvidos Nesta seo, vamos acompanhar a resoluo de dois programas completos, que utilizaro os comando aprendidos neste captulo. Vamos l? No primeiro programa que iremos analisar, o aluno fornecer seu nome e as duas notas que tirou nas provas de programao. Como resultado, o programa vai imprimir a mdia do aluno. Segue abaixo o programa completo 5.1. Em seguida, vamos comentar cada linha.

87

Programao I

Programa Completo 5.1: Ler o nome e duas notas do usurio e imprimir a mdia.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

#include <stdio.h> //ler o nome e as duas notas do aluno e imprimir a media main() { char nome[20]; float nota1, nota2, media; printf(Calcular a media do aluno\n\n); printf(Seu nome: ); fflush(stdin); gets(nome); printf(Nota 1: ); scanf(%f, &nota1); printf(Nota 2: ); scanf(%f, &nota2); media = (nota1 + nota2)/2; printf(\n\n%s, media); getche(); } sua media = %.2f, nome,

Comentrios sobre cada linha do Programa completo 5.1: Linha 1: Como iremos ler o nome do aluno, precisamos incluir a biblioteca stdio.h onde esto os comandos fflush e gets. Linha 2: Comentrio informando o que o programa faz. 88

Programao I

Linha 3: incio do programa principal, que definido pelo: main(). Linha 4: um abre chaves, que ir delimitar o corpo do programa principal. Linhas 5 e 6: declaraes das quatro variveis do programa: nome, nota1, nota2 e media. Linha 7: um printf que serve para colocar, no incio da tela, o ttulo do que o programa faz. Linha 8: printf para que o usurio saiba que precisa fornecer seu nome. Linha 9: comando fflush, que DEVE sempre vir antes do comando gets. Utilizado para limpar o buffer de entrada de dados. Linha 10: gets que efetuar a leitura do nome do usurio. Linha 11: printf para que o usurio saiba que precisa fornecer a primeira nota. Linha 12: scanf que l a primeira nota e armazena na varivel nota1. Linha 13: printf para que o usurio saiba que precisa fornecer a segunda nota. Linha 14: scanf que l a segunda nota e armazena na varivel nota2. Linha 15: clculo da mdia do aluno. Notem que a soma das nota1 e nota2 aparece entre parnteses. Devemos lembrar que o operador da diviso tem prioridade maior que o operador da soma. Assim, para que a soma das notas seja feita primeiro, ela deve vir entre parnteses. No esqueam deste detalhe! Linha 16: printf que apresenta a mdia do aluno. Notem que na mensagem, tambm ser escrito o nome do aluno. A mdia do aluno ser apresentada com duas casas decimais (%.2f) Linha 17: comando getche que faz com que a tela de execuo do programa fique aberta, e assim podemos ver o resultado do programa. Nesta linha tambm poderamos usar o system(pause).

89

Programao I

Linha 18: fecha chaves, indicando o final do programa principal. importante que vocs digitem estes programas resolvidos, no Dev-cpp, assim vo se familiarizando com a sintaxe do C, certo? Vamos fazer o outro programa? Nosso segundo programa ir ler um nmero e vai imprimir a sua raiz quadrada. Segue abaixo o programa completo 5.2. Em seguida, vamos comentar cada linha.

Programa Completo 5.2: Ler um nmero e imprimir a raiz quadrada

1 2 3 4 5 6 7 8 9 10 11 12

#include <math.h> //ler um nmero e encontrar a raiz quadrada main() { float num, raiz; printf(Calcular a raiz quadrada de um numero\ n\n); printf(Numero: ); scanf(%f, &num); raiz = sqrt(num); printf(\n\nA raiz quadrada de %.1f = %.1f., num, raiz); getche(); }

Comentrios sobre cada linha do Programa completo 5.2: Linha 1: Para encontrar a raiz quadrada, iremos utilizar a funo sqrt da biblioteca math.h. Assim, precisamos inclu-la no nosso programa. Linha 2: Comentrio informando o que o programa faz. 90

Programao I

Linha 3: incio do programa principal, que definido pelo: main(). Linha 4: um abre chaves, que ir delimitar o corpo do programa principal. Linha 5: as declaraes das duas variveis do programa: num e raiz. Linha 6: printf que serve para colocar, no incio da tela, o ttulo do que o programa faz. Linha 7: printf para que o usurio saiba que precisa fornecer o nmero. Linha 8: scanf que l o nmero e armazena na varivel num. Linha 9: clculo da raiz quadrada do nmero. Usamos a funo sqrt, passando como parmetro o nmero que foi digitado pelo usurio (que est armazenado na varivel num). O resultado da funo sqrt atribudo varivel raiz. Linha 10: printf que apresenta o resultado. Notem que ser apresentada apenas uma casa decimal (%.1f) das variveis num e raiz. Linha 11: comando getche que faz com que a tela de execuo do programa fique aberta, e assim podemos ver o resultado do programa. Linha 12: fecha chaves, indicando o final do programa principal. A figura 5.6 apresenta as duas telas de execuo dos programas completos 5.1 e 5.2.

Figura 5.6: Telas de execuo dos programas completos 5.1 e 5.2

91

Programao I

Com estes dois programas comentados, podemos dar incio resoluo de mais uma lista de exerccios. Continuem programando!

Atividades e Orientaes de Estudo Temos mais uma lista de exerccios para consolidar o entendimento do assunto visto neste captulo. A maior parte das questes deve ser resolvida no computador, certo? Continuem fazendo os programas e sempre que der erro tenham calma para encontr-los. Fiquem atentos(as) com a sintaxe de cada comando, para no cometer erros com tanta frequncia. Vamos iniciar nosso novo treino? 1. Dados os valores inteiros abaixo:
MEDIA 0 NOTA 2 TOTAL 10 Z 0 K 7 X 4 I 80 J -1 A -4

Quais os valores resultantes depois da execuo dos passos a seguir: 1) X = TOTAL/NOTA; 2) X = X+1; 3) NOTA = X; 4) TOTAL = NOTA + X + TOTAL; 5) MEDIA = 3; 6) K += 9; 7) Z = J / 5; 8) K = I % 5; 9) I ++; 10) I = I+2*A;

2. De acordo com os valores das variveis abaixo, encontre o resultado das expresses lgicas com VERDADE ou FALSO:
A 10 B 3 C 2 D 2 E 25

a) A == D b) (A>B) && (C==D) c) (E+2<B+C) && (A==10)

92

Programao I

d) (D*E>100) || (B<5) e) (E==25) && (A >B+C+D) && (C<B) f) !(A < 15) && (B>=3) g) (D>2) || (C == 7) && (E > 20) 3. Faa um programa que leia um nmero qualquer e imprima o seu cubo. 4. Uma empresa vai dar um aumento de salrio ao seu funcionrio. Faa um programa para ler o salrio do funcionrio e o percentual de reajuste. Calcular e escrever o valor do novo salrio. 5. Faa um programa para ler o nmero de votos brancos, nulos e vlidos de uma eleio. Calcular e escrever o percentual que cada um representa em relao ao total de eleitores. 6. Faa um programa que leia o nmero total de prestaes de um consrcio, o total de prestaes pagas e o valor atual da prestao. O programa deve calcular e apresentar o saldo devedor atual e a quantidade de prestaes sem pagar. 7. Dada as seguintes entradas: quilometragem inicial, quilometragem final, litros consumidos, preo do litro de combustvel. Faa um programa que imprima o seguinte Relatrio: distncia percorrida, Valor total gasto e o consumo do carro(quantos quilmetros percorre com 1 litro de combustvel). 8. Um motorista de txi deseja calcular o rendimento de seu carro na praa. Sabendo-se que o preo do combustvel de R$2.59, faa um programa para ler: a marcao do odmetro (Km) no incio do dia, a marcao (Km) no final do dia, a quantidade de litros de combustvel gasto e o valor total (R$) recebido dos passageiros. Calcular e escrever: a mdia do consumo em km/l e o lucro (lquido) do dia. 9. Faa um programa que leia os preos de uma mercadoria em abril e maio. Tendo como base a variao dos preos desta mercadoria, calcule a taxa de inflao. 10. Faa um programa que leia o tempo de durao de um evento em uma fbrica expressa em segundos e mostre-o expresso em horas, minutos e segundos. 93

Programao I

11. Faa um programa para um caixa eletrnico, que l o valor que o cliente quer sacar e calcula o menor nmero possvel de notas de 100,00, 50, 20 e 10 reais em que o valor lido pode ser decomposto. Escrever o valor do saque e a relao de notas necessrias. Suponha que o sistema monetrio no utiliza centavos. Ateno: S digite nmeros mltiplos de 10. Exemplo: Valor: R$ 380,00 Notas de R$ 100,00: 3 Notas de R$ 50,00: 1 Notas de R$ 20,00: 1 Notas de R$ 10,00: 1

Conhea Mais Pesquisem na Internet outra funes matemticas disponveis na biblioteca math.h. Comecem a pesquisa pelo site:
http://visualcplus.blogspot.com/2006/03/mathh.html

Vamos revisar? Para revisarmos os tpicos tratados neste captulo, observem o resumo a seguir: Os operadores aritmticos so utilizados quando desejamos resolver expresses aritmticas. Devemos prestar ateno no tipo das variveis que esto sendo utilizadas na expresso, pois o tipo interfere no resultado da expresso. Os operadores relacionais so utilizados quando desejamos comparar valores de variveis. O resultado de uma expresso relacional sempre verdade ou falso. Os operadores lgicos servem para interligar duas ou mais expresses relacionais. O resultado de uma expresso lgica sempre verdade ou falso.

94

Programao I

Podemos utilizar os operadores aritmticos de atribuio para reduzir o tamanho das expresses aritmticas. Os operadores ++ e incrementam ou decrementam 1 de uma varivel. Na biblioteca math.h podem ser encontradas funes matemticas para encontrar a raiz quadrada de um nmero, potncia, arredondamento de nmeros reais, dentre outras.

Referncias ARAJO, Jairo. Dominando a Linguagem C. So Paulo: Cincia Moderna, 2004. ASCENIO, Ana Fernanda Gomes e CAMPOS, Edilene Aparecida Veneruchi. Fundamentos de Programao de Computadores. So Paulo: Prentice Hall, 2002. DEITEL, H, M e DEITEL, P. J. Como Programar em C. Rio de Janeiro: LTC, 1999. LAUREANO, Marcos. Programando em C Para Linux, Unix e Windows. Rio de Janeiro: Brasport, 2005. MIZRAHI, Victorine Viviane. Treinamento em Linguagem C Curso Completo. So Paulo: Makron, 1999. MONTGOMERY, Eduard. Programando em C: Simples e Prtico. So Paulo: Alta Books, 2006. OLIVEIRA, Ulisses. Programando em C Volume I Fundamentos. So Paulo: Cincia Moderna, 2004. SCHILDT, Herbert. C Completo e Total. So Paulo: Makron, 1996. SEBESTA, Robert. Conceitos de Linguagem de Programao. So Paulo: Makron, 2003.

95

Programao I

Consideraes Finais
Neste volume, tivemos a oportunidade de iniciar nosso aprendizado na linguagem de programao C. Nos captulos 1 e 2, conhecemos os principais conceitos desta rea (programao, linguagem de programao, um pouco do histrico do C, dentre outros), nos preparando para um melhor entendimento da linguagem de programao C. Nos captulos 3, 4 e 5, comeamos a estudar a sintaxe da linguagem de programao C, vimos os tipos de dados manipulados pela linguagem, os comandos de entrada e sada e a utilizao dos operadores aritmticos, relacionais e lgicos. Estes assuntos nos deram o conhecimento suficiente para iniciar o desenvolvimento dos nossos primeiros programas em C. Mas estamos apenas no incio. Temos mais trs volumes, que nos daro a capacidade de desenvolver programas maiores. Continuem firmes nos estudos! At o prximo mdulo.

96

Programao I

Conhecendo a Autora
Sou graduada em Cincia da computao pela Universidade Federal de Sergipe. Fiz mestrado e doutorado na Universidade Federal de Pernambuco, desenvolvendo pesquisas nas reas de Sistemas Distribudos e Geoprocessamento. Comeei a ensinar em 2000, nos cursos de Cincia da Computao e Sistemas de Informao. Desde o incio da minha carreira como professora, ministro disciplinas de Programao e tenho uma paixo pela linguagem C. Atualmente, encontrei uma nova paixo: Educao a Distncia.

97