692
Como programar Em C Paul J. Deitel e Harvey M. Deitel

Paul J. Deitel e Harvey M. Deitel · Índice Capítulo 01 – Conceitos da Computação Capítulo 02 – Introdução à programação em C Capítulo 03 – Desenvolvimento da Programação

Embed Size (px)

Citation preview

  • Como

    programar

    Em

    C

    Paul J. Deitel e Harvey M. Deitel

  • ndice Captulo 01 Conceitos da Computao

    Captulo 02 Introduo programao em C

    Captulo 03 Desenvolvimento da Programao Estruturada

    Captulo 04 Controle do programa

    Captulo 05 Funes

    Captulo 06 Arrays

    Captulo 07 Ponteiros

    Captulo 08 Caracteres e strings

    Captulo 09 Formatao de Entrada/Sada

    Captulo 10 Estruturas, Unies, Manipulaes de Bits e Enumeraes

    Captulo 11 Processamento de arquivos

    Captulo 12 Estrutura de dados

    Captulo 13 O pr-processador

    Apndice A Biblioteca-padro

    Apndice B Precedncia de Operadores e Associatividade

    Apndice C Conjunto de Caracteres ASCII

    Apndice D Sistemas de numerao

  • 1 Conceitos de Computao

    Objetivos

    Entender os conceitos bsicos do computador.

    Familiarizar-se com os diferentes tipos de linguagens de programao.

    Familiarizar-se com a histria da linguagem de programao C.

    Conhecer Biblioteca Padro da linguagem C (C Standard Library).

    Entender o ambiente e desenvolvimento de programas C.

    Compreender por que apropriado aprender C no primeiro curso de programao.

    Compreender por que a linguagem C fornece uma base para estudos futuros de programao em geral e em particular para o C++.

    As coisas so sempre melhores no comeo.

    Blaise Pascal

    Grandes pensamentos exigem grandes linguagens.

    Aristfanes

    Nossa vida desperdiada em detalhes. Simplifique, simplifique.

    Henry Thoreau

  • Sumrio

    1.1 Introduo 1.2 O que um Computador? 1.3 Organizao dos Computadores 1.4 Processamento em Lotes (Batch Processing), Multiprogramao e Tempo Compartilha do (Timesharing)

    1.5 Computao Pessoal, Computao Distribuda e Computao Cliente/Servidor

    1.6 Linguagens de Mquina, Linguagens Assembly e Linguagens de Alto nvel.

    1.7 A Histria do C 1.8 A Biblioteca Padro (Standard Library) do C 1.9 Outras Linguagens de Alto Nvel 1.10 Programao Estruturada 1.11 Os Fundamentos do Ambiente C 1.12 Observaes Gerais sobre o C e Este Livro 1.13 Concurrent C 1.14 Programao Orientada a Objetos e C+ +

    Resumo - Terminologia - Prticas Recomendveis de Programao - Dicas de

    Portabilidade - Dicas de Performance - Exerccios de Reviso - Respostas dos

    Exerccios de Reviso - Exerccios - Leitura Recomendada

  • 1.1 Introduo

    Bem-vindo ao C! Trabalhamos muito duro para criar o que sinceramente

    esperamos ser uma maneira instrutiva e divertida de aprendizado. O C uma linguagem

    difcil, normalmente ensinada apenas para os programadores experientes, e, sendo

    assim, este livro no tem similar entre os livros-texto de C:

    Este livro aconselhvel para pessoas interessadas em aspectos tcnicos e com

    pouca ou nenhuma experincia de programao.

    Este livro tambm aconselhvel para programadores experientes que desejam

    um tratamento profundo e rigoroso da linguagem.

    Como um livro pode despertar o interesse de ambos os grupos? A resposta que

    o tema central do livro coloca em destaque a obteno de clareza nos programas atravs

    de tcnicas comprovadas de programao estruturada. Quem no programador

    aprender a programar "certo" desde o incio. Tentamos escrever de uma maneira clara

    e simples. O livro contm muitas ilustraes. Talvez o aspecto mais importante seja o

    de que o livro apresenta um grande nmero de programas prticos em C e mostra as

    sadas produzidas quando eles forem executados em um computador.

    Os quatro primeiros captulos apresentam os fundamentos da computao, da

    programao de computadores e da linguagem de programao C. As anlises esto

    inseridas em uma introduo programao de computadores usando um mtodo

    estruturado. Os principiantes em programao que fizeram nossos cursos nos

    informaram que o material desses captulos apresenta uma base slida para as tcnicas

    mais avanadas da linguagem C. Normalmente os programadores experientes lem

    rapidamente os quatro primeiros captulos e ento descobrem que o modo com o qual o

    assunto tratado no Captulo 5 rigoroso e fascinante. Eles gostam particularmente da

    maneira detalhada como so analisados os ponteiros, strings, arquivos e estruturas de

    dados nos captulos que se seguem.

    Muitos programadores experientes nos disseram que aprovam nosso modo de

    apresentar a programao estruturada. Freqentemente eles costumam programar em

    uma linguagem estruturada como o Pascal, mas, por nunca terem sido apresentados

    formalmente programao estruturada, no escrevem o melhor cdigo possvel.

    medida que aprenderem C com este livro, eles podero aprimorar seu estilo de

    programao. Dessa forma, quer voc seja um principiante, quer seja um programador

    experiente, h muito aqui para inform-lo, diverti-lo e estimul-lo.

    A maioria das pessoas est familiarizada com as coisas excitantes que os

    computadores fazem. Neste curso, voc aprender a mandar os computadores fazerem

    essas coisas. o software (i.e., as instrues escritas para mandar o computador realizar

    aes e tomar decises) que controla os computadores (chamados freqentemente de

    hardware), e uma das linguagens de desenvolvimento de software mais populares

    atualmente o C. Este texto fornece uma introduo programao em ANSI C, a

    verso padronizada em 1989 tanto nos EUA, atravs do American National Standards

    Institute (ANSI), como em todo o mundo, atravs da International Standards

    Organization (ISO).

  • O uso de computadores est aumentando em quase todos os campos de trabalho.

    Em uma era na qual os custos crescem constantemente, os custos com a computao

    diminuram drasticamente devido aos excitantes desenvolvimentos em tecnologia de

    software e hardware. Os computadores que podem ter ocupado salas enormes e custado

    milhes de dlares 25 anos atrs agora podem estar gravados na superfcie de chips de

    silcio menores do que uma unha e que talvez custem alguns dlares cada. Ironicamente,

    o silcio um dos materiais mais abundantes na Terra ele um componente da areia

    comum. A tecnologia do chip de silcio tornou a computao to econmica que

    aproximadamente 150 milhes de computadores de uso geral esto sendo empregados

    em todo o mundo, ajudando as pessoas no comrcio, indstria, governo e em suas vidas

    particulares. Este nmero pode dobrar facilmente em alguns anos.

    A linguagem C pode ser ensinada em um primeiro curso de programao, o

    pblico pretendido por este livro? Pensamos que sim. Dois anos atrs, aceitamos este

    desafio quando o Pascal estava solida mente estabelecido como a linguagem dos

    primeiros cursos de cincia da computao. Escrevemos Como Programar em C, a

    primeira edio deste livro. Centenas de universidades em todo o mundo usaram Como

    Programar em C. Cursos baseados nesse livro se provaram to eficientes quanto seus

    predecessores baseados no Pascal. No foram observadas diferenas significativas,

    exceto que os alunos estavam mais motivados por saberem que era mais provvel usar o

    C do que o Pascal em seus cursos mais avanados e em suas carreiras. Os alunos que

    aprendem o C tambm sabem que estaro mais preparados para aprender o C+ + mais

    rapidamente. O C+ + um superconjunto da linguagem C que se destina aos

    programadores que desejam escrever programas orientados a objetos. Falaremos mais

    sobre o C++ na Seo 1.14.

    Na realidade, o C + + est recebendo tanto interesse que inclumos uma

    introduo detalhada ao C+ + e programao orientada a objetos. Um fenmeno

    interessante que ocorre no campo das linguagens de programao que atualmente

    muitos dos revendedores principais simplesmente comercializam um produto que

    combina C/C++, em vez de oferecer produtos separados. Isto d aos usurios a

    capacidade de continuar programando em C se desejarem e depois migrarem

    gradualmente para o C ++ quando acharem apropriado.

    Agora voc j sabe de tudo! Voc est prestes a iniciar uma jornada fascinante e

    gratificadora. medida que for em frente, se voc desejar entrar em contato conosco,

    envie-nos um e-mail para [email protected] pela Internet. Envidaremos todos os

    esforos para oferecer uma resposta rpida. Boa sorte!

  • 1.2 O que um Computador?

    Um computador um dispositivo capaz de realizar clculos e tomar decises

    lgicas com uma velocidade milhes ou mesmo bilhes de vezes mais rpida do que os

    seres humanos. Por exemplo, muitos dos computadores pessoais de hoje podem realizar

    dezenas de milhes de operaes aritmticas por segundo. Uma pessoa utilizando uma

    calculadora de mesa poderia levar dcadas para realizar o mesmo nmero de operaes

    que um poderoso computador pessoal pode realizar em segundos. (Aspectos para

    reflexo: Como voc saberia se a pessoa fez as operaes corretamente? Como voc

    saberia se o computador fez as operaes corretamente?) Os mais rpidos

    supercomputadores de hoje podem realizar centenas de bilhes de operaes por

    segundo quase tantas operaes quanto centenas de pessoas poderiam realizar em um

    ano! E os computadores que permitem trilhes de instrues por segundo j se

    encontram em funcionamento em laboratrios de pesquisa.

    Os computadores processam dados sob o controle de conjuntos de instrues

    chamados programas de computador. Estes programas conduzem o computador atravs

    de um conjunto ordenado de aes especificado por pessoas chamadas programadores

    de computador.

    Os vrios dispositivos (como teclado, tela, discos, memria e unidades de

    processamento) que constituem um sistema computacional so chamados de hardware.

    Os programas executados em um computador so chamados de software. O custo do

    hardware diminuiu drasticamente nos ltimos anos, chegando ao ponto de os

    computadores pessoais se tornarem uma utilidade. Infelizmente, o custo do desen-

    volvimento de software tem crescido constantemente, medida que os programadores

    desenvolvem aplicaes cada vez mais poderosas e complexas, sem serem capazes de

    fazer as melhorias correspondentes na tecnologia necessria para esse desenvolvimento.

    Neste livro voc aprender mtodos de desenvolvimento de software que podem reduzir

    substancialmente seus custos e acelerar o processo de desenvolvimento de aplicaes

    poderosas e de alto nvel. Estes mtodos incluem programao estruturada,

    refinamento passo a passo top-down {descendente), funcionalizao e, finalmente, pro-

    gramao orientada a objetos.

  • 1.3 Organizao dos Computadores

    Independentemente das diferenas no aspecto fsico, praticamente todos os

    computadores podem ser considerados como divididos em seis unidades lgicas ou

    sees. So elas:

    1. Unidade de entrada (input unit). Esta a seo de "recepo" do computador. Ela obtm as informaes (dados e programas de computador) dos vrios dispositivos de

    entrada (input devices) e as coloca disposio de outras unidades para que possam ser

    processadas. A maior parte das informaes fornecida aos computadores atualmente

    atravs de teclados como os de mquinas de escrever.

    2. Unidade de sada (output unit). Esta a seo de "expedio" do computador. Ela leva as informaes que foram processadas pelo computador e as envia aos vrios

    dispositivos de sada (output devices) para torn-las disponveis para o uso no ambiente

    externo ao computador. A maioria das informaes fornecida pelo computador atravs

    de exibio na tela ou impresso em papel.

    3. Unidade de memria (memory unit). Este a seo de "armazenamento" do computador, com acesso rpido e capacidade relativamente baixa. Ela conserva as

    informaes que foram fornecidas atravs da unidade de entrada para que possam estar

    imediatamente disponveis para o processamento quando se fizer necessrio. A unidade

    de memria tambm conserva as informaes que j foram processadas at que sejam

    enviadas para os dispositivos de sada pela unidade de sada. Freqentemente a unidade

    de memria chamada de memria (memory), memria principal ou memria primria

    (primary memory).

    4. Unidade aritmtica e lgica (arithmetic and logic unit, ALU). Esta a seo de "fabricao" do computador. Ela a responsvel pela realizao dos clculos como

    adio, subtrao, multiplicao e diviso. Ela contm os mecanismos de deciso que

    permitem ao computador, por exemplo, comparar dois itens da unidade de memria

    para determinar se so iguais ou no.

    5. Unidade central de processamento, UCP (central processing unit, CPU). Esta a seo "administrativa" do computador. Ela o coordenador do computador e o

    responsvel pela superviso do funcionamento das outras sees. A CPU informa

    unidade de entrada quando as informaes devem ser lidas na unidade de memria,

    informa ALU quando as informaes da unidade de memria devem ser utilizadas em

    clculos e informa unidade de sada quando as informaes devem ser enviadas da

    unidade de memria para determinados dispositivos de sada.

    6. Unidade de memria secundria (secondary storage unit). Esta a seo de "armazenamento" de alta capacidade e de longo prazo do computador. Os programas ou

    dados que no estiverem sendo usados ativamente por outras unidades so colocados

    normalmente em dispositivos de memria secundria (como discos) at que sejam outra

    vez necessrios, possivelmente horas, dias, meses ou at mesmo anos mais tarde.

  • 1.4 Processamento em Lotes (Batch Processing),

    Multiprogramao e Tempo Compartilhado (Timesharing)

    Os primeiros computadores eram capazes de realizar apenas um trabalho ou

    tarefa de cada vez. Esta forma de funcionamento de computadores chamada

    freqentemente de processamento em lotes de usurio nico. O computador executa um

    nico programa de cada vez enquanto processa dados em grupos ou lotes (batches).

    Nesses primeiros sistemas, geralmente os usurios enviavam suas tarefas ao centro

    computacional em pilhas de cartes perfurados. Freqentemente os usurios precisavam

    esperar horas antes que as sadas impressas fossem levadas para seus locais de trabalho.

    medida que os computadores se tornaram mais poderosos, tornou-se evidente

    que o processamento em lotes de usurio nico raramente utilizava com eficincia os

    recursos do computador. Em vez disso, imaginava-se que muitos trabalhos ou tarefas

    poderiam ser executados de modo a compartilhar os recursos do computador e assim

    conseguir utiliz-lo melhor. Isto chamado multiprogramao. A multiprogramao

    envolve as "operaes" simultneas de muitas tarefas do computador o computador

    compartilha seus recursos entre as tarefas que exigem sua ateno. Com os primeiros

    sistemas de multiprogramao, os usurios ainda enviavam seus programas em pilhas

    de cartes perfurados e esperavam horas ou dias para obter os resultados.

    Nos anos 60, vrios grupos de indstrias e universidades foram pioneiros na

    utilizao do conceito de timesharing (tempo compartilhado). Timesharing um caso

    especial de multiprogramao no qual os usurios podem ter acesso ao computador

    atravs de dispositivos de entrada/sada ou terminais. Em um sistema computacional

    tpico de timesharing, pode haver dezenas de usurios compartilhando o computador ao

    mesmo tempo. Na realidade o computador no atende a todos os usurios

    simultaneamente. Em vez disso, ele executa uma pequena parte da tarefa de um

    usurio e ento passa a fazer a tarefa do prximo usurio. O computador faz isto to

    rapidamente que pode executar o servio de cada usurio vrias vezes por segundo.

    Assim, parece que as tarefas dos usurios esto sendo executadas simultaneamente.

  • 1.5 Computao Pessoal, Computao Distribuda e

    Computao Cliente/Servidor

    Em 1997, a Apple Computer tornou popular o fenmeno da computao pessoal.

    Inicialmente, isto era um sonho de quem a tinha como um hobby. Computadores

    tornaram-se suficientemente baratos para serem comprados para uso pessoal ou

    comercial. Em 1981, a IBM, a maior vendedora de computadores do mundo, criou o

    IBM PC (Personal Computer, computador pessoal). Do dia para a noite, literalmente, a

    computao pessoal se tornou comum no comrcio, na indstria e em organizaes

    governamentais.

    Mas esses computadores eram unidades "autnomas" as pessoas faziam suas

    tarefas em seus prprios equipamentos e ento transportavam os discos de um lado para

    outro para compartilhar as informaes. Embora os primeiros computadores pessoais

    no fossem suficientemente poderosos para serem compartilhados por vrios usurios,

    esses equipamentos podiam ser ligados entre si em redes de computadores, algumas

    vezes atravs de linhas telefnicas e algumas vezes em redes locais de organizaes.

    Isto levou ao fenmeno da computao distribuda, na qual a carga de trabalho

    computacional de uma organizao, em vez de ser realizada exclusivamente em uma

    instalao central de informtica, distribuda em redes para os locais (sites) nos quais

    o trabalho real da organizao efetuado. Os computadores pessoais eram

    suficientemente poderosos para manipular as exigncias computacionais de cada

    usurio em particular e as tarefas bsicas de comunicaes de passar as informaes

    eletronicamente de um lugar para outro.

    Os computadores pessoais mais poderosos de hoje so to poderosos quanto os

    equipamentos de milhes de dlares de apenas uma dcada atrs. Os equipamentos

    desktop (computadores de mesa) mais poderosos chamados workstations ou estaes

    de trabalho fornecem capacidades enormes a usurios isolados. As informaes so

    compartilhadas facilmente em redes de computadores onde alguns deles, os chamados

    servidores de arquivos (file servers), oferecem um depsito comum de programas e

    dados que podem ser usados pelos computadores clientes (clients) distribudos ao longo

    da rede, da o termo computao cliente/servidor. O C e o C ++ tornaram-se as

    linguagens preferidas de programao para a criao de software destinado a sistemas

    operacionais, redes de computadores e aplicaes distribudas cliente/servidor.

  • 1.6 Linguagens de Mquina, Linguagens Assembly e

    Linguagens de Alto Nvel

    Os programadores escrevem instrues em vrias linguagens de programao,

    algumas entendidas diretamente pelo computador e outras que exigem passos

    intermedirios de traduo. Centenas de linguagens computacionais esto atualmente

    em uso. Estas podem ser divididas em trs tipos gerais:

    1. Linguagens de mquina 2. Linguagens assembly 3. Linguagens de alto nvel

    Qualquer computador pode entender apenas sua prpria linguagem de mquina.

    A linguagem de mquina a "linguagem natural" de um determinado computador. Ela

    est relacionada intimamente com o projeto de hardware daquele computador.

    Geralmente as linguagens de mquina consistem em strings de nmeros (reduzidos em

    ltima anlise a ls e Os) que dizem ao computador para realizar uma de suas operaes

    mais elementares de cada vez. As linguagens de mquina so dependentes de mquina

    (no-padronizadas, ou machine dependent), i.e., uma determinada linguagem de

    mquina s pode ser usada com um tipo de computador. As linguagens de mquina so

    complicadas para os humanos, como se pode ver no trecho seguinte de um programa em

    linguagem de mquina que adiciona o pagamento de horas extras ao salrio base e

    armazena o resultado no pagamento bruto.

    +1300042774

    +1400593419

    +1200274027

    medida que os computadores se tornaram mais populares, ficou claro que a

    programao em linguagem de mquina era simplesmente muito lenta e tediosa para a

    maioria dos programadores. Em vez de usar strings de nmeros que os computadores

    podiam entender diretamente, os programadores comearam a usar abreviaes

    parecidas com palavras em ingls para representar as operaes elementares de um

    computador. Estas abreviaes formaram a base das linguagens assembly. Foram

    desenvolvidos programas tradutores, chamados assemblers, para converter programas

    em linguagem assembly para linguagem de mquina na velocidade ditada pelo

    computador. O trecho de um programa em linguagem assembly a seguir tambm soma

    o pagamento de horas extras ao salrio base e armazena o resultado em pagamento

    bruto, porm isto feito de uma forma mais clara do que o programa equivalente em

    linguagem de mquina.

    LOAD BASE

    ADD EXTRA

    STORE BRUTO

    O uso do computador aumentou rapidamente com o advento das linguagens

    assembly, mas elas ainda exigiam muitas instrues para realizar mesmo as tarefas mais

    simples. Para acelerar o processo de programao, foram desenvolvidas linguagens de

    alto nvel, nas quais podiam ser escritas instrues simples para realizar tarefas

  • fundamentais. Os programas tradutores que convertiam programas de linguagem de alto

    nvel em linguagem de mquina so chamados compiladores. As linguagens de alto

    nvel permitem aos programadores escrever instrues que se parecem com o idioma

    ingls comum e contm as notaes matemticas normalmente usadas. Um programa de

    folha de pagamento em uma linguagem de alto nvel poderia conter uma instruo como

    esta:

    Bruto = Base + Extra

    Obviamente, as linguagens de alto nvel so muito mais desejveis do ponto de

    vista do programador do que as linguagens de mquina ou assembly. O C e o C++ esto

    entre as linguagens de alto nvel mais poderosas e mais amplamente usadas.

  • 1.7 A Histria do C

    O C foi desenvolvido a partir de duas linguagens anteriores, o BCPL e o B. O

    BCPL foi desenvolvido em 1967 por Martin Richards como uma linguagem para

    escrever software de sistemas operacionais e compiladores. Ken Thompson modelou

    muitos recursos em sua linguagem B com base em recursos similares do BCPL e usou o

    B para criar as primeiras verses do sistema operacional UNIX nas instalaes do Bell

    Laboratories em 1970, em um computador DEC PDP-7. Tanto o BCPL como o B eram

    linguagens "sem tipos" ("typeless") todos os itens de dados ocupavam uma "palavra"

    na memria e a responsabilidade de lidar com um item de dados como um nmero

    inteiro ou real, por exemplo, recaa sobre os ombros do programador.

    A linguagem C foi desenvolvida a partir do B por Dennis Ritchie, do Bell

    Laboratories, e implementada originalmente em um computador DEC PDP-11, em

    1972. De incio o C se tornou amplamente conhecido como a linguagem de

    desenvolvimento do sistema operacional UNIX. Hoje em dia, praticamente todos os

    grandes sistemas operacionais esto escritos em C e/ou C++ . Ao longo das duas ltimas

    dcadas, o C ficou disponvel para a maioria dos computadores. O C independe do

    hardware. Elaborando um projeto cuidadoso, possvel escrever programas em C que

    sejam portteis para a maioria dos computadores. O C usa muitos dos importantes

    conceitos do BCPL e do B ao mesmo tempo que adiciona tipos de dados e outros

    recursos poderosos.

    No final da dcada de 70, o C evoluiu e chegou ao que se chama agora de "C

    tradicional". A publicao em 1978 do livro de Kernighan e Ritchie, The C

    Programming Language, fez com que essa linguagem recebesse muita ateno. Esta

    publicao se tornou um dos livros de informtica mais bem-sucedidos de todos os

    tempos.

    A rpida expanso do C em vrios tipos de computadores (algumas vezes

    chamados de plataformas de hardware) levou a muitas variantes. Elas eram similares,

    mas freqentemente incompatveis. Isto foi um problema srio para os desenvolvedores

    de programas que precisavam criar um cdigo que fosse executado em vrias

    plataformas. Ficou claro que era necessrio uma verso padro do C. Em 1983, foi

    criado o comit tcnico X3J11 sob o American National Standards Committee on

    Computers and Information Processing (X3) para "fornecer linguagem uma definio

    inequvoca e independente de equipamento". Em 1989, o padro foi aprovado. O

    documento conhecido como ANSI/ISO 9899:1990. Pode-se pedir cpias desse

    documento para o American National Standards Institute, cujo endereo consta no

    Prefcio a este texto. A segunda edio do livro de Kernighan e Ritchie, publicada em

    1988, reflete esta verso, chamada ANSI C, agora usada em todo o mundo (Ke88).

    Dicas de portabilidade 1.1

    Como o C uma linguagem independente de hardware e amplamente

    disponvel, as aplicaes escritas em C podem ser executadas com pouca

    ou nenhuma modificao em uma grande variedade de sistemas

    computacionais.

  • 1.8 A Biblioteca Padro (Standard Library) do C

    Como voc aprender no Captulo 5, os programas em C consistem em mdulos

    ou elementos chamados funes. Voc pode programar todas as funes de que precisa

    para formar um programa C, mas a maioria dos programadores C tira proveito de um

    excelente conjunto de funes chamado C Standard Library (Biblioteca Padro do C).

    Dessa forma, h na realidade duas partes a serem aprendidas no "mundo" do C. A

    primeira a linguagem C em si, e a segunda como usar as funes do C Standard

    Library. Ao longo deste livro, analisaremos muitas dessas funes. O Apndice A

    (condensado e adaptado do documento padro do ANSI C) relaciona todas as funes

    disponveis na biblioteca padro do C. A leitura do livro de Plauger (P192) obrigatria

    para os programadores que necessitam de um entendimento profundo das funes da

    biblioteca, de como implement-las e como us-las para escrever cdigos portteis.

    Neste curso voc ser estimulado a usar o mtodo dos blocos de construo para

    criar programas. Evite reinventar a roda. Use os elementos existentes isto chamado

    reutilizao de software e o segredo do campo de desenvolvimento da programao

    orientada a objetos. Ao programar em C, voc usar normalmente os seguintes blocos

    de construo:

    Funes da C Standard Library (biblioteca padro) Funes criadas por voc mesmo Funes criadas por outras pessoas e colocadas sua disposio

    A vantagem de criar suas prprias funes que voc saber exatamente como

    elas funcionam. Voc poder examinar o cdigo C. A desvantagem o esforo

    demorado que se faz necessrio para projetar e desenvolver novas funes.

    Usar funes existentes evita reinventar a roda. No caso das funes standard do

    ANSI, voc sabe que elas foram desenvolvidas cuidadosamente e sabe que, por estar

    usando funes disponveis em praticamente todas as implementaes do ANSI C, seus

    programas tero uma grande possibilidade de serem portteis.

    Dica de desempenho 1.1

    Usar as funes da biblioteca standard do C em vez de voc escrever suas

    prprias verses similares pode melhorar o desempenho do programa

    porque essas funes foram desenvolvidas cuidadosamente por pessoal

    eficiente.

    Dicas de portabilidade 1.2

    Usar as funes da biblioteca padro do C em vez de escrever suas

    prprias verses similares pode melhorar a portabilidade do programa

    porque essas funes esto colocadas em praticamente todas as

    implementaes do ANSI C.

  • 1.9 Outras Linguagens de Alto Nvel

    Centenas de linguagens de alto nvel foram desenvolvidas, mas apenas algumas

    conseguiram grande aceitao. O FORTRAN (FORmula TRANslator) foi desenvolvido

    pela IBM entre 1954 e 1957 para ser usado em aplicaes cientficas e de engenharia

    que exigem clculos matemticos complexos. O FORTRAN ainda muito usado.

    O COBOL (COmmon Business Oriented Language) foi desenvolvido em 1959

    por um grupo de fabricantes de computadores e usurios governamentais e industriais.

    O COBOL usado principalmente para aplicaes comerciais que necessitam de uma

    manipulao precisa e eficiente de grandes volumes de dados. Hoje em dia, mais de

    metade de todo o software comercial ainda programada em COBOL. Mais de um

    milho de pessoas esto empregadas como programadores de COBOL.

    O Pascal foi desenvolvido quase ao mesmo tempo que o C. Ele destinava-se ao

    uso acadmico. Falaremos mais sobre o Pascal na prxima seo.

  • 1.10 Programao Estruturada

    Durante os anos 60, enormes esforos para o desenvolvimento de software

    encontraram grandes dificuldades. Os cronogramas de desenvolvimento de software

    normalmente estavam atrasados, os custos superavam em muito os oramentos e os

    produtos finais no eram confiveis. As pessoas comearam a perceber que o

    desenvolvimento era uma atividade muito mais complexa do que haviam imaginado. A

    atividade de pesquisa dos anos 60 resultou na evoluo da programao estruturada

    um mtodo disciplinado de escrever programas claros, nitidamente corretos e fceis de

    modificar. Os Captulos 3 e 4 descrevem os fundamentos da programao estruturada.

    O restante do texto analisa o desenvolvimento de programas em C estruturados.

    Um dos resultados mais tangveis dessa pesquisa foi o desenvolvimento da

    linguagem Pascal de programao pelo Professor Nicklaus Wirth em 1971. O Pascal,

    que recebeu este nome em homenagem ao matemtico e filsofo Blaise Pascal, que

    viveu no sculo XVII, destinava-se ao ensino da programao estruturada em ambientes

    acadmicos e se tornou rapidamente a linguagem preferida para a introduo

    programao em muitas universidades. Infelizmente, a linguagem carecia de muitos

    recursos necessrios para torn-la til em aplicaes comerciais, industriais e

    governamentais, e portanto no foi amplamente aceita nesses ambientes. Possivelmente

    a histria registra que a grande importncia do Pascal foi sua escolha para servir de base

    para a linguagem de programao Ada.

    A linguagem Ada foi desenvolvida sob a responsabilidade do Departamento de

    Defesa dos EUA (United States Department of Defense, ou DOD) durante os anos 70 e

    incio dos anos 80. Centenas de linguagens diferentes estavam sendo usadas para

    produzir os imensos sistemas de comando e controle de software do DOD. O DOD

    desejava uma nica linguagem que pudesse atender a suas necessidades. O Pascal foi

    escolhido como base, mas a linguagem Ada final muito diferente do Pascal. A

    linguagem Ada recebeu este nome em homenagem a Lady Ada Lovelace, filha do poeta

    Lorde Byron. De uma maneira geral, Lady Lovelace considerada a primeira pessoa do

    mundo a escrever um programa de computador, no incio do sculo XIX. Uma

    caracterstica importante da linguagem Ada chamada multitarefa (multitasking); isto

    permite aos programadores especificarem a ocorrncia simultnea de muitas atividades.

    Outras linguagens de alto nvel amplamente usadas que analisamos incluindo o C e o

    C++ permitem ao programador escrever programas que realizem apenas uma

    atividade. Saberemos no futuro se a linguagem Ada conseguiu atingir seus objetivos de

    produzir software confivel e reduzir substancialmente os custos de desenvolvimento e

    manuteno de software.

  • 1.11 Os Fundamentos do Ambiente C

    Todos os sistemas C so constitudos geralmente de trs partes: o ambiente, a

    linguagem e a C Standard Library. A anlise a seguir explica o ambiente tpico de

    desenvolvimento do C, mostrado na Figura 1.1.

    Normalmente os programas em C passam por seis fases para serem executados

    (Figura 1.1). So elas: edio, pr-processamento, compilao, linking (ligao),

    carregamento e execuo. Concentrar-nos-emos aqui em um sistema tpico do C

    baseado em UNIX. Se voc no estiver usando um sistema UNIX, consulte o manual de

    seu sistema ou pergunte ao seu professor como realizar estas tarefas em seu ambiente.

    A primeira fase consiste na edio de um arquivo. Isto realizado com um

    programa editor. O programador digita um programa em C com o editor e faz as

    correes necessrias. O programa ento armazenado em um dispositivo de

    armazenamento secundrio como um disco. Os nomes de programas em C devem ter a

    extenso .c. Dois editores muito usados em sistemas UNIX so o vi e o emacs. Os

    pacotes de software C/C++ como o Borland C++ para IBM PCs e compatveis e o

    Symantec C++ para Apple Macintosh possuem editores embutidos que se adaptam

    perfeitamente ao ambiente de programao. Partimos do princpio de que o leitor sabe

    editar um programa.

    A seguir, o programador emite o comando de compilar o programa. O

    compilador traduz o programa em C para o cdigo de linguagem de mquina (tambm

    chamado de cdigo-objeto). Em um sistema C, um programa pr-processador

    executado automaticamente antes de a fase de traduo comear. O pr-processador C

    obedece a comandos especiais chamados diretivas do pr-processador que indicam que

    devem ser realizadas determinadas manipulaes no programa antes da compilao.

    Estas manipulaes consistem normalmente em incluir outros arquivos no arquivo a ser

    compilado e substituir smbolos especiais por texto de programa. As diretivas mais

    comuns do pr-processador so analisadas nos primeiros captulos; uma anlise

    detalhada de todos os recursos do pr-processador est presente no Captulo 13. O pr-

    processador ativado automaticamente pelo compilador antes de o programa ser

    convertido para linguagem de mquina.

    A quarta fase chamada linking. Normalmente os programas em C contm

    referncias a funes definidas em outros locais, como nas bibliotecas padro ou nas

    bibliotecas de um grupo de programadores que estejam trabalhando em um determinado

    projeto. Assim, o cdigo-objeto produzido pelo compilador C contm normalmente

    "lacunas" devido falta dessas funes. Um linker faz a ligao do cdigo-objeto com o

    cdigo das funes que esto faltando para produzir uma imagem executvel (sem a

    falta de qualquer parte). Em um sistema tpico baseado em UNIX, o comando para

    compilar e linkar um programa cc. Por exemplo, para compilar e linkar um programa

    chamado bemvindo. c digite

    cc bemvindo.c

  • no prompt do UNIX e pressione a tecla Return (ou Enter). Se o programa for compilado

    e linkado corretamente, ser produzido um arquivo chamado a.out. Este arquivo a

    imagem executvel de nosso programa bemvindo. c.

    A quinta fase chamada carregamento. Um programa deve ser colocado na memria

    antes que possa ser executado pela primeira vez. Isto feito pelo carregador (rotina de

    carga ou loader), que apanha a imagem executvel do disco e a transfere para a

    memria.

    Finalmente, o computador, sob o controle de sua CPU, executa as instrues do

    programa, uma aps a outra. Para carregar e executar o programa em um sistema UNIX

    digitamos a.out no prompt do UNIX e apertamos a tecla Return.

    A maioria dos programas em C recebe ou envia dados. Determinadas funes do

    C recebem seus dados de entrada a partir do stdin (o dispositivo padro de entrada, ou

    standard input device) que normalmente definido como o teclado, mas que pode estar

    associado a outro dispositivo. Os dados so enviados para o stdout (o dispositivo

    padro de sada, ou standard output device), que normalmente a tela do computador,

    mas que pode estar associado a outro dispositivo. Quando dizemos que um programa

    fornece um resultado, normalmente queremos dizer que o resultado exibido na tela.

    H tambm um dispositivo padro de erros (standard error device) chamado

    stderr. O dispositivo stderr (normalmente associado tela) usado para exibir

    mensagens de erro. comum no enviar os dados regu-lares de sada, i.e., stdout para a

    tela e manter stderr associado a ela para que o usurio possa ser informado

    imediatamente dos erros.

  • 1.12 Observaes Gerais sobre o C e Este Livro

    O C uma linguagem difcil. Algumas vezes, os programadores experientes

    ficam orgulhosos de criar utilizaes estranhas, distorcidas e complicadas da linguagem.

    Isto uma pssima regra de programao. Ela faz com que os programas fiquem

    difceis de ler, com grande probabilidade de se comportarem de maneira imprevista e

    mais difceis de testar e depurar erros. Este livro se destina a programadores iniciantes,

    portanto damos nfase elaborao de programas claros e bem-estruturados. Um de

    nossos objetivos principais neste livro fazer com que os programas fiquem claros

    atravs da utilizao de tcnicas comprovadas de programao estruturada e das muitas

    prticas recomendveis, de programaro mencionadas.

    Boas prticas de programao 1.1

    Escreva seus programas em C de uma maneira simples e objetiva.

    Algumas vezes isto chamado KIS (do ingls "keep it simple" [que pode

    ser traduzido por "mantenha a simplicidade"]). No "complique" a

    linguagem tentando solues "estranhas".

    Voc pode ouvir que o C uma linguagem porttil e que os programas escritos

    em C podem ser executados em muitos computadores diferentes. A portabilidade um

    objetivo ilusrio. O documento padro do ANSI (An90) lista 11 pginas de questes

    delicadas sobre portabilidade. Foram escritos livros completos sobre o assunto de

    portabilidade no C (Ja89) (Ra90).

    Dicas de portabilidade 1.3

    Embora seja possvel escrever programas portteis, h muitos problemas

    entre as diferentes implementaes do C e os diferentes computadores

    que tornam a portabilidade um objetivo difcil de atingir. Simplesmente

    escrever programas em C no garante a portabilidade.

    Fizemos uma pesquisa cuidadosa do documento padro do ANSI C e

    examinamos nossa apresentao quanto aos aspectos de completude e preciso.

    Entretanto, o C uma linguagem muito rica e possui algumas sutilezas e alguns

    assuntos avanados que no analisamos. Se voc precisar conhecer detalhes tcnicos

    adicionais sobre o ANSI C, sugerimos a leitura do prprio documento padro do ANSI

    C ou o manual de referncia de Kernighan e Ritchie (Ke88).

    Limitamos nosso estudo ao ANSI C. Muitos recursos do ANSI C no so

    compatveis com implementaes antigas do C, portanto voc pode vir a descobrir que

    alguns programas mencionados neste texto no funcionam com compiladores antigos do

    C.

  • Boas prticas de programao 1.2

    Leia os manuais da verso do C que estiver usando. Consulte

    freqentemente estes manuais para se certificar do conhecimento do rico

    conjunto de recursos do C e de que eles esto sendo usados corretamente.

    Boas prticas de programao 1.3

    Seu computador e compilador so bons mestres. Se voc no estiver certo

    de como funciona um recurso do C, escreva um programa de teste que

    utilize aquele recurso, compile e execute o programa, e veja o que

    acontece.

  • 1.13 Concurrent C

    Foram desenvolvidas outras verses do C atravs de um esforo contnuo de

    pesquisa no Bell Laboratories. Gehani (Ge89) desenvolveu o Concurrent C um

    superconjunto do C que inclui recursos para especificar a ocorrncia de diversas

    atividades em paralelo. Linguagens como o Concurrent C e recursos de sistemas

    operacionais que suportam paralelismo em aplicaes do usurio se tornaro cada vez

    mais populares na prxima dcada, medida que o uso de multiprocessadores (i.e.,

    computadores com mais de uma CPU) aumentar. Normalmente cursos e livros-texto de

    sistemas operacionais (De90) tratam do assunto de programao paralela de uma

    maneira consistente.

  • 1.14 Programao Orientada a Objetos e C+ +

    Outro superconjunto do C, especificamente o C++, foi desenvolvido por

    Stroustrup (St86) no Bell Laboratories. O C++ fornece muitos recursos que tornam a

    linguagem C mais "atraente". Porm o mais importante que ela fornece recursos para a

    programao orientada a objetos.

    Objetos so basicamente componentes reutilizveis de software que modelam

    itens do mundo real. Est ocorrendo uma revoluo na comunidade de software.

    Desenvolver software de modo rpido, correto e econmico permanece um objetivo

    utpico, e isto acontece em uma poca na qual a demanda por software novo e poderoso

    est crescendo.

    Os desenvolvedores de software esto descobrindo que usar um projeto e

    mtodo de implementao modulares e orientados a objetos pode fazer com que os

    grupos de desenvolvimento se tornem 10 a 100 vezes mais produtivos do que seria

    possvel com tcnicas convencionais de programao.

    Muitas linguagens orientadas a objetos foram desenvolvidas. A opinio geral

    de que o C++ se tornar a linguagem dominante para a implementao de sistemas a

    partir de meados a final dos anos 90.

    Muitas pessoas acreditam que a melhor estratgia educacional hoje entender

    perfeitamente o C e depois estudar o C++.

  • 1.15 Resumo

    o software (i.e., as instrues que voc escreve para ordenar ao computador a realizao de aes e a tomada de decises) que controla os computadores (chamados

    freqentemente de hardware).

    ANSI C a verso da linguagem de programao C padronizada em 1989 tanto nos Estados Unidos, atravs do American National Standards Institute (ANSI), como em

    todo o mundo, atravs da International Standards Organization (ISO).

    Os computadores que podem ter ocupado salas enormes e custado milhes de dlares h 25 anos podem agora estar contidos na superfcie de chips de silcio menores do que

    uma unha e que talvez custem alguns dlares cada um.

    Aproximadamente 150 milhes de computadores de uso geral esto em atividade em todo o mundo, ajudando as pessoas nos negcios, indstria, governo e em suas vidas

    pessoais. Este nmero pode dobrar facilmente em alguns anos.

    Um computador um dispositivo capaz de realizar clculos e tomar decises lgicas com uma rapidez milhes, ou mesmo bilhes, de vezes maior do que os seres humanos.

    Os computadores processam dados sob o controle de programas computacionais. Os vrios dispositivos (como teclado, tela, discos, memria e unidades de processamento) que constituem um sistema computacional so chamados de hardware.

    Os programas executados em um computador so chamados de software. A unidade de entrada a seo de "recepo" do computador. Atualmente a maioria das informaes fornecida aos computadores atravs de teclados como os de mquinas

    de escrever.

    A unidade de sada a seo de "expedio" do computador. Atualmente, a maioria das informaes fornecida pelos computadores atravs de exibio na tela ou

    impresso em papel.

    A unidade de memria a seo de "armazenamento" do computador e chamada freqentemente de memria, memria principal ou memria primria.

    A unidade aritmtica e lgica (arithmetic and logic unit, ALU) realiza os clculos e toma decises.

    A unidade central de processamento, UCP (central processing unit) a responsvel pela coordenao do computador e pela superviso do funcionamento de outras sees.

    Normalmente, os programas ou dados que no estiverem sendo usados ativamente por outras unidades so colocados em dispositivos de armazenamento secundrio (como

    discos) at que sejam novamente necessrios.

    No processamento de lotes de usurio nico (single-user batch processing), o computador executa um programa simples de cada vez enquanto processa os dados em

    grupos ou lotes (batches).

    A multiprogramao envolve a realizao "simultnea" de vrias tarefas no computador este compartilha seus recursos entre as tarefas.

    Timesharing (tempo compartilhado) um caso especial de multiprogramao na qual os usurios tm acesso ao computador por intermdio de terminais. Parece que os

    usurios esto executando programas simultaneamente.

    Com a computao distribuda, o poder computacional de uma organizao distribudo atravs de uma rede para os locais (sites) nos quais o trabalho real da

    organizao realizado.

    Os servidores de arquivo armazenam programas e dados que podem ser compartilhados por computadores clientes distribudos ao longo da rede, da o termo

    computao cliente/servidor.

  • Qualquer computador pode entender diretamente sua prpria linguagem de mquina. Geralmente, as linguagens de mquina consistem em strings de nmeros (reduzidos em ltima anlise a ls e Os) que mandam o computador realizar suas operaes mais

    elementares, uma por vez. As linguagens de mquina dependem do equipamento.

    Abreviaes semelhantes ao idioma ingls formam a base das linguagens assembly. Os assemblers (montadores) traduzem os programas em linguagem assembly para

    linguagem de mquina.

    Os compiladores traduzem os programas em linguagem de alto nvel para linguagem de mquina. As linguagens de alto nvel contm palavras em ingls e notaes

    matemticas convencionais.

    O C conhecido como a linguagem de desenvolvimento do sistema operacional UNIX.

    possvel escrever programas em C que sejam portveis para a maioria dos computadores.

    O padro ANSI C foi aprovado em 1989. O FORTRAN (FORmula TRANslator) usado em aplicaes matemticas. O COBOL (COmmon Business Oriented Language) usado principalmente em aplicaes comerciais que exijam manipulao precisa e eficiente de grandes volumes

    de dados.

    Programao estruturada um mtodo disciplinado de escrever programas que sejam claros, visivelmente corretos e fceis de serem modificados.

    O Pascal destinava-se ao ensino de programao estruturada em ambientes acadmicos.

    A Ada foi desenvolvida sob o patrocnio do Departamento de Defesa dos Estados Unidos (United States" Department of Defense, DOD) usando o Pascal como base.

    A multitarefa (multitasking) da linguagem Ada permite aos programadores especificarem atividades paralelas.

    Todos os sistemas em C consistem em trs partes: o ambiente, a linguagem e as bibliotecas padro. As funes da biblioteca no so parte da linguagem C em si; elas

    realizam operaes como entrada/sada de dados e clculos matemticos.

    Para serem executados, os programas em C passam geralmente por seis fases:

    edio, pr-processamento, compilao, linking (ligao), carregamento e execuo.

    O programador digita um programa com um editor e faz as correes necessrias. Um compilador traduz um programa em C para linguagem de mquina (ou cdigo-objeto).

    Um pr-processador obedece a diretivas que indicam normalmente que outros arquivos devem ser includos no arquivo a ser compilado e que smbolos especiais

    devem ser substitudos por texto de programa.

    Um linker liga o cdigo-objeto ao cdigo de funes que estejam faltando de modo a produzir uma imagem executvel (com todas as partes necessrias).

    Um loader (carregador) apanha uma imagem executvel do disco e a transfere para a memria.

    Um computador, sob controle de sua CPU, executa, uma a uma, as instrues de um programa.

    Determinadas funes do C (como scanf) recebem dados de stdin (o dispositivo padro de entrada) que normalmente atribudo ao teclado.

    Os dados so enviados a stdout (o dispositivo padro de sada) que normalmente a tela do computador.

    H ainda um dispositivo padro de erro chamado stderr. O dispositivo stderr (normalmente a tela) usado para exibir mensagens de erro.

  • Embora seja possvel escrever programas portteis, h muitos problemas entre as diferentes implementaes do C e os diferentes computadores que podem fazer com que

    a portabilidade seja difcil de conseguir.

    O Concurrent C um superconjunto do C que inclui recursos para especificar a realizao de vrias atividades em paralelo.

    O C++ fornece recursos para a realizao de programao orientada a objetos. Objetos so basicamente componentes reutilizveis de software que modelam itens do mundo real.

    A opinio geral de que o C++ se tornar a linguagem dominante para implementao de sistemas a partir de meados a final dos anos 90.

  • 1.16 Terminologia

    Ada

    ALU

    ambiente

    ANSI C

    assembler

    Biblioteca padro do C (C Standard

    Library)

    C

    C+ +

    carregador (loader)

    clareza

    cliente

    COBOL

    cdigo-objeto

    compilador

    computao cliente/servidor

    computao distribuda

    computador

    computador pessoal (personal computer;

    PC)

    Concurrent C

    CPU

    dados

    dependente de mquina dispositivo de

    entrada dispositivo de sada editor

    entrada padro (standard input, stdin)

    entrada/sada (input/output, I/O)

    erro padro (standard error, stderr)

    estao de trabalho (workstation)

    executar um programa

    extenso .c

    FORTRAN

    funo

    funcionalizao

    imagem executvel

    independente da mquina

    linguagem assembly (assembly language)

    linguagem de alto nvel

    linguagem de mquina

    linguagem de programao

    linguagem natural do computador

    linker

    memria

    memria primria ou memria principal

    mtodo dos blocos de construo

    (building block approach)

    multiprocessador

    multiprogramao

    multitarefa (multitasking)

    objeto

    Pascal

    plataforma de hardware

    portabilidade

    pr-processador C

    processamento de lotes (batch processing)

    programa armazenado

    programa de computador

    programa tradutor

    programao estruturada

    programao orientada a objetos

    programador de computador

    refinamento top-down em etapas

    reutilizao de software rodar um

    programa

    sada padro (standard output, stdout)

    servidor de arquivos

    software

    supercomputador

    tarefa

    tela

    tempo compartilhado (timesharing)

    terminal

    unidade aritmtica e lgica, UAL

    (arithmetic and logic unit, ALU) unidade

    de entrada unidade de memria

    unidade de processamento central, UCP

    (centralprocessing unit, CPU) unidade de

    sada unidades lgicas UNIX

  • Prticas Recomendveis de Programao

    1.1 Escreva seus programas em C de uma maneira simples e objetiva. Algumas vezes isto

    chamado KIS (do ingls "keep it simple" [que pode ser traduzido por "mantenha a simplicidade"]). No "complique" a linguagem tentando solues "estranhas".

    1.2 Leia os manuais da verso do C que estiver usando. Consulte freqentemente estes manuais para se certificar do conhecimento do rico conjunto de recursos do C e de que eles esto sendo usados corretamente.

    1.3 Seu computador e compilador so bons mestres. Se voc no estiver certo de como

    funciona um recurso do C, escreva um programa de teste que utilize esse recurso, compile e execute o programa, e veja o que acontece.

    Dicas de Portabilidade

    1.1 Em face de o C ser uma linguagem independente de hardware e amplamente disponvel, as aplicaes escritas em C podem ser executadas com pouca ou nenhuma modificao em uma grande variedade de sistemas, computacionais.

    1.2 Usar as funes da biblioteca padro do C em vez de escrever suas prprias verses similares pode melhorar a portabilidade do programa porque estas funes esto colocadas em praticamente todas as implementaes do ANSI C.

    1.3 Embora seja possvel escrever programas portteis, h muitos problemas entre as diferentes implementaes do C e os diferentes computadores que tornam a portabilidade um objetivo difcil de atingir. Simplesmente escrever programas em C no garante a portabilidade.

    Dica de Performance

    1.1 Usar as funes da biblioteca padro do C em vez de voc escrever suas prprias

    verses similares pode melhorar o desempenho do programa porque essas funes foram desenvolvidas cuidadosamente por pessoal eficiente.

  • Exerccios de Reviso

    1.1 Preencha as lacunas em cada uma das sentenas a seguir. a) A companhia que criou o fenmeno da computao pessoal foi _______________. b) O computador que validou o uso da computao pessoal no comrcio e na indstria foi o

    _______________.

    c) Os computadores processam dados sob o controle de um conjunto de instrues chamados_______________.

    d) As seis unidades lgicas do computador so_______________, _______________, _______________,_______________,_______________ e _______________.

    e) _______________ um caso especial de multiprogramao na qual os usurios tm acesso ao

    computador atravs de dispositivos chamados terminais.

    f). As trs classes de linguagens analisadas neste captulo so_______________ , ____________

    e _______________.

    g) Os programas que traduzem os programas em linguagem de alto nvel para linguagem de mquina so chamados _______________.

    h) O C muito conhecido como a linguagem de desenvolvimento do sistema operacional _______________.

    i) Este livro apresenta a verso do C chamada _______________ C, que foi padronizada

    recentemente pelo American National Standards Institute.

    j) A linguagem _______________ foi desenvolvida por Wirth para ensinar programao

    estruturada nas universidades.

    k) O Departamento de Defesa dos Estados Unidos (DOD) desenvolveu a linguagem Ada com um

    recurso chamado _______________ que permite aos programadores especificarem muitas

    atividades para serem executadas em paralelo.

    1.2 Preencha as lacunas em cada uma das sentenas a seguir sobre o ambiente C. a) Os programas em C so digitados normalmente em um computador usando um programa _______________.

    b) Em um sistema C, um programa _______________ executado automaticamente antes de a fase de traduo comear.

    c) Os dois tipos mais comuns de diretivas de um pr-processador so _______________ e _______________.

    d) O programa _______________ combina a sada do compilador com vrias funes da biblioteca para produzir uma imagem executvel.

    e) O programa _______________ transfere a imagem executvel do disco para a memria. f) Para carregar e executar o programa compilado mais recentemente em um sistema UNIX, digite _______________.

  • Respostas dos Exerccios de Reviso

    1.1 a) Apple b) IBM Personal Computer

    c) programas de computador

    d) unidade de entrada, unidade de sada, unidade de memria, unidade aritmtica e

    lgica (ALU), unidade de processamento central (CPU), unidade de armazenamento

    secundrio,

    e) tempo compartilhado (timesharing).

    f) linguagens de mquina, linguagens assembly, linguagens de alto nvel.

    g) compiladores.

    h) UNIX.

    i) ANSI.

    j) Pascal.

    k) multitarefa (multitasking).

    1.2 a) editor.

    b) pr-processador.

    c) incluindo outros arquivos a serem compilados, substituindo smbolos especiais por

    texto de programa.

    d) linker.

    e) carregador (loader).

    f) a. out.

  • Exerccios

    1.3 Classifique cada um dos seguintes itens como hardware ou software a) CPU b) compilador C c) ALU d) processador C e) unidade de entrada f) um programa editor de textos

    1.4 Por que voc poderia desejar escrever um programa em uma linguagem independente da mquina em vez de em uma linguagem dependente da mquina? Por que uma

    linguagem dependente da mquina poderia ser mais apropriada para escrever

    determinados tipos de programas?

    1.5 Programas tradutores como os assemblers e compiladores convertem programas de uma linguagem (chamada linguagem-fonte) para outra (chamada linguagem-objeto).

    Determine quais das declaraes a seguir so verdadeiras e quais as falsas:

    a) Um compilador traduz programas em linguagem de alto nvel para linguagem-objeto. b) Um assembler traduz programas em linguagem-fonte para programas em linguagem-objeto.

    c) Um compilador converte programas em linguagem-fonte para programas em linguagem-objeto.

    d) Geralmente, as linguagens de alto nvel so dependentes da mquina. e) Um programa em linguagem de mquina exige traduo antes de poder ser executado no computador.

    1.6 Preencha as lacunas em cada uma das frases a seguir: a) Dispositivos dos quais os usurios tm acesso a sistemas computacionais timesharing (tempo compartilhado) so chamados geralmente _______________ .

    b) Um programa de computador que converte programas em linguagem assembly para linguagem de mquina chamado _______________ .

    c) A unidade lgica do computador, que recebe informaes do exterior para uso desse computador, chamada _______________.

    d) O processo de instruir o computador para resolver problemas especficos chamado _______________.

    e) Que tipo de linguagem computacional usa abreviaes como as do idioma ingls para instrues em linguagem de mquina? _______________

    f) Quais so as seis unidades lgicas do computador? _______________. g) Que unidade lgica do computador envia para os vrios dispositivos as informaes que j foram processadas por ele, para que essas informaes possam ser utilizadas em

    um ambiente externo ao computador? _______________

    h) O nome geral de um programa que converte programas escritos em uma determinada linguagem computacional para linguagem de mquina _______________.

    i) Que unidade lgica do computador conserva as informaes? _______________.

    j) Que unidade lgica do computador realiza os clculos? _______________.

    k) Que unidade lgica do computador toma decises lgicas? _______________.

    1) A abreviao usada normalmente para a unidade de controle do computador

    _______________.

    m) O nvel de linguagem computacional mais conveniente para o programador escrever

  • programas fcil e rapidamente _______________.

    n) A linguagem computacional destinada aos negcios mais utilizada atualmente

    _______________.

    o) A nica linguagem que um computador pode entender diretamente

    _______________ chamada do computador.

    p) Que unidade lgica do computador coordena as atividades de todas as outras

    unidades lgicas? _______________

    1.7 Diga se cada uma das declaraes seguintes verdadeira ou falsa. Explique suas respostas.

    a) As linguagens de mquina so geralmente dependentes do equipamento (mquina) onde so executadas.

    b) O timesharing (tempo compartilhado) faz com que vrios usurios realmente executem programas simultaneamente em um computador.

    c) Como outras linguagens de alto nvel, o C geralmente considerado independente da mquina.

    1.8 Analise o significado de cada um dos seguintes nomes do ambiente UNIX: a) stdin b) stdout c) stderr

    1.9 Qual o principal recurso fornecido pelo Concurrent C que no est disponvel no ANSI C?

    1.10 Por que atualmente est sendo dedicada tanta ateno programao orientada a objetos em geral e ao C++ em particular?

  • Leitura Recomendada

    (An90) ANSI, American National Standards for Information Systems

    Programming Language C (ANSI document ANSI/ISO 9899: 1990), New York, NY:

    American National Standards Institute, 1990.

    Este o documento que define o ANSI C. Ele est disponvel para venda no American

    National Standards Institute, 1430 Broadway, New York, New York 10018.

    (De90) Deitei, H. M. Operating Systems (Second Edition), Reading, MA: Addison-

    Wesley Publishing Company, 1990. Um livro-texto para o curso tradicional de cincia da computao em sistemas

    operacionais. Os Captulos 4 e 5 apresentam uma ampla anlise de programao

    simultnea (concorrente).

    (Ge89) Gehani, N.,eW. D. Roome, The Concurrent C Programming Language,

    Summit, NJ: Silicon Press, 1989.

    Este o livro que define o Concurrent C um superconjunto da linguagem C que

    permite aos programadores especificarem a execuo paralela de vrias atividades.

    Inclui tambm um resumo do Concurrent C + + .

    (Ja89) Jaeschke, R., Portability and the C Language, Indianapolis, IN: Hayden

    Books, 1989.

    Este livro analisa a criao de programas portteis em C. Jaeschke trabalhou nos

    comits dos padres ANSI e ISO.

    (Ke88) Kernighan, B. W. e D. M. Ritchie, The C Programming Language (Second

    Edition), Englewood Cliffs, NJ: Prentice Hall, 1988.

    Este livro o clssico no assunto. Ele amplamente usado em cursos e seminrios de C

    para programadores experientes e inclui um excelente manual de referncia. Ritchie o

    autor da linguagem C e um dos criadores do sistema operacional UNIX.

    (P192) Plauger, P.J., The Standard C Library, Englewood Cliffs, NJ: Prentice

    Hall, 1992.

    Define e demonstra o uso de funes da biblioteca padro do C. Plauger trabalhou como

    chefe do subcomit da biblioteca, no comit que desenvolveu o padro ANSI C. e

    trabalha como coordenador do comit ISO no que diz respeito ao C.

    (Ra90) Rabinowitz, H.,eC. Schaap, Portable C, Englewood Cliffs, NJ: Prentice

    Hall, 1990.

    Este livro foi desenvolvido para um curso sobre portabilidade realizado na AT&T Bell

    Laboratories. Rabinowitz est no Artificial Intelligence Laboratory da NYNEX

    Corporation, e Schaap um diretor da Delft Consulting Corporation.

    (Ri78) Ritchie, D. M.; S. C. Johnson; M. E. Lesk; e B. W. Kernighan, "UNIX

    Time-Sharing System: The C Programming Language", The Bell System Technical

    Journal, Vol. 57, No. 6, Part 2, July-August 1978, pp. 1991-2019.

    Este um dos artigos clssicos que apresentam a linguagem C. Ele foi publicado em

    uma edio especial do Bell System Technical Journal dedicado ao "UNIX Time-

    Sharing System".

  • (Ri84) Ritchie, D. M., "The UNIX System: The Evolution of the UNIX Time-

    Sharing System", AT&T Bell Laboratories Technical Journal, Vol. 63, No. 8, Part 2,

    October 1984, pp. 1577-1593.

    Um artigo clssico sobre o sistema operacional UNIX. Este artigo foi publicado em uma

    edio especial do Bell System Technical Journal inteiramente dedicado ao "The UNIX

    System".

    (Ro84) Rosler, L., "The UNIX System: The Evolution of C Past and Future',

    AT&T Bell Laboratories Technical Journal, Vol. 63, No. 8. Part 2, October 1984,

    pp. 1685-1699.

    Um excelente artigo para vir aps o (Ri78) para o leitor interessado em conhecer a

    histria do C e as razes dos esforos para padronizao do ANSI C. Foi publicado em

    uma edio especial do Bell System Technical Journal inteiramente dedicado ao "The

    UNIX System".

    (St84) Stroustrup, B., "The UNIX System: Data Abstraction in C", AT&T Bell

    Laboratories Technical Journal, Vol. 63, No. 8, Part 2, October 1984, pp. 1701-

    1732.

    O artigo clssico que apresenta o C++ . Foi publicado em uma edio especial do Bell

    System Technical Journal inteiramente dedicado ao "The UNIX System".

    (St91) Stroustrup, B., The C+ +Programming Language (Second Edition), Reading,

    MA: Addison-Wesley Series in Computer Science, 1991.

    Este livro a referncia que define o C+ +, um superconjunto do C que inclui vrios

    melhoramentos em relao ao C, especialmente recursos para programao orientada a

    objetos. Stroustrup desenvolveu o C+ + na AT&T Bell Laboratories.

    Tondo, C. L., e S. E. Gimpel, The C Answer Book, Englewood Cliffs, NJ: Prentice

    Hall, 1989.

    Este livro mpar fornece respostas aos exerccios em Kernighan e Ritchie (Ke88). Os

    autores demonstraram exemplos de estilos de programao e demonstraram criatividade

    em seus mtodos de resoluo dos problemas e decises de projeto. Tondo est na IBM

    Corporation e na Nova University em Ft. Lauderdale, Flrida. Gimpel um consultor.

  • 2 Introduo

    Programao em C

    Objetivos

    Ficar em condies de escrever programas computacionais simples em C. Ficar em condies de usar instrues simples de entrada e sada. Familiarizar-se com os tipos fundamentais de dados. Entender os conceitos sobre a memria do computador. Ficar em condies de usar os operadores aritmticos. Entender a precedncia de operadores aritmticos. Ficar em condies de escrever instrues simples para tomada de decises.

    O que h em um nome? Aquilo que chamamos de rosa / Com outro nome teria o

    mesmo doce aroma.

    William Shakespeare

    Romeu e Julieta

    Eu fiz apenas o curso regular ... os diferentes ramos da aritmtica Ambio,

    Desordem, Deturpao e Escrnio.

    Lewis Carroll

    Os precedentes estabelecidos deliberadamente por homens sbios merecem muito

    respeito.

    Henry Clay

  • Sumrio

    2.1 Introduo 2.2 Um Programa Simples em C: Imprimir uma Linha de Texto 2.3 Outro Programa Simples em C: Somar Dois Nmeros Inteiros 2.4 Conceitos sobre Memria 2.5 Aritmtica em C 2.6 Tomada de Decises: Operadores de Igualdade e Relacionais

    Resumo Terminologia Erros Comuns de Programao Prticas

    Recomendveis de Programao Dica de Portabilidade Exerccios de Reviso

    Respostas dos Exerccios de Reviso Exerccios

  • 2.1 Introduo

    A linguagem C facilita o emprego de um mtodo disciplinado e estruturado

    para o projeto de programas computacionais. Neste captulo apresentamos a

    programao em C e mostramos vrios exemplos que ilustram muitos recursos

    importantes da linguagem. As instrues de cada exemplo so analisadas me-

    ticulosamente, uma a uma. Nos Captulos 3 e 4 apresentamos uma introduo

    programao estruturada em C. Usamos ento o mtodo estruturado ao longo de

    todo o restante do texto.

  • 2.2 Um Programa Simples em C: Imprimir uma Linha de Texto

    O C usa algumas notaes que podem parecer estranhas s pessoas que no

    programaram computadores. Comeamos examinando um programa simples em C.

    Nosso primeiro exemplo imprime uma linha de texto. O programa e a tela de sada

    so mostrados na Fig. 2.1.

    Apesar de este programa ser muito simples, ele ilustra muitos aspectos

    importantes da linguagem C. Agora vamos examinar detalhadamente cada linha do

    programa. A linha

    /* Primeiro programa em C */

    comea com /* e termina com */ indicando que um comentrio. Os programadores

    inserem comentrios para documentar os programas e melhorar sua legibilidade. Os

    comentrios no fazem com que o computador realize qualquer ao quando o

    programa executado. Os comentrios so ignorados pelo compilador C e no

    fazem com que seja gerado cdigo-objeto algum. O comentrio Primeiro programa

    em C descreve simplesmente o objetivo do programa. Os comentrios tambm

    servem de auxlio para outras pessoas lerem e entenderem seu programa, mas muitos

    comentrios podem tornar um programa difcil de ler.

    1. /* Primeiro programa em C */ 2. main( ) 3. { 4. printf ("Bem-vindo ao C!\n"); 5. }

    Bem-vindo ao C!

    Fig. 2.1 Um programa de impresso de texto.

    Erro comun de programao 2.1

    Esquecer de encerrar um comentrio com */.

    Erro comun de programao 2.2

    Comear um comentrio com os caracteres */ ou terminar com /*

  • A linha

    main( )

    uma parte de todos os programas em C. Os parnteses aps a palavra main

    indicam que main um bloco de construo do programa chamado funo. Os

    programas em C contm uma ou mais funes, e uma delas deve ser main. Todos os

    programas em C comeam a ser executados pela funo main.

    Boas prticas de programao 2.1

    Todas as funes devem ser precedidas por um comentrio

    descrevendo seu objetivo.

    A chave esquerda, {, deve comear o corpo (ou o texto propriamente dito) de

    todas as funes. Uma chave direita equivalente deve terminar cada funo. Este par

    de chaves e a parte do programa entre elas tambm chamado um bloco. O bloco

    uma unidade importante dos programas em C.

    A linha

    printf("Bem-vindo ao C!\n");

    manda o computador realizar uma ao, especificamente imprimir na tela a string de

    caracteres limitada pelas aspas. Algumas vezes, uma string chamada uma string de

    caracteres, uma mensagem ou um valor literal. A linha inteira, incluindo printf,

    seus argumentos dentro dos parnteses e o ponto-e-vrgula (;), chamada uma

    instruo. Todas as instrues devem terminar com um ponto-e-vrgula (tambm

    conhecido como marca de fim de instruo). Quando a instruo printf anterior

    executada, a mensagem Bem-vindo ao C! impressa na tela. Normalmente os

    caracteres so impressos exatamente como aparecem entre as aspas duplas na

    instruo printf. Observe que os caracteres \n no so impressos na tela. A barra

    invertida (ou backslash, \) chamada caractere de escape. Ele indica que printf

    deve fazer algo diferente do normal. Ao encontrar a barra invertida, printf verifica o

    prximo caractere e o combina com a barra invertida para formar uma seqncia de

    escape. A seqncia de escape \n significa nova linha e faz com que o cursor se

    posicione no incio da nova linha na tela. Algumas outras seqncias de escape

    comuns esto listadas na Fig. 2.2. A funo printf uma das muitas funes

    fornecidas na C Standard Library (Biblioteca Padro do C, listada no Apndice A).

  • Sequencia de escape

    Descrio

    \n

    Nova linha. Posiciona o cursor no inicio da nova linha.

    \t Tabulao horizontal. Move o cursor para a prxima marca

    parada de tabulao

    \r Carriage return (CR). Posiciona o cursor no inicio da linha

    atual; no avana para a prxima linha.

    \a Alerta. Faz soar a campainha (Bell), do sistema.

    \\ Barra invertida (backslash). Imprime um caractere de barra

    invertida em uma instruo printf.

    \ Aspas duplas. Imprime um caractere de aspas duplas em uma

    instruo printf.

    Fig 2.2 Algumas seqncias comuns de escape

    As duas ltimas seqncias de escape podem parecer estranhas. Como a

    barra invertida tem um significado especial para printf, i.e., printf a reconhece

    como um caractere de escape em vez de um caractere a ser impresso, usamos duas

    barras invertidas (\ \) para indicar que uma nica barra invertida deve ser impressa.

    Imprimir aspas duplas tambm constitui um problema para printf porque esta

    instruo supe normalmente que as aspas duplas indicam o limite de uma string e

    que as aspas duplas em si no devem ser realmente impressas. Usando a seqncia

    de escape \" dizemos a printf para imprimir aspas duplas.

    A chave direita, }, indica que o fim de main foi alcanado.

    Erro comun de programao 2.3

    Em um programa, digitar como print o nome da funo de sada

    printf.

    Dissemos que printf faz com que o computador realize uma ao. Durante a

    execuo de qualquer programa, so realizadas vrias aes e o programa toma

    decises. No final deste captulo, analisaremos a tomada de decises. No Captulo 3,

    explicaremos mais este modelo ao/deciso de programao.

    E importante observar que funes da biblioteca padro como printf e scanf

    no fazem parte da linguagem de programao C. Dessa forma, o compilador no

    pode encontrar um erro de digitao em printf e scanf, por exemplo. Quando o

    compilador compila uma instruo printf, ele simplesmente abre espao no

    programa objeto para uma "chamada" funo da biblioteca. Mas o compilador no

    sabe onde as funes da biblioteca se encontram. O linker sabe. Assim, ao ser

    executado, o linker localiza as funes da biblioteca e insere as chamadas adequadas

    a elas no programa objeto. Agora o programa objeto est "completo" e pronto para

    ser executado. Na realidade, o programa linkeditado chamado freqentemente de

    um executvel. Se o nome da funo estiver errado, o linker que localizar o erro,

    porque ele no ser capaz de encontrar nas bibliotecas qualquer funo conhecida

    que seja equivalente ao nome existente no programa cm C.

  • Boa prtica de programao 2.2

    O ltimo caractere impresso por uma funo que realiza qualquer

    impresso deve ser o de nova linha (\n). Isto assegura que a funo

    deixar o cursor da tela posicionado no incio de uma nova linha.

    Procedimentos desta natureza estimulam a reutilizao do software

    um objetivo principal em ambientes de desenvolvimento de software.

    Boa prtica de programao 2.3

    Faa o recuo de um nvel (trs espaos) em todo o texto (corpo) de

    cada funo dentro das chaves que a definem. Isto ressalta a estrutura

    funcional dos programas e ajuda a torn-los mais fceis de ler.

    Boa prtica de programao 2.4

    Determine uma conveno para o tamanho de recuo preferido e ento

    aplique-a uniformemente. A tecla de tabulao (tab) pode ser usada

    para criar recuos, mas as paradas de tabulao podem variar.

    Recomendamos usar paradas de tabulao de 1/4 da polegada

    (aproximadamente 6 mm) ou recuar trs espaos para cada nvel de

    recuo.

    A funo printf pode imprimir Bem-vindo ao C! de vrias maneiras. Por

    exemplo, o programa da Fig. 2.3 produz a mesma sada do programa da Fig. 2.1. Isto

    acontece porque cada printf reinicia a impresso onde o printf anterior termina de

    imprimir. O primeiro printf imprime Bem-vindo seguido de um espao, e o

    segundo printf comea a imprimir imediatamente aps o espao.

    Um printf pode imprimir vrias linhas usando caracteres de nova linha, como

    mostra a Fig. 2.4. Cada vez que a seqncia de escape \n (nova linha) encontrada,

    printf vai para o incio da linha seguinte.

    1. /* Imprimindo em uma linha com duas instrues printf */ 2. main( ) 3. { 4. printf /"Bem-vindo"); 5. printf ("ao C!\n"); 6. }

    Bem-vindo ao C !

    Fig. 2.3 Imprimindo uma linha com instrues printf separadas.

  • 1. /* Imprimindo varias linhas com um nico printf */ 2. main() { 3. printf ("Bem-vindo\nao\nC!\n") 4. } 5. /* Imprimindo varias linhas com um nico printf */

    Bem-vindo

    ao

    C!

    Fig. 2.4 Imprimindo vrias linhas com uma nica instruo printf.

  • 2.3 Outro Programa Simples em C: Somar Dois Nmeros

    Inteiros

    Nosso prximo programa usa a funo scanf da biblioteca padro para obter

    dois nmeros inteiros digitados pelo usurio, calcular a soma desses valores e

    imprimir o resultado usando printf. O programa e sua sada so mostrados na Fig.

    2.5.

    O comentrio /* Programa de soma */ indica o objetivo do programa. A

    linha

    #include

    uma diretiva para o pr-processador C. As linhas que comeam com # so

    processadas pelo pr-processador antes de o programa ser compilado. Esta linha em

    particular diz ao pr-processador para incluir o contedo do arquivo de cabealho de

    entrada/sada padro {standard input/output headerfile, stdio.h). Esse arquivo de

    cabealho (header file, chamado s vezes de arquivo de header) contm informaes

    e instrues usadas pelo compilador ao compilar funes de entrada/sada da

    biblioteca padro como printf. O arquivo de cabealho tambm contm informaes

    que ajudam o compilador a determinar se as chamadas s funes da biblioteca

    foram escritas corretamente. Explicaremos mais detalhadamente no Captulo 5 o

    contedo dos arquivos de cabealho.

    Boa prtica de programao 2.5

    Embora a incluso de seja opcional, ela deve ser feita em

    todos os programas em C que usam funes de entrada/sada da

    biblioteca padro. Isto ajuda o compiladora localizar os erros na fase

    de compilao de seu programa em vez de na fase de execuo

    (quando normalmente os erros so mais difceis de corrigir).

    1. /* Programa de soma */ 2. #include 3. main( ) { 4. int inteirol, inteiro2, soma; /* declarao */ 5. printf("Entre com o primeiro inteiro\n"); /* prompt */ 6. scanf("%d", &inteirol); /* le um inteiro */ 7. printf("Entre com o segundo inteiro\n"); /* prompt */ 8. scanf("%d", &inteiro2); /* le um inteiro */ 9. soma = inteirol + inteiro2; /* atribui soma */ 10. printf("A soma e %d/n", soma); /* imprime soma */ 11. return 0; /* indica que o programa foi bem-sucedido */ 12. }

    Entre com o primeiro inteiro 45

    Entre com o segundo inteiro 72

    A soma e 117

    Fig. 2.5 Um programa de soma.

  • Como mencionamos anteriormente, a execuo de todos os programas

    comea com main. A chave esquerda { marca o incio do corpo de main e a chave

    direita correspondente marca o fim de main. A linha

    int inteirol, inteiro2, soma;

    uma declarao. As expresses inteirol, inteiro2 e soma so os nomes das

    variveis. Uma varivel uma posio na memria onde um valor pode ser

    armazenado para ser utilizado por um programa. Esta declarao especifica que

    inteirol, inteiro2 e soma so do tipo int o que significa que essas variveis contero

    valores inteiros, i.e., nmeros inteiros como 7, 11, 0, 31914 e similares. Todas as

    variveis devem ser declaradas com um nome e um tipo de dado imediatamente aps

    a chave esquerda que inicia o corpo de main antes que possam ser usadas em um

    programa. Em C, h outros tipos de dados alm de int. Muitas variveis do mesmo

    tipo podem estar presentes em uma declarao. Poderamos ter escrito trs

    declaraes, uma para cada varivel, mas a declarao anterior mais concisa.

    Boa prtica de programao 2.6

    Coloque um espao depois de cada vrgula para tornar o programa

    mais legvel.

    Um nome de varivel em C qualquer identificador vlido. Um identificador

    uma srie de caracteres que consistem em letras, dgitos e sublinhados (_) que no

    comea com um dgito. Um identificador pode ter qualquer comprimento, mas

    somente os 31 primeiros caracteres sero reconhecidos pelos compiladores C, de

    acordo com o padro ANSI C. O C faz distino entre letras maisculas e

    minsculas (sensvel a caixa alta/baixa ou case sensitive) como as letras

    maisculas e minsculas so diferentes em C, a1 e A1 so identificadores diferentes.

    Erro comun de programao 2.4

    Usar uma letra maiscula onde devia ser usada uma letra minscula

    (por exemplo, digitar Main em vez de main).

    Dicas de portabilidade 2.1

    Use identificadores com 31 caracteres ou menos. Isto ajuda a

    assegurar a portabilidade e pode evitar alguns erros sutis de

    programao.

    Boa prtica de programao 2.7

    Escolher nomes significativos para as variveis ajuda a tornar um

    programa auto-explicativo, i.e., menos comentrios se faro

    necessrios.

  • Boa prtica de programao 2.8

    A primeira letra de um identificador usado como nome de varivel

    simples deve ser uma letra minscula. Mais adiante no texto

    atribuiremos um significado especial aos identificadores que

    comeam com uma letra maiscula e aos identificadores que usam

    todas as letras maisculas.

    Boa prtica de programao 2.9

    Nomes de variveis com mais de uma palavra podem ajudar a tornar

    o programa mais legvel. Evite juntar palavras separadas como em

    totalpagamentos. Em vez disso, separe as palavras com sublinhados

    como em total_pagamen tos ou, se voc desejar juntar as palavras,

    comece cada palavra depois da primeira com uma letra maiscula

    como em totalPagamentos.

    As declaraes devem ser colocadas depois da chave esquerda e antes de

    qualquer instruo executvel. Por exemplo, no programa da Fig. 2.5, inserir a

    declarao aps o primeiro printf causaria um erro de sintaxe. causado um erro de

    sintaxe quando o compilador no reconhece uma instruo. Normalmente o

    compilador emite uma mensagem de erro para ajudar o programador a localizar e

    corrigir a instruo incorreta. Os erros de sintaxe so transgresses s regras da

    linguagem. Eles tambm so chamados de erros de compilao ou erros em tempo

    de compilao.

    Erro comun de programao 2.5

    Colocar declaraes de variveis entre instrues executveis.

    Boa prtica de programao 2.10

    Separe as declaraes das instrues executveis em uma funo por

    uma linha em branco, para ressaltar onde terminam as declaraes e

    comeam as instrues.

    A instruo

    printf("Entre com o primeiro inteiro\n");

    imprime a expresso Entre com o primeiro inteiro na tela e se posiciona no incio

    da prxima linha. Esta mensagem chamada um prompt porque diz ao usurio para

    realizar uma ao especfica.

    A instruo

    scanf("%d",&inteirol);

  • usa scanf para obter um valor fornecido pelo usurio. A funo scanf recebe a

    entrada do dispositivo padro, que normalmente o teclado. Esta funo tem dois

    argumentos "%d" e &inteirol. O primeiro argumento, a string de controle de

    formato, indica o tipo de dado que deve ser fornecido pelo usurio. O especificador

    de converso %d indica que o dado deve ser um inteiro (a letra d significa "decimal

    integer", o que significa em portugus inteiro do sistema decimal, ou seja, base 10).

    Nesse contexto, o % considerado por scanf (e por printf, como veremos)

    um caractere de escape (como o \) e a combinao %d uma seqncia de escape

    (como \n). O segundo argumento de scanf comea com um e-comercial (&,

    ampersand, em ingls) chamado em C de operador de endereo seguido do

    nome da varivel. O e-comercial, quando combinado com o nome da varivel, diz a

    scanf o local na memria onde a varivel inteirol est armazenada. O computador

    ento armazena o valor de inteirol naquele local. Freqentemente, o uso do e-

    comercial (&) causa confuso para os programadores iniciantes ou para as pessoas

    que programam em outras linguagens que no exigem essa notao. Por ora, basta

    lembrar-se de preceder cada varivel em todas as instrues scanf com um e-co-

    mercial. Algumas excees a essa regra so analisadas nos Captulos 6 e 7. O

    significado real do uso do e-comercial se tornar claro depois de estudarmos

    ponteiros no Captulo 7.

    Ao executar scanf, o computador espera o usurio fornecer um valor para a

    varivel inteirol. O usurio responde digitando um inteiro e ento aperta a tecla

    return (algumas vezes chamada tecla enter) para enviar o nmero ao computador. A

    seguir, o computador atribui este nmero, ou valor, varivel inteirol. Quaisquer

    referncias subseqentes a inteirol no programa usaro esse mesmo valor. As

    funes printf e scanf facilitam a interao entre o usurio e o computador. Por pa-

    recer um dilogo, essa interao chamada freqentemente de computao

    conversacional ou computao interativa.

    A instruo

    printf("Entre com o segundo inteiro\n");

    imprime a mensagem Entre com o segundo inteiro na tela e ento posiciona o

    cursor no incio da prxima linha. Este printf tambm faz com que o usurio realize

    uma ao.

    A instruo

    scanf("%d", &inteiro2);

    obtm o valor fornecido pelo usurio para a varivel inteiro2. A instruo de

    atribuio

    soma = inteirol + inteiro2;

    calcula o valor da soma das variveis inteirol e inteiro2, alm de atribuir o resultado

    varivel soma usando o operador de atribuio =. A instruo lida como "soma

    recebe o valor de inteirol + inteiro2". A maioria dos clculos executada em

  • instrues de atribuio. Os operadores = e + so chamados operadores binrios

    porque cada um deles tem dois operandos. No caso do operador +, os dois

    operandos so inteirol e inteiro2. No caso do operador =, os dois operandos so

    soma e o valor da expresso inteirol + inteiro2 .

    Boa prtica de programao 2.11

    Coloque espaos em ambos os lados de um operador binrio. Isto faz

    com que o operador seja ressaltado e torna o programa mais legvel.

    Erro comun de programao 2.6

    O clculo de uma instruo de atribuio deve estar no lado direito

    do operador =. um erro de sintaxe colocar o clculo no lado

    esquerdo de um operador de atribuio.

    A instruo

    printf("A soma e %d\n", soma);

    usa a funo printf para imprimir na tela a expresso A soma e seguida do valor

    numrico de soma. Este printf tem dois argumentos, "A soma e %d\n" e soma. O

    primeiro argumento a string de controle de formato. Ela contm alguns caracteres

    literais que devem ser exibidos e o especificador de converso % indicando que um

    inteiro ser impresso. O segundo argumento especifica o valor a ser impresso.

    Observe que o especificador de converso para um inteiro o mesmo tanto em

    printf como em scanf. Este o caso da maioria dos tipos de dados em C.

    Os clculos tambm podem ser realizados dentro de instrues printf.

    Poderamos ter combinado as duas instrues anteriores na instruo

    printf("A soma e %d\n", inteirol + inteiro2);

    A instruo

    return 0;

    passa o valor 0 de volta para o ambiente do sistema operacional no qual o programa

    est sendo executado. Isto indica para o sistema operacional que o programa foi

    executado satisfatoriamente. Para obter informaes sobre como emitir um relatrio

    com alguma espcie de falha de execuo do programa, veja os manuais especficos

    de seu ambiente de sistema operacional. A chave direita. }, indica que o fim da

    funo main foi alcanado.

    Erro comun de programao 2.7

    Esquecer-se de uma ou de ambas as aspas duplas em torno de uma

    string de controle de formato de printf ou scanf.

  • Erro comun de programao 2.8

    Em uma especificao de converso, esquecer-se do % na string de

    controle de formato de printf ou scanf

    Erro comun de programao 2.9

    Colocar uma seqncia de escape como \n fora da string de controle

    de formato de printf ou scanf.

    Erro comun de programao 2.10

    Esquecer-se de incluir em uma instruo printf que contm

    especificadores de converso as expresses cujos valores devem ser

    impressos.

    Erro comun de programao 2.11

    No fornecer um especificador de converso para uma instruo

    printf, quando tal exigido para imprimir uma expresso.

    Erro comun de programao 2.12

    Colocar, dentro de uma string de controle de formato, a vrgula que

    deve separar a string de controle de formato das expresses a serem

    impressas.

    Erro comun de programao 2.13

    Esquecer-se de preceder uma varivel, em uma instruo scanf, de

    um e-comercial quando essa varivel deve obrigatoriamente ser

    precedida por ele.

    Em muitos sistemas, esse erro em tempo de execuo chamado "falha de

    segmentao" ou "violao de acesso". Tal erro ocorre quando o programa de um

    usurio tenta ter acesso a uma parte da memria do computador qual no tem

    privilgios de acesso. A causa exata desse erro ser explicada no Captulo 7.

    Erro comun de programao 2.14

    Preceder uma varivel, includa em uma instruo printf, de um e-

    comercial quando obrigatoriamente aquela varivel no deveria ser

    precedida por ele.

    No Captulo 7, estudaremos ponteiros e veremos casos nos quais desejaremos

    um e-comercial preceder um nome de varivel para imprimir seu endereo.

    Entretanto, nos vrios captulos que se seguem, as instrues printf no devem

    incluir e-comerciais.

  • 2.4 Conceitos sobre Memria

    Nomes de variveis como inteirol, inteiro2 e soma correspondem realmente

    a locais na memria do computador. Todas as variveis possuem um nome, um tipo

    e um valor. No