Paul J. Deitel e Harvey M. Deitel · Índice Capítulo 01 – Conceitos da Computação Capítulo...
Transcript of Paul J. Deitel e Harvey M. Deitel · Índice Capítulo 01 – Conceitos da Computação Capítulo...
-
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