Buscar

introducao-a-c

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1. INTRODUÇÃO
Na disciplina Lógica de Programação I, ministrada no ano letivo anterior, tu apren-
deste a construir algoritmos capazes de resolver problemas diversos. Esses algoritmos, basica-
mente, podem ser divididos em três tipos: (i) sequenciais, (ii) de seleção e (iii) iteração.
Um algoritmo sequencial é aquele em que sua sua execução ocorre na sequência que
ele é escrito. Em outras palavras, nesse tipo de algoritmo, todos os passos (instruções) são
executados na sequência em que eles aparecem, do primeiro até o último, um após o outro,
durante um tempo finito. Por exemplo, um algoritmo que mostre que faça a adição de dois
números reais e mostre o resultado é do tipo sequencial.
Já nos algoritmos do tipo seleção, uma ou mais instruções podem não ser executadas,
dependendo do resultado de uma avaliação prévia de condições (condição, lembras?). Um
algoritmo que calcula uma equação do segundo grau, verificando a condição de existência da
equação, se enquadra nesta classe de algoritmos.
Por último, tem-se os algoritmos do tipo iteração, isto é, é baseado em uma estrutura
de repetição. O princípio desse tipo de estrutura é a execução de um trecho do algoritmo uma
vez, várias vezes ou nenhuma vez, a depender de uma condição (executa se for verdade; não
executa, caso contrário). Dizemos que esse tipo de algoritmo possui laço de repetição ou loop.
12 Capítulo 1. INTRODUÇÃO
Imaginemos o seguinte: tu precisas escrever um algoritmo que calcule a média de notas de
alunos de uma escola: ele precisa receber quatro notas, calcular e apresentar a média. Esse
processo precisa ser reiniciado enquanto uma determinada condição for satisfeita. Importante
salientar que a quantidade de vezes em que um loop se repete precisa ser necessariamente
finito (lembre-se, todo algoritmo tem um fim).
Ainda, tu aprendeste a fazer esses algoritmos utilizando três notações básicas: (i)
descrição narrativa, em que os passos para resolver um problema são escritos em língua portu-
guesa, como estruturas de tópicos; (ii) fluxograma, a utilizar uma notação gráfica (retângulos,
losangos etc.) para mostrar o fluxo de ações para resolver o problema e; (iii) pseudocódigo –
também chamado de Português Estruturado ou Portugol –, em que uma notação estruturada em
português e matemática é utilizada. Certamente é nessa notação que tu estás mais adaptado.
Notadamente, Visualg e Portugol Studio são duas ferramentas que utilizam variações
do português estruturado (isto é, tem suas notações próprias) e auxiliam no aprendizado de
programação para quem está acostumado com a língua portuguesa, permitindo "rodar" seus
códigos em um computador. Entretanto, essas duas ferramentas apenas "interpretam" códigos
escritos em uma notação expecífica. Não são, portanto, linguagens de programação. Não é
possível desenvolver um software profissional/comercial numa dessas ferramentas.
Para transformar um algoritmo qualquer em um programa e, então, poder executá-
lo em um computador, é necessário escrevê-lo em uma linguagem de programação. Neste
material, vamos aprender a programar na linguagem C.
1.1 A linguagem de programação C
A linguagem C foi desenvolvida 1970 por Dennis Ritchie nos Laboratórios Bell e
implementada pela primeira vez num computador DEC PDP-11, tendo como sua predecessora
a linguagem BCPL. Ela foi padronizada pela American National Standards Institute (ANSI)
1.1 A linguagem de programação C 13
em 1984. As linguagens C++, C# e Java, dentre outras, podem ser vistas como derivações de
C.
C é um linguagem de programação compilada. Quando programamos em uma
linguagem como C ou Java, escrevemos códigos legíveis ao ser humano, isto é, mesmo sem
muitos conhecimentos técnicos é possível saber o que um trecho daquele código faz, uma
vez que usamos palavras (da língua inglesa) e notações matemáticas bem conhecidas. Não
obstante, um computador não é capaz de entender essa linguagem, essa notação. Como é bem
trivial, um computador só é capaz de entender o que é escrito em linguagem de máquina, isto
é, binário. Em outras palavras, sequências de 0s e 1s.
Há basicamente dois métodos para fazer um programa executar em um computador:
interpretação ou compilação. Um interpretador é um software específico e sofisticado que lê
o código-fonte de um programa, uma linha por vez, e executa a instrução específica contida
nessa linha. Assim, é necessário que ele esteja instalado no computador que irá executar
o programa. Por outro lado, um compilador ler um programa inteiro de uma única vez e
converte-o em um código-objeto, isto é, uma tradução do código-fonte para uma linhagem
que a máquina pode entender, ou seja, em código binário. A Figura 1.1 ilustra o processo de
compilação, de uma forma bem abstrata.
Figura 1.1: O processo de compilação
14 Capítulo 1. INTRODUÇÃO
Como a linguagem C é compilada, é possível criar um código-fonte em uma máquina,
transformá-lo em código objeto (compilação) e distribuí-lo para ser usado em qualquer outro
computador que utiliza o mesmo sistema operacional. Ademais, C possui as seguintes
características:
Portabilidade: é possível cirar um programa na linguagem C e, com poucas ou ne-
nhuma adaptação, compilar em outra plataforma (por exemplo, Windows, Linux e Mac).
Observe que esta portabilidade se refere ao código-fonte, não ao código-objeto. O
resultado de uma compilação numa máquina com sistema operacional Windows não
executará numa máquina com Linux.
Modularidade: C permite usar apenas os recursos que serão necessários para o
programa e também programar de maneira que facilita o reúso de código através da
utilização de funções.
Confiabilidade: C possui diversos compiladores e bibliotecas consolidadas que permi-
tem agregar confiabilidade à plataforma de programação.
Linguagem de nível médio: apesar de comumente a programação em C ser feita em
alto nível, isto é, legível ao ser humano, ela permite fazer uso de recursos de hardware.
Entretanto, neste material, nos concentraremos apenas em programação de alto nível.
Case sensitive: a linguagem C diferencia letras maiúsculas de minúsculas. Por
exemplo, ao declarar uma variável com o nome numero, fazer referência posterior como
Numero resultará em um erro.
Código-objeto: um programa executável (código-objeto) é o resultado da compilação
de um ou mais arquivos com a extensão .c.
Função main(): um programa escrito em C posui uma ou mais funções. Uma dessas é
necessariamente a função main(), que é por onde o programa começa a ser executado.
Uso de ponto e vírgula: cada comando em C é finalizado por um ; (ponto e vírgula).
Uso de chaves: para agrupar um bloco de código, seja uma estrutura de decisão, laço
1.2 Ambiente de programação 15
de repetição ou função, usa-se {}, em que { delimita o início do bloco e } o fim.
1.2 Ambiente de programação
Antes que possamos escrever o nosso primeiro programa em C é necessário con-
figurar o ambiente de programação para esta linguagem. Minimalisticamente, o ambiente
de programação necessita de apenas duas coisas: um editor de texto simples e um compila-
dor C. Na internet, é possível encontrar diversas ferramentas que, após a instalação, já está
com o ambiente configurado, por exemplo Code::Blocks (http://www.codeblocks.org) e
Dev-C++ (https://sourceforge.net/projects/orwelldevcpp). Não obstante, neste
material vamos usar o compilador GCC, presente na ferramenta MinGW, que pode ser baixado
no link https://sourceforge.net/projects/mingw.
Para instalar essa ferramenta, é necessário escolher Download no link acima e, após
o processo de descarga do arquivo ser concluído, clicar sobre o arquivo. Ao fazê-lo, será dado
início à instalação da ferramenta, como ilustrado na Figura 1.2. Nela, deve-se clicar em Install,
posteriormente em Continue e, após baixar todas as dependências, Continue novamente.
Uma nova interface será aberta, onde pode-se escolher os recursos que serão insta-
lados. O usuário deve selecionar, minimamente, mingw32-base e mingw32-gcc-g++,como
mostrado na Figura 1.3. Posteriormente, basta clicar no menu Instalation e Apply Changes.
Uma tela de confirmação será aberta. Nela é suficiente pressionar Apply.
Feitos esses passos, o compilador GCC já estará instalado no computador. Entretanto,
ainda não é possível acessá-lo a partir de quaisquer diretórios do computador. Para fazê-lo, é
necessário configurar as variáveis de ambiente. Acesse o Explorador de arquivos, em seguida
clique com o botão auxiliar sobre Este Computador e escolher Propriedades. Uma interface
será aberta, tu precisas clicar em Configurações avançadas do sistema. Uma nova tela surgirá;
escolha Variáveis de ambiente. Essas duas telas são mostradas conjuntamente na Figura 1.4.
http://www.codeblocks.org
https://sourceforge.net/projects/orwelldevcpp
https://sourceforge.net/projects/mingw
16 Capítulo 1. INTRODUÇÃO
Figura 1.2: Passos iniciais da instalação do MinGW
Figura 1.3: Recursos a serem instalados
Na interface aberta, na área Variáveis do sistema, há uma variável chamada Path. Ao
clicar sobre ela, há caminhos já estabelecidos para esta variável. Inclua uma nova, com o
1.2 Ambiente de programação 17
Figura 1.4: Variáveis de ambiente
endereço "C:\MinGW\bin" (sem as aspas) assumindo que o MinGW foi instalado diretamente
na partição C. A Figura 1.5 apresenta esse processo. Feito isso, é necessário clicar em OK em
todas as janelas que estão abertas.
Figura 1.5: Configuração da variável Path
18 Capítulo 1. INTRODUÇÃO
Para testar se a configuração do ambiente está correto, abra o prompt de comando
e digite gcc e tecle em enter. Se o resultado for gcc: fatal error: no input files está tudo
configurado corretamente.
Para a criação do código em C é suficiente qualquer editor de texto. Como sugestão,
temos o Sublime Text, que pode ser baixado a partir do link https://www.sublimetext.
com/3.
1.3 Primeiro programa em C
Sempre que vamos aprender programação ou até mesmo uma nova linguagem, é
comum escrevermos um programa que apenas mostra na tela uma mensagem: Hello world.
A mitologia do desenvolvimento de sistemas diz que se começarmos por qualquer outro
programa, seremos amaldiçoados de tal modo que não aprederemos aquela linguagem.
Obviamente não existe mitologia do desenvolvimento de sistemas, bem como tal
afirmação não faz o menor sentido. Entretanto, é uma tradição começarmos a aprender
uma nova tecnologia (entenda linguagem) dessa forma, até porque é o exemplo mais trivial.
Provavelmente foi também desta forma que tu fizeste em pseudocódigo.
O Hello World em C é escrito da seguinte forma:
1 #include <stdio.h>
2 int main(){
3 printf("Hello world");
4 return 0;
5 }
Listing 1.1: Hello world em C
Para compilar o teu programa em C, abra ao prompt de comando (pode-se usar o
combinação de teclas Windows + R, digitar cmd e precionar enter para isso), navegar até o
diretório onde está o arquivo e escrever o seguinte comando:
https://www.sublimetext.com/3
https://www.sublimetext.com/3
1.3 Primeiro programa em C 19
gcc nomeArquivo.c -o nomePrograma, sendo nomeArquivo.c o nome do arquivo que
contém o código-fonte e nomePrograma o nome que tu desejas dar ao arquivo executável.
Se nenhuma mensagem aparecer na tela significa que a compilação ocorreu de forma
satistória. Basta agora executar o programa. Para isso, digite apenas o nome do arquivo
executável, por exemplo, nomePrograma.exe. A mensagem Hello world aparecerá na tela.
Se houver algum erro de sintaxe, o compilador retornará uma mensagem para tal
propósito, a informar de forma bem clara o tipo de erro e indicando a linha em que ele ocorreu.
Suponhamos que no programa apresentado na Listagem 1.1 não ouvesse o ponto e vírgula da
linha 3. Ao tentar compilá-lo, a seguinte mensagem seria apresentada:
Teste.c: In function ’main’:
Teste.c:6:2: error: expected ’;’ before ’return’
No exemplo apresentado na Listagem 1.1, o programa começa (linha 1) com a
inclusão de um biblioteca chamada stdio.h. Apesar dessa biblioteca não ser obritagório em
programas escritos em C, na prática todos aqueles feitos por nós precisará dela. Isso porque,
pelo que o próprio nome sugere, ela é o padrão para a entrada e saída. Em outras palavras,
qualquer programa que precise receber algum dado do teclado ou enviar alguma mensagem
para a tela precisa usá-la.
Na linha 2 temos a declaração da função principal do programa. Como falado
anteriormente, um programa em C é formado por um conjunto de funções, das quais a main()
é a única obrigatória. A palavra int indica que esta função é do tipo inteiro (em outras palavras,
retorna um número inteiro após sua execução, mas não se preocupe com essa informação
ainda). Os parênteses sem nenhuma informação dentro indica que esta função não possui
parâmetros (mais um vez, não se preocupe ainda com esta informação) e a abertura de chave
indica o início do bloco de código que de fato realizará alguma ação na função.
Na linha 3, a função printf() é usada para apresentar dados na saída padrão (tela). O
print significa imprimir/mostrar e o f indica uma saída formatada. Na linha 4, a função retorna
20 Capítulo 1. INTRODUÇÃO
a quem a invocou o resultado 0 e a linha 5 contém apenas o fechamento de chave, a indicar o
fim da função.
1.4 Tipos de dados em C
Dados são elementos quantificáveis (numéricos) ou qualificáveis (textuais) e são
essenciais para o estudo e construção de algoritmos. Vejamos, um algoritmo é construído
para resolver um problema e, para tal resolução, é necessário que seu projetista escolha uma
forma de representação da realidade, que geralmente são definidos em termos de dados e suas
representações. De fato, em um algorimo, as entradas são feitas com dados, o processamento
manipula esses dados e a saída é também um conjunto de dados.
Geralmente, um programa envolve interação com o operador, isto é, dados são
enviados para o programa, são processados e, por último, gera uma saída. Para que isso seja
possível, dados são armazenados em variáveis que, em C, estão associadas a tipos.
Em C, há cinco tipos de dados primitivos: char, que representa caractere ou dígito,
isto é, é capaz de armazenar apenas um caractere por vez; int (inteiro); float, que são números
de ponto flutuante (real); double, que também armazena números de ponto ponto flutuante,
mas de precisão dupla e; void, isto é, sem valor. Todos os outros tipos de dados de dados em C
são baseados em um desses tipos. A escolha por um ou outro tipo, bem como suas derivações,
pode está associada ao tamanho ocupado na memória e a faixa de valores aceitáveis para cada
tipo. As derivações dos tipos básicos são feitas a partir dos modificadores insigned, short e
long. A Tabela 1.1 apresenta os tipos de dados, incluindo as modificações, tamanho e limites.
1.5 Variáveis
Sempre que escrevemos um programa, precisamos prepará-lo para receber, manipular
e exibir dados. Para isso, eles precisam ser armazenados – tarefa feita na memória do
1.5 Variáveis 21
Tabela 1.1: Tipos básicos da linguagem C
Tipo Tamanho (bytes) Limites
int 4 -2.147.483.648 a -2.147.483.647
unsigned int 4 0 a 4.294.967.295
short int 2 -32.768 a 32.767
unsigned short int 2 0 a 65.535
float 4 Seis dígitos de precisão
double 8 Dez dígitos de precisão
long double 12 Dez dígitos de precisão
char 1 -127 a 127
unsigned char 1 0 a 255
computador – e cada parte da memória tem um endereço interno. Agora imagine você, como
programador, precisar manipular os endereços da memória onde um determinado dado será
armazenado! Certmente esta seria uma tarefa muito dispendiosa e pouco produtiva para um
programador de alto nível1. Para atenuar essa dificuldade, foi criado o conceito de variável.
Tecnicamente, declarar uma variável pode ser entendida como o processo de reservar
um pedaço da memória para o armazenamento de algum dado. Este, por sua vez, pode sofrer
alterações de valores durante a execução do programa (por isso o nome variável). Na escrita de
programas, variáveis são usadas para representar valoresdesconhecidos, podendo ser atribuído
qualquer valor do conjunto de dados que ele suporta, de acordo com a Tabela 1.1. Assim, uma
variável armazena dados de forma temporária.
Exemplificando, tu foste desafiado a escrever um programa que calcule áreas de
retângulos. Como bem sabemos, a área dessa figura geométrica é calculada como segue:
a = b ∗ h, em que a é a área, o que se deseja calcular; b é a base e; h é a altura. É fácil
perceber que trata-se de dados numéricos e a escolha se serão do tipo real ou inteiro depende
da especificação do problema. No exemplo, vamos admitir apenas dados inteiros.
1Programação de alto nível não é referente a qualidade, mas sim ao fato de utilizar linguagem de programação de
alto nível. Uma linguagem de programação de alto nível usa comandos relativamente próximos da linguagem natural,
como palavras, como por exemplo, for, if, else, break. Por outro lado, programação de baixo nível usa linguagem de
máquina.
22 Capítulo 1. INTRODUÇÃO
Para resolver tal problema, no programa tu precisarás declarar variáveis. Uma
declaração de variável é feita da seguinte forma:
tipo_de_dado nome_da_variavel;
O tipo de dado já foi visto e o nome da variável é uma sequência de caracteres,
começando obrigatoriamente com uma letra minúscula ou maiúscula, seguida ou não de letras,
números ou o caractere especial underscore (_). Nenhum outro caractere especial é admitido.
Do exemplo, podemos ter o seguinte bloco de declaração de variáveis:
int area;
int base;
int altura;
Como há mais de uma variável do mesmo tipo, podemos declará-las na mesma linha:
int area, base, altura;
Observação: é altamente recomendado utilizar palavras significativas na declaração
de variáveis, como feito no exemplo acima. Apesar do fato de que neste exemplo a declaração
de variáveis com nomes a, b e h fosse suficente para representar a área, a base e a altura, em
algoritmos menos triviais, com mais variáveis, eses tipo de nomenclatura causaria bastante
confusão no código.
Por uma questão de organização de código, costuma-se declarar variáveis com letras
minúsculas, se elas representam apenas uma palavra, por exemplo, idade, nome. Caso a
variável contenha duas ou mais palavras, é comum utilizarmos a inicial, a partir da segunda
palavra, maiúscula. Por exemplo, se em um programa de uma loja desejamos criar uma
variável para armazenar a idade de um cliente, seu nome poderia ser idadeCliente. Salienta-se
que seguir este padrão não é obrigatório do ponto de vista das linguagens de programação,
mas sim um padrão de escrita.
A declaração de variáveis pode ser feita em qualquer linha do programa. Não há um
bloco expecífico para fazê-la.
1.6 Constantes 23
1.6 Constantes
Similarmente a uma variável, uma constante é uma representação simbólica que
permite ao programador reservar espaço na memória para armazenar valores. Em contrapartida,
como é bem intuitivo, armazena valores que não sofrem alteração.
Por exemplo, na expressão abaixo o valor 3.1415 é atribuído à constante do tipo real
PI e permanecerá fixo até o final da execução:
#define PI 3.1415;
A declaração de uma constante deve ser feita no iníco do programa e é constituída
pelo caractere #, pela palavra reservada define, pelo nome da constante, pelo valor e pelo ponto
e vírgula, nesta sequência. Para melhor diferenciação de constantes das variável, costumamos
escrevê-las em letras maiúsculas.
1.7 Operadores
Operadores são utilizados para representar expressões de cálculo, comparação, condi-
ção e atribuição. Veremos os tipos de operadores nas subseções abaixo.
1.7.1 Operadores aritméticas
Durante a resolução dos nossos algoritmos muitas vezes é necessário fazermos uso das
operações aritméticas, que são as operações que utilizamos ao se realizar cálculos matemáticos.
Em C, assim como na matemática, as operações são representadas por símbolos e possuem
uma ordem de precedência, conforme a Tabela 1.2.
Em C, precisamos ter cuidado em usar alguns operadores aritméticos. Por exemplo,
supomos que em algum local do nosso código temos quo = num1/num2, em que quo é um
número real e num1 e num2 são números inteiros. Imaginemos também que num1 tem valor 9
e num2 tem valor 2. O resultado desta divisão é, sabidamente, 4.5.
24 Capítulo 1. INTRODUÇÃO
Tabela 1.2: Ordem de precedência das operações aritméticas
Ordem Símbolo Operação
0 % Retorna o resto da divisão entre dois número inteiros
1 * Multiplicação
2 / Divisão
3 + Soma
4 - Subtração
Entretanto, ao fazer isso o resultado é apenas 4 (a impressão mostará 4.000000). Em
C, a divisão entre dois números inteiros resulta em um valor inteiro. Se quisermos dividir esses
dois valores e gerar um resultado do tipo real, primeiramente temos que "converter" um deles,
divisor ou dividento, para real. Esse processo, chamado cast de fato não converte a variável
para outro tipo (isso não é permitido em C, uma variável nasce de um tipo e permanece desse
tipo para sempre), ele apenas faz a operação considerar o valor da varíavel de outra forma. Por
exemplo, ao fazer quo = ( f loat)num1/num2, o resultado armazenado em quo será 4.500000.
A palavra float entre parênteses fez a operação considerar o valor contido em num1 como
real. Se essa mesma interpretação precisar ser feita em outra operação, o processo precisa ser
repetido.
Existe também um conjunto de funções que são disponibilizadas através da biblioteca
math.h, que possibilita o uso de um conjunto de funções matemáticas que não são fornecidas de
forma nativa pelo C. A Tabela 1.3 apresenta algumas funções disponibilizadas pela biblioteca
supracitada.
As funções possuem precedência de execução sobre as operações matemáticas. Ainda
sobre a precedência, pode-se fazer uso de parênteses e assim alterar a ordem de execução das
operações. Vale ressaltar que é uma boa prática utilizar-se de parênteses durante a escrita do
código, pois facilita a leitura e interpretação.
1.7 Operadores 25
Tabela 1.3: Exemplo de funções disponibilizadas pela biblioteca math.h
Nome Funcionalidade
floor() Arredonda para baixo
ceil( ) Arredonda para cima
sqrt( ) Calcula raiz quadrada
pow(v, exp) Potenciação
sin( ) Seno
cos( ) Cosseno
tan( ) Tangente
log( ) Logaritmo natural
log10( ) logaritmo base 10
1.7.2 Operador de atribuição
Em C, a atribuição de um valor a uma variável é feita pelo operador representado
pelo símbolo =. Observe que = é usado para representar atrirbuição, não a comparação de
igualdade. Esta, por sua vez, é feita utilizando ==.
Em programação, muitos operadores sao sempre usados em conjunto com o operador
de atribuicão. Para tornar essa tarefa mais simples, a linguagem C permite simplificar algumas
expressoes, como mostra a Tabela 1.4.
Tabela 1.4: Operadores de atribuição simplificada
Operador Significado Exemplo
+= Soma e atribui x += y igual a x = x+y
-= Subtrai e atribui x -= y igual a x = x-y
*= Multiplica e atribui x *= y igual a x = x*y
/= Subtrai e atribui o quociente x /= igual a x = x/y
%= Divide e atribui o resto x = % y igual a x = x%y
1.7.3 Operadores relacionais
Os operadores relacionais, presentes na Tabela 1.5, servem para estabelecer uma
relação de comparação entre valores ou expressões. O resultado dessas comparações são
sempre um valor lógico (isto é, verdade ou falsidade).
26 Capítulo 1. INTRODUÇÃO
Tabela 1.5: Operações relacionais
Operador Símbolo Operação
Maior que > Retorna verdade caso o operando da esquerda seja maior
que o da direita. Falsidade caso contrário
Maior ou igual a >= Retorna verdade caso o operando da esquerda seja maior
ou igual ao da direita. Falsidade caso contrário
Menor que < Retorna verdade caso o operando da esquerda seja menor
que o da direita. Falsidade caso contrário
Menor ou igual <= Retorna verdade caso o operando da esquerda seja menor
ou igual ao da direita. Falsidade caso contrário
Igual a == Retorna verdade caso ambos os operandos tenham o
mesmo valor. Falsidade caso contrário
Diferente de != Retorna verdade caso os dois valores sejam distintos.1.7.4 Operadores lógicos
Os operadores lógicos são utilizados para associar expressões que estabelecem uma
relação de comparação de valores. Igualmente aos operadores relacionais, tem como resultado
sempre um valor lógico. A Tabela 1.6 apresenta a lista de operadores, bem como os símbolos
utilizados em C.
Tabela 1.6: Operações lógicas
Operador Símbolo Operação
E && Retorna verdade somente se os dois operandos forem
verdades
OU || Retorna verdade se ao menos um operando for verdade
NÃO ! Inverte o valor lógico do operando
1.8 Entrada e saída
Em C, as entradas e as saídas de dados são feitas não a partir de comandos, mas sim
de funções. Como já vimos, utilizamos a biblioteca stdio.h para isso. Por padrão, a leitura
é feita via teclado e a saída através do monitor e as funções são, repectivamente, scanf() e
printf().
1.8 Entrada e saída 27
1.8.1 A função de escrita printf()
A função printf() permite realizar a escrita de dados na tela do computdor, conforme
vimos no primeiro exemplo programa, em que a mensagem Hello world foi apresentada.
Porém, esta função apresenta saída formatada, que pode ser feita de várias formas. De
maneira geral, essa função apresenta uma cadeia de caracteres. Dentro desta cadeia, entretanto,
podemos incluir nenhum ou vários códigos de controle, tais como %d, %f, %c, \n etc.
Imaginemos a seguinte linha: printf("A razão de %d sobre %d é %f\n", 10, 4, 2.5).
Ela mostrará na tela a seguinte mensagem: A razão de 10 sobre 4 é 2.5, seguido de um salto
de linha (\n). Na saída, os códigos de controle são substituídos por valores após a cadeia de
caracteres. No exemplo acima, o primeiro %d (que indica número inteiro) é substituído pelo
primeiro valor após a cadeia, que é 10. O segundo %d é substituído pelo segundo valor após a
cadeira, que é 4. O terceiro código, %f (que indica número de ponto flutuante) é substituído
pelo terceiro valor após a cadeia, que é 2.5.
A Tabela 1.7 apresenta os principais códigos de controle da função printf().
Tabela 1.7: Principais códigos de controle da função printf()
Código Descrição
%d Indica a posição do valor inteiro na notação decimal
%o Indica a posição de um valor inteiro na notação octal
%x Indica a posição de um valor inteiro na notação hexadecimal
%c Indica a posição de um caractere. Apenas um único caractere
%s Indica a posição de uma cadeia de caracteres (string)
%f Indica a posição de um valor real (float) na notação decimal
%lf Indica a posição de um valor real de precisão dupla (double) na notação
decimal
%% Insere um sinal de percentagem (%)
\n Insere uma nova linha
\t Insere uma tabulação
\" Insere asplas duplas "
\\ Insere contrabarra
28 Capítulo 1. INTRODUÇÃO
1.8.2 A função de leitura scanf()
A função scanf() permite fazer a leitura de dados digitados pelo usuário através do
teclado. Para explicá-la, vamos partir do seguinte exemplo:
scanf("%d", idade), em que idade é uma variável do tipo int previamente declarada.
Observe que a função scanf() possui ao menos duas partes, seperada por vírgula. A
primeira, entre aspas, contém o código de controle que indica à função o deve ser lido. No
exemplo, %d indica que a função receberá um valor inteiro. A segunda é inciada pelo símbolo
&, seguido de uma variável. O & indica que o valor lido será armazenado no local de memória
indicado pela variável.
Os códigos de controle da função scanf() são os mesmos referentes aos tipos de dados
visto na função print(), isto é, %d, %o, %x, %c, %s, %f, %lf.
Ademais, uma única função printf() pode fazer múltiplas leituras. Por exemplo, em
scanf("%d%f%c", a, b, c) ler um inteiro, um real e um caractere, nesta ordem.
1.9 Prática de C
A partir dos conceitos apresentados, já podemos criar um programa em capaz de
realizar a leitura de dois números inteiros e em seguida apresentar valor da soma dos mesmos,
conforme a Listagem 1.2. O código pode ser explicado da seguinte maneira:
(1) Realizado a reserva de 3 espaços da memória para armazenar os valores das variáveis
inteiras n1,n2 e resultado (linha 4);
(2) Apresenta, no monitor, a mensagem Informe o primeiro número inteiro (linha 5);
(3) Lê o valor informado pelo usuário via teclado e o guarda no espaço de memória (linha
8);
(4) Apresenta, no monitor, a mensagem Informe o segundo número inteiro: (linha 7);
(5) Lê o valor informado pelo usuário via teclado e o guarda no espaço de memória (linha
1.9 Prática de C 29
8);
(6) Realiza a operaçã matemática de soma das variáveis n1 e n2 e em seguida o resultado é
armazenado. (linha 9);
(7) Apresenta a mensagem O valor da soma é: , seguido do valor da variável resultado.
1 #include <stdio.h>
2 int main()
3 {
4 int n1, n2,resultado;
5 printf("Informe o primeiro número inteiro: ");
6 scanf("%d", &n1);
7 printf("Informe o primeiro número inteiro: ");
8 scanf("%d", &n2);
9 resultado = n1 +n2;
10 printf("O valor da soma é: %d\n",resultado);
11 return 0;
12 }
Listing 1.2: Soma de dois numeros
Outro exemplo de programa que podemos criar é um programa para resolver uma
equação de primeiro grau com uma incôgnita. Uma equação desse tipo tem a forma a.x+b= 0,
em que x é a variável, a é o coeficiente e b é o termo independente. Observa-se ainda que
necessariamente a 6= 0. Para resolvê-la, devemos isolar a variável x, assim: x = −ba . Então,
teremos o valor de x. Na Listagem 1.2 é apresentado a codificação da solução.
1 #include <stdio.h>
2 int main()
3 {
4 float a, b, x;
5 printf("Informe o coeficiente ’a’ e o termo independente ’b’ da equaçã
o\n");
6 scanf("%f %f", &a, &b);
30 Capítulo 1. INTRODUÇÃO
7 x = -b/a;
8 printf("O valor de x é: %f",x);
9 return 0;
10 }
Listing 1.3: Resolução de equação do primeiro grau em C
Segue uma explicação do código anterior:
(1) Realizado a reserva de 3 espaços da memória para armazenar os valores das variáveis
do tipo float a, b e x (linha 4);
(2) Apresenta no monitor uma mensagem para o usuário solicitando que informe os valo-
res(linha 5);
(3) Lê os valores informados pelo usuário (linha 6);
(4) Realiza a operação matemática −ba e armazenar o resultado na variável x (linha 7);
(5) Apresenta a mensagem O valor de x é: , seguido do valor da variável x (linha 8).
1.9 Prática de C 31
HANDS ON 1
1. Escreva um programa em C que leia uma medida dada em jardas e converta
para metros. Fórmula de conversão: 1 jarda = 0,9144 metro.
2. Escreva um programa em C que leia uma temperatura em Fahrenheit e converta-
a para o equivalente em graus Celsius. Fórmula de conversão:
c =
5
9
∗ ( f −32) (1.1)
3. Escreva um programa em C que transforme o valor conrrespondente a um
intervalo temporal, expresso em horas, minutos e segundos, no valor correspondente em
segundos.
4. Leia o texto a seguir:
Uma pessoa foi ao mercado e comprou 3,5 kg de fraldinha para fazer um churrasco,
sabendo-se que o preço do quilograma da carne é 23,79 rais. Entendendo que a pessoa
poderia optar por escolher qualquer outra carne, de preços diferentes,bem como escolher
outra quantidade, escreva um programa que tenha como entradas a quantidade de carne
comprada e o valor do quilograma e como saída o valor total a pagar pela compra.
5. A velocidade média de um veículo é dada pela expressão Vm = δ sδ t , em que δ s é
a variação de espaço, em quilômetros, e δ t é a variação do tempo, em horas.
Escreva um algoritmo que receba a variação do espaço e a variação do tempo e
apresente a velocidade média do veículo no percurso.
6. Escreva um programa que leia, como número real, as coordenadas de dois
pontos no plano cartesiano e imprima a distância entre esses dois pontos. A fórmula da
32 Capítulo 1. INTRODUÇÃO
distância entre dois pontos (x1,y1) e (x2,y2) é:
√
(x2− x1)2 +(y2− y1)2 (1.2)
7. Dados três valores reais aramazenados nas variáveis a, b e c, calcule as médias
aritmética, geométrica e harmônica desses valores. Escreva um programa que calcule
também a média ponderada, considerando peso 1 para o primeiro valor, peso 2 para os
segundo valor e peso 3 para o terceiro.Fórmulas:
Média aritmética:
a+b+ c
3
(1.3)
Média geométrica:
3√a∗b∗ c (1.4)
Média harmônica:
3
1
a +
1
b +
1
c
(1.5)
Média ponderada:
1∗a+2∗b+3∗ c
1+2+3
(1.6)

Outros materiais