Julia Sawaki Tanaka Flávio Andrade Faria

Transcrição

Julia Sawaki Tanaka Flávio Andrade Faria
Julia Sawaki Tanaka
Flávio Andrade Faria
Introdução à Ciência da Computação
Sumário
1. CLASSIFICAÇÃO DOS COMPUTADORES.................................................................................................................. 1
2. SISTEMAS DE COMPUTAÇÃO................................................................................................................................ 2
2.1. SOFTWARE - CONCEITOS BÁSICOS.................................................................................................................................. 2
2.2. HARDWARE - CONCEITOS BÁSICOS................................................................................................................................. 5
3. NOÇÕES BÁSICAS DE INTERNET............................................................................................................................. 7
4. NÚMEROS BINÁRIOS............................................................................................................................................ 9
5. ALGORITMOS..................................................................................................................................................... 10
5.1. ALGORITMO NA SOLUÇÃO DE UM PROBLEMA USANDO O COMPUTADOR.............................................................................. 11
5.2. PASSOS PARA A CONSTRUÇÃO DE UM ALGORITMO........................................................................................................... 12
5.3. ALGORITMO, PROGRAMAÇÃO E RACIOCÍNIO LÓGICO......................................................................................................... 12
6. TIPOS DE DADOS................................................................................................................................................ 13
6.1. DADOS NUMÉRICOS.................................................................................................................................................. 13
6.2. DADOS LITERAIS........................................................................................................................................................ 14
6.3. DADOS LÓGICOS....................................................................................................................................................... 14
7. CONSTANTES E VARIÁVEIS.................................................................................................................................. 14
8. EXPRESSÕES....................................................................................................................................................... 14
8.1. EXPRESSÕES ARITMÉTICAS.......................................................................................................................................... 14
8.2. EXPRESSÕES RELACIONAIS........................................................................................................................................... 15
8.3. EXPRESSÕES LÓGICAS................................................................................................................................................. 16
9. FLUXOGRAMAS.................................................................................................................................................. 17
9.1. COMANDO DE ATRIBUIÇÃO......................................................................................................................................... 17
9.2. COMANDO DE ENTRADA............................................................................................................................................. 18
9.3. COMANDO DE SAÍDA................................................................................................................................................. 18
9.4. ESTRUTURA SEQUENCIAL............................................................................................................................................ 18
9.5. ESTRUTURAS CONDICIONAIS........................................................................................................................................ 19
9.5.1. Estrutura Condicional Simples.........................................................................................................................19
9.5.2. Estrutura Condicional Composta.....................................................................................................................20
9.6. ESTRUTURAS DE REPETIÇÃO........................................................................................................................................ 20
9.6.1. Estrutura de Repetição Enquanto-faça...........................................................................................................20
9.6.2. Estrutura de Repetição Faça-enquanto...........................................................................................................21
10. PROGRAMAÇÃO............................................................................................................................................... 22
11. LINGUAGEM C.................................................................................................................................................. 23
11.1. COMPILADOR......................................................................................................................................................... 23
11.2. DEV-C++.............................................................................................................................................................. 24
11.3. ESTRUTURA BÁSICA DE UM PROGRAMA EM C.............................................................................................................. 24
11.4. FUNÇÃO MAIN()..................................................................................................................................................... 24
11.5. MEU PRIMEIRO PROGRAMA EM C.............................................................................................................................. 25
11.6. BIBLIOTECAS........................................................................................................................................................... 25
11.7. DIRETIVA #INCLUDE................................................................................................................................................. 25
11.8. FUNÇÃO PRINTF().................................................................................................................................................... 26
11.9. FUNÇÃO SCANF().................................................................................................................................................... 27
11.10. FUNÇÃO SYSTEM()................................................................................................................................................. 28
11.11. CONSTANTES........................................................................................................................................................ 28
11.12. VARIÁVEIS........................................................................................................................................................... 28
11.12.1. Tipos de Variáveis........................................................................................................................................28
Instituto de Química – UNESP – Araraquara
i
Introdução à Ciência da Computação
11.12.2. Declaração de Variáveis..............................................................................................................................28
11.12.3. Nomes de Variáveis.....................................................................................................................................29
11.13. PALAVRAS-CHAVE.................................................................................................................................................. 29
11.14. OPERADORES....................................................................................................................................................... 29
11.14.1. Operador de atribuição...............................................................................................................................29
11.14.2. Operadores aritméticos...............................................................................................................................30
11.14.3. Operadores de incremento e decremento...................................................................................................30
11.14.4. Operadores aritméticos de atribuição.........................................................................................................31
11.14.5. Operadores relacionais................................................................................................................................31
11.14.6. Operadores lógicos......................................................................................................................................32
11.14.7. Operador condicional ternário (?:)..............................................................................................................32
11.14.8. Precedência dos Operadores.......................................................................................................................32
11.15. BIBLIOTECA MATH.H.............................................................................................................................................. 33
11.16. BIBLIOTECA LOCALE.H............................................................................................................................................ 33
11.17. COMENTÁRIOS...................................................................................................................................................... 33
11.18. ESTRUTURA SEQUENCIAL........................................................................................................................................ 34
11.19. ESTRUTURAS CONDICIONAIS.................................................................................................................................... 34
11.19.1. Estrutura Condicional Simples.....................................................................................................................34
11.19.2. Estrutura Condicional Composta.................................................................................................................35
11.19.3. Estrutura Condicional com múltiplas ações................................................................................................36
11.20. ESTRUTURAS DE REPETIÇÃO.................................................................................................................................... 38
11.20.1. Estrutura de Repetição do { } while.............................................................................................................38
Observação: O comando system(“cls”) limpa a tela................................................................................................39
11.20.2. Estrutura de Repetição while...................................................................................................................... 39
11.20.3. Estrutura de Repetição for..........................................................................................................................40
11.21. DIRETIVA #DEFINE................................................................................................................................................. 43
11.22. STRINGS.............................................................................................................................................................. 43
11.22.1. Declaração de strings..................................................................................................................................43
11.22.2. Função scanf() para manipulação de strings..............................................................................................44
11.22.3. Outras funções para manipulação de strings.............................................................................................44
11.22.3.1. gets()..................................................................................................................................................................... 44
11.22.3.2. puts()..................................................................................................................................................................... 45
11.22.3.3. strcpy().................................................................................................................................................................. 45
11.22.3.4. strcmp()................................................................................................................................................................. 45
11.22.3.5. strlen()................................................................................................................................................................... 46
11.23. FUNÇÕES............................................................................................................................................................. 46
11.24. CRIANDO BIBLIOTECAS........................................................................................................................................... 48
11.25. VETORES............................................................................................................................................................. 48
11.26. MATRIZES............................................................................................................................................................ 48
11.26.1. Atribuindo valores a uma matriz.................................................................................................................49
11.27. DEBUG................................................................................................................................................................ 51
12. EXERCÍCIOS....................................................................................................................................................... 52
13. BIBLIOGRAFIA................................................................................................................................................... 62
Instituto de Química – UNESP – Araraquara
ii
Introdução à Ciência da Computação
1. Classificação dos Computadores
Os computadores podem ser classificados segundo o porte e a finalidade em algumas categorias
mas estes mudam com o tempo e com a evolução tecnológica.
Computadores de mesa ou desktop: são computadores pessoais (PC - Personal Computer) que não
foram projetados para serem portáteis. Geralmente, essa classe de computadores é constituída por
um monitor, uma Unidade Central de Processamento (CPU) que fica armazenada dentro de um
gabinete do tipo mini-torre ou horizontal, um teclado e um mouse. Como esse tipo de
equipamento precisa de muito espaço para utilização, a sua demanda tem sido cada vez menor.
Para contornar essa dificuldade foi desenvolvido um modelo desktop chamado All-In-One (AIO). Os
AIO possuem a CPU integrada ao monitor, reduzindo o espaço necessário para a acomodação do
equipamento. Apesar da inovação, muitas empresas tem optado por usar modelos portáteis, que
são mais compactos, consomem menos energia, são fáceis de se transportar e possuem sistema
próprio de proteção para o caso de quedas de energia ou surtos elétricos.
Computadores portáteis:
Notebooks (Laptops), Netbooks, Ultrabooks e UltraThins. Os termos notebook e laptop são
utilizados indiferentemente para se referir aos computadores portáteis tradicionais. Netbook é
um notebook projetado para ser mais leve, menor, com "menor poder de processamento",
mais barato e com maior tempo de autonomia. Essas características fazem com que os
Netbooks sejam muito usados durante viagens, expedições ou mesmo em casa para acessos
rápidos a internet. O termo Ultrabook foi criado pela INTEL em 2011 para referenciar
notebooks com determinadas características físicas. A intenção da INTEL era a de criar uma
classe de notebooks que pudesse concorrer com os MacBook Air da Apple. Ou seja, criar
notebooks que fossem leves, finos, com grande autonomia de bateria e poder de
processamento equivalente a um notebook tradicional. Atualmente, esse termo é usado para
referenciar notebooks que possuem no máximo 2 cm de altura. Devido as limitações físicas, os
ultrabooks possuem restrições para a disponibilidade de recursos comuns em notebooks. É
raro encontrar um ultrabook que possua mais de 2 portas USB, entrada ethernet para rede,
entrada VGA para monitor externo e leitor/gravador de DVD/Blu-ray. Como a altura se tornou
um ponto de referência em notebooks, então surgiu no mercado uma nova classe de
computadores portáteis chamada de UltraThin. Esse termo vem sendo usado por alguns
fabricantes para descrever notebooks que possuem no máximo 2,1 cm de altura e dispõe dos
mesmos recursos de um notebook tradicional.
O Tablet não é um computador completo, mas é um dispositivo para acesso à Internet, leitura
de livros, revistas e jornais, visualização de fotos e vídeos, agenda, calendário e jogos.
PDAs (Personal Digital Assistant) ou Handhelds: são os computadores integrados e compactos
(de bolso) que possuem acesso à Internet, recursos de GPS, vários aplicativos e constituem
uma extensão do PC e não um substituto. Os smartphones são telefones celulares que
incorporaram recursos computacionais básicos, acesso à Internet, câmera digital, filmadora,
sendo que alguns modelos incluem também GPS, processador de textos, planilha eletrônica e
outros aplicativos.
Workstations ou Estações de Trabalho: são computadores desktops mais caros e de alto
desempenho, otimizados para aplicações profissionais. As estações de trabalho possuem telas de
alta resolução, circuitos de processamento mais rápido e mais poderoso e grande capacidade de
armazenamento. São geralmente utilizados para manipular e exibir dados complexos, tais como
CAD (Computer Aided Design) 2D e 3D, animação computadorizada, geoprocessamento,
modelagem 3D, desenvolvimento de games, etc.
Instituto de Química – UNESP – Araraquara
1
Introdução à Ciência da Computação
Mainframes ou Servidores Corporativos: são computadores de grande porte, de alto custo, com
elevada velocidade e capacidade de processamento e armazenamento, destinados ao
processamento de grande volume de informações. Os mainframes são caracterizados por um
ambiente multiusuário, no qual várias pessoas utilizam o mesmo computador, ao mesmo tempo,
através dos terminais. No início, os mainframes eram grandes computadores que podiam ocupar
até um andar inteiro, mas com o passar do tempo seu tamanho foi reduzido, sua capacidade
aumentada e o termo mainframe foi sendo substituído pela expressão servidor corporativo. Esses
computadores são utilizados em ambientes comerciais e em grandes organizações como bancos,
companhias aéreas, seguradoras e administradoras de cartões de crédito.
Supercomputadores: são os computadores mais poderosos, com altíssimo custo e capacidade
superior aos mainframes. Geralmente são utilizados em grandes centros de pesquisa para cálculos
sofisticados como previsão do tempo, simulação de testes nucleares, controle de voos espaciais,
etc.
2. Sistemas de Computação
A computação nasceu da ideia de auxiliar o homem nos trabalhos rotineiros e repetitivos, em geral
de cálculo e gerenciamento. Porém, com o crescente desenvolvimento tecnológico, o uso de computadores
tornou-se cada vez mais difundido em todas as áreas e hoje o computador consiste em uma ferramenta de
trabalho indispensável no dia a dia das empresas, das indústrias, das universidades, e até mesmo nas
residências.
A utilização do computador para a resolução de problemas e execução de tarefas de forma
automática traz vantagens como: rapidez de execução e confiabilidade nos resultados obtidos, pois muitos
problemas exigem cálculos sofisticados, assim como a manipulação de grande volume de dados. No
primeiro caso, o risco de erro é grande e no segundo, o trabalho torna-se árduo e entediante. O
computador elimina esses inconvenientes, pois é caracterizado pela rapidez, precisão e grande capacidade
de armazenamento de informações (textos, dados, imagens, voz, etc.).
O computador é capaz de realizar cálculos e tomar decisões lógicas em velocidades bilhões de
vezes mais rápidas que os seres humanos. Porém, o equipamento por si só não é capaz de realizar uma
simples tarefa. Para que ele realize uma determinada tarefa, é preciso que alguém descreva com detalhes
todos os passos que o equipamento deve seguir para a execução desta tarefa. Esta descrição é conhecida
como programa (software) e constitui uma importante parte do sistema de computação. O equipamento
em si, isto é, o computador, faz parte do hardware. Portanto, o hardware e o software, juntamente com o
usuário, faz parte essencial de um Sistema de Computação.
2.1. Software - Conceitos Básicos
Software ou Programa é a parte lógica que dota o equipamento físico (hardware) com a
capacidade de realizar algum trabalho. O programa nada mais é do que uma sequência de instruções
escritas em uma linguagem de programação, informando ao hardware o que fazer, e em que ordem.
Observação: Em sistemas mecânicos que usam inteligência artificial, é muito comum que o “software” seja
uma parte física do equipamento. Isso acontece porque a técnica usada para o controle
automático do aparelho é patenteada e a estrutura lógica só é conhecida pelo fabricante.
Nestes casos, a peça responsável pelo ajuste automático é comumente chamada de software.
Programas Aplicativos constituem uma classe de programas que realizam tarefas específicas. Os 3
programas aplicativos mais populares são: Processadores de Textos, Planilhas Eletrônicas e Sistemas de
Gerenciamento de Banco de Dados. Outros exemplos de programas aplicativos são: folha de pagamento,
controle de estoques, contabilidade, controle de clientes de um consultório médico, controle de rebanhos,
etc.
Instituto de Química – UNESP – Araraquara
2
Introdução à Ciência da Computação
Processador de Texto é um programa aplicativo projetado especialmente para facilitar a criação,
edição, formatação e impressão de textos. Ele permite fazer correção automática, mudar o tamanho e/ou
cor da letra, formatar em várias colunas, inserir um desenho ou gráfico, etc. Exemplos de processadores de
textos: Microsoft Word, LibreOffice Writer, Corel WordPerfect, etc.
Planilha Eletrônica é uma ferramenta para planejamento e análise numérica que permite utilizar a
tela do computador como um papel quadriculado sobre o qual anotamos em linhas e colunas todos os
dados. Este tipo de programa permite definir e embutir fórmulas escondidas que realizam cálculos sobre os
dados visíveis, permite também a correção de valores, e o aplicativo rapidamente recalcula os resultados
afetados por essa correção. São usadas para desenvolver orçamentos de empresas, para organizar e
controlar orçamentos domésticos, para controlar o movimento de uma conta bancária, ou ainda efetuar
previsões de vendas. Exemplos: Microsoft Excel, LibreOffice Calc, Corel WordPerfect Office, etc.
Sistema de Gerenciamento de Banco de Dados (SGBD) é um programa aplicativo capaz de
armazenar e recuperar informações em Banco de Dados.
Banco de Dados, por sua vez, é um conjunto de informações estruturadas e armazenadas de forma
organizada e integrada.
Um SGBD possui recursos para inclusão, eliminação, recuperação e modificação de dados, além de
permitir ordenar os dados, produzir relatórios, etc. Este tipo de programa substitui o antigo fichário.
Exemplos: Microsoft Access, LibreOffice Base, FireBird, MySQL, Sybase, Oracle, etc.
Uma lista de telefones dos moradores de uma determinada cidade constitui um Banco de Dados. O
catálogo telefônico tem uma estrutura pré-definida (nome do assinante, endereço e telefone) e uma
ordem de classificação (por assinante ou por endereço). Para que um Banco de Dados seja eletrônico, basta
que todas as informações sejam processadas por um computador.
Sistema Operacional é o programa mais importante, que gerencia os recursos do computador. O
sistema operacional, no nosso caso o Windows, gerencia o acesso dos programas aplicativos ao teclado, ao
monitor (vídeo), à impressora, assim como aos discos e outros dispositivos de leitura e gravação. O sistema
operacional fica o tempo todo ativo, prestando serviços aos programas aplicativos que estão sendo
executados. Cada linha de computadores tem o seu próprio sistema operacional. Exemplos de sistemas
operacionais: Windows, Linux, Mac OS, Unix, Solaris, etc.
Linguagem de Programação é um conjunto de regras que permitem a construção de sentenças que
descrevem de forma precisa as ações que desejamos que sejam executadas pelo computador.
Linguagem de Máquina é um conjunto de instruções capazes de ativar diretamente os dispositivos
eletrônicos do computador. A linguagem de máquina é constituída somente por 0 e 1 (bits), o que dificulta
a leitura e a compreensão pelas pessoas.
Exemplo de uma instrução em linguagem de máquina: 0 1 1 0 1 0 1 0 1 1 0 1
BIT (BInary DigiT = Dígito Binário) 0 ou 1. Bit é a menor unidade de informação, e apresenta dois
estados identificáveis (sim ou não, verdadeiro ou falso, chave ligada ou desligada, uma corrente passando
ou não por um circuito elétrico, um item magnetizado ou não, etc.) que são associados aos números 1 e 0,
respectivamente.
Byte é um conjunto de bits. A maioria dos fabricantes de computadores utilizam bytes constituídos
por 8 bits. Para o computador armazenar um caractere, que é uma letra, um algarismo, ou símbolo (ex: M,
a, 4, 7, -, ?, *) ocupa um byte, ou seja, uma sequência de 8 bits ligados (1) ou desligados (0).
O byte é a unidade de medida da quantidade de informação digital. Por exemplo: o disco rígido é
de 1 Tera byte (TB), o pen drive é de 8 Giga bytes (GB), etc.
Os prefixos (kilo, mega, giga, tera, etc.) são coloquialmente utilizados na computação para
expressar grandes quantidades de bytes. Como a arquitetura do computador se baseia em números
binários, em computação, esses prefixos geralmente são utilizados para indicar potências de dois, o que
não é correto, pois no Sistema Internacional de Unidades (SI) esses prefixos representam potências de dez.
Instituto de Química – UNESP – Araraquara
3
Introdução à Ciência da Computação
Prefixos em uso na computação coloquial
Nome Símbolo
Potência de dez (SI)
Potência de dois
Diferença
quilo
K
103 = 1.000
210 = 1.024
2,4%
mega
M
106 = 1.000.000
220 = 1.048.576
4,9%
giga
G
109 = 1.000.000.000
230 = 1.073.741.824
7,4%
tera
T
1012 = 1.000.000.000.000
240 = 1.099.511.627.776
peta
P
1015 = 1.000.000.000.000.000 250 = 1.125.899.906.842.624
10,0%
12,5%
A norma publicada em 2008 define os seguintes prefixos binários:
Prefixos binários segundo normas internacionais
Nome Símbolo Potência de dois
kibi
Ki
210 = 1.024
mebi
Mi
220 = 1.048.576
gibi
Gi
230 = 1.073.741.824
tebi
Ti
240 = 1.099.511.627.776
pebi
Pi
250 = 1.125.899.906.842.624
Padrões de Codificação
No computador a representação interna de informações é feita através de um padrão de
codificação onde, por convenção, certos conjuntos de bits representam certos caracteres. No padrão de
codificação ASCII estendido, de 8 bits, a letra A é representada por 1000001. Unicode é outro padrão de
codificação de 16 bits.
Linguagem de Montagem é uma linguagem de baixo nível que situa apenas um nível de abstração
acima da linguagem de máquina e usa mnemônicos (símbolos fáceis de memorizar) para expressar as
instruções. Um programa especial chamado montador deve traduzir as instruções (simbólicas) da
linguagem de montagem para a linguagem de máquina. Exemplo: Assembler é o montador da linguagem
Assembly.
Exemplo de instruções em linguagem de montagem:
ADD C, 1
MOV A, B
CMP A, E
JMP fim
Linguagem de Alto Nível é uma linguagem que utiliza notações matemáticas e grupos de palavras
(em inglês) para representar as instruções de máquina, tornando o processo de programação mais próximo
do entendimento humano.
Exemplos de linguagens: Fortran, Pascal, C++, Visual Basic, Delphi, Java, PHP, Python, etc.
Exemplos de trechos de programa:
Instituto de Química – UNESP – Araraquara
4
Introdução à Ciência da Computação
FORTRAN
10 if (nota .LT. 5) goto 30
write(2, 20)
20 format('Aprovado')
goto 50
30 write(2, 40)
40 format('Reprovado')
50 stop
end
BASIC
30 if nota < 5 then print "Reprovado" else print "Aprovado"
PASCAL
if nota < 5 then write('Reprovado') else write('Aprovado');
C
if (nota < 5) printf(“Reprovado”);
else printf(“Aprovado”);
Compilador: traduz o programa fonte (ou código fonte), escrito na linguagem de alto nível, como
Pascal ou C, para a linguagem de máquina, gerando o programa executável que o computador consegue
entender e processar diretamente.
Interpretador: interpreta cada comando do programa fonte e executa as instruções que a ele
correspondem, sem gerar um programa executável. Em geral os programas interpretados são mais lentos
do que os compilados, pois os compiladores fazem a tradução uma única vez, e a partir daí executam
diretamente o programa traduzido, enquanto que o interpretador traduz o programa fonte todas as vezes
que executa.
2.2. Hardware - Conceitos Básicos
Hardware é a parte física de um Sistema de Computação, ou seja, todos os elementos materiais
que o compõem (a estrutura, os circuitos eletrônicos, os dispositivos mecânicos, elétricos, magnéticos, etc).
Os componentes básicos de um computador são:
 Dispositivo de Entrada e Saída (ou Periféricos)
 Memória
 Unidade Central de Processamento (UCP)
Dispositivo
de Entrada
Memória RAM
Unidade Lógica e
Aritmética
Unidade de
Controle
UCP
Instituto de Química – UNESP – Araraquara
5
Dispositivo
de Saída
Introdução à Ciência da Computação
Dispositivo de Entrada serve para receber os dados e programas preparados pelo ser humano e
transformá-los em sinais eletromagnéticos (bits) manipuláveis pelo computador. Exemplo: teclado, mouse,
scanner, drive de DVD, etc.
Dispositivo de Saída serve para transformar os dados processados pelo computador em formas
compreensíveis pelo ser humano e exibi-los. Exemplo: impressora, monitor ou vídeo, plotter, etc.
Memória é o dispositivo que armazena informações. Existem dois tipos de memória: memória
primária e secundária.
Memória Primária é a memória sem a qual o computador não funciona. A sua principal função é
armazenar informações necessárias para o processador, como por exemplo, os programas em execução.
Fazem parte da memória primária, as memórias RAM, ROM e Cache.
 RAM (Random Access Memory) é a memória de trabalho do computador. Ela pode ser lida e
gravada pela Unidade Central de Processamento (UCP) a qualquer instante. É onde ficam
armazenados os dados, os resultados intermediários e os programas que estão sendo executados
pela UCP. Quando um programa que estava sendo usado é fechado, a parte da memória RAM, que
estava sendo utilizada, é liberada para armazenar novos dados e programas. As informações que
são introduzidas no computador através do teclado, da leitura do disco rígido, CD/DVD ou pen drive
são armazenadas na memória RAM. Como a memória RAM é volátil as informações nela
armazenadas desaparecem com o desligamento do computador ou com a queda de energia
elétrica.
 ROM (Ready Only Memory) é a memória exclusivamente de leitura, onde as informações são
gravadas uma única vez, geralmente pelo fabricante e nunca mais alteradas. A memória ROM não
é volátil, e é uma memória permanente, o seu conteúdo não é perdido mesmo com o desligamento
do computador. Nos microcomputadores, existe um programa muito importante chamado BIOS
(Basic Input-Output System - Sistema Básico de Entrada e Saída) que tem várias funções, entre as
quais, a de realizar a "partida" do computador . Quando ligamos o computador, o BIOS realiza a
contagem de memória, faz uma rápida checagem do funcionamento do computador e carrega o
Sistema Operacional do disco rígido (memória secundária) para a memória RAM. O BIOS está
gravado em uma memória ROM, pois esse programa não deve ser alterado e deve ser executado
todas as vezes que o computador é ligado. Existem outros tipos de memória ROM como PROM
(Programmable ROM), EPROM (Erasable Programmable ROM), EEPROM (Electrically Erasable
Programmable ROM), etc.
 Cache é também um tipo de memória primária, volátil, de grande velocidade, mais rápida do que
a memória RAM. A memória cache armazena e recupera os dados usados mais frequentemente
pelo processador de modo que sua recuperação possa ser bem rápida. É uma memória mais cara
do que a memória RAM.
Memória Secundária é um meio de armazenamento a longo prazo no qual o computador armazena
dados que poderão ser posteriormente utilizados. Este tipo de memória não é estritamente necessária para
a operação do computador, o acesso a este tipo de memória é mais lento em comparação com o acesso à
memória primária, e o custo por unidade de memória secundária é muito menor que o custo por unidade
de memória primária.
As memórias secundárias mais comuns, utilizadas pelos computadores são: disco rígido, SSD, pen
drive, cartão de memória micro SD, CD, DVD, Blu-ray, etc.
 Disco Rígido ou HD (Hard Disk) é um meio de armazenamento secundário de informações que
emprega vários discos não flexíveis revestidos com material magnético e alojados juntamente com
Instituto de Química – UNESP – Araraquara
6
Introdução à Ciência da Computação
os cabeçotes de leitura/gravação, em uma caixa hermeticamente fechada. Atualmente a
capacidade de um disco rígido é especificado em termos de centenas de Gbytes ou alguns Tbytes.
 SSD (Solid State Drive) ou Unidade (ou Drive) de Estado Sólido é um meio de armazenamento
secundário de informações, mas não é um disco. É constituído de circuitos eletrônicos do mesmo
tipo da memória flash utilizada nos pen drives, mas com capacidade maior e funcionam
exatamente como se fossem discos rígidos, porém em uma velocidade bem maior. A maioria dos
SSDs comercializados atualmente é de 64 GB a 480 GB, pois o SSD é bem mais caro do que o HD.
 Pen drive é uma memória portátil, constituído por memória flash, que funciona em equipamentos
com porta USB. O pen drive surgiu em 2000 com o objetivo de substituir os disquetes. Existem pen
drives de 1 GB, 2 GB, 256 GB e até 1 TB. O modelo de 1 GB armazena o equivalente a 728 disquetes.
 cartão de memória micro SD (Secure Digital) é um cartão de memória flash removível, utilizado
inicialmente em telefones celulares devido a sua medida reduzida (1,5cm x 1,1cm x 1 mm). Através
de um adaptador o micro SD pode ser utilizado em qualquer dispositivo que suporta o cartão SD.
 CD (Compact-Disk): uma tecnologia de armazenamento ótico que emprega disco a laser e pode
armazenar até 700 Mbytes de informações digitais. Existem os discos CD-R (CD-Recordable) que
podem ser escritos só uma vez e os CD-RW (CD-ReWritable) que podem ser gravados, apagados e
reutilizados.
 DVD (Digital Video Disc e posteriormente Digital Versatile Disc): uma geração de disco ótico que
armazena 4.7 Gbytes de informações em um disco de uma face e uma única camada e 17 Gbytes
em um disco de 2 faces e 2 camadas. Existem também os discos DVD-R (Recordable) que só gravam
uma vez e o DVD-RW (Rewritable) que é a versão regravável.
 Blu-ray (BD): é a nova geração de disco ótico para vídeos de alta definição, que utiliza raio laser
de cor azul com comprimento de onda menor do que o do DVD e CD, mas apresenta o mesmo
tamanho de um DVD e tem a capacidade de armazenar de 25 a 100 Gbytes de informações.
Unidade Central de Processamento (UCP) ou Central Processing Unit (CPU) é a principal unidade
de controle e processamento de um computador, e é constituída de circuitos eletrônicos que interpretam e
executam instruções de programas e comunicam com os dispositivos de armazenamento e de entrada e
saída. A UCP é composta pela Unidade Lógica e Aritmética (ULA) e pela Unidade de Controle (UC).
 Unidade Lógica e Aritmética (ULA): realiza cálculos através de operações aritméticas (adição,
subtração,...) e operações relacionais (comparação de valores).
 Unidade de Controle (UC): gerencia as operações do computador comunicando com a Unidade
Lógica e Aritmética, com a memória e com os dispositivos de entrada e saída. Controla as
instruções dos programas que estão na memória, faz com que o dispositivo de entrada leia os
dados, transfira os valores adequados da memória para a ULA, armazena e recupera dados e
resultados intermediários armazenados na memória e passa os resultados para o dispositivo de
saída.
3. Noções Básicas de Internet
Redes de computadores são grupos de computadores e dispositivos computacionais como
impressoras, scanners, etc., conectados por algum recurso de comunicação. Uma rede pode envolver
conexões permanentes tais como cabos ou conexões temporárias através de linhas telefônicas ou outros
elos de comunicação.
Instituto de Química – UNESP – Araraquara
7
Introdução à Ciência da Computação
Internet é a rede mundial de computadores que é formada por várias redes de computadores
interligadas. A Internet surgiu de um projeto militar nos Estados Unidos na década de 60, evoluiu para uma
rede acadêmica na década de 70 e hoje constitui o maior meio de comunicação do mundo.
A Internet é formada por redes locais (LANs - Local Area Network), redes de abrangência urbana
(MANs - Metropolitan Area Network) e redes remotas (WANs - Wide Area Network) que abrangem estados,
países e continentes, conectando computadores do mundo inteiro. Essas redes são conectadas por
recursos que variam de linhas telefônicas de discagem comum, linhas privadas dedicadas de alta
velocidade, ligações por microondas, ligações por fibras óticas e satélites.
Na década de 80 e no início da década de 90 a rede foi aperfeiçoada e começou a surgir serviços
que caracterizam a Internet atual. O principal desses serviços é World Wide Web (WWW) lançada em 1991,
que viabilizou a transmissão de imagens, sons e vídeos pela Internet. Foi o WWW que popularizou a
Internet.
A Intranet é uma rede interna de informações de uma organização (empresa, universidade, etc.)
baseada na tecnologia da Internet. Serve para compartilhar informações apenas entre os usuários
registrados, sem permitir o acesso de pessoas externas. A Intranet é uma evolução da Internet, em que se
busca, dentro das organizações, formas de acesso às informações, usando os mecanismos de navegação
que são os navegadores. A operação é idêntica, e mesmo as interfaces são as mesmas daquelas vistas na
Internet. Através da Intranet, os usuários internos da organização compartilham informações tais como:
formulários, especificações de produtos, catálogos de produtos, políticas internas de administração e de
recursos humanos, cadastro de clientes, etc.
Alguns dos serviços básicos da Internet são: correio eletrônico (e-mail), WWW (World Wide Web),
acesso remoto ao computador, transferência de arquivos, lista de correio eletrônico, grupos de notícias,
comunicação interativa, etc.
Correio Eletrônico (e-mail) permite um usuário escrever e enviar uma mensagem de texto para
outro usuário ou para um grupo deles, através da internet.
WWW (World Wide Web ou simplesmente Web) é um serviço no formato de hipertextos que
permite ao usuário buscar informações nos diversos computadores da Internet e visualizá-las através de
seções gráficas, formadas por imagens, sons e animações. Hipertexto é um documento que permite acesso
não sequencial, com diferentes níveis de detalhamento e com páginas inter-relacionadas. O leitor pode
percorrer o documento na sequência desejada, saltando de uma página para outra em busca de
informações relacionadas a uma palavra, frase (em destaque) ou ícone.
Acesso Remoto ao Computador é uma ferramenta interativa que permite acessar e executar
programas e aplicações disponíveis em um computador remoto, conectado à internet.
Transferência de Arquivos (ftp, download e upload) permite transferir arquivos entre
computadores interligados pela rede.
Lista de Correio Eletrônico ou Lista de Discussão é uma forma de contatar um grupo de pessoas
através do e-mail. As pessoas que participam da lista podem enviar mensagens para o endereço da lista, o
qual reenvia então a mensgem para cada uma das pessoas (e-mail) inscritas na lista.
Comunicação Interativa é a comunicação instantânea entre duas ou mais pessoas, independente
da localização geográfica dessas pessoas.
Rede Local (LAN - Local Area Network) é uma estrutura que conecta vários computadores e outros
dispositivos (como impressoras) dentro de uma área geográfica limitada. Os usuários de rede local podem
trocar informações, compartilhar periféricos e utilizar recursos de servidor de arquivos. Normalmente a
área geográfica de uma rede local se restringe a uma sala, um departamento, um andar ou um prédio,
dentro de um raio de 100 m.
Instituto de Química – UNESP – Araraquara
8
Introdução à Ciência da Computação
Servidor: nas redes locais o servidor é um computador que fornece algum tipo de serviço para
outros computadores conectados a ele via rede. Um exemplo é o servidor de arquivos que tem um disco
grande e atende pedidos de leitura e gravação naquele disco, outro exemplo é o servidor de impressão que
controla as tarefas de impressão enviadas para a impressora conectada na rede.
4. Números Binários
O sistema binário (ou sistema de base 2), é formado por dois algarismos: 0 e 1, enquanto que o
sistema decimal (ou sistema de base 10), normalmente utilizado, é formado por 10 algarismos: 0, 1, 2, 3, 4,
5, 6, 7, 8 e 9.
Os números binários (0 e 1) foram adotados nos computadores por motivos de precisão e
economia, pois construir um circuito eletrônico capaz de detectar a diferença entre dois estados (presença
ou ausência de corrente elétrica, por exemplo) é muito mais fácil e barato do que construir um circuito que
detecte a diferença entre dez estados diferentes.
Um dígito binário é chamado de BIT, proveniente de BInary digiT, como mencionado
anteriormente.
Transformação de números decimais em números binários
13
2
1
6
2
0
3
2
1
1
=>
46
2
0
23
2
1
11
2
1
5
2
1
2
2
0
1
1 1 0 1
=> 1 0 1 1 1 0
Transformação de números binários em números decimais
1
1
0
1
1
0
1
1
1
X
x
x
x
x
x
x
x
x
23
22
21
5
2
20
2
4
2
3
2
2
0
1
2
x
20
0
1
2
0
4
4
8
8
0
13
32
46
Instituto de Química – UNESP – Araraquara
9
Introdução à Ciência da Computação
Números Decimais Números Binários
00
01
02
03
04
05
06
07
08
09
10
11
12
..
.
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
..
.
5. Algoritmos
Algoritmo é a descrição, de forma lógica, das ações a serem executadas no cumprimento de uma
tarefa, ou seja, é uma sequência de passos que levam à realização de uma tarefa.
Em um algoritmo é importante salientarmos que:
- cada passo deve ser uma instrução simples e sem ambiguidade que possa ser realizada;
- a ordem dos passos deve ser precisamente determinada;
- deve possuir um fim, isto é, um número finito de passos.
Existem várias formas para representar um algoritmo:
 descrição narrativa;
 fluxograma ou diagrama de blocos;
 pseudocódigo (forma genérica de escrever o algoritmo usando uma linguagem
simples, estruturada e nativa a quem o escreve).
A seguir, apresentamos um algoritmo em forma de descrição narrativa, para troca de uma lâmpada
queimada.
1. Remova a lâmpada queimada.
2. Coloque uma nova lâmpada.
Detalhando os passos, temos:
1.1. Coloque uma escada embaixo da lâmpada queimada.
1.2. Suba a escada até alcançar a lâmpada queimada.
1.3. Gire a lâmpada queimada no sentido anti-horário até que ela se solte.
2.1. Escolha uma lâmpada nova de mesma potência da queimada.
2.2. Posicione a nova lâmpada no soquete.
2.3. Gire a lâmpada no sentido horário até que ela se firme.
2.4. Desça a escada.
Instituto de Química – UNESP – Araraquara
10
Introdução à Ciência da Computação
Ordenando e detalhando um pouco mais os passos, temos:
1. Coloque uma escada embaixo da lâmpada queimada.
2. Escolha uma lâmpada nova.
3. Enquanto a potência não for a mesma da queimada,
Descarte a lâmpada escolhida,
Escolha outra lâmpada.
4. Enquanto não possa alcançar a lâmpada queimada,
Suba mais um degrau da escada.
5. Enquanto a lâmpada não estiver livre do soquete,
Gire a lâmpada no sentido anti-horário.
6. Posicione a nova lâmpada no soquete.
7. Enquanto a lâmpada não estiver firme no soquete,
Gire a lâmpada no sentido horário.
8. Desça da escada.
5.1. Algoritmo na solução de um problema usando o computador
Problema do
mundo real
Fase de solução
do problema
Solução na forma de
algoritmo
Solução na forma de
um programa de
computador
Fase de
implementação
No esquema acima, é possível visualizar onde se encaixa o algoritmo, na solução de um problema
utilizando o computador.
Muitas vezes, temos um problema do mundo real que desejamos resolver através do computador,
devido principalmente à rapidez de execução e confiabilidade dos resultados. Neste caso, inicialmente é
necessário compreender muito bem o problema e saber solucionar este problema. A próxima etapa
consiste em transcrever os passos da solução do problema em uma forma de algoritmo (descrição
narrativa, fluxograma ou pseudocódigo). A etapa seguinte é a de implementação, que consiste em passar a
solução, que está em forma de algoritmo, para uma linguagem de programação, gerando assim um
programa de computador. Um programa nada mais é do que a formalização de um algoritmo em uma
determinada linguagem de programação, obedecendo às regras de sintaxe e semântica desta linguagem,
de forma que o computador possa “entender” a sequência de ações que deve ser executada.
Utilizando-se um programa de computador, o problema pode ser resolvido com muita rapidez,
quantas vezes forem necessárias.
Instituto de Química – UNESP – Araraquara
11
Introdução à Ciência da Computação
5.2. Passos para a construção de um algoritmo
Para construir um algoritmo, devemos seguir os passos abaixo:
1) Compreender o problema e a sua solução de uma forma muito clara e destacar os pontos mais
importantes.
2) Definir os dados de entrada, isto é, os dados (valores e informações) que serão fornecidos ao
algoritmo.
3) Definir o processamento, ou seja, os cálculos que deverão ser realizados para a solução do
problema.
4) Definir os dados de saída, ou seja, os resultados do processamento que serão apresentados ao
usuário.
5) Construir o algoritmo usando uma das formas citadas acima (descrição narrativa, fluxograma
ou pseudocódigo).
6) Testar o algoritmo através de simulações.
5.3. Algoritmo, programação e raciocínio lógico
A construção de algoritmos e a programação permitem melhorar o raciocínio lógico e acelerar o
desenvolvimento cognitivo, porque a elaboração de algoritmos e programas faz com que o aluno exercite a
percepção dos pontos chaves, força o aluno a fazer planejamento e pensar organizadamente.
Um dos principais objetivos desta disciplina é estimular o aluno a desenvolver o raciocínio lógico
através da construção de algoritmos e programas, proporcionando um amadurecimento na maneira de
pensar diante dos problemas reais.
Não existem fórmulas prontas na construção de algoritmos e programas. O que se adquire com o
treino é o aperfeiçoamento na forma de pensar e raciocinar sobre o problema em mãos. O raciocínio lógico
é uma habilidade inerente a todas as pessoas e necessária em inúmeras atividades que realizamos.
James Paul Holloway em seu livro “Introdução à Programação para Engenharia” diz: “... a razão
mais importante para estudar e criar algoritmos não é, na verdade, sua utilidade natural, mas em vez disso,
a habilidade de pensamento que a sua criação nos força a desenvolver. Para ser mais exato, o raciocínio
lógico necessário lhe proporcionará boas condições quando você tiver problemas a analisar, mesmo se
esses problemas não puderem ser resolvidos por meio de algoritmos formalmente construídos.”.
Outra passagem a destacar no livro de Holloway é: “Criar algoritmos é exatamente o que fazemos.
Nós os criamos. Começamos com um problema a resolver e uma página em branco, e tentamos preencher
este vazio com um código-fonte que, quando traduzido e executado num computador, resolverá o
problema. Este processo criativo envolve muitos princípios de projeto. Devemos entender o problema;
analisar o problema e encontrar uma solução; analisar a solução para encontrar a melhor maneira de
implementá-la; trabalhar considerando as restrições; procurar simplicidade, elegância e confiabilidade.
Uma introdução aos algoritmos e suas implementações pode, assim, proporcionar uma rica experiência
introdutória no projeto em engenharia.”
Para exercitar um pouco o raciocínio lógico, tente resolver os problemas abaixo:
1) Há três suspeitos de um crime: o cozinheiro, a governanta e o mordomo. Sabe−se que o crime foi
efetivamente cometido por um ou por mais que um deles. Sabe−se, ainda que:
- se o cozinheiro é inocente, então a governanta é culpada;
- ou o mordomo é culpado ou a governanta é culpada, mas não os dois;
- o mordomo não é inocente.
Logo:
(a) a governanta e o mordomo são os culpados
(b) o cozinheiro e o mordomo são os culpados
(c) somente a governanta é culpada
Instituto de Química – UNESP – Araraquara
12
Introdução à Ciência da Computação
(d) somente o cozinheiro é culpado
(e) somente o mordomo é culpado
2) O preço de um produto foi reduzido em 20% numa liquidação. Qual deverá ser a porcentagem
de aumento do preço do mesmo produto para que ele volte a ter o preço original?
(a) 15%
(b) 20%
(c) 25%
(d) 30%
6. Tipos de Dados
Apesar do computador, na maior parte do tempo em nosso meio, ser utilizado como processador
de textos ou para acesso à Internet, o objetivo principal de um computador é a resolução de problemas. Na
resolução de problemas o computador manipula dados de vários tipos. Estes dados podem ser numéricos,
literais ou lógicos. A seguir apresentamos a classificação dos dados e a sua descrição.
Dados
Numéricos
Real
Lógicos
Inteiro
Literais
Caractere
Cadeia de Caracteres
6.1. Dados Numéricos
Os dados numéricos podem ser inteiros ou reais.
Os números inteiros podem ser positivos ou negativos e não possuem a parte decimal.
Os números reais podem ser positivos ou negativos e possuem a parte decimal. Os números reais
podem ser representados em forma decimal ou em forma de ponto flutuante.
Exemplo de números reais em forma decimal: 8.15927, 0.5, 176.48, etc. Obs. O ponto decimal deve
ser representado por ponto (.), seguindo a notação da língua inglesa que é utilizada nas linguagens de
programação.
Geralmente, utiliza-se a representação de números reais em ponto flutuante (notação científica)
quando o número é muito grande ou muito pequeno.
Exemplo: 0.0000000000061725  617 x 10-14 (representação em ponto flutuante)
418639138670259
 419 x 1012 (representação em ponto flutuante)
Para transformar um número real que está na representação decimal para a representação em
ponto flutuante, devemos:
 definir o número de dígitos de precisão (ou significativos) e arredondar o último dígito, se for
necessário.
 ajustar a magnitude do número como potência de 10.
Instituto de Química – UNESP – Araraquara
13
Introdução à Ciência da Computação
6.2. Dados Literais
Os dados literais são caracteres ou cadeia de caracteres.
Caractere é qualquer letra (maiúscula ou minúscula), algarismo (0, 1, 2, …, 9) ou caractere especial
(sinais de pontuação e símbolos: %, +, @, *, ?, &, #, :, etc.). Os caracteres devem ser representados entre
apóstrofos ('). Exemplos: 'y', 'n', '$', etc.
Cadeia de caracteres ou string: é uma sequência de caracteres. As cadeias de caracteres devem ser
representadas entre aspas (“). Exemplos: “Ola”, “Bem vindo!”, “Digite um numero:”, etc.
6.3. Dados Lógicos
Os dados lógicos são também chamados de dados booleanos e podem assumir somente um dos
valores: falso ou verdadeiro. Em linguagens de programação, geralmente usa-se o número 1 para
representar um resultado verdadeiro e o número 0 para representar um resultado falso.
7. Constantes e Variáveis
Constantes são valores fixos que não se modificam durante a execução do programa. As constantes
podem ser numéricas (5, 128, -76), literais ("Paula", "feminino", "fim"), ou lógicas (V ou F).
Variáveis são entidades que possuem um conteúdo (valor) que pode variar no algoritmo ou no
programa. Embora elas possam assumir diferentes valores, só podem armazenar um único valor a cada
instante. Uma variável é conhecida no programa por um nome ou identificador.
O identificador ou o nome de uma variável deve iniciar com uma letra e pode ser seguida de letras,
algarismos ou caractere de sublinhado, mas não pode conter caracteres especiais (-, *, %, ç, e letras com
acentos). Exemplos de identificadores válidos: X, Y1, saldo, nome_do_cliente, RG, Aula26, etc.
Exemplos de nomes de variáveis inválidos: 2x, A[1], M-N, 07/09, nota-do-aluno, salário, etc.
As variáveis podem ser numéricas ou literais e devem ter nomes significativos. Nomes significativos
são nomes que lembram o seu conteúdo. Por exemplo: nota, nome, saldo, ao invés de x, y, z.
8. Expressões
Expressão em termos computacionais está ligado ao conceito de expressão ou fórmula matemática,
onde um conjunto de variáveis e constantes se relacionam por meio de operadores compondo uma
fórmula que, quando avaliada, resulta em um valor.
8.1. Expressões Aritméticas
Expressões Aritméticas: são expressões em que os operadores são aritméticos e os operandos são
constantes e/ou variáveis numéricas.
Operadores Aritméticos e suas Prioridades
prioridade
1
2
operador
ação
*
multiplicação
/
divisão
MOD
resto da divisão inteira
+
adição
-
subtração
Instituto de Química – UNESP – Araraquara
14
Introdução à Ciência da Computação
Funções
função
ação
EXP(x)
exponencial de x (ex, onde e = 2.718282...)
LN(x)
logaritmo neperiano de x (logex)
ABS(x)
valor absoluto de x (x)
TRUNC(x)
parte inteira do número real x
ROUND(x)
arredonda o número real x
SIN(X)
seno de x
COS(x)
Cosseno de x
POW(x,n)
SQRT(x)
potência com base x e expoente n ( x n )
raiz quadrada de x ( x )
Exemplos de expressões aritméticas:
a) A-B*POW(C,2)
b) SQRT(POW(b,2)-4*a*c)
c) TRUNC(3.68) - EXP(3)
d) ROUND(5.8)+ABS(-4)
e) SIN(A)-LN(B)
f) 22 MOD 6 + soma
8.2. Expressões Relacionais
Expressões Relacionais ou Relações: são expressões que realizam comparações entre valores do
mesmo tipo. Estes valores são representados nas relações através de constantes, variáveis ou expressões
aritméticas.
Operadores Relacionais
operador
ação
=
igual
<>
diferente
<
menor
>
maior
<=
menor ou igual
>=
maior ou igual
O resultado obtido de uma expressão relacional é sempre um valor lógico (Verdadeiro ou Falso).
Exemplos de expressões relacionais:
a) X+Y=3*X+5
b) 2*A<8
c) nome <> "Ana Maria"
d) SQRT(POW(b,2)-4*a*c) >= 0
e) A <> B
f) sexo = "masculino"
Instituto de Química – UNESP – Araraquara
15
Introdução à Ciência da Computação
8.3. Expressões Lógicas
Expressões Lógicas: são expressões cujos operadores são lógicos e cujos operandos são expressões
relacionais, constantes e/ou variáveis do tipo lógico. O resultado de uma expressão lógica é sempre um
valor lógico (V ou F).
Operadores Lógicos
operador
ação
e ()
conjunção
ou ()
disjunção
não (~)
negação
Sejam p e q proposições, temos a seguinte Tabela-Verdade:
conjunção
p
V
V
F
F
q
V
F
V
F
disjunção
pq
V
F
F
F
p
V
V
F
F
negação
pq
V
V
V
F
q
V
F
V
F
p
V
F
~p
F
V
Suponha que tenhamos duas proposições:
A : “Eu gosto de dia ensolarado.”
B : “Hoje vai chover”
Podemos criar várias composições de proposições usando os operadores lógicos:
~A : “Eu não gosto de dia ensolarado”
~(A  B) : “Não é verdade que eu gosto de dia ensolarado e hoje vai chover”
A  ~B : “Eu gosto de dia ensolarado ou hoje não vai chover”
Exemplos de expressões lógicas:
a) X > 2*Y  Idade = 18
b) cidade = "Araraquara"  bairro = "Centro"
c) ~Fim  Total < 15
Prioridade entre os Operadores
prioridade
operador
1
aritmético
2
relacional
3
não
4
e
5
ou
Obs: Vários níveis de parênteses podem ser utilizados para fixar uma ordem de execução diferente
da prioridade indicada pela tabela acima.
Exemplo: ~(x = 20  y > 5)
Instituto de Química – UNESP – Araraquara
16
Introdução à Ciência da Computação
9. Fluxogramas
Fluxograma ou diagrama de blocos é a representação simbólica dos passos a serem seguidos em
um algoritmo, ou seja, é a representação esquemática de um processo.
Exemplo de Controle de Estoque:
O funcionário responsável pelo estoque recebe uma solicitação de peça e verifica na listagem de
estoque a disponibilidade da mesma. Caso a peça esteja disponível, ela é entregue ao solicitante e em
seguida é efetuada a baixa no estoque. Caso a peça não esteja disponível, o funcionário verifica o tempo de
entrega junto ao fornecedor da peça e informa o tempo de entrega ao solicitante. Caso o solicitante deseje
a peça, é efetuado o pedido ao fornecedor e aguarda-se a chegada da peça e a sua entrada no estoque. Em
seguida ela é entregue ao solicitante e é efetuada a baixa no estoque.
Início
Recebe a solicitação e
verifica no estoque
S
Entrega ao solicitante
Dá baixa no estoque
Disponível ?
Faz o pedido e
aguarda a entrega no
estoque
N
Verifica o tempo de
entrega e informa ao
solicitante
S
Quer a peça?
N
Fim
Os símbolos básicos utilizados em fluxogramas são:
início ou fim
leitura (entrada)
decisão
cálculo e atribuição
impressão (saída)
sentido do fluxo
9.1. Comando de Atribuição
O Comando de Atribuição permite que se forneça um valor a uma determinada variável. O valor
pode ser resultado de uma expressão.
Identificador  valor ou expressão
Instituto de Química – UNESP – Araraquara
17
Introdução à Ciência da Computação
Exemplos:
a) A  7
b) idade  18
c) NOME  "Marina"
d) media  (a + b)/2
e) X  Y
9.2. Comando de Entrada
O Comando de Entrada permite que o usuário forneça valores ao programa.
lista de identificadores
onde: lista de identificadores são os nomes das variáveis, separados por vírgula, nas quais serão
armazenados os valores provenientes do usuário através dos dispositivos de entrada.
9.3. Comando de Saída
O Comando de Saída permite mostrar ao usuário os valores das variáveis ou das constantes.
lista de identificadores, constantes
ou expressões
onde: lista de identificadores são os nomes das variáveis, cujos conteúdos serão mostrados, as constantes
são os valores e as expressões podem ser expressões aritméticas ou outras, cujos resultados serão
mostrados aos usuários através de um dispositivo de saída.
9.4. Estrutura Sequencial
Estrutura Sequencial é uma coleção de ações a serem executadas sequencialmente.
ação1
ação2
Exemplo 9.1.
Fluxograma para ler três números, calcular a média aritmética entre estes números e imprimir o
resultado.
Instituto de Química – UNESP – Araraquara
18
Introdução à Ciência da Computação
início
A,B,C
media  (A+B+C)/3
“Média = “, media
fim
9.5. Estruturas Condicionais
Estas estruturas permitem escolher um grupo de ações ou estruturas a serem executadas quando
uma determinada condição, representada por uma expressão lógica, é satisfeita ou não.
9.5.1. Estrutura Condicional Simples
condição
F
V
ação / ações
A(s) ação(ões) só será(ão) executada(s) se a condição for Verdadeira. Condição é um teste, cujo
resultado é Verdadeiro ou Falso
Exemplo 9.2.
Fluxograma para ler uma nota e imprimir REPROVADO, caso a nota seja menor do que 5.
início
nota
nota < 5
F
V
“REPROVADO”
fim
Instituto de Química – UNESP – Araraquara
19
Introdução à Ciência da Computação
9.5.2. Estrutura Condicional Composta
V
F
condição
ação1 / ações1
ação2 / ações2
Se a condição for Verdadeira, a ação1 ou a sequência de ações1 serão executadas, se a condição for
Falsa, a ação2 ou a sequência de ações2 serão executadas.
Exemplo 9.3.
Fluxograma para ler a nota da prova e a nota do trabalho, e imprimir REPROVADO, caso a nota da
prova ou do trabalho seja menor do que 5 e caso contrário imprimir APROVADO.
início
prova, trab
V
prova < 5
ou trab < 5
“REPROVADO”
F
“APROVADO”
fim
9.6. Estruturas de Repetição
Uma estrutura de repetição permite repetir um grupo de ações ou estruturas, várias vezes. O fim
da repetição é determinado por um teste de condição.
9.6.1. Estrutura de Repetição Enquanto-faça
Esta estrutura de repetição tem o teste de condição no início da repetição. Portanto, enquanto a
condição é verdadeira, a ação ou as ações serão executadas repetidamente (ENQUANTO-FAÇA). Neste tipo
de estrutura de repetição, caso a condição seja Falsa na primeira vez, a ação ou as ações não serão
executadas nenhuma vez.
condição
F
V
ação / ações
Instituto de Química – UNESP – Araraquara
20
Introdução à Ciência da Computação
Exemplo 9.4
Fluxograma para imprimir o quadrado dos números inteiros entre 1 e 50 (inclusive), usando a
estrutura de repetição Enquanto-faça.
início
N1
N <= 50
F
V
Q  N*N
Q
N  N+1
fim
9.6.2. Estrutura de Repetição Faça-enquanto
Esta estrutura de repetição tem o teste de condição no final da repetição. Portanto, neste tipo de
estrutura de repetição, a ação ou as ações serão executadas pelo menos uma vez.
ação / ações
V
condição
F
Instituto de Química – UNESP – Araraquara
21
Introdução à Ciência da Computação
Exemplo 9.5.
Fluxograma para imprimir o quadrado dos números inteiros entre 1 e 50 (inclusive), usando a
estrutura de repetição Faça-enquanto.
início
N1
Q  N*N
Q
N  N+1
V
N <= 50
F
fim
10. Programação
Linguagem de programação é a linguagem utilizada pelo homem para dar instruções ao
computador. Uma linguagem de programação é formada por um conjunto de regras sintáticas e semânticas
que permite ao homem expressar as instruções que deseja que o computador execute.
Existem vários paradigmas (estilos) de programação:
Programação Imperativa (Fortran, Pascal, C)
Programação Orientada a Objetos (Smalltalk, C++, C#, Delphi, Java, Python, Ruby)
Programação Funcional (Lisp)
Programação Lógica (Prolog)
Na programação imperativa os programas são centrados no conceito de estados (modelados por
variáveis) e ações (comandos) que manipulam o estado. Uma linguagem de programação que utiliza o
paradigma imperativo manipula variáveis a partir de ordens ou comandos. Ex. “faça isso e depois aquilo”.
O paradigma orientado a objetos tenta extrair conceitos do mundo real por meio de estruturas
como objetos, classes, atributos e métodos. Uma classe é um conjunto de objetos e cada classe tem seus
atributos (propriedades) e métodos (ações). Ex. Cachorro é uma classe que possui os atributos: raça, idade,
cor, peso, etc. Totó é um objeto da classe cachorro, assim como Banzé. Os métodos da classe cachorro são:
latir, comer, dormir, etc. A programação orientada a objetos é complexa, envolvendo conceitos de
encapsulamento, herança, polimorfismo, associação, agregação, composição, etc.
No paradigma funcional os programadores abstraem o programa como uma sequência de funções
executadas de modo empilhado. Este paradigma é muito utilizado em Inteligência Artificial.
O paradigma lógico tem estilo declarativo e os programas são relações entre entrada e saída. Há
uso deste paradigma em Sistemas Especialistas e Bancos de Dados.
Instituto de Química – UNESP – Araraquara
22
Introdução à Ciência da Computação
Os paradigmas mais utilizados são os paradigmas imperativo e orientado a objetos.
A relação entre linguagens de programação e paradigmas de programação é complexa porque uma
linguagem pode suportar mais do que um paradigma.
Na programação existem também os conceitos de modularização e programação estruturada que
não são paradigmas, mas técnicas de programação. Na programação estruturada os elementos chaves são
as estruturas básicas de controle (sequencial, condicional e repetitiva). Nesta técnica de programação é
proibido o uso irrestrito de comandos de desvio incondicional GOTO para aumentar a legibilidade e a
compreensão do programa.
A modularização de programas permite dividir o programa em blocos denominados procedimentos,
funções ou subrotinas, de modo a facilitar a compreensão e a correção, melhorando a clareza geral do
programa, além de permitir a reutilização de blocos. Com a modularização pode-se separar e esconder do
resto do programa, as informações necessárias para realizar uma tarefa específica.
11. Linguagem C
A linguagem C foi criada no início da década de 1970 por Dennis Ritchie, no Centro de Pesquisas
“Bell Laboratories” da AT&T. Devido à sua simplicidade e flexibilidade, a linguagem C tornou-se ao longo do
tempo uma das linguagens de programação mais populares e de grande interesse para os mais diversos
segmentos da computação. Ela é usada no desenvolvimento de vários softwares e sistemas operacionais
como: UNIX, Windows, Word, Excel, efeitos especiais do filme Guerra nas Estrelas, etc.
A linguagem C é considerada uma linguagem de médio nível, pois situa-se entre a linguagem de
baixo nível (linguagem próxima à linguagem de máquina) e a linguagem de alto nível (linguagem próxima a
do ser humano). Ela permite a manipulação de bits, bytes e endereços de memória, que são características
das linguagens de baixo nível e ao mesmo tempo suporta o uso de tipos de dados (inteiro, caractere, real,
etc.) que é uma das características da linguagem de alto nível.
C é uma linguagem imperativa que permite programação estruturada e modular.
Uma característica importante da linguagem C é a portabilidade, que permite fácil adaptação do
programa escrito para um sistema operacional (por exemplo, Windows) para ser executado em outro
sistema operacional (como Linux). Outra característica importante da linguagem C é a sua capacidade de
gerar programas extremamente rápidos em tempo de execução.
Nos anos 80, a linguagem C tornou-se muito popular, surgiu vários compiladores comerciais de C e
a linguagem C passou a ser reconhecida como linguagem de propósito geral. Com o desenvolvimento de
vários compiladores, tornou-se necessário padronizar a linguagem para garantir a compatibilidade e a
portabilidade da linguagem. A padronização foi desenvolvida pelo ANSI (American National Standards
Institute) que criou o padrão ANSI C em 1989.
A linguagem C++ é uma extensão da linguagem C e possui características do modelo orientado à
objetos adicionadas à linguagem imperativa, sendo portanto uma linguagem híbrida.
11.1. Compilador
O computador não é capaz de entender um programa escrito na linguagem C, pois ele só entende a
linguagem de máquina. Portanto, um programa escrito em qualquer linguagem que não seja a linguagem
de máquina, precisa ser traduzido para a linguagem de máquina para que o computador possa executá-lo.
Assim, após escrevermos um programa na linguagem C, precisamos de um compilador da linguagem C para
traduzir o programa para a linguagem de máquina.
O compilador lê a instrução do programa fonte (.c) escrito na linguagem C, faz a consistência da
sintaxe e se não houver erro, converte-a para a linguagem de máquina.
O programa com as instruções traduzidas para a linguagem de máquina é o programa objeto (.obj).
A este programa é necessário agregar as funções, em linguagem de máquina, que foram utilizadas no
programa e estão em arquivos de bibliotecas. Este trabalho é feito pelo linkeditor (ou editor de ligações)
que junta as funções necessárias ao programa objeto e gera o programa executável (.exe), que pode ser
executado diretamente pelo computador.
Instituto de Química – UNESP – Araraquara
23
Introdução à Ciência da Computação
11.2. Dev-C++
Para criar um programa executável, é necessário digitar o programa fonte e salvá-lo com extensão
.c. Após isso, é preciso compilar e fazer a linkedição para gerar o programa executável.
Para editar, compilar, corrigir e fazer a linkedição de programas em C, utilizaremos um ambiente de
desenvolvimento integrado (IDE – Integrated Development Environment), denominado Dev-C++ (ou DevCpp), que é um software livre destinado à programação em C ou C++.
O Dev-C++ foi desenvolvido pelo programador Colin Laplace e a última versão lançada por ele é a
Dev-C++ 5.0 beta 9.2 (4.9.9.2). No entanto, esta é uma versão antiga, cuja última atualização foi feita em
2005 e apresenta vários problemas de execução em plataformas 64 bits. Por se tratar de uma ótima
ferramenta para desenvolvimento, Johan Mes Orwell deu continuidade ao desenvolvimento do Dev-C++ e
vem disponibilizando novas versões desde 2011. Portanto, é possível baixar uma versão atualizada do DevC++ no site: http://sourceforge.net/projects/orwelldevcpp/
O Orwell Dev-C++ é um projeto ativo e recebe atualizações constantemente. Na data de edição
desta apostila a última versão disponível no site era: Dev-Cpp 5.11 TDM-GCC 4.9.2 (atualizado em
abril/2015).
O arquivo de instalação (Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe) tem 49,3 Megabytes e vem com
compiladores para plataformas 32 e 64 bits, além do depurador (debugger) GDB.
O pacote TDM-GCC inclui o compilador, o pré-processador, o linkeditor, as bibliotecas padrões do C
e do C++ e os arquivos cabeçalhos correspondentes.
Um outro ambiente de desenvolvimento baseado no Dev-C++ é o wxDev-C++ (última atualização
julho/2012), disponível na página: http://wxdsgn.sourceforge.net/
O wxDev-C++ foi criado a partir do código fonte do Dev-C++ e oferece um ambiente de
programação visual, onde a programação é realizada a partir de elementos gráficos que estão disponíveis
na tela. Como este tipo de programação é mais complexa, não será abordada neste primeiro curso de
programação.
11.3. Estrutura Básica de um Programa em C
Um programa em C consiste em uma ou várias funções, cuja estrutura geral é a seguinte:
tipo nome_da_funcao(declaração dos parâmetros)
{
declaração de variáveis;
instrução_1;
...
instrução_n;
return valor;
}
11.4. Função main()
A função main() é a principal função e inicia a execução de um programa na linguagem C.
Neste exemplo, a função principal retornará o valor inteiro 0.
int main()
{
return 0;
}
Instituto de Química – UNESP – Araraquara
24
Introdução à Ciência da Computação
Podemos escrever a função main() na forma resumida (abaixo), pois a forma resumida é
automaticamente convertida, pelo compilador, para a forma padrão (que retorna um inteiro), apresentada
acima.
main()
{
}
Toda função deve ter parênteses, mesmo que vazio, sem nenhum parâmetro. Além disso, toda
função deve ter chaves que delimitam o corpo da função.
11.5. Meu primeiro programa em C
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf(“Meu primeiro programa!\n”);
system(“pause”);
return 0;
}
11.6. Bibliotecas
Bibliotecas são arquivos em linguagem de máquina que contêm funções desenvolvidas por outros
programadores e que podem ser usadas no seu programa. Além da biblioteca padrão ANSI C, fornecida
com os compiladores C, existem também bibliotecas privadas.
Algumas das bibliotecas básicas que fazem parte da biblioteca padrão ANSI C são apresentadas a
seguir:
A biblioteca stdio.h (standard input/output) é uma biblioteca padrão de entrada e saída que
contém funções, macros e constantes padrões ao compilador. Algumas das funções desta biblioteca são:
printf, scanf, getc, putc, getchar, putchar, gets, puts, fopen, fclose, etc.
A biblioteca stdlib.h, muito utilizada, contém funções de utilidade geral, além de funções para
conversão de número em texto e texto em número, gerar número aleatório: system, free, exit, atoi, atof,
rand, abs, etc.
A biblioteca math.h fornece funções matemáticas básicas como: exp, log, sin, cos, tan, pow, sqrt,
etc.
A biblioteca string.h disponibiliza funções para manipulação de strings como: strcpy, strcmp, strlen,
strcat, etc.
11.7. Diretiva #include
Para utilizar funções de uma biblioteca é necessário incluir a respectiva biblioteca no início do
programa, através da diretiva #include.
A diretiva #include<stdio.h> indica ao linkeditor para juntar o código objeto do programa
(resultado da compilação) com o código objeto das funções da biblioteca stdio.h. O arquivo de cabeçalho
stdio.h contém o nome e as características das funções.
Instituto de Química – UNESP – Araraquara
25
Introdução à Ciência da Computação
11.8. Função printf()
A função printf() é uma função da biblioteca padrão stdio.h e não faz parte da definição da
linguagem C. Dentro do parêntesis deve ser colocado entre aspas o que deseja que seja exibido na tela.
Portanto, o comando printf(“Meu primeiro programa!”) imprime na tela o texto informado como
parâmetro: Meu primeiro programa!
Várias combinações de caracteres especiais podem ser usadas no comando printf(). O \n, por
exemplo, serve para mudar de linha. Ex.: printf(“Meu primeiro programa!\n”).
Códigos especiais
Significado
\n
nova linha
\t
tabulação
\a
alerta audível (campainha)
\'
apóstrofo
\”
aspas
A tabela a seguir apresenta alguns códigos de formatação utilizados no printf():
Código de formatação
para printf()
Significado
Tipo
%c
caractere
char
%s
cadeia de caracteres (string)
char
%d
número inteiro
int
%u
número inteiro sem sinal
unsigned
%f
número real
float ou double
%e
número real em notação científica (e minúsculo)
float ou double
%E
número real em notação científica (E maiúsculo)
float ou double
%g
%f ou %e, o que for menor
float ou double
%x
inteiro hexadecimal sem sinal (letras minúsculas)
int
%X
inteiro hexadecimal sem sinal (letras maiúsculas)
int
%p
ponteiro (endereço)
int
%%
imprime o caractere %
char
vírgula.
A função printf() pode ter um ou vários argumentos. Os argumentos devem ser separados por
Vejamos alguns exemplos de uso do printf.
Exemplo 1.
printf(“Meu primeiro programa!”);
O comando acima possui somente um argumento que está entre aspas e será impresso na tela do
computador.
Exemplo 2.
printf(“Fatorial de %d = %d.”, n, fat);
Este comando possui 3 argumentos (separados por vírgulas). O primeiro argumento contém os
caracteres que serão impressos e os códigos de formatação (%d) que indicam o formato em que os
Instituto de Química – UNESP – Araraquara
26
Introdução à Ciência da Computação
argumentos seguintes (n, fat) devem ser impressos. Os argumentos n e fat são variáveis, cujos valores serão
impressos. Portanto, caso o valor da variável n seja 5 e o valor da variável fat seja 120, o comando acima
imprime:
Fatorial de 5 = 120.
Exemplo 3.
printf(“%s obteve media %f.”, nome, media);
Este comando imprime a string contida na variável nome, a mensagem obteve media e o valor da
variável (media) do tipo float (real). Portanto, caso o valor da variável nome seja “Ana Paula”, e o valor da
variável media seja 8.5, o comando imprime:
Ana Paula obteve media 8.5.
Exemplo 4.
printf(“pi = %.4f”, M_PI);
Este comando imprime a mensagem pi = e o valor da constante M_PI (3.14.159265) do tipo float,
usando 4 casas decimais. Portanto, o comando imprime:
pi = 3.1416
11.9. Função scanf()
A função scanf() também é uma função da biblioteca padrão stdio.h. Ela permite ler dados
fornecidos pelo teclado. A sua sintaxe é semelhante a de printf(), isto é, os códigos de formatação
(ilustrados na tabela anterior), compatíveis com os tipos das variáveis, devem ser colocados entre aspas,
seguida por uma lista de argumentos, separados por vírgulas. Os argumentos de scanf() devem ser os
endereços das variáveis, onde serão armazenados os valores fornecidos pelo teclado. Os endereços das
variáveis são os nomes das variáveis precedidos por &. Exemplo: &x, &salario, &nota.
Código de formatação
para scanf()
Significado
Tipo
%c
caractere
char
%s
string ou cadeia de caracteres
-
%d
número inteiro
int
%u
número inteiro sem sinal
unsigned
%f
número real
float
%lf
número real longo
double
Exemplo 1.
scanf(“%d”, &idade);
O comando acima lê um valor inteiro (código %d) e armazena na variável idade.
Exemplo 2.
scanf(“%f %f”, &prova, &trabalho);
O comando acima lê dois valores reais (código %f) e armazena respectivamente nas variáveis prova
e trabalho.
Instituto de Química – UNESP – Araraquara
27
Introdução à Ciência da Computação
11.10. Função system()
A função system() faz parte da biblioteca stdlib.h e com o parâmetro PAUSE serve para interromper
a execução do programa para que o usuário possa ver os resultados na janela de saída, antes que a janela
seja fechada. Sem essa função, o programa é executado e a janela é fechada automaticamente, não
permitindo a visualização dos resultados.
Exemplo:
system(“pause”);
Com o uso de system(“pause”); será exibida na tela a seguinte mensagem: Press any key to
continue.... Caso deseje que não seja exibida esta mensagem, use: system(“pause>>null”);
11.11. Constantes
Uma constante tem valor fixo e inalterável.
Os números constantes na linguagem C podem ser escritos na base decimal, hexadecimal ou octal.
A base decimal é a base que estamos acostumados. Ex. 318, 19.43, -57. Estes números não podem estar
entre aspas.
Caracteres constantes são escritos entre apóstrofos. Ex. 'X', '8', '\n'.
Cadeias de caracteres constantes são escritas entre aspas. Ex. “Meu primeiro programa”.
11.12. Variáveis
Variável é um espaço de memória reservado para armazenar um certo tipo de dado, tendo um
nome para referenciar o seu conteúdo. O tipo da variável informa a quantidade de memória em bytes, que
ela ocupará e o modo como um valor deverá ser armazenado e interpretado.
11.12.1. Tipos de Variáveis
Os tipos básicos de variáveis em C são: int, float, double, char e void. O tipo int tem o tamanho da
palavra da máquina, isto é, em ambientes de 32 bits o tipo int terá o tamanho de 4 bytes e suportará
números inteiros entre -2147483648 a 2147483647. O float terá o tamanho de 4 bytes e suportará
números reais no intervalo 3.4x10-38 a 3.4x1038. Os dados da tabela abaixo referem-se aos tipos de dados de
um ambiente de 32 bits.
Existem em C, 3 modificadores de tipo (short, long e unsigned) que podem acompanhar qualquer
tipo básico de dados, exceto void.
Tipo
Bytes
Bits
Valores
int
4
32
-2147483648 a 2147483647
float
4
32
3.4x10-38 a 3.4x1038
double
8
64
1.7x10-308 a 1.7x10308
void
0
0
Nenhum valor
short
2
16
-32768 a 32767
unsigned
4
32
0 a 4294967295
long double
10
80
3.4x10-4932 a 3.4x104932
11.12.2. Declaração de Variáveis
As variáveis devem ser declaradas no início de uma função, logo após a abertura da chave e antes
de qualquer instrução.
Na declaração de variáveis, deve-se colocar o tipo da variável seguido pelos nomes das variáveis
separados por vírgula.
Instituto de Química – UNESP – Araraquara
28
Introdução à Ciência da Computação
Exemplo:
int lado1, lado2, lado3;
float nota, media;
char alternativa;
11.12.3. Nomes de Variáveis
Os nomes de variáveis (ou identificadores) devem começar com um caractere alfabético e podem
ser seguidos por caracteres alfabéticos ou dígitos (entre 0 e 9). O caractere de sublinhado é considerado
caractere alfabético. Os nomes de variáveis não devem conter caracteres especiais (!, @, -, #, $, %, ¨, &, *,
etc...) e devem ser diferentes das palavras-chave da linguagem C.
A linguagem C é “case sensitive”, isto é, ela diferencia letra maiúscula de minúscula, por isso: Idade
é diferente de idade e também diferente de IDADE.
11.13. Palavras-chave
A tabela abaixo apresenta as palavras-chave ou palavras reservadas da linguagem C (padrão ANSI).
Observe que todas elas são em letra minúscula.
Categoria
Palavras-chave
Tipos de dados
char, int, float, double, void
Modificadores de tipo
long, short, signed, unsigned
Modificadores de tipo de acesso
const, volatile
Classes de armazenamento
auto, extern, static, register
Tipos definidos pelo usuário
struct, enum, union, typedef
Comandos condicionais
if, else, switch, case, default
Comandos de repetição
while, do, for
Comandos de desvio
break, goto, return, continue
Operador
sizeof
11.14. Operadores
Existem muitos operadores na linguagem C. Os operadores mais utilizados serão apresentados a
seguir.
11.14.1. Operador de atribuição
Em C, o operador de atribuição é o sinal de igual.
Exemplo 1.
x = 10;
atribui o valor 10 para a variável x.
Podemos também executar atribuições múltiplas.
Exemplo 2.
y = x = 0;
As atribuições são executadas da direita para a esquerda. Assim, a variável x receberá o valor 0 e a
variável y também receberá o valor 0.
É possível inicializar uma variável na sua declaração.
Exemplo:
Instituto de Química – UNESP – Araraquara
29
Introdução à Ciência da Computação
int x = 5;
float saldo = 0;
11.14.2. Operadores aritméticos
A linguagem C possui 5 operadores aritméticos binários (que operam entre 2 operandos) e um
operador aritmético unário (que opera sobre um único operando).
Operador binário
Exemplo
Ação
+
x+y
soma x e y
-
x-y
subtrai y de x
*
x*y
multiplica x e y
/
x/y
divide x por y
%
x%y
resto da divisão de x por y
Operador unário
Exemplo
Ação
-
-x
troca o sinal de x
Exemplos:
a) 5 * x
b) 14 / 3
c) 17 % 5
d) - y
O operador módulo (%) só aceita operandos inteiros e retorna o resto da divisão inteira. No
exemplo c) 17 % 5, será retornado 2, que é o resto da divisão de 17 por 5. Todos os demais operadores
aceitam operandos inteiros ou reais.
Na divisão (/), se ambos os operandos forem constantes inteiras ou variáveis declaradas como
inteiras (int), o resultado será inteiro. No exemplo b) 14/3, será retornado 4 e não 4.6667. Porém, se pelo
menos um dos operandos da divisão for um número real, ou uma variável declarada como real (float), o
resultado da divisão será real. Por exemplo, caso a variável x seja declarada como float, a variável y seja
declarada como int, a variável x contenha o valor 14 e a variável y contenha o valor 3, o resultado de x / y
será 4.6667, porque uma das variáveis é real.
O operador menos unário (-) é usado para indicar a troca de sinal. Por exemplo, na expressão y = -x;
a variável y está recebendo o valor da variável x, com o sinal trocado.
Os operadores *, / e % têm precedência maior que os operadores + e -. Isso significa que os
operadores *, / e % serão avaliados antes dos operadores + e -. Para mudar a precedência dos operadores,
pode-se utilizar vários níveis de parênteses como por exemplo: (5*(x+2)-6)/4. As expressões entre
parênteses são as primeiras a serem avaliadas. Quando aparecem vários operadores de mesma
precedência em uma expressão, os cálculos serão realizados seguindo a ordem da esquerda para a direita.
11.14.3. Operadores de incremento e decremento
Os operadores de incremento (++) e decremento (- -) são unários.
Operador
Exemplo
Ação
++
x++ ou ++x
incrementa 1 ao valor de x
--
x- - ou - - x
decrementa 1 ao valor de x
O operador de incremento ++ opera sobre o nome de uma variável e adiciona 1 ao valor desta
variável.
Instituto de Química – UNESP – Araraquara
30
Introdução à Ciência da Computação
Exemplos:
a) x++
b) ++x
No item a) temos um exemplo de uso pós-fixado e no item b) temos um exemplo de uso prefixado.
x++ equivale a ++x que equivale a x = x +1.
O operador de decremento - - opera sobre o nome de uma variável e decrementa 1 ao valor desta
variável. Pode também ser prefixado (- - x) ou pós-fixado (x- -).
x- - equivale a - - x que equivale a x = x – 1.
11.14.4. Operadores aritméticos de atribuição
Os operadores aritméticos de atribuição (ou operadores compostos) combinam as operações
aritméticas com a operação de atribuição, oferecendo uma forma mais compacta para algumas expressões
de atribuição. O operador da esquerda é sempre uma variável e o da direita é uma expressão. A operação
consiste em atribuir um novo valor à variável, que depende do operador e da expressão à direita.
A regra geral para operadores aritméticos de atribuição é
x op = exp;
equivale a
x = x op exp;
onde: x é variável, op é um operador aritmético (+, - *, / ou % ) e exp é uma expressão.
Exemplos:
s += 3;
d –= 2+t;
t *= 4;
x %= 3;
y /= (x-1);
equivale a
equivale a
equivale a
equivale a
equivale a
s = s + 3;
d = d – (2+t);
t = t * 4;
x = x % 3;
y = y / (x-1);
11.14.5. Operadores relacionais
Os operadores relacionais fazem comparações e formam as expressões relacionais que são
condições simples.
Operador relacional
Ação
==
igual
!=
diferente
>
maior
<
menor
>=
maior ou igual
<=
menor ou igual
Em C, o resultado de uma expressão relacional (que usa operador relacional) é 1 para verdadeiro e
0 para falso. Não existem em C, valores booleanos “true” e “false”. Embora C defina o valor verdadeiro
como 1, a linguagem considera qualquer valor não zero como verdadeiro, inclusive valor negativo.
Exemplos:
a) nota >= 5.0
b) opcao == 'S'
O resultado da expressão relacional do item a) será 1, se na variável nota tiver qualquer valor igual
ou superior a 5.0, caso contrário o resultado será 0 (zero). No item b), se a variável opcao tiver valor igual a
S maiúsculo, então o valor da expressão relacional será 1, caso contrário 0.
Observação: A comparação de caracteres é “case sensitive”, isto é, para a linguagem C o caractere
's' minúsculo é diferente do caractere 'S' maiúsculo. De fato, para a linguagem C um caractere é apenas um
número inteiro associado a tabela ASCII. Neste caso, o valor de 'S' maiúsculo na tabela ASCII é 83 e o valor
Instituto de Química – UNESP – Araraquara
31
Introdução à Ciência da Computação
de 's' minúsculo é 115. Logo, se opcao='s' no item b), então a expressão relacional é equivalente à 115==83,
que é falsa e retorna o valor 0. Para mais informações sobre a tabela ASCII consulte o Apêndice C da
referência [7].
11.14.6. Operadores lógicos
Os operadores lógicos são utilizados para formar condições mais complexas ao combinar condições
simples (que usam operadores relacionais).
Operador lógico
Ação
&&
e
||
ou
!
não
O operador ! é unário, enquanto que && e || são operadores binários.
Exemplos:
a) resposta == 'N' && !(idade < 18)
b) x > 10 || -x == 5
11.14.7. Operador condicional ternário (?:)
O operador condicional substitui uma expressão condicional do tipo if-else e tem a seguinte forma
genérica:
exp1 ? exp2 : exp3
Por exemplo:
maior = (x>y) ? x : y;
Esta expressão equivale a
if (x>y)
maior = x;
else
maior = y;
Outro exemplo:
printf(“%s”, idade >= 18 ? “maior de idade” : “menor de idade”);
O comando acima imprime maior de idade caso a idade seja maior ou igual a 18 e menor de idade
caso contrário.
11.14.8. Precedência dos Operadores
A tabela a seguir ilustra a precedência entre os operadores apresentados.
Precedência
Operadores
1
- (unário)
2
*
3
4
<
5
++
--
/
%
+
-
<=
>
==
!=
6
&&
7
||
8
?:
>=
Instituto de Química – UNESP – Araraquara
32
!
Introdução à Ciência da Computação
9
=
*=
/=
%=
+=
-=
Para mudar a precedência dos operadores da tabela acima, pode-se utilizar vários níveis de
parênteses como por exemplo: !(salario < 5000.00 && tempo >= 4).
11.15. Biblioteca math.h
A biblioteca math.h contém várias funções e algumas constantes matemáticas úteis. A tabela
abaixo mostra as principais funções e constantes.
Função
Ação
exp(x)
exponencial de x (ex, onde e = 2.718282...)
log(x)
logaritmo natural ou neperiano de x (log ex)
log10(x)
logaritmo de x na base 10 (log10x)
fabs(x)
valor absoluto de x (x)
sin(x)
seno de x
cos(x)
cosseno de x
pow(x,y)
x elevado à potência y (xy)
sqrtx)
raiz quadrada de x ( x )
ceil(x)
arredonda x para o menor inteiro não menor que x (teto de x)
floor(x)
arredonda x para o maior inteiro não maior que x (piso de x)
fmod(x,y)
resto de x/y (x e y reais ou x ou y real)
M_PI
 (3.14159265358979)
M_E
e (2.71828182845904)
11.16. Biblioteca locale.h
A biblioteca locale.h especifica constantes de acordo com a localização específica (regionalização),
como acentuação, ponto decimal, moeda, data, etc.
Portanto, para usar palavras acentuadas no printf, inclua a biblioteca locale.h e no início do
programa inclua o comando setlocale(LC_ALL,”portuguese”) para definir o idioma como português ou
setlocale(LC_ALL,””) para usar a localidade padrão do sistema operacional.
11.17. Comentários
Os comentários são utilizados para documentar o programa e são ignorados pelo compilador. Os
comentários devem ser escritos entre /* e */ e podem ocupar várias linhas. Pode ser usado também o
comentário de linha única //, no qual, tudo a partir de // até o final da linha será considerado comentário.
Exemplos:
a) /* Este programa lê um número fornecido pelo usuário, calcula o fatorial deste número
e mostra para o usuário o valor (fatorial) encontrado. */
b) printf("Digite um numero: "); // mostra na tela a mensagem entre aspas
scanf("%d", &n);
// lê um valor inteiro e armazena na variável n
Instituto de Química – UNESP – Araraquara
33
Introdução à Ciência da Computação
11.18. Estrutura Sequencial
Estrutura sequencial é uma sequência de comandos de atribuição, comandos de entrada ou de
saída.
Exemplo:
Programa para ler o consumo mensal de energia elétrica em kWh e imprimir o valor da conta de
energia, supondo que 1 kWh custe R$ 3,00 e que não há imposto nenhum envolvido no cálculo da conta.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int consumo;
float conta;
printf("Digite o valor do consumo: ");
scanf("%d", &consumo);
conta = consumo*3.00;
printf("Valor da conta = R$ %.2f \n\n", conta);
system("pause");
return 0;
}
11.19. Estruturas Condicionais
11.19.1. Estrutura Condicional Simples
A estrutura condicional simples permite executar um comando (ou bloco de comandos) quando
uma condição for verdadeira. Uma condição é uma comparação que pode ser verdadeira ou falsa.
No trecho abaixo, se a condição1 for verdadeira, o comando1 será executado.
if (condição1)
comando1;
Exemplo:
anos.
Programa para ler a idade e imprimir a mensagem Menor de idade, caso a idade seja inferior a 18
#include<stdio.h>
#include<stdlib.h>
int main()
{
int idade;
printf("Digite a idade: ");
scanf("%d", &idade);
if (idade < 18)
printf("Menor de idade.\n\n");
system("pause");
return 0;
}
Instituto de Química – UNESP – Araraquara
34
Introdução à Ciência da Computação
Quando você deseja que mais que um comando sejam executados caso uma condição seja
verdadeira, você deve utilizar chaves { } para delimitar os comandos que serão executados.
No trecho a seguir, se a condição1 for verdadeira, então o comando1 e o comando2 serão
executados. O comando3 será sempre executado, independentemente da condição1, porque ela está fora
das chaves.
if (condição1)
{
comando1;
comando2;
}
comando3;
Abaixo, se a condição1 for verdadeira, o comando1 será executado. O comando2 e o comando3
sempre serão executados, independentemente da condição1. Isso porque, os comandos (comando1,
comando2 e comando3) não estão entre chaves, assim, o compilador interpretará que somente o
comando1 faz parte da estrutura condicional e os demais comandos estão fora da estrutura condicional e,
portanto serão executados independentemente da condição1, ou seja, serão sempre executados.
if (condição1)
comando1;
comando2;
comando3;
Exemplo:
Programa para ler o raio e caso o raio lido seja positivo, calcular e imprimir a área do círculo.
#include<stdio.h>
#include<math.h>
int main()
{
float raio, area;
printf("Digite o raio do circulo: ");
scanf("%f", &raio);
if (raio >0)
{
area = M_PI*pow(raio,2);
printf("Area do circulo = %f.\n\n", area);
}
system("pause");
return 0;
}
11.19.2. Estrutura Condicional Composta
A estrutura condicional composta permite executar um comando (ou bloco de comandos) quando
uma condição for verdadeira e outro comando (ou bloco de comandos) quando a condição for falsa.
No trecho abaixo, caso a condição1 seja verdadeira, o comando1 será executado e caso contrário,
isto é, se a condição1 for falsa, o comando2 será executado.
if (condição1)
comando1;
else
comando2;
No trecho abaixo, caso a condição1 seja verdadeira, o comando1 será executado e caso contrário, o
Instituto de Química – UNESP – Araraquara
35
Introdução à Ciência da Computação
comando2 e o comando3 serão executados.
if (condição1)
comando1;
else
{
comando2;
comando3;
}
Exemplo:
Programa para ler a nota da prova e do trabalho, e imprimir Reprovado, caso a nota da prova ou do
trabalho seja menor do que 5 e caso contrário, imprimir Aprovado e a média dada pela fórmula:
4 P+ T
M=
.
5
#include<stdio.h>
#include<stdlib.h>
int main()
{
float prova, trab, media;
printf("Digite a nota da prova: ");
scanf("%f", &prova);
printf("Digite a nota do trabalho: ");
scanf("%f", &trab);
if (prova < 5 || trab < 5)
printf("Reprovado \n\n");
else
{
printf("Aprovado \n");
media = (4*prova + trab)/5;
printf("Media = %f. \n\n", media);
}
system("pause");
return 0;
}
11.19.3. Estrutura Condicional com múltiplas ações
Existem situações onde um programa deve executar uma determinada ação baseado num conjunto
finito de opções. Como podem existir várias opções, cada uma delas com uma sequência específica de
comandos, então é necessário usar uma estrutura de decisão que seja capaz de definir qual a ação será
executada dentre as várias opções disponíveis. Para executar essa tarefa podemos usar a estrutura switch
… case. A forma geral da estrutura é:
switch(controle)
{
case opcao_1 :
Sequência de comandos 1;
case opcao_2 :
Sequência de comandos 2;
...
case opcao_n :
Instituto de Química – UNESP – Araraquara
36
Introdução à Ciência da Computação
Sequência de comandos n;
default :
Sequência de comando padrão;
}
A variável controle é usada como indexador no switch, é ela que define qual sequência de
comandos será executada. Por padrão, a variável indexadora (neste caso controle) tem que ser do tipo int
ou char. O comando switch passa o valor da variável controle para o comando case que compara o valor da
variável controle com o valor das constantes opcao_1, opcao_2, …, opcao_n. Então, quando é encontrada
uma constante igual ao valor da variável controle, todas as sequências de comandos a partir daquela opção
são executadas. Por exemplo, se controle == opcao_3, então todas as sequências de comandos a partir da
sequência 3 são executadas. Para executar apenas a sequência de comandos referente a uma determinada
opção, devemos incluir o comando break no final de cada comando case.
switch(controle)
{
case opcao_1 :
Sequência de comandos 1;
break;
...
case opcao_n :
Sequência de comandos n;
break;
default :
Sequência de comando padrão;
}
O comando default é opcional e é executado quando o valor da variável controle é diferente de
todas as constantes opcao_1, opcao_2, …, opcao_n, ou, quando não for incluído break no final dos
comandos case. O break é um comando de desvio. Na linguagem C ele só pode ser usado dentro do
conjunto de comandos de uma estrutura de decisão ou repetição. O comando break é usado para forçar o
encerramento de uma estrutura. No caso de estruturas aninhadas (uma dentro da outra), o comando
encerra apenas a estrutura a qual ele pertence.
Exemplo:
Programa para imprimir um valor de acordo com um número lido pelo teclado. Se o valor lido for
incompatível com as opções, então o programa imprime uma mensagem de erro.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
printf("Digite um numero inteiro entre 1 e 4: ");
scanf("%d",&x);
switch (x)
{
case 1:
printf("O valor = %d\n", x);
break;
case 2:
printf("O dobro de %d = %d\n", x, 2*x);
break;
case 3:
Instituto de Química – UNESP – Araraquara
37
Introdução à Ciência da Computação
printf("O triplo de %d = %d\n", x, 3*x);
break;
case 4:
printf("O quadruplo de %d = %d\n", x, 4*x);
break;
default:
}
printf("Opcao invalida! Voce digitou %d\n", x);
}
system("pause");
return 0;
11.20. Estruturas de Repetição
Uma estrutura de repetição é usada para repetir uma ação ou um conjunto de ações enquanto uma
determinada condição é satisfeita. Estruturas de repetição são essenciais para a manipulação de vetores,
matrizes, criação de menus e outras estruturas de dados em linguagens de programação.
O padrão ANSI C define 3 comandos de repetição para a linguagem C:
do { } while
while
for
A única diferença entre eles está na localização da condição de parada.
No comando do { } while a condição de parada está localizada após o conjunto de comandos do
laço (loop) de repetição. Dessa forma, a condição é testada somente após a primeira execução do laço. Já
nos comandos while e for a condição de parada está localizada antes do conjunto de comandos do laço de
repetição. Então, primeiro testa-se a condição e se ela for falsa, os comandos do laço não são executados. A
sintaxe dos comandos de repetição é discutida em detalhes a seguir.
11.20.1. Estrutura de Repetição do { } while
A estrutura de repetição do { } while (faça-enquanto) é usada quando o laço de repetição tem que
ser executado pelo menos uma vez.
No trecho abaixo, os 3 comandos (comando1, comando2 e comando3) serão repetidos enquanto a
condição for verdadeira e o comando4 só será executado após a condição tornar-se falsa.
do
{
comando1;
comando2;
comando3;
}
while (condição);
comando4;
Exemplo:
Programa para imprimir a soma dos números pares positivos menores que 50.
Instituto de Química – UNESP – Araraquara
38
Introdução à Ciência da Computação
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x, soma;
soma = 0;
x = 2;
do
{
soma = soma+x;
x = x + 2;
} while (x < 50);
printf("Soma = %d \n\n", soma);
system("pause");
return 0;
}
Observação: O comando system(“cls”) limpa a tela.
11.20.2. Estrutura de Repetição while
Na estrutura de repetição while (enquanto) o teste de parada fica antes do conjunto de comandos
do laço e, portanto, existe a possibilidade da repetição não ser executada nenhuma vez, caso a condição
assuma valor falso na primeira verificação.
O comando while foi adicionado à linguagem C por uma questão de compatibilidade com outras
linguagens de programação. Na linguagem C, o comando while pode ser facilmente substituído pelo
comando for e seu uso é recomendado somente para os casos em que não se conhece o número de vezes
que o trecho do programa deve ser repetido. Os comandos no laço serão repetidos enquanto a condição do
teste de parada for verdadeira.
No trecho abaixo, somente o comando1 será repetido enquanto a condição for verdadeira. O
comando2 e o comando3 só serão executados uma vez, após terminar a repetição, isto é, após a condição
assumir valor falso.
while (condição)
comando1;
comando2;
comando3;
Caso você queira que os 3 comandos (comando1, comando2 e comando3) sejam repetidos, você
deve delimitá-los com chaves { }.
No trecho a seguir, os comandos 1, 2 e 3 serão repetidos enquanto a condição for verdadeira e o
comando4 só será executado após a condição tornar-se falsa.
while (condição)
{
comando1;
comando2;
comando3;
}
comando4;
Exemplo:
Instituto de Química – UNESP – Araraquara
39
Introdução à Ciência da Computação
Programa para imprimir a soma dos números pares positivos menores que 50.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x, soma;
soma = 0;
x = 2;
while (x < 50)
{
soma = soma+x;
x = x + 2;
}
printf("Soma = %d \n\n", soma);
system("pause");
return 0;
}
11.20.3. Estrutura de Repetição for
O comando for (para) é a estrutura de repetição mais comum, sendo definida em qualquer
linguagem de programação. No entanto, na linguagem C esse comando foi melhorado, sendo possível usálo para qualquer operação de repetição cujo teste de parada é realizado antes dos comandos do laço.
Em linguagem C a sintaxe do comando for é da forma:
for (inicialização da variável de controle; condição para repetir; incremento ou decremento da
variável de controle)
comando1;
Ou seja, o comando for é dividido em três partes, sendo cada parte separada por um ponto e
vírgula (;). As partes são opcionais e a linguagem C permite que uma delas seja omitida (ou todas elas sejam
omitidas). A separação em partes faz com que o comando for seja muito mais versátil na linguagem C do
que em outras linguagens de programação.
As partes do comando for são explicadas a seguir:
inicialização da variável de controle: é aqui que se define qual é a variável de controle da repetição
e então atribui-se um valor inicial a ela. Esta parte é executada apenas uma vez, no início da primeira
iteração (execução dos comandos do bloco de repetição).
condição para repetir: esta parte é executada após a inicialização da variável de controle e após o
incremento ou decremento da variável de controle. É ela que diz quando a repetição deve parar. Os
comandos do bloco de repetição serão executados enquanto o valor lógico da condição para repetir for
verdadeiro.
incremento ou decremento da variável de controle: esta parte é executada cada vez que termina
uma iteração. É aqui que a variável de controle é incrementada ou decrementada.
Exemplo:
for (i=1,i<=5; i++)
comando1;
A linguagem C permite utilizar várias variáveis de controle e realizar múltiplas operações de
incremento (ou decremento), sendo que cada operação deve ser separada por vírgula. Por exemplo,
podemos implementar um comando for da seguinte maneira:
for (i=0,j=10; i<=5; i++,j--)
comando1;
Instituto de Química – UNESP – Araraquara
40
Introdução à Ciência da Computação
Neste caso, o comando for possui duas variáveis de controle (i e j) que são inicializadas com valores
i=0 e j=10. Em seguida, definimos qual a condição para repetição (i<=5) e finalmente as operações de
incremento ou decremento das variáveis de controle (i++ e j--).
Também podemos definir condição para repetir envolvendo apenas as variáveis de controle.
Exemplo:
for ( i=0,j=10; i<=j; i++,j-- )
comando1;
Após cada iteração, o comando atualiza os valores de i e j e então faz o teste da condição de
repetição. Isso quer dizer que o comando for é capaz de prever mudanças tanto no lado esquerdo quanto
no lado direito do teste de parada. Para finalizar, na linguagem C as variáveis de controle do comando for
podem receber incrementos ou decrementos de qualquer valor. Exemplo:
for (i=0,j=3; j<=300; i+=3,j*=i+1)
comando1;
No trecho acima a variável de controle i recebe incrementos de 3 em 3 e a variável j é
incrementada pela multiplicação de j com i+1. Como i é incrementado antes de j, então o valor usado em j
é sempre o obtido após a atualização da variável i.
Quando há vários comandos que devem ser repetidos, estes comandos devem ser escritos entre
chaves { }.
for (variável = valor inicial; condição para repetição; incremento ou decremento da variável)
{
comando1;
comando2;
}
Exemplo 1 (Incrementando a variável de controle em duas unidades por vez).
Programa para imprimir a soma dos números pares entre 20 e 40 (inclusive os extremos).
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, soma;
soma = 0;
for (i=20; i<=40; i=i+2)
soma = soma + i;
printf("Soma = %d \n\n", soma);
system("pause");
return 0;
}
Exemplo 2 (Usando 2 variáveis de controle).
Programa para imprimir a soma dos números entre 20 e 40 que possuem posição simétrica quanto
ao centro do intervalo. Ou seja, S1=20+40, S2=21+39, S3=22+38, ...
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j, soma;
Instituto de Química – UNESP – Araraquara
41
Introdução à Ciência da Computação
for (i=20,j=40; i<=j; i++,j--)
{
soma=i+j;
printf("%d + %d = %d \n\n",i,j,soma);
}
system("pause");
return 0;
}
Como mencionado, as três partes do comando for são opcionais e existem casos onde essa
característica é muito útil. Por exemplo, quando desejamos criar um menu com várias opções.
Neste caso, é muito comum criarmos uma repetição infinita para assegurar que o programa será
encerrado somente quando a opção Fechar o programa for acionada.
Exemplo 3 (Criando uma repetição sem critério de parada).
Programa que cria um menu para executar várias operações distintas em um número fornecido
pelo usuário.
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
int main()
{
float N;
int opt;
printf("Digite um numero positivo 'N': ");
scanf("%f", &N);
printf("\n Este programa efetua as seguintes operacoes:\n\n");
printf("1 - Imprime o numero lido\n");
printf("2 - Imprime o dobro do numero lido\n");
printf("3 - Imprime o quadrado do numero lido\n");
printf("4 - Imprime a raiz quadrada do numero lido\n");
printf("5 - Fecha o programa\n");
printf("\n Que operacao deseja executar [1~5]? ");
scanf("%d", &opt);
for( ; ; ) // Laço sem critério de parada
{
switch (opt)
{
case 1 :
printf("\n Valor de N: %.2f\n", N);
break;
case 2 :
printf("\n Valor do dobro de %.2f: %.2f \n", N, 2*N);
break;
case 3 :
Instituto de Química – UNESP – Araraquara
42
Introdução à Ciência da Computação
printf("\n Valor do quadrado de %.2f: %.2f \n", N, N*N);
break;
case 4 :
printf("\n Valor da raiz quadrada de %.2f: %.2f \n", N, sqrt(N));
break;
case 5 :
return 0;
default : printf("\n Opcao invalida! \n O Valor digitado foi: %d \n", opt);
}
printf("\n Que operacao deseja executar [1~5]? ");
scanf("%d", &opt);
}
system("PAUSE");
}
Observação: O comando for( ; ; ) é uma repetição sem critério de parada, equivalente ao comando
while (1).
11.21. Diretiva #define
O uso mais frequente da diretiva #define é para dar nome simbólico a uma constante. Por exemplo,
quando estamos escrevendo um programa sobre uma empresa que tem 200 funcionários, podemos definir
n_func como 200, e utilizar n_func no lugar do número de funcionários. Assim, quando houver alteração no
número de funcionários, basta alterar o valor do n_func na diretiva #define, ao invés de modificar todo o
programa onde o número de funcionários é utilizado.
Exemplo:
#define n_func 200
#define mensagem “Bem vindo!”
11.22. Strings
Uma string consiste em uma série de caracteres tratados como uma única entidade. Uma string
pode incluir letras, dígitos e caracteres especiais, inclusive espaço. As constantes strings são escritas entre
aspas: “Ana Cristina Mattos”, “Av. Dom Pedro II, 2183”, “(16) 3301-9500”.
Na linguagem C, string é um vetor (array) do tipo char, que armazena um texto formado por
caracteres, e termina com caractere nulo (\0). Uma string é acessada através de um ponteiro para o
primeiro caractere da string. O valor de uma string é o endereço de seu primeiro caractere. Portanto, em C,
string é um ponteiro para o primeiro caractere do vetor.
Quando o compilador C encontra qualquer coisa entre aspas, ele reconhece que se trata de uma
string constante. Por exemplo:
printf("Digite um numero: ");
11.22.1. Declaração de strings
Uma string deve ser declarada da seguinte forma:
char nome_da_string[tamanho_da_string];
Exemplo:
char curso[30];
char nome[40], sexo[20];
Instituto de Química – UNESP – Araraquara
43
Introdução à Ciência da Computação
No exemplo acima, curso é uma string de 29 caracteres, nome é uma string de 39 caracteres e sexo
é uma string de 19 caracteres.
Cuidado!
a) Ao entrar com os caracteres da string pelo teclado, se o número de caracteres digitados exceder
o tamanho da string (overflow), os últimos caracteres da string substituirão outros dados da memória, o
que pode afetar o funcionamento correto do programa.
b) É muito comum programadores iniciantes errarem o tamanho da string na declaração da
variável. Como toda string termina com o caractere \0, então o tamanho da string tem que ser fornecido de
maneira a caber o caractere de encerramento. Por exemplo, para criar uma string que vai armazenar uma
frase com 40 caracteres, devemos usar o comando:
char nome[41];
11.22.2. Função scanf() para manipulação de strings
A função scanf() lê caracteres de uma string até encontrar um caractere de espaço em branco,
tabulação, nova linha ou indicador de fim de arquivo. Assim, a função scanf() não é apropriada para ler um
texto de múltiplas palavras, pois somente a primeira palavra será armazenada. Exemplo:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char nome[50];
printf(“Digite um nome: “);
scanf("%s", nome);
printf("Ola %s, tudo bem?\n\n", nome);
system("pause");
return 0;
}
No exemplo acima, caso seja fornecido o nome: Maria Cristina de Oliveira, será impresso: Ola
Maria, tudo bem? ao invés de: Ola Maria Cristina de Oliveira, tudo bem? Isso significa que na variável nome
foi armazenada somente a string “Maria”.
Repare também que no comando scanf("%s", nome) não foi utilizado o operador & antes do
segundo argumento (nome). Isto se deve ao fato de que nome é o endereço inicial do vetor de caracteres.
Portanto, a expressão nome é equivalente a &nome[0].
Para ler uma cadeia de caracteres com espaço deve usar gets(nome).
11.22.3. Outras funções para manipulação de strings
Seguem algumas funções próprias para manipulação de strings.
11.22.3.1. gets()
A função gets(), que também faz parte da biblioteca padrão stdio.h, é mais conveniente para a
leitura de textos. Ela permite ler dados fornecidos pelo teclado, até que a tecla <Enter> seja pressionada.
Veja o programa acima, alterado para o uso da função gets().
Instituto de Química – UNESP – Araraquara
44
Introdução à Ciência da Computação
#include<stdio.h>
#include<stdlib.h>
int main()
{
char nome[50];
printf(“Digite um nome: “);
gets(nome);
printf("Ola %s, tudo bem?\n\n", nome);
system("pause");
return 0;
}
No exemplo acima, caso seja fornecido o nome: Maria Cristina de Oliveira, será impresso: Ola Maria
Cristina de Oliveira, tudo bem? Isso significa que na variável nome foi armazenada a string “Maria Cristina
de Oliveira”.
Repare que no gets() não é necessário colocar o código de formatação (“%s”) como no scanf().
Cuidado! Quando é usado scanf() antes do gets(), o gets() não funcionará como esperado, devido o
seguinte problema: quando digitamos um número e teclamos <enter>, o que é enviado é o número e o '\n'
(<enter>), mas o scanf() só lê o número e deixa o '\n' no buffer de entrada padrão (stdin). Daí, se o próximo
comando for gets(), o '\n' será lido automaticamente pelo gets(), e com isso o programa não vai ler
(esperar) nenhuma entrada quando passar por esse gets(). Para resolver esse problema, coloque o
comando fflush(stdin); antes do comando gets(). Outra forma de resolver esse problema é colocando %*c
no scanf() anterior ao gets(), para que o \n seja descartado. Exemplo: scanf(“%d%*c”, &num);.
11.22.3.2. puts()
A função puts(), que também faz parte da biblioteca padrão stdio.h, imprime uma única string por
vez. A função puts() imprime a cadeia de caracteres e muda de linha, por isso não é necessário o \n.
Exemplo:
puts(“Hello!”);
puts(nome);
11.22.3.3. strcpy()
A função strcpy() faz parte da biblioteca padrão string.h. Esta função recebe dois endereços de
strings e copia o conteúdo da segunda na primeira.
Exemplo:
strcpy(mensagem, “Seja bem vindo!”);
Este comando copia a string “Seja bem vindo!” para a variável mensagem. Portanto, após esse
comando, a variável mensagem passará a conter a string “Seja bem vindo!”.
Exemplo:
strcpy(rico, nome);
Este comando copia o conteúdo da variável nome para a variável rico. Portanto, caso a variável
nome tenha o conteúdo “Ana Helena”, após esse comando, a variável rico passará a conter “Ana Helena”.
11.22.3.4. strcmp()
A função strcmp() faz parte da biblioteca padrão string.h. Esta função serve para comparar os
caracteres contidos em duas cadeias. Caso você tenha uma variável string denominada nome, e queira
verificar se o seu conteúdo é “fim”. Neste caso, como você quer comparar strings, deve fazer o seguinte
teste: strcmp(nome,"fim")==0 ao invés de nome == "fim". Isto porque, o último comando comparará o
endereço da string nome e não o seu conteúdo.
Instituto de Química – UNESP – Araraquara
45
Introdução à Ciência da Computação
A função strcmp() retorna 0 quando o conteúdo das duas strings forem iguais e qualquer outro
número positivo ou negativo, caso os conteúdos das strings sejam diferentes.
Exemplo:
strcmp(rico, nome);
Este comando compara o conteúdo da variável rico com o conteúdo da variável nome (ambas
variáveis do tipo string) e retorna 0 caso os conteúdos sejam iguais e qualquer outro número caso os
conteúdos sejam diferentes.
11.22.3.5. strlen()
A função strlen() faz parte da biblioteca padrão string.h. Esta função recebe uma string e retorna o
comprimento (número de caracteres) da string.
Exemplo:
tamanho = strlen(nome);
No exemplo acima, o comprimento da string nome será atribuído à variável tamanho.
11.23. Funções
Funções são blocos de instruções que realizam tarefas específicas, possuem suas próprias variáveis
e são agrupadas em uma unidade com um nome para referenciá-las .
As funções são utilizadas para a obtenção de programas modulares. É aconselhável a elaboração de
programas modulares, pois dividindo o programa em pequenas partes, é mais fácil de criar, atualizar e
podem ser testados separadamente e integrados somente após termos certeza de que funcionam
corretamente.
As funções evitam que o programador tenha que escrever o mesmo código repetidas vezes.
Qualquer bloco de instruções que aparece mais de uma vez no programa é candidato a ser uma função. As
funções permitem que o mesmo bloco de instruções seja executado com diferentes conjuntos de dados, ou
em diferentes lugares do programa.
Para uma função ser executada ela deve ser chamada ou ativada por uma função. A única exceção
é a função main() que é a principal função e é chamada ao iniciar a execução de um programa na
linguagem C. As funções printf(), scanf(), gets(), strcpy() fazem parte da biblioteca do C e são adicionadas
aos programas pela diretiva #include, no momento da linkedição e são utilizadas por nós sem sabermos
detalhes de suas programações.
A estrutura geral de uma função é:
tipo nome_da_funcao(declaração dos parâmetros)
{
declaração de variáveis;
instrução_1;
...
instrução_n;
return valor;
}
Veja no programa abaixo, um exemplo de função que calcula a área do círculo.
// Programa para calcular a área do círculo usando função.
#include<stdio.h>
#include<stdlib.h>
Instituto de Química – UNESP – Araraquara
46
Introdução à Ciência da Computação
float area_do_circulo(float);
// protótipo ou declaração da função
int main()
// programa principal
{
float r, a;
printf("Digite o raio de um circulo: ");
scanf("%f", &r);
a = area_do_circulo(r);
// chamada da função
printf("A area deste circulo = %.2f\n\n", a);
system("pause");
return 0;
}
float area_do_circulo(float raio)
{
float area;
area = 3.1415*raio*raio;
return area;
}
// definição da função
Uma função só pode ser chamada depois de ter sido declarada. A declaração da função (ou
protótipo da função) deve ser colocada no início do programa. O protótipo serve para definir o tipo da
função e os seus parâmetros. O tipo da função é o tipo do valor retornado pela função. O protótipo da
função deve preceder a chamada e a definição da função, mas caso a função seja definida (escrita) antes da
função chamadora, o protótipo pode ser omitido.
No exemplo acima, o protótipo: float area_do_circulo(float); informa que a função area_do_circulo
é do tipo float, isto é, retorna um valor do tipo float, e recebe um argumento float.
O comando return termina a execução da função, retorna o valor para a função que chamou e
retorna o controle para a instrução seguinte à instrução que chamou a função.
Quando uma função não retorna nenhum valor, ela é do tipo void. Vários valores podem ser
passados para uma função como argumentos, mas somente um valor pode ser retornado pela função. Uma
função pode também não receber nenhum argumento. Quando vários valores são passados para uma
função, estes devem ser separados por vírgula e cada um deve ter o seu tipo declarado. Ex. soma(int n1, int
n2).
Na função area_do_circulo() podemos eliminar a variável area e colocar a expressão
3.1415*raio*raio diretamente no comando return, como segue:
float area_do_circulo(float raio)
{
return 3.1415*raio*raio;
}
O termo parâmetro muitas vezes é utilizado como sinônimo de argumento, mas geralmente utilizase "parâmetros" quando se faz referência às variáveis encontradas (entre parênteses) na definição de uma
função e "argumentos" aos valores atribuídos a esses parâmetros. Os parâmetros servem para enviar dados
para uma função e podem ser utilizados livremente no corpo da função.
Instituto de Química – UNESP – Araraquara
47
Introdução à Ciência da Computação
11.24. Criando Bibliotecas
Quando escrevemos programas em C, inicialmente colocamos as diretivas #include para incluir ou
importar as bibliotecas (stdio.h, stdlib.h, math.h) que serão utilizadas no programa.
Quando uma função ou estrutura é utilizada em vários programas, nós podemos criar uma
biblioteca que contenha essa função ou estrutura e importar ou incluir essa biblioteca nos nossos
programas.
Para criar uma biblioteca, siga os passos:
Comece um novo arquivo e digite a sua função ou estrutura normalmente, como se
estivesse escrevendo um programa.
Salve esse arquivo com extensão .h (h significa header = cabeçalho), na própria pasta onde
armazena os seus programas. Por exembo: minha_bib.h
No seu programa, para usar uma função ou estrutura contida em uma biblioteca que foi criada:
Acrescente a diretiva #include e o nome da biblioteca (que contém a função ou a estrutura
desejada) entre aspas (“).
Para incluir a biblioteca citada acima, seria #include”minha_bib.h”
As aspas são utilizadas no lugar do < >, para indicar ao compilador para procurar esta biblioteca na
pasta onde está o programa, antes de procurar na pasta include.
11.25. Vetores
Vetor (ou matriz unidimensional) é uma coleção de dados do mesmo tipo que compartilham o
mesmo nome. É necessário 1 índice para individualizar um elemento da coleção. O índice utilizado na
linguagem C para identificar a posição de um elemento do vetor começa sempre em 0 (zero) e vai até o
tamanho do vetor menos uma unidade.
Na declaração de um vetor, é colocado o nome do vetor seguido do tamanho do vetor entre
colchetes [ ].
Observação: Lembre que uma string é um vetor de char.
Exemplos de declaração:
char nome[50];
// nome é um vetor de 50 caracteres
int temperatura[10];
// temperatura é um vetor de 10 números inteiros
float nota[40];
// nota é um vetor de 40 números reais
nota
nota[0]

8.2
nota[1]

3.6
nota[2]

9.5
...
nota[39]

7.1
Cada elemento do vetor é referenciado pelo nome do vetor seguido pela posição do elemento
entre colchetes [ ]. Exemplo: nota[0], nota[3], etc.
11.26. Matrizes
Matriz é uma variável capaz de armazenar vários elementos do mesmo tipo em uma estrutura com
um único nome. As matrizes podem ser unidimensionais (vetores), bidimensionais ou multidimensionais.
Estudaremos aqui as matrizes bidimensionais que necessitam de 2 índices para individualização de um
elemento (o primeiro índice identifica a linha e o segundo índice identifica a coluna).
Exemplos de declaração:
float tabela[5][3];
int quadro[3][3];
// tabela é uma matriz de 5 linhas e 3 colunas, cujo conteúdo é número real.
// quadro é uma matriz de 3 linhas e 3 colunas, cujo conteúdo é inteiro.
Instituto de Química – UNESP – Araraquara
48
Introdução à Ciência da Computação
quadro[0,0] quadro[0,1]


6
-1
0
 quadro[0,2]
quadro
2
8
14  quadro[1,2]
-5
9
7
 quadro[2,2]


quadro[2,0] quadro[2,1]
Obs. Lembre-se que uma string (ou cadeia de caracteres) é um vetor de caracteres na linguagem C.
Portanto, uma matriz de strings é um vetor contendo vetores de caracteres. No exemplo abaixo, nome é
uma matriz de 20 linhas e 40 colunas, cujo conteúdo é caractere (ou seja, nome é um vetor de 20 cadeias
de caracteres, de tamanho 39).
char nome[20][40];
nome
Ana Carolina de Oliveira
 nome[0]
Carlos Alberto de Souza
 nome[1]
Denise de Mattos
 nome[2]
...
...
Luis Vitor Vicentini
 nome[19]
11.26.1. Atribuindo valores a uma matriz
Existem duas formas de atribuir valores em matrizes. A primeira consiste em atribuir valores a
matriz durante o seu processo de criação. Esse caso também é conhecido na literatura como inicialização
de variáveis. Tal como foi visto na Seção Operador de atribuição, podemos criar uma variável com valor
inicial da seguinte maneira:
int mat[2][2]={{-1 2},{5 -4}};
O comando acima cria uma matriz 2x2 com valores:
[
mat= −1 2
5 −4
]
Quando o número de valores fornecidos na inicialização é menor que o número de elementos da
matriz ou vetor, o compilador automaticamente preenche os termos restantes com zero. Esse
procedimento é muito útil para a construção de certas matrizes.
Exemplo 4 (Criando uma matriz identidade).
Programa que cria e imprime uma matriz identidade de dimensão NxN, sendo N um valor definido dentro
do programa.
#include <stdio.h>
#include<stdlib.h>
#define N 2
main(){
int MA[N][N]={0},i,j;
for(i=0;i<N;i++)
MA[i][i]=1;
printf("\n\n MA = \n [");
Instituto de Química – UNESP – Araraquara
49
Introdução à Ciência da Computação
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%3d",MA[i][j]);
if(i<N-1) printf("\n ");
else printf(" ]\n\n");
}
system("PAUSE");
return 0;
}
Uma outra forma de atribuirmos valores em uma matriz consiste em fornecer os valores dos
termos da matriz manualmente. Para isso usamos o comando for. Abaixo, apresentamos um exemplo de
um trecho de programa para preenchimento de uma matriz 3x2 com valores inteiros provenientes do
teclado.
#define m 3
#define n 2
int mat[m][n], i, j;
for ( i=0; i<m; i++ )
for ( j=0; j<n; j++ )
scanf("%d", &mat[i][j]);
Exemplo 5 (Exibindo a transposta de uma matriz).
Programa cria uma matriz retangular de dimensão 3x2 com dados fornecidos pelo usuário e então imprime
na tela a matriz de entrada e sua transposta.
#include <stdio.h>
#include<stdlib.h>
#define m 3
#define n 2
main(){
int i,j;
float A[m][n],TA[n][m];
printf(" Este programa exibe a transposta de uma matriz A 3x2\n\n");
printf("\t Digite os elementos da matriz.\n\n");
for ( i=0; i<m; i++ )
for ( j=0; j<n; j++ ){
printf("\t Elemento A(%d,%d) = ",i+1,j+1);
scanf("%f", &A[i][j]);
TA[j][i]=A[i][j];
printf("\n");
}
printf("\n A = \n [");
for(i=0;i<m;i++){
Instituto de Química – UNESP – Araraquara
50
Introdução à Ciência da Computação
for(j=0;j<n;j++)
printf(" %7.2f",A[i][j]);
if(i<m-1) printf("\n ");
}
printf(" ]\n\n\n A^T = \n [");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf(" %7.2f",TA[i][j]);
if(i<n-1) printf("\n ");
}
printf(" ]\n\n");
system("PAUSE");
return 0;
}
11.27. Debug
Em informática, depurar um programa significa detectar e eliminar erros do programa. O Dev-C++
possui uma ferramenta para depuração (debug) que auxilia nestas tarefas.
Para utilizar o depurador do Dev-C++:
abra o programa que deseja depurar
crie pelo menos um ponto de parada de execução no programa, clicando na coluna
numerada à esquerda do código (a linha ficará com a cor de fundo vermelha)
na parte inferior da janela do Dev-C++, clique em Depurador
para começar a depurar o programa, clique em Depurar, na parte inferior da janela
para acompanhar o programa linha à linha, clique em Próxima linha
para pular para o próximo ponto de parada, clique em Continuar
para saber o valor atual da variável, posicione a seta do mouse sobre a variável no programa
para visualizar e acompanhar o valor de uma variável no Depurador, clique em Adicionar
marcador e digite o nome da variável
para remover um marcador (variável) do Depurador, clique o botão direito do mouse sobre o
marcador e selecione Remover marcador
na chamada de uma função, para rastrear os passos da função, clique em Passar por dentro
para parar o programa no meio da execução, clique em Parar Execução
Instituto de Química – UNESP – Araraquara
51
Introdução à Ciência da Computação
12. Exercícios
1. Considere os valores das variáveis a seguir e determine o resultado das expressões lógicas
abaixo:
A 2
B  -3
C  1.5
ano  1996
objeto  ”relógio”
fim  verdadeiro
a) objeto = ”computador” ou A+B/A = C/B
b) 3*A+B >= 2*C e ano = 2005
c) TRUNC(C) <= ABS(A+B) ou 8*C MOD 5 = A e POW(B,2) > -A*B*C
d) não(fim) ou ROUND(C) <= 2*A
e) objeto = ”relógio” e ABS(B+C) <> C
f) SQRT(2*A-A*B*C+2*C) = 2-B e ano <> 2000
2. Determine os valores das variáveis numéricas X, Y e Z após a execução dos comandos abaixo:
X  31 MOD 4
Y  ROUND(4.5)
Z  TRUNC(2.6) -2*X
X  SQRT(X*Y-2*Z+2) + Z
Y  ROUND(ABS(Z) + Y/2)
Z  X + 3*Z MOD 8
3. Em quais dos seguintes pares é importante a ordem dos comandos? Isto é, em quais pares
quando se muda a ordem dos comandos os resultados finais se alteram?
a) A  C
BD
b) B  A
CB
c) B  A
BC
d) A  B
BA
4. Baseado nos valores de entrada L1 e L2, que constituem a base e a altura de um triângulo, o que
significa o valor de saída X?
início
L1, L2
X  L1*L2/2
X
fim
5. Elabore um fluxograma para ler uma temperatura dada na escala Celsius (C) e imprimir a
equivalente temperatura em Fahrenheit (F).
9
F= C+32
5
Instituto de Química – UNESP – Araraquara
52
Introdução à Ciência da Computação
= R2.
6. Elabore um fluxograma para ler o raio (R) de um círculo e imprimir a sua área. Sabe-se que: Área
7. Elabore um fluxograma para ler a idade de um aluno e imprimir uma mensagem dizendo se ele é
menor de idade ou maior de idade.
8. Elabore um fluxograma para ler um número e imprimir uma mensagem dizendo se o número lido
é par ou ímpar.
9. Elabore um fluxograma para ler um número e imprimir uma mensagem dizendo se o número é
positivo, negativo ou nulo.
10. Dado o seguinte fluxograma:
início
V
V
V
F
condição2
comando1
F
condição1
comando2
condição3
F
comando4
comando5
comando3
fim
Responda :
a) Se condição1 = V, condição2 = V e condição3 = F, quais os comandos executados?
b) Se condição1 = F, condição2 = V e condição3 = V, quais os comandos executados?
c) Se condição1 = V, condição2 = F e condição3 = F, quais os comandos executados?
d) Quais os valores de condição1, condição2 e condição3 para que nenhum comando seja
executado?
11. Elabore um fluxograma para ler um número e imprimir uma mensagem dizendo se o número
lido é inteiro ou se o número tem a parte decimal.
12. Elabore um fluxograma para ler um ano e imprimir uma mensagem dizendo se o ano lido é
bissexto ou não.
Utilize a seguinte regra: Um ano é bissexto se:
- é divisível por 4 e não é divisível por 100, ou
- é divisível por 400.
Exemplos:
2008 é bissexto porque 2008 é divisível por 4 e não é divisível por 100.
2000 é bissexto porque é divisível por 400.
1900 não é bissexto porque apesar de ser divisível por 4, é também divisível por 100, e por outro
lado, não é divisível por 400.
Instituto de Química – UNESP – Araraquara
53
Introdução à Ciência da Computação
13. Elabore um fluxograma para ler os valores dos coeficientes a, b, e c de uma equação do
segundo grau, e imprimir a única raiz real, ou as duas raízes reais, ou uma mensagem dizendo que as raízes
são complexas.
14. Elabore um fluxograma para ler 3 números e imprimir o maior deles.
15. Uma empresa está dando um reajuste aos seus funcionários de acordo com o seguinte critério:
25% para os funcionários que recebem até R$ 500,00 (inclusive);
20% para os funcionários que recebem entre R$ 500,01 e R$ 1.000,00 (inclusive);
15% para os funcionários que recebem acima de R$ 1.000,00.
Elabore um fluxograma para ler o salário de um funcionário e imprimir o seu salário reajustado.
16. O que faz o seguinte fluxograma ?
início
N1
N <= 15
F
V
N
N  N+2
fim
17. Elabore um fluxograma para imprimir os números pares positivos menores que 100.
18. O que será impresso ao final de cada um dos seguintes fluxogramas ?
Instituto de Química – UNESP – Araraquara
54
Introdução à Ciência da Computação
a)
b)
início
início
X0
Y0
X0
Y0
X<2
F
X >= 0
V
X  X+1
Y  Y+2
V
X  X+1
Y  Y+2
Y
Y
fim
fim
c)
F
F
d)
início
início
X0
Y0
X0
Y0
X  X+1
Y  Y+2
X  X+1
Y  Y+2
F
X<2
X=3
V
V
Y
Y
fim
fim
19. Elabore um fluxograma para imprimir os 10 primeiros números positivos múltiplos de 6.
20. Elabore um fluxograma para imprimir N termos de uma Progressão Aritmética (PA) de elemento
inicial a e razão r. Os valores de N, a e r devem ser lidos inicialmente.
21. Elabore um fluxograma para ler a idade de 500 vestibulandos e imprimir quantos desses
vestibulandos são menores de idade.
Instituto de Química – UNESP – Araraquara
55
Introdução à Ciência da Computação
22. Elabore um fluxograma para calcular e imprimir a soma dos números entre 1 e 10 inclusive.
23. Elabore um fluxograma para calcular e imprimir a soma dos números inteiros positivos ímpares
inferiores ou iguais a um número N (positivo) lido inicialmente.
24. Elabore um fluxograma para calcular e imprimir o produto dos números inteiros entre 1 e 15
(inclusive).
25. Elabore um fluxograma para ler um número e calcular e imprimir o fatorial deste número.
26. Elabore um fluxograma para ler o saldo de 1500 clientes de uma agência bancária, e imprimir:
a) o saldo médio desses clientes;
b) a porcentagem de clientes com saldo devedor.
27. Elabore um fluxograma para ler 2 números e imprimir o Máximo Divisor Comum (MDC) entre
esses números.
Exemplo: MDC entre 15 e 54 é 3 pois:
Quociente =
3
54 15
Resto = 9
1
9
6
1
6
3
2
3
0
MDC
28. Elabore um fluxograma para ler o nome e a nota de 70 alunos e imprimir:
a) quantos alunos foram reprovados (nota inferior a 5,0).
b) a maior nota e o nome do(a) aluno(a) que obteve essa nota.
29. Elabore um fluxograma para ler o nome, a idade e o sexo de 50 funcionários de uma empresa, e
imprimir:
a) a idade média dos funcionários do sexo masculino;
b) a porcentagem de funcionários do sexo feminino, com idade superior a 30 anos;
c) a menor idade e o nome do(a) funcionário(a) que possui essa idade.
30. Elabore um fluxograma para ler o saldo de 800 clientes de uma agência bancária e imprimir:
a) a porcentagem de clientes com saldo devedor;
b) o maior e o menor saldo.
31. Elabore um programa, em linguagem C, para ler 2 números e calcular e imprimir a média
aritmética destes números.
32. Elabore um programa, em linguagem C, para ler a medida da base e da altura de um triângulo e
imprimir a área deste triângulo.
33. Um marceneiro precisa cortar vários pedaços de madeira de comprimento = 45 cm cada um.
Elabore um programa, em linguagem C, para ler o comprimento da tábua (em metros) e imprimir a
quantidade de pedaços e a sobra (em centímetros). Exemplo: Caso o comprimento da tábua seja 5 m, a
quantidade de pedaços será 11 e a sobra será de 5 cm.
34. Uma entidade filantrópica faz sorteios cujos bilhetes contém números de 3 dígitos. O sorteio é
baseado no primeiro prêmio da loteria federal, sendo o número sorteado formado pelos três últimos
dígitos do primeiro prêmio na ordem inversa. Por exemplo, se o primeiro prêmio for 51782, o número
sorteado será 287. Elabore um programa, em linguagem C, para ler o número do primeiro prêmio da loteria
federal (de 5 dígitos), em uma variável do tipo int, e imprimir o número sorteado.
Instituto de Química – UNESP – Araraquara
56
Introdução à Ciência da Computação
35. Elabore um programa, em linguagem C, para ler a nota de um aluno e imprimir uma mensagem
dizendo se ele foi aprovado (nota  5,0) ou reprovado.
36. Elabore um programa, em linguagem C, para ler 2 números, e escrever se o primeiro número é
maior, menor ou igual ao segundo.
37. Elabore um programa, em linguagem C, para ler o salário de um funcionário e imprimir o
percentual de reajuste e o salário reajustado de acordo com a seguinte tabela:
Salário
até R$ 1.000,00
Reajuste
15%
acima de R$ 1.000,00 até R$ 2.000,00
12,5%
acima de R$ 2.000,00
10%
38. Um casal divide as despesas domésticas mensalmente. Durante o mês, cada um anota as
despesas que paga e no final eles dividem a despesa total ao meio. Elabore um programa, em linguagem C,
para ler as despesas pagas por cada um e imprimir quem deve a quem e o valor da dívida. Lembre que
pode acontecer de nenhum precisar pagar para o outro, caso já tenham pago exatamente a metade das
despesas. Exemplo:
ITEM
Despesas Pagas
Valor Devido
Diferença
MARIDO
2000,00
1700,00
300,00
ESPOSA
1400,00
1700,00
-300,00
TOTAL
3400,00
No exemplo acima, o programa deve imprimir a seguinte mensagem: A esposa deve pagar R$
300,00 ao marido.
39. Elabore um programa, em linguagem C, para ler os lados de um triângulo e testar inicialmente
se é possível formar um triângulo. Caso seja possível formar um triângulo, o programa deve imprimir uma
mensagem informando o tipo de triângulo formado: equilátero, isósceles ou escaleno. Caso contrário, o
programa deve imprimir uma mensagem informando que não é possível formar um triângulo.
40. Elabore um programa, em linguagem C, para ler um número inteiro N  [1 7] e imprimir o dia
da semana equivalente ao número. Por exemplo: Se N = 2, então o programa deve imprimir “segundafeira”.
41. Elabore um programa, em linguagem C, que deve ler um número real X e executar uma das
operações abaixo:
a) Imprimir o dobro de X;
b) Imprimir o valor da expressão X2-X;
c) Imprimir a raiz cúbica de X;
d) Imprimir o valor da expressão X3-X2+X-1.
O programa deverá executar somente uma das opções.
42. Um supermercado está dando descontos no valor das compras, segundo a tabela abaixo:
Valor da compra
Desconto
até R$ 50,00
0%
de R$ 50,01 a R$ 100,00
10%
acima de R$ 100,00
15%
Instituto de Química – UNESP – Araraquara
57
Introdução à Ciência da Computação
Elabore um programa, em linguagem C, para ler o valor da compra de 80 clientes e imprimir para
cada cliente o percentual de desconto e o valor a pagar após o desconto.
43. O que vai ser impresso no final de cada trecho do programa, em linguagem C, abaixo:
a) a=0;
b=0;
do
{
b=b+2;
a=a+1;
} while (a<=2)
printf("%d",b);
b) a=0;
b=0;
do
{
b=b+2;
a=a+1;
} while (a>=3);
printf("%d",b);
c) a=0;
b=0;
while (a<3)
b=b+2;
a=a+1;
printf("%d",b);
d) a=0;
b=0;
while (a<3)
{
b=b+2;
a=a+1;
}
printf("%d",b);
e) b=0;
for (a=1;a<=3;a++)
b=b+2;
printf("%d",b);
f) b=0;
for (a=4;a>=1;a- -)
b=b+2;
printf("%d",b);
44. Um atleta faz flexões em série, com quantidades crescentes: na primeira série faz 1 flexão, na
segunda série faz 2 flexões, na terceira série faz 3 flexões e assim por diante. Ao final de algumas séries, ele
quer saber a quantidade total de flexões que fez. Por exemplo, se ele fez 5 séries, fez ao todo 15 flexões
(1+2+3+4+5). Elabore um programa, em linguagem C, para ler o número de séries e imprimir o total de
flexões.
45. Elabore um programa, em linguagem C, para ler um número e imprimir o fatorial deste número.
46. Elabore um programa, em linguagem C, para ler o nome e a idade de 20 crianças e imprimir:
a) a idade média;
b) a maior idade e o nome da criança que tem essa idade.
47. Elabore um programa, em linguagem C, para ler o nome, a nota da primeira prova ( P1) e a nota
da segunda prova (P2) de 50 alunos. O programa deve imprimir:
a) a média (M) de cada aluno, onde M =
3P1 + 5P 2
;
8
b) a porcentagem de alunos aprovados (M  5,0);
c) a maior média e o nome do(a) aluno(a) que obteve essa média.
48. O que faz o seguinte programa em linguagem C?
#include<stdio.h>
#include<stdlib.h>
int main()
{
Instituto de Química – UNESP – Araraquara
58
Introdução à Ciência da Computação
}
int n,s;
s=0;
printf("Digite um numero inteiro: ");
scanf("%d",&n);
while (n!=0)
{
if ((n>0) && (n % 2==0))
{ s=s+n; }
printf("Digite outro numero inteiro, ou digite 0 para terminar: ");
scanf("%d",&n);
}
printf("%d\n",s);
system("pause");
return 0;
49. Elabore um programa, em linguagem C, para ler o nome e o preço de um número
indeterminado de mercadorias, sendo o fim de dados identificado pelo nome = FIM. O programa deve
imprimir:
a) o preço médio dessas mercadorias;
b) o maior preço e o nome da mercadoria de maior preço.
50. Elabore um programa, em linguagem C, para ler o nome, o sexo e o salário de um número
indeterminado de funcionários de uma loja, sendo o fim de dados identificado pelo nome = FIM. O
programa deve imprimir:
a) o salário médio dos homens e o salário médio das mulheres;
b) a porcentagem de funcionários do sexo masculino;
c) o nome do(a) funcionário(a) que recebeu o maior salário, e o respectivo salário.
51. Elabore um programa, em linguagem C, para ler o nome e saldo de um número indeterminado
de clientes de um banco, sendo o fim de dados identificado pelo nome = FIM. O programa deve imprimir:
a) o saldo médio dos clientes;
b) a porcentagem de clientes com saldo devedor;
c) o nome do cliente que possui o menor saldo e o respectivo saldo.
abaixo:
52. Elabore um programa, em linguagem C, que deve ler um número real X e executar as operações
a) Imprimir o valor de X5;
b) Imprimir o valor de X!;
c) Imprimir o valor de XX;
d) Imprimir o valor de
X
√ ∣X∣ ;
e) Sair do programa.
O programa deverá executar apenas uma ação por vez e enquanto a opção escolhida for diferente
de e o programa deverá solicitar uma nova opção para execução.
53. Elabore um programa, em linguagem C, para ler 3 números (x, y, N) e imprimir os N primeiros
números naturais que são múltiplos de x ou de y.
Exemplo: caso x=3, y=7 e N=8, o programa deve imprimir: 3 6 7 9 12 14 15 18
Instituto de Química – UNESP – Araraquara
59
Introdução à Ciência da Computação
54. Elabore um programa, em linguagem C, para ler um número e imprimir uma mensagem
dizendo se o número lido é primo ou não. Pode-se supor que o número lido seja maior do que 1. Obs. Um
número é primo se ele é divisível somente por 1 e por ele mesmo.
55. Elabore um programa, em linguagem C, para imprimir os N primeiros números da Sequência de
Fibonacci. O número N (N  2) deve ser lido inicialmente. A Sequência de Fibonacci é definida como tendo o
primeiro termo igual a 0, o segundo termo igual a 1 e cada termo seguinte igual a soma dos dois termos
imediatamente anteriores.
Sequência de Fibonacci: 0
1
1
2
3
5
8
13
21
34 ...
56. Elabore um programa, em linguagem C, para ler um número e imprimir uma mensagem dizendo
se o número lido é par ou impar, usando para isso uma função que retorne 1 para número par e 0 para
número ímpar.
57. Elabore um programa, em linguagem C, para ler um número real e imprimir este número
arredondado. O programa deve criar uma função para arredondar o número. Coloque repetição no
programa de forma que ao final de cada execução, o usuário possa decidir se deseja repetir o programa ou
não.
58. Elabore um programa, em linguagem C, para ler n e k e imprimir o número de combinações de
n elementos tomados k a k
(
Cn,k=
)
n!
. Crie uma função fatorial para o cálculo do fatorial.
(n−k )! k !
59. Elabore um programa, em linguagem C, para ler 10 números e armazená-los em uma variável
composta unidimensional (vetor) e determinar o menor número.
60 Elabore um programa, em linguagem C, para ler as temperaturas máximas registradas nos
últimos 30 dias e imprimir:
a) a menor temperatura registrada;
b) a maior temperatura registrada;
c) a temperatura média destes 30 dias;
d) o número de dias em que a temperatura foi superior à temperatura média.
61. Elabore um programa, em linguagem C, para ler os nomes e os pesos de 20 judocas e armazenálos em vetores denominados NOME e PESO. O programa deve imprimir:
a) o maior peso;
b) os nomes dos judocas que têm o maior peso;
62. Um armazém trabalha com 250 mercadorias diferentes identificadas pelos números inteiros de
1 a 250. O dono do armazém possui 3 tabelas, uma com o nome de cada mercadoria, outra com o preço de
cada mercadoria, e uma outra tabela com a quantidade de cada mercadoria vendida no mês.
Elabore um programa, em linguagem C, para ler o nome, o preço e a quantidade de mercadorias
vendidas e armazená-los em variáveis compostas unidimensionais (vetores) denominadas MERCADORIA,
PRECO e QUANTIDADE e imprimir:
a) os nomes das mercadorias que possuem o maior preço;
b) os nomes das mercadorias que não foram vendidas nenhuma unidade;
c) o faturamento mensal do armazém.
63. Elabore um programa, em linguagem C, para ler o nome e a nota de 60 alunos e armazenar os
nomes dos alunos aprovados (nota  5,0) no vetor denominado APROVADO e os nomes dos alunos
reprovados no vetor denominado REPROVADO. No final o programa deve imprimir:
a) o número de alunos aprovados;
Instituto de Química – UNESP – Araraquara
60
Introdução à Ciência da Computação
b) a lista dos nomes dos alunos aprovados;
c) o número de alunos reprovados;
d) a lista dos nomes dos alunos reprovados.
64. Elabore um programa, em linguagem C, para ler o nome e a idade de um número
indeterminado de candidatos de um concurso, sendo o fim de dados identificado pelo nome = FIM. O
programa deve imprimir:
a) a idade média dos candidatos;
b) a porcentagem de candidatos com idade superior a 40 anos;
c) a maior idade e os nomes dos candidatos com essa idade (usar vetor).
65. Elabore um programa, em linguagem C, para imprimir o signo do zodíaco correspondente a uma
data (dia e mês) lida. Coloque repetição no programa para que ao final de uma execução, o usuário possa
decidir se deseja repetir o programa ou não.
A tabela abaixo mostra o último dia de cada mês e o signo correspondente.
mês
1
2
3
4
5
6
7
8
9
10
11
12
último dia
20
19
20
20
20
20
21
22
22
22
21
21
signo
Capricórnio
Aquário
Peixes
Áries
Touro
Gêmeos
Câncer
Leão
Virgem
Libra
Escorpião
Sagitário
Obs: De 22/12 a 31/12 – Capricórnio
66. Elabore um programa, em linguagem C, para ler 10 números inteiros e armazená-los em um
vetor e determinar e mostrar os números primos e as suas respectivas posições. Usar uma função (primo)
que retorna 1 quando o número é primo e 0 quando não é primo.
67. Elabore um programa, em linguagem C, no qual o programa principal lê 8 números e imprime o
maior e o menor deles. Os números maior e menor devem ser determinados através de funções
denominadas maior e menor, respectivamente.
68. Elabore um programa, em linguagem C, para ler o número do voo e a quantidade disponível de
vagas de 30 voos diários de uma companhia aérea e armazenar em vetores denominados VOO e VAGAS.
Em seguida o programa deve ler o número do voo e o número de vagas a reservar neste voo, de um
número indeterminado de voos, sendo o fim dos dados identificado pelo número do voo = 0. Para cada
número de voo, o programa deve atualizar o vetor VAGAS.
No final, o programa deve imprimir todos os números de voos e as respectivas vagas.
69. Elabore um programa, em linguagem C, para ler os elementos de uma matriz mxn e um
número. O programa deve imprimir:
a) a matriz original;
b) a matriz resultante do produto entre o número lido e a matriz original.
Instituto de Química – UNESP – Araraquara
61
Introdução à Ciência da Computação
70. Matriz diagonal é uma matriz quadrada cujos elementos que não pertencem à diagonal princi pal são iguais a zero. Elabore um programa, em linguagem C, para ler os elementos de uma matriz nxn e
imprimir:
a) a matriz;
b) uma mensagem dizendo se a matriz é diagonal ou não.
71. Elabore um programa, em linguagem C, para ler os elementos de uma matriz mxn e imprimir:
a) a matriz;
b) a soma dos elementos de cada linha;
c) a soma de todos os elementos da matriz.
72. Elabore um programa, em linguagem C, para ler os elementos de uma matriz nxn, verificar se a
matriz é simétrica (isto é, M[i][j]=M[j][i]) e imprimir:
a) a matriz;
b) uma mensagem dizendo se a matriz é simétrica ou não.
73. Elabore um programa, em linguagem C, para ler os elementos de uma matriz A (mxn) e os
elementos de uma matriz B (nxm) e imprimir:
a) a matriz A;
b) a matriz B;
c) a matriz produto A*B (mxm).
74. Uma matriz quadrada é dita matriz de permutação caso seus elementos sejam 0's ou 1's de
forma que em cada linha e em cada coluna exista somente um elemento igual a 1. Exemplo:
[ ]
1 0 0
0 0 1
0 1 0
Elabore um programa, em linguagem C, para ler os elementos de uma matriz nxn e verificar se é
uma matriz de permutação. O programa deve imprimir:
a) a matriz;
b) uma mensagem dizendo se a matriz é de permutação ou não.
75. Elabore um programa, em linguagem C, para gerar a seguinte saída, perguntando ao usuário o
número máximo, que deve ser ímpar e no máximo 9.
123456789
2345678
34567
456
5
13. Bibliografia
[1] ASCENCIO, A.F.G.; CAMPOS, E.A.V. Fundamentos da Programação de Computadores. 3a ed.
Longman do Brasil, 2012. 680 p.
[2] DEITEL, P.; DEITEL, H. C Como Programar. 6ª ed. Pearson Education - Br, 2011. 848 p.
[3] FARRER, H. et al. Algoritmos Estruturados. 3ª ed. LTC, 1999. 260 p.
Instituto de Química – UNESP – Araraquara
62
Introdução à Ciência da Computação
[4] FEOFILOFF, P. Algoritmos em linguagem C. 1ª ed. Campus, 2008. 232 p.
[5] HOLLOWAY, J.P. Introdução à Programação para Engenharia. 1ª ed. LTC, 2006. 360 p.
[6] MIZRAHI, V.V. Treinamento em Linguagem C. 2ª ed. Pearson Education - Br, 2008. 423 p.
[7] PINHEIRO, F.A.C. Elementos de programação em C. 1ª ed. Booklman – Grupo A, 2012. 528 p.
http://www.facp.pro.br/livroc/
[8] SCHILDT, H. C - Completo e Total. 3ª ed. Makron Books , 1997. 856 p.
Instituto de Química – UNESP – Araraquara
63

Documentos relacionados