Paul J. Deitel E Harvey M. Deitel - UFSC

Transcription

ComoprogramarEmCPaul J. Deitel e Harvey M. Deitel

ÍndiceCapítulo 01 – Conceitos da ComputaçãoCapítulo 02 – Introdução à programação em CCapítulo 03 – Desenvolvimento da Programação EstruturadaCapítulo 04 – Controle do programaCapítulo 05 – FunçõesCapítulo 06 – ArraysCapítulo 07 – PonteirosCapítulo 08 – Caracteres e stringsCapítulo 09 – Formatação de Entrada/SaídaCapítulo 10 – Estruturas, Uniões, Manipulações de Bits e EnumeraçõesCapítulo 11 – Processamento de arquivosCapítulo 12 – Estrutura de dadosCapítulo 13 – O pré-processadorApêndice A – Biblioteca-padrãoApêndice B – Precedência de Operadores e AssociatividadeApêndice C – Conjunto de Caracteres ASCIIApêndice D – Sistemas de numeração

1Conceitos de ComputaçãoObjetivos Entender os conceitos básicos do computador.Familiarizar-se com os diferentes tipos de linguagens de programação.Familiarizar-se com a história da linguagem de programação C.Conhecer Biblioteca Padrão da linguagem C (C Standard Library).Entender o ambiente e desenvolvimento de programas C.Compreender por que é apropriado aprender C no primeiro curso deprogramação.Compreender por que a linguagem C fornece uma base para estudos futurosde programação em geral e em particular para o C .As coisas são sempre melhores no começo.Blaise PascalGrandes pensamentos exigem grandes linguagens.AristófanesNossa vida é desperdiçada em detalhes. Simplifique, simplifique.Henry Thoreau

Sumário1.1Introdução1.2O que É um Computador?1.3Organização dos Computadores1.4Processamento em Lotes (Batch Processing), Multiprogramação eTempo Compartilha do (Timesharing)1.5Computação Pessoal, Computação Distribuída e ComputaçãoCliente/Servidor1.6Linguagens de Máquina, Linguagens Assembly e Linguagens de Altonível.1.7A História do C1.8A Biblioteca Padrão (Standard Library) do C1.9Outras Linguagens de Alto Nível1.10Programação Estruturada1.11Os Fundamentos do Ambiente C1.12Observações Gerais sobre o C e Este Livro1.13Concurrent C1.14Programação Orientada a Objetos e C Resumo - Terminologia - Práticas Recomendáveis de Programação - Dicas dePortabilidade - Dicas de Performance - Exercícios de Revisão - Respostas dosExercícios de Revisão - Exercícios - Leitura Recomendada

1.1 IntroduçãoBem-vindo ao C! Trabalhamos muito duro para criar o que sinceramenteesperamos ser uma maneira instrutiva e divertida de aprendizado. O C é uma linguagemdifícil, normalmente ensinada apenas para os programadores experientes, e, sendoassim, este livro não tem similar entre os livros-texto de C:Este livro é aconselhável para pessoas interessadas em aspectos técnicos e compouca ou nenhuma experiência de programação.Este livro também é aconselhável para programadores experientes que desejamum tratamento profundo e rigoroso da linguagem.Como um livro pode despertar o interesse de ambos os grupos? A resposta é queo tema central do livro coloca em destaque a obtenção de clareza nos programas atravésde técnicas comprovadas de programação estruturada. Quem não é programadoraprenderá a programar "certo" desde o início. Tentamos escrever de uma maneira clarae simples. O livro contém muitas ilustrações. Talvez o aspecto mais importante seja ode que o livro apresenta um grande número de programas práticos em C e mostra assaídas produzidas quando eles forem executados em um computador.Os quatro primeiros capítulos apresentam os fundamentos da computação, daprogramação de computadores e da linguagem de programação C. As análises estãoinseridas em uma introdução à programação de computadores usando um métodoestruturado. Os principiantes em programação que fizeram nossos cursos nosinformaram que o material desses capítulos apresenta uma base sólida para as técnicasmais avançadas da linguagem C. Normalmente os programadores experientes lêemrapidamente os quatro primeiros capítulos e então descobrem que o modo com o qual oassunto é tratado no Capítulo 5 é rigoroso e fascinante. Eles gostam particularmente damaneira detalhada como são analisados os ponteiros, strings, arquivos e estruturas dedados nos capítulos que se seguem.Muitos programadores experientes nos disseram que aprovam nosso modo deapresentar a programação estruturada. Freqüentemente eles costumam programar emuma linguagem estruturada como o Pascal, mas, por nunca terem sido apresentadosformalmente à programação estruturada, não escrevem o melhor código possível. Àmedida que aprenderem C com este livro, eles poderão aprimorar seu estilo deprogramação. Dessa forma, quer você seja um principiante, quer seja um programadorexperiente, há muito aqui para informá-lo, diverti-lo e estimulá-lo.A maioria das pessoas está familiarizada com as coisas excitantes que oscomputadores fazem. Neste curso, você aprenderá a mandar os computadores fazeremessas coisas. É o software (i.e., as instruções escritas para mandar o computador realizarações e tomar decisões) que controla os computadores (chamados freqüentemente dehardware), e uma das linguagens de desenvolvimento de software mais popularesatualmente é o C. Este texto fornece uma introdução à programação em ANSI C, aversão padronizada em 1989 tanto nos EUA, através do American National StandardsInstitute (ANSI), como em todo o mundo, através da International StandardsOrganization (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 computaçãodiminuíram drasticamente devido aos excitantes desenvolvimentos em tecnologia desoftware e hardware. Os computadores que podem ter ocupado salas enormes e custadomilhões de dólares 25 anos atrás agora podem estar gravados na superfície de chips desilício menores do que uma unha e que talvez custem alguns dólares cada. Ironicamente,o silício é um dos materiais mais abundantes na Terra — ele é um componente da areiacomum. A tecnologia do chip de silício tornou a computação tão econômica queaproximadamente 150 milhões de computadores de uso geral estão sendo empregadosem todo o mundo, ajudando as pessoas no comércio, indústria, governo e em suas vidasparticulares. Este número pode dobrar facilmente em alguns anos.A linguagem C pode ser ensinada em um primeiro curso de programação, opúblico pretendido por este livro? Pensamos que sim. Dois anos atrás, aceitamos estedesafio quando o Pascal estava solida mente estabelecido como a linguagem dosprimeiros cursos de ciência da computação. Escrevemos Como Programar em C, aprimeira edição deste livro. Centenas de universidades em todo o mundo usaram ComoProgramar em C. Cursos baseados nesse livro se provaram tão eficientes quanto seuspredecessores baseados no Pascal. Não foram observadas diferenças significativas,exceto que os alunos estavam mais motivados por saberem que era mais provável usar oC do que o Pascal em seus cursos mais avançados e em suas carreiras. Os alunos queaprendem o C também sabem que estarão mais preparados para aprender o C maisrapidamente. O C é um superconjunto da linguagem C que se destina aosprogramadores que desejam escrever programas orientados a objetos. Falaremos maissobre o C na Seção 1.14.Na realidade, o C está recebendo tanto interesse que incluímos umaintrodução detalhada ao C e programação orientada a objetos. Um fenômenointeressante que ocorre no campo das linguagens de programação é que atualmentemuitos dos revendedores principais simplesmente comercializam um produto quecombina C/C , em vez de oferecer produtos separados. Isto dá aos usuários acapacidade de continuar programando em C se desejarem e depois migraremgradualmente para o C quando acharem apropriado.Agora você já sabe de tudo! Você está prestes a iniciar uma jornada fascinante egratificadora. À medida que for em frente, se você desejar entrar em contato conosco,envie-nos um e-mail para deitel@world.std.com pela Internet. Envidaremos todos osesforços para oferecer uma resposta rápida. Boa sorte!

1.2 O que É um Computador?Um computador é um dispositivo capaz de realizar cálculos e tomar decisõeslógicas com uma velocidade milhões ou mesmo bilhões de vezes mais rápida do que osseres humanos. Por exemplo, muitos dos computadores pessoais de hoje podem realizardezenas de milhões de operações aritméticas por segundo. Uma pessoa utilizando umacalculadora de mesa poderia levar décadas para realizar o mesmo número de operaçõesque um poderoso computador pessoal pode realizar em segundos. (Aspectos parareflexão: Como você saberia se a pessoa fez as operações corretamente? Como vocêsaberia se o computador fez as operações corretamente?) Os mais rápidossupercomputadores de hoje podem realizar centenas de bilhões de operações porsegundo — quase tantas operações quanto centenas de pessoas poderiam realizar em umano! E os computadores que permitem trilhões de instruções por segundo já seencontram em funcionamento em laboratórios de pesquisa.Os computadores processam dados sob o controle de conjuntos de instruçõeschamados programas de computador. Estes programas conduzem o computador atravésde um conjunto ordenado de ações especificado por pessoas chamadas programadoresde computador.Os vários dispositivos (como teclado, tela, discos, memória e unidades deprocessamento) que constituem um sistema computacional são chamados de hardware.Os programas executados em um computador são chamados de software. O custo dohardware diminuiu drasticamente nos últimos anos, chegando ao ponto de oscomputadores pessoais se tornarem uma utilidade. Infelizmente, o custo do desenvolvimento de software tem crescido constantemente, à medida que os programadoresdesenvolvem aplicações cada vez mais poderosas e complexas, sem serem capazes defazer as melhorias correspondentes na tecnologia necessária para esse desenvolvimento.Neste livro você aprenderá métodos de desenvolvimento de software que podem reduzirsubstancialmente seus custos e acelerar o processo de desenvolvimento de aplicaçõespoderosas e de alto nível. Estes métodos incluem programação estruturada,refinamento passo a passo top-down {descendente), funcionalização e, finalmente, programação orientada a objetos.

1.3 Organização dos ComputadoresIndependentemente das diferenças no aspecto físico, praticamente todos oscomputadores podem ser considerados como divididos em seis unidades lógicas ouseções. São elas:1. Unidade de entrada (input unit). Esta é a seção de "recepção" do computador. Elaobtém as informações (dados e programas de computador) dos vários dispositivos deentrada (input devices) e as coloca à disposição de outras unidades para que possam serprocessadas. A maior parte das informações é fornecida aos computadores atualmenteatravés de teclados como os de máquinas de escrever.2. Unidade de saída (output unit). Esta é a seção de "expedição" do computador. Elaleva as informações que foram processadas pelo computador e as envia aos váriosdispositivos de saída (output devices) para torná-las disponíveis para o uso no ambienteexterno ao computador. A maioria das informações é fornecida pelo computador atravésde exibição na tela ou impressão em papel.3. Unidade de memória (memory unit). Este é a seção de "armazenamento" docomputador, com acesso rápido e capacidade relativamente baixa. Ela conserva asinformações que foram fornecidas através da unidade de entrada para que possam estarimediatamente disponíveis para o processamento quando se fizer necessário. A unidadede memória também conserva as informações que já foram processadas até que sejamenviadas para os dispositivos de saída pela unidade de saída. Freqüentemente a unidadede memória é chamada de memória (memory), memória principal ou memória primária(primary memory).4. Unidade aritmética e lógica (arithmetic and logic unit, ALU). Esta é a seção de"fabricação" do computador. Ela é a responsável pela realização dos cálculos comoadição, subtração, multiplicação e divisão. Ela contém os mecanismos de decisão quepermitem ao computador, por exemplo, comparar dois itens da unidade de memóriapara determinar se são iguais ou não.5. Unidade central de processamento, UCP (central processing unit, CPU). Esta é aseção "administrativa" do computador. Ela é o coordenador do computador e oresponsável pela supervisão do funcionamento das outras seções. A CPU informa àunidade de entrada quando as informações devem ser lidas na unidade de memória,informa à ALU quando as informações da unidade de memória devem ser utilizadas emcálculos e informa à unidade de saída quando as informações devem ser enviadas daunidade de memória para determinados dispositivos de saída.6. Unidade de memória secundária (secondary storage unit). Esta é a seção de"armazenamento" de alta capacidade e de longo prazo do computador. Os programas oudados que não estiverem sendo usados ativamente por outras unidades são colocadosnormalmente em dispositivos de memória secundária (como discos) até que sejam outravez necessários, possivelmente horas, dias, meses ou até mesmo anos mais tarde.

1.4 Processamento em Lotes (Batch Processing),Multiprogramação e Tempo Compartilhado (Timesharing)Os primeiros computadores eram capazes de realizar apenas um trabalho outarefa de cada vez. Esta forma de funcionamento de computadores é chamadafreqüentemente de processamento em lotes de usuário único. O computador executa umúnico programa de cada vez enquanto processa dados em gru pos ou lotes (batches).Nesses primeiros sistemas, geralmente os usuários enviavam suas tarefas ao centrocomputacional em pilhas de cartões perfurados. Freqüentemente os usuários precisavamesperar horas antes que as saídas impressas fossem levadas para seus locais de trabalho.À medida que os computadores se tornaram mais poderosos, tornou-se evidenteque o processamen to em lotes de usuário único raramente utilizava com eficiência osrecursos do computador. Em vez disso, imaginava-se que muitos trabalhos ou tarefaspoderiam ser executados de modo a compartilhar os re cursos do computador e assimconseguir utilizá-lo melhor. Isto é chamado multiprogramação. A multiprogramaçãoenvolve as "operações" simultâneas de muitas tarefas do computador — o computa dorcompartilha seus recursos entre as tarefas que exigem sua atenção. Com os primeirossistemas de multiprogramação, os usuários ainda enviavam seus programas em pilhasde cartões perfurados e espe ravam horas ou dias para obter os resultados.Nos anos 60, vários grupos de indústrias e universidades foram pioneiros nautilização do conceito de timesharing (tempo compartilhado). Timesharing é um casoespecial de multiprogramação no qual os usuários podem ter acesso ao computadoratravés de dispositivos de entrada/saída ou terminais. Em um sistema computacionaltípico de timesharing, pode haver dezenas de usuários compartilhando o computador aomesmo tempo. Na realidade o computador não atende a todos os usuáriossimultanea mente. Em vez disso, ele executa uma pequena parte da tarefa de umusuário e então passa a fazer a tarefa do próximo usuário. O computador faz isto tãorapidamente que pode executar o serviço de cada usuário várias vezes por segundo.Assim, parece que as tarefas dos usuários estão sendo executadas simultaneamente.

1.5 Computação Pessoal, Computação Distribuída eComputação Cliente/ServidorEm 1997, a Apple Computer tornou popular o fenômeno da computação pessoal.Inicialmente, isto era um sonho de quem a tinha como um hobby. Computadorestornaram-se suficientemente baratos para serem comprados para uso pessoal oucomercial. Em 1981, a IBM, a maior vendedora de computadores do mundo, criou oIBM PC (Personal Computer, computador pessoal). Do dia para a noite, literalmente, acomputação pessoal se tornou comum no comércio, na indústria e em organizaçõesgovernamentais.Mas esses computadores eram unidades "autônomas" — as pessoas faziam suastarefas em seus próprios equipamentos e então transportavam os discos de um lado paraoutro para compartilhar as informações. Embora os primeiros computadores pessoaisnão fossem suficientemente poderosos para serem compartilhados por vários usuários,esses equipamentos podiam ser ligados entre si em redes de computadores, algumasvezes através de linhas telefônicas e algumas vezes em redes locais de organizações.Isto levou ao fenômeno da computação distribuída, na qual a carga de trabalhocomputacional de uma organização, em vez de ser realizada exclusivamente em umainstalação central de informática, é distribuída em redes para os locais (sites) nos quaiso trabalho real da organização é efetuado. Os computadores pessoais eramsuficientemente poderosos para manipular as exigências computacionais de cadausuário em particular e as tarefas básicas de comunicações de passar as informaçõeseletronicamente de um lugar para outro.Os computadores pessoais mais poderosos de hoje são tão poderosos quanto osequipamentos de milhões de dólares de apenas uma década atrás. Os equipamentosdesktop (computadores de mesa) mais poderosos — chamados workstations ou estaçõesde trabalho — fornecem capacidades enormes a usuários isolados. As informações sãocompartilhadas facilmente em redes de computadores onde alguns deles, os chamadosservidores de arquivos (file servers), oferecem um depósito comum de programas edados que podem ser usados pelos computadores clientes (clients) distribuídos ao longoda rede, daí o termo computação cliente/servidor. O C e o C tornaram-se aslinguagens preferidas de programação para a criação de software destinado a sistemasoperacionais, redes de computadores e aplicações distribuídas cliente/servidor.

1.6 Linguagens de Máquina, Linguagens Assembly eLinguagens de Alto NívelOs programadores escrevem instruções em várias linguagens de programação,algumas entendidas diretamente pelo computador e outras que exigem passosintermediários de tradução. Centenas de linguagens computacionais estão atualmenteem uso. Estas podem ser divididas em três tipos gerais:1. Linguagens de máquina2. Linguagens assembly3. Linguagens de alto nívelQualquer computador pode entender apenas sua própria linguagem de máquina.A linguagem de máquina é a "linguagem natural" de um determinado computador. Elaestá relacionada intimamente com o projeto de hardware daquele computador.Geralmente as linguagens de máquina consistem em strings de números (reduzidos emúltima análise a ls e Os) que dizem ao computador para realizar uma de suas operaçõesmais elementares de cada vez. As linguagens de máquina são dependentes de máquina(não-padronizadas, ou machine dependent), i.e., uma determinada linguagem demáquina só pode ser usada com um tipo de computador. As linguagens de máquina sãocomplicadas para os humanos, como se pode ver no trecho seguinte de um programa emlinguagem de máquina que adiciona o pagamento de horas extras ao salário base earmazena o resultado no pagamento bruto. 1300042774 1400593419 1200274027À medida que os computadores se tornaram mais populares, ficou claro que aprogramação em linguagem de máquina era simplesmente muito lenta e tediosa para amaioria dos programadores. Em vez de usar strings de números que os computadorespodiam entender diretamente, os programadores começaram a usar abreviaçõesparecidas com palavras em inglês para representar as operações elementares de umcomputador. Estas abreviações formaram a base das linguagens assembly. Foramdesenvolvidos programas tradutores, chamados assemblers, para converter programasem linguagem assembly para linguagem de máquina na velocidade ditada pelocomputador. O trecho de um programa em linguagem assembly a seguir também somao pagamento de horas extras ao salário base e armazena o resultado em pagamentobruto, porém isto é feito de uma forma mais clara do que o programa equivalente emlinguagem de máquina.LOAD BASEADDEXTRASTORE BRUTOO uso do computador aumentou rapidamente com o advento das linguagensassembly, mas elas ainda exigiam muitas instruções para realizar mesmo as tarefas maissimples. Para acelerar o processo de programação, foram desenvolvidas linguagens dealto nível, nas quais podiam ser escritas instruções simples para realizar tarefas

fundamentais. Os programas tradutores que convertiam programas de linguagem de altonível em linguagem de máquina são chamados compiladores. As linguagens de altonível permitem aos programadores escrever instruções que se parecem com o idiomainglês comum e contêm as notações matemáticas normalmente usadas. Um programa defolha de pagamento em uma linguagem de alto nível poderia conter uma instrução comoesta:Bruto Base ExtraObviamente, as linguagens de alto nível são muito mais desejáveis do ponto devista do programador do que as linguagens de máquina ou assembly. O C e o C estãoentre as linguagens de alto nível mais poderosas e mais amplamente usadas.

1.7 A História do CO C foi desenvolvido a partir de duas linguagens anteriores, o BCPL e o B. OBCPL foi desenvolvido em 1967 por Martin Richards como uma linguagem paraescrever software de sistemas operacionais e compiladores. Ken Thompson modeloumuitos recursos em sua linguagem B com base em recursos similares do BCPL e usou oB para criar as primeiras versões do sistema operacional UNIX nas instalações do BellLaboratories em 1970, em um computador DEC PDP-7. Tanto o BCPL como o B eramlinguagens "sem tipos" ("typeless") — todos os itens de dados ocupavam uma "palavra"na memória e a responsabilidade de lidar com um item de dados como um númerointeiro ou real, por exemplo, recaía sobre os ombros do programador.A linguagem C foi desenvolvida a partir do B por Dennis Ritchie, do BellLaboratories, e implementada originalmente em um computador DEC PDP-11, em1972. De início o C se tornou amplamente conhecido como a linguagem dedesenvolvimento do sistema operacional UNIX. Hoje em dia, praticamente todos osgrandes sistemas operacionais estão escritos em C e/ou C . Ao longo das duas últimasdécadas, o C ficou disponível para a maioria dos computadores. O C independe dohardware. Elaborando um projeto cuidadoso, é possível escrever programas em C quesejam portáteis para a maioria dos computadores. O C usa muitos dos importantesconceitos do BCPL e do B ao mesmo tempo que adiciona tipos de dados e outrosrecursos poderosos.No final da década de 70, o C evoluiu e chegou ao que se chama agora de "Ctradicional". A publicação em 1978 do livro de Kernighan e Ritchie, The CProgramming Language, fez com que essa linguagem recebesse muita atenção. Estapublicação se tornou um dos livros de informática mais bem-sucedidos de todos ostempos.A rápida expansão do C em vários tipos de computadores (algumas vezeschamados de plataformas de hardware) levou a muitas variantes. Elas eram similares,mas freqüentemente incompatíveis. Isto foi um problema sério para os desenvolvedoresde programas que precisavam criar um código que fosse executado em váriasplataformas. Ficou claro que era necessário uma versão padrão do C. Em 1983, foicriado o comitê técnico X3J11 sob o American National Standards Committee onComputers and Information Processing (X3) para "fornecer à linguagem uma definiçãoinequívoca e independente de equipamento". Em 1989, o padrão foi aprovado. Odocumento é conhecido como ANSI/ISO 9899:1990. Pode-se pedir cópias dessedocumento para o American National Standards Institute, cujo endereço consta noPrefácio a este texto. A segunda edição do livro de Kernighan e Ritchie, publicada em1988, reflete esta versão, chamada ANSI C, agora usada em todo o mundo (Ke88).Dicas de portabilidade 1.1Como o C é uma linguagem independente de hardware e amplamentedisponível, as aplicações escritas em C podem ser executadas com poucaou nenhuma modificação em uma grande variedade de sistemascomputacionais.

1.8 A Biblioteca Padrão (Standard Library) do CComo você aprenderá no Capítulo 5, os programas em C consistem em módulosou elementos chamados funções. Você pode programar todas as funções de que precisapara formar um programa C, mas a maioria dos programadores C tira proveito de umexcelente conjunto de funções chamado C Standard Library (Biblioteca Padrão do C).Dessa forma, há na realidade duas partes a serem aprendidas no "mundo" do C. Aprimeira é a linguagem C em si, e a segunda é como usar as funções do C StandardLibrary. Ao longo deste livro, analisaremos muitas dessas funções. O Apêndice A(condensado e adaptado do documento padrão do ANSI C) relaciona todas as funçõesdisponíveis na biblioteca padrão do C. A leitura do livro de Plauger (P192) é obrigatóriapara os programadores que necessitam de um entendimento profundo das funções dabiblioteca, de como implementá-las e como usá-las para escrever códigos portáteis.Neste curso você será estimulado a usar o método dos blocos de construção paracriar programas. Evite reinventar a roda. Use os elementos existentes — isto é chamadoreutilização de software e é o segredo do campo de desenvolvimento da programaçãoorientada a objetos. Ao programar em C, você usará normalmente os seguintes blocosde construção: Funções da C Standard Library (biblioteca padrão) Funções criadas por você mesmo Funções criadas por outras pessoas e colocadas à sua disposiçãoA vantagem de criar suas próprias funções é que você saberá exatamente comoelas funcionam. Você poderá examinar o código C. A desvantagem é o esforçodemorado que se faz necessário para projetar e desenvolver novas funções.Usar funções existentes evita reinventar a roda. No caso das funções standard doANSI, você sabe que elas foram desenvolvidas cuidadosamente e sabe que, por estarusando funções disponíveis em praticamente todas as implementações do ANSI C, seusprogramas terão uma grande possibilidade de serem portáteis.Dica de desempenho 1.1Usar as funções da biblioteca standard do C em vez de você escrever suaspróprias versões similares pode melho rar o desempenho do programaporque essas funções foram desenvolvidas cuidadosamente por pessoaleficiente.Dicas de portabilidade 1.2Usar as funções da biblioteca padrão do C em vez de escrever suaspróprias versões similares pode melhorar a porta bilidade do programaporque essas funções estão colocadas em praticamente todas asimplementações do ANSI C.

1.9 Outras Linguagens de Alto NívelCentenas de linguagens de alto nível foram desenvolvidas, mas apenas algumasconseguiram grande aceitação. O FORTRAN (FORmula TRANslator) foi desenvolvidopela IBM entre 1954 e 1957 para ser usado em aplicações científicas e de engenhariaque exigem cálculos matemáticos complexos. O FORTRAN ainda é muito usado.O COBOL (COmmon Business Oriented Language) foi desenvolvido em 1959por um grupo de fabricantes de computadores e usuários governamentais e industriais.O COBOL é usado principalmente para aplicações comerciais que necessitam de umamanipulação precisa e eficiente de grandes volumes de dados. Hoje em dia, mais demetade de todo o software comercial ainda é programada em COBOL. Mais de ummilhão de pessoas estão empregadas como programadores de COBOL.O Pascal foi desenvolvido quase ao mesmo tempo que o C. Ele destinava-se aouso acadêmico. Falaremos mais sobre o Pascal na próxima seção.

1.10 Programação EstruturadaDurante os anos 60, enormes esforços para o desenvolvimento de softwareencontraram grandes dificuldades. Os cronogramas de desenvolvimento de softwarenormalmente estavam atrasados, os custos superavam em muito os orçamentos e osprodutos finais não eram confiáveis. As pessoas começaram a perceber que odesenvolvimento era uma atividade muito mais complexa do que haviam imaginado. Aatividade de pesquisa dos anos 60 resultou na evolução da programação estruturada —um método disciplinado de escrever programas claros, nitidamente corretos e fáceis demodificar. Os Capítulos 3 e 4 descrevem os fundamentos da programação estruturada.O restante do texto analisa o desenvolvimento de programas em C estruturados.Um dos resultados mais tangíveis dessa pesquisa foi o desenvolvimento dalinguagem Pascal de programação pelo Professor Nicklaus Wirth em 1971. O Pascal,que recebeu este nome em homenagem ao matemático e filósofo Blaise Pascal, queviveu no século XVII, destinava-se ao ensino da programação estruturada em ambientesacadêmicos e se tornou rapidamente a linguagem preferida para a introdução àprogramação em muitas universidades. Infelizmente, a linguagem carecia de muitosrecursos necessários para torná-la útil em aplicações comerciais, industriais egovernamentais, e portanto não foi amplamente aceita nesses ambientes. Possivelmentea história registra que a grande importância do Pascal foi sua escolha para servir de basepara a linguagem de programação Ada.A linguagem Ada foi desenvolvida sob a responsabilidade do Departamento deDefesa dos EUA (United States Department of Defense, ou DOD) durante os anos 70 einício dos anos 80. Centenas de linguagens diferentes estavam sendo usadas paraproduzir os imensos sistemas de comando e controle de software do DOD. O DODdesejava uma única linguagem que pudesse atender a suas necessidades. O Pascal foiescolhido como base, mas a linguagem Ada final é muito diferente do Pascal. Alinguagem Ada recebeu este nome em homenagem a Lady Ada Lovelace, filha do poetaLorde Byron. De uma maneira geral, Lady Lovelace é considerada a primeira pessoa domundo a escrever um programa de computador, no início do século XIX. Umacaracterística importante da linguagem Ada é chamada multitarefa (multitasking); istopermite aos programadores especificarem a ocorrência simultânea de muitas atividades.Outras linguagens de alto nível amplamente usadas que analisamos — incluindo o C e oC — permitem ao programador escrever programas que realizem apenas umaatividade. Saberemos no futuro se a linguagem Ada conseguiu atingir seus objetivos deproduzir software confiável e reduzir substancialmente os custos de desenvolvimento emanutenção de software.

1.11 Os Fundamentos do Ambiente CTodos os sistemas C são constituídos geralmente de três partes: o ambiente, alinguagem e a C Standard Library. A análise a seguir explica o ambiente típico dedesenvolvimento do C, mostrado na Figura 1.1.Normalmente os programas em C passam por seis fases para serem ex

Sumário 1.1 Introdução 1.2 O que É um Computador? 1.3 Organização dos Computadores 1.4 Processamento em Lotes (Batch Processing), Multiprogramação e Tempo Compartilha do (Timesharing) 1.5 Computação Pessoal, Computação Distribuída e Computação Cliente/Servidor 1.6 Linguagens de Máquina, Linguagens Assembly e Linguagens de Alto nível. 1.7 A História do C