LinguagemC_ApostilaCompleta

download LinguagemC_ApostilaCompleta

of 284

Transcript of LinguagemC_ApostilaCompleta

Programao 2Snia Virginia Alves Frana

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, Italo Amorim e Glaydson da Silva Reviso Ortogrfica: Ivanda Martins Ilustraes: Diego Almeida Coordenao de Produo: Marizete Silva Santos

SumrioPlano da Disciplina ...............................................................................5 Apresentao ........................................................................................9 Conhecendo o Volume 01 ..................................................................10 Captulo 1 Introduo ao C .............................................................13 1.1. Programas e Programao de Computadores ..........................13 1.2. Linguagens de Programao.....................................................15 1.3. Breve Histrico da Linguagem de Programao C ...................18 1.4. Criao, Compilao e Execuo de um Programa ..................19 Captulo 2 Conceitos Preliminares para Programar em C ...........24 2.1. Estrutura de um Programa Bsico em C ...................................25 2.2. Palavras Reservadas do C ........................................................28 2.3 Uso de Comentrios ...................................................................29 2.4. Os Fundamentos do Ambiente C...............................................31 2.5. Conhecendo o Dev-cpp .............................................................34 Captulo 3 Tipos de Dados, Variveis e Constantes .....................40 3.1. Tipos de dados ..........................................................................40 3.2. Variveis e Constantes ..............................................................42 3.3. Operador de Atribuio (=) ........................................................49

Captulo 4 Comandos de Entrada e Sada de Dados....................54 4.1. Entrada de Dados ......................................................................54 4.2. Sada de Dados .........................................................................59 4.3. Erros Frequentes no Uso dos Comandos de Entrada e Sada .65 4.4. Primeiros programas em C ........................................................66 Captulo 5 Operadores, Expresses e Funes Matemticas .....75 5.1. Operadores Bsicos ..................................................................75 5.2. Operadores Aritmticos de Atribuio ......................................87 5.3. Operadores ++ e -- ....................................................................87 5.4. Converso de tipo......................................................................88 5.5. Funes Matemticas (biblioteca math.h) .................................90

Plano da DisciplinaCarga horria: 60h

Ementa da DisciplinaIntroduo linguagem de programao C. Tipos de dados, variveis, operadores aritmticos, relacionais e lgicos. Comandos de entrada e sada. Estruturas de seleo e repetio. Modularizao. Vetores e registros. Ponteiros. Arquivos. Manipulao de caracteres. Comandos de tela. Comandos de manipulao de data e hora.

ObjetivosObjetivo Geral Apresentar tcnicas de programao estruturada utilizando como ferramenta a linguagem de programao C Objetivos Epecficos Desenvolver a capacidade de soluo de problemas de programao, com o uso da linguagem C. Introduzir mtodos de otimizao para garantir eficincia e segurana aos programas. Desenvolver o auto-aprendizado.

Contedo ProgramticoMdulo 1 - Introduo Linguagem de Programao C Carga Horria do Mdulo 01: 15 h Objetivo do Mdulo 01: Introduo ao C e seus comandos bsicos, para possibilitar a construo dos primeiros programas nesta linguagem. Contedo Programtico do Mdulo 1 Introduo ao C

Conceito de programa e linguagem de programao Introduo ao C: Um breve histrico Etapas de desenvolvimento de um programa Comandos Bsicos do C Estrutura de um programa C Diretivas de compilao Uso de comentrio Tipos de dados Variveis, constantes, identificadores e atribuio Comandos de entrada e sada Operadores aritmticos, relacionais e lgicos Modificadores de tipos de dados Funes matemticas Mdulo 2 Estruturas de Controle de Fluxo e Modularizao Carga Horria do Mdulo 2: 15 h Objetivo do Mdulo 2: Possibilitar o conhecimento das estruturas de controle (seleo e repetio) do C e mtodos para modularizao dos programas (criao de procedimentos e funes). Contedo Programtico do Mdulo 2: Estruturas de Controle de Fluxo Sequncia Estrutura de seleo: If e Switch Estrutura de repetio: for, do/while e while Comando break Modularizao Construo de mdulos: funes e procedimentos Passagem de parmetros e escopo de variveis Comando return

Mdulo 3 Armazenamento de Dados em Vetores, Registros e Arquivos Carga horria do Mdulo 03: 15 h Objetivo do Mdulo 03: Apresentar as formas de armazenamento de dados homogneos (vetores) e heterogneos (registros), alm dos comandos para manipulao de arquivos. Contedo Programtico do Mdulo 03: Tipos de Dados Homogneos e Heterogneos Vetores Registros Vetor de registro Arquivos Ponteiros Comandos para manipulao de arquivo Mdulo 4 Comandos Avanados Carga Horria do Mdulo 4: 15 h Objetivo do Mdulo 4: Apresentar comandos mais avanados da linguagem C, tais como: manipulao de caracteres, comandos de tela (para melhorias na interface dos programas) e manipulao de data e hora. Contedo Programtico do Mdulo 4: Comandos para Manipulao de Caracteres e Strings Comandos da biblioteca ctype e string Validao de campos Comandos de Tela Interface Comandos da biblioteca conio Comandos para Manipulao de data e hora Comandos da biblioteca time

Avaliao Avaliao prtica em laboratrio correspondendo a 60% da nota.

Resoluo de listas de exerccios, que sero enviadas atravs do ambiente virtual (30%). Avaliao referente participao do aluno nas aulas presenciais e ambiente virtual: fruns de discusso, chats, etc (10%).

BibliografiaBsica: SCHILDT, Herbert. C Completo e Total. So Paulo: Makron, 1996. DEITEL, H, M e DEITEL, P. J. Como Programar em C. Rio de Janeiro: LTC, 1999. Complementar: ASCENIO, Ana Fernanda Gomes e CAMPOS, Edilene Aparecida Veneruchi. Fundamentos de Programao de Computadores. So Paulo: Prentice Hall, 2002.

ApresentaoCaro(a) aluno(a), Seja bem-vindo (a) ao primeiro mdulo da disciplina Programao II. 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 o programa d um erro e no sabemos onde est o problema. Seja persistente! Ao longo do tempo, a experincia vai te dar mais segurana 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 a construo 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 2

Conhecendo o Volume 01Neste primeiro volume, voc ir encontrar o mdulo 01 da disciplina: Programao II. 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.

10

Programao 2

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 --; 11

Programao 2

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.

12

Programao 2

Captulo 1 Introduo ao CVamos 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 Mais1 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 microndas. 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 ComputadoresUm 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. 13

Programao 2

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

14

Programao 2

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.

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 15

Programao 2

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 MaisNo 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 nao 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 16

Programao 2

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 seqncias 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?

17

Programao 2

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

1.3. Breve Histrico da Linguagem de Programao CVamos 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 18

Saiba Mais3 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 2

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 ProgramaNesta 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 19

Programao 2

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 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? 20

Saiba MaisBug 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 2

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, 21

Programao 2

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 idias 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.

22

Programao 2

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.

23

Programao 2

Captulo 2 Conceitos Preliminares para Programar em CVamos 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 Mais5 O Dev-cpp uma ferramenta gratuita e pode ser baixada acessando o site: www.bloodshed. net/devcpp.html

Saiba MaisConhea mais o VisuAlg pesquisando no site: http://www. apoioinformatica. inf.br/visualg/ linguagem.htm6

24

Programao 2

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 CNesta 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; 25

Programao 2

Declarao de variveis (quando necessrio); Seqncia 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 o 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 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.

26

Programao 2

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 , 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 27

Programao 2

Saiba Mais7 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, depende 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 Mais8 Chamamos de corpo do programa principal toda a sequncia de comandos que faz parte do programa principal. Ou seja, a seqncia de comando que aparece entre as chaves de abertura e trmino do programa principal.

2.2. Palavras Reservadas do CComo mencionado no captulo anterior, as linguagens de programao so formadas por um conjunto de regras de sintaxe e 28

Programao 2

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 Mais9 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 MaisAo 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 ComentriosOs 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 29

Programao 2

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 MaisNo Devcpp, quando colocamos um comentrio, as letras do texto comentado ficam cinza11

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 30

Programao 2

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 Calculo do cubo de um nmero

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

#include /* 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 CNa 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 31

Programao 2

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 32

Programao 2

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 tiver 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 MaisCPU 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. 33

Programao 2

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-cppSaiba MaisC++ 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 34

Programao 2

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 possibilita 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 35Saiba MaisO 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 2

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 MaisO 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 36

Programao 2

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, ao poucos, os detalhes que envolve 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. Porque 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?

37

Programao 2

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-c-boas-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 seqncia 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.

38

Programao 2

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.

39

Programao 2

Captulo 3 Tipos de Dados, Variveis e ConstantesSaiba MaisA 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 MaisBit 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 dadosNesta 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.

40

Programao 2

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 AtenoA 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. 41

Programao 2

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. Permiti-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 ConstantesAgora 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 42

Programao 2

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 43

Programao 2

espaos de memria. Assim, iremos encontrar, facilmente, 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 as 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 existe 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).

44

Programao 2

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

45

Programao 2

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.

46

Programao 2

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

47

Programao 2

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. 48

Programao 2

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.

49

Programao 2

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 MaisOnde 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 50

Programao 2

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 a 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, 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. Abaixo, temos exemplos de identificadores. Assinale os identificadores vlidos e descreva o erro dos operadores invlidos. 51

Programao 2

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. 52

Programao 2

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 material disponvel 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 dizemos que tipo de dado pode ser armazenado na varivel. Os nomes da 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.

53

Programao 2

Captulo 4 Comandos de Entrada e Sada de DadosVamos 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 MaisVoce 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 DadosO 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

54

Programao 2

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 caracteres21

Saiba MaisNs 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 55

Programao 2

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

Programao 2

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. 57

Programao 2

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 .

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!

58

Programao 2

4.2. Sada de DadosO 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. 59

Programao 2

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 MaisA tela tem as seguintes dimenses: 80 colunas x 25 linha. Assim, conseguimos escrever em uma linha de tela, 80 caracteres. 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, no 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 apenas o texto que 60

Programao 2

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 fo