[email protected] – coinf.cm.utfpr.edu.br 1 prof. reginaldo ré [email protected] ...

94
[email protected] – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré [email protected] http://coinf.cm.utfpr.edu.br Universidade Tecnológica Federal do Paraná – Campus Campo Mourão COINT - Coordenação do Curso Superior de Tecnologia em Sistemas para Internet Introdução à Programação usando Linguagem C

Upload: internet

Post on 16-Apr-2015

146 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 1

Prof. Reginaldo Ré[email protected]

http://coinf.cm.utfpr.edu.br

Universidade Tecnológica Federal do Paraná – Campus Campo MourãoCOINT - Coordenação do Curso Superior de Tecnologia em Sistemas para Internet

Introdução à Programação usando Linguagem C

Page 2: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 2

Aulas adaptadas dos materiais...

• Do. Prof. Rogério Aparecido Gonçalves– http://coinf.cm.utfpr.edu.br/docentes/rogerioag

• Do Prof. Leandro Galvão– www.dcc.ufam.edu.br/~galvao/

• De Allan Diego Silva Lima– http://allanlima.wordpress.com/

Page 3: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 3

Aula 1 - Sumário

•Apresentações pessoais•Recursos disponíveis• Introdução ao Curso de Programação em

Linguagem C•Algoritmo•Definições de Algoritmo•Algoritmo x Programa de Computador

•Algoritmos e suas técnicas de construção•O ambiente de programação CDT-Eclipse•Linguagem de programação C

Page 4: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 4

Apresentações Pessoais

•Reginaldo Ré•Dr. Computação e Matemática Computacional

•ICMC-USP•Engenharia de Software

•Bacharel em Ciência da Computação•FIPP-UNOESTE•Engenharia de Software

•Coordenador do Curso Superior de Tecnologia em Sistemas para Internet

Page 5: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 5

Recursos Disponíveis

• coinf.cm.utfpr.edu.br• CDT-Eclipse

Page 6: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 6

Introdução ao Curso de Programação em Linguagem C

• Dispõe-se de 2 vasilhas com capacidades marcadas de 9 e 4 litros, respectivamente. Mostre a sequência de passos necessários para colocar numa terceira vasilha de medida desconhecida um volume de 6 litros.

4 96 ?

Page 7: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 7

Algoritmo

• Sabemos criar e seguir algoritmos.• Exemplos clássicos:

• Como tomar banho?• Como ir de casa até a UTFPR?• Como trocar o pneu do carro?• Como trocar uma lâmpada?• Como fazer a média final da disciplina?• ...

Algoritmos fazem parte da nossa vida, mais do que imaginamos!

Page 8: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 8

Definição de Algoritmo

• “Um conjunto finito de regras que provê uma sequência de operações para resolver um tipo de problema específico”

– Donald Knuth ( “The art of computer programming”)

Page 9: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 9

Outras definições...

• “Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restrições, as regras formais para a obtenção do resultado ou da solução do problema”

• – [Aurélio]• “Sequência ordenada, e não ambígua, de passos

que levam à solução de um dado problema”• – [TREMBLAY]

• “Algoritmo é uma sequência de passos que visa atingir um objetivo bem definido”

• – [FORBELLONE e EBERSPÄCHER]

Page 10: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 10

Outras definições...

• “É a descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e finito de ações primitivas, as quais damos por certo que podem ser executadas”.

• – [Guimarães/Lages]• “É a descrição de uma sequência de passos que

deve ser seguida para a realização de uma tarefa”.• – [ASCENCIO, 1999]

• “É uma sequência finita de instruções ou operações cuja execução, em tempo finito, resolve um problema computacional, qualquer que seja sua instância.”

• – [SALVETTI, 1999]

Page 11: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 11

Outras definições...

• “Redação que descreve de forma lógica e sem ambigüidades, uma sequência de passos (ações) para se resolver um problema que tenha um comportamento padrão.”

• – [Franco e Polidório]• “Algoritmos são regras formais para a obtenção de

um resultado ou da solução de um problema, englobando fórmulas de expressões aritméticas”

• – [MANZANO, 1997]• “Um algoritmo é a descrição de um conjunto de

comandos que, obedecidos, resultam numa sucessão finita de ações.”

• – [FARRER, 1999]

Page 12: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 12

• O algoritmo deve ensinar a resolver o problema, e não trazer a solução.– Exemplo: receita de bolo.

• Ação é um acontecimento que, a partir de um estado inicial, após um período de tempo finito, produz um resultado final previsível e bem definido.

• Objetivo: solução do problema.

Algoritmo

Page 13: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 13

AlgoritmosCaracterísticas Importantes

1. Finitude: Um algoritmo deve sempre terminar após um número finito de passos.

2. Definição: Cada passo de um algoritmo deve ser precisamente definido. As ações devem ser definidas rigorosamente e sem ambiguidades.

3. Entradas: Um algoritmo deve ter zero ou mais entradas, fornecidas antes do algoritmo iniciar.

4. Saídas: Um algoritmo deve ter uma ou mais saídas.5. Efetividade: Todas as operações devem ser

simples de modo que possam ser executadas em um tempo limitado.

Page 14: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 14

AlgoritmosDificuldades iniciais

• Difícil para iniciantes saber o que o computador pode ou não fazer.

• Criação de algoritmos não é um processo automático, cada pessoa tem uma forma de pensar, de organizar o raciocínio.

• Pode haver mais de uma solução para um problema.• Torre de Hanoi

Page 15: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 15

• Aspecto lógico: ordenar o pensamento.– Organização sequencial das ações

pertinentes à solução de um problema;• Exemplo da receita de bolo: o bolo só pode ser levado ao

forno depois que a massa estiver pronta.

– Lógica no dia-a-dia:• Todo aluno estuda bastante.

• Vocês são alunos.

• Portanto, vocês estudam bastante.

Algoritmo

Page 16: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 16

• Padrão de comportamento: uma sequência de ações para resolver um problema.– Exemplos:

• Trocar uma lâmpada (problema do cotidiano):– pegue uma escada;

– posicione-a sob a lâmpada;

– busque uma lâmpada nova;

– suba na escada;

– retire a lâmpada velha;

– coloque a lâmpada nova.

• Calcular a área de um retângulo (problema matemático):– obtenha a medida da base do retângulo;

– obtenha a medida da altura do retângulo;

– multiplique a medida da base pela medida da altura.

Algoritmo

Page 17: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 17

Um Desafio

• Torre de Hanoi: o objetivo é mover os discos de um pino para outro.• Somente um disco pode ser movido por vez.• Cada movimento consiste em tirar discos de um pino e

colocar em outro.• Nenhum disco pode ser colocado em cima de um disco

menor.

Page 18: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 18

O desafio continua...

• Descreva a sequência de movimentos dos discos para a solução dessa configuração de torre de hanói.

Page 19: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 19

Outro Desafio

• O problema dos Bits trocados– Os caixas eletrônicos das Ilhas Weblands operam

com todos os tipos de notas disponíveis, mantendo um estoque de cédulas para cada valor (B$ 50,00, B$10,00, B$5,00 e B$1,00). Os clientes do banco utilizam os caixas eletrônicos para efetuar retiradas de um certo número inteiro de Bits.

– Sua tarefa é escrever um algoritmo que, dado o valor de Bits desejado pelo cliente, determine o número de cada uma das notas necessário para totalizar esse valor, de modo a minimizar a quantidade de cédulas entregues.

Page 20: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 20

Algoritmo x Programa de Computador

• Um programa de computador é um algorimo escrito em uma linguagem de programação– Algoritmo: o executor é o cérebro humano– Programa de computador: o executor é um

computador

Linguagem Algorítmica

Linguagem Computacional

Linguagem Natural

Page 21: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 21

int a, b, c;if (a > 2)

a = b + c;else

a = b – c;return;

Algoritmo

Programa

Raciocínio

Algoritmo x Programa de Computador

Page 22: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 22

• Algoritmos geralmente descrevem algum processamento de dados:

• Estes dados precisam ser representados (descritos) nos algoritmos;

• Analogia com a ação humana de efetuar calculos matemáticos mentalmente

Dados de Entrada

Dados de Saída

Processamento(Computador)

Algoritmos x Programas de Computador

Page 23: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 23

Exemplo

• Faça um Algoritmo para calcular a média aritmética entre duas notas de um aluno e mostrar sua situação, o que pode ser APROVADO ou REPROVADO.

Passo 1: Receber os valores das duas notas Passo 2: Calcular a média aritmética Passo 3: Mostrar a média aritmética Passo 4: Se a média aritmética for maior ou igual a 7, então

situação do aluno é APROVADO; caso contrário, a situação é REPROVADO.

Page 24: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 24

Um programa de computador é uma forma de representar um algoritmo

Proximidade com a linguagem de máquina do computador Existem algumas outras formas

Pseudo-linguagem: emprega linguagem intermediária entre linguagem natural e linguagem de programação

Este método procura misturar as facilidades da linguagem natural com a precisão das linguagens de programação

A representação da solução em pseudo código possibilita ao programador a abstração dos detalhes da sintaxe da linguagem escolhida

Formas de representação de algoritmos: Pseudocódigo

Page 25: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 25

Exemplo

ALGORITMO MÉDIA DECLARE N1, N2, M NUMÉRICO ESCREVA “Digite as duas notas” LEIA N1, N2 M ← (N1 + N2) / 2 ESCREVA “Média = ”, M SE M >= 7 ENTÃO ESCREVA “Aprovado” SENÃO ESCREVA “Reprovado” FIM_ALGORITMO.

Page 26: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 26

Exemplo

Page 27: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 27

• Sintaxe: dita as regras de como as sentenças e cada um de seus elementos devem ser construídos corretamente;

– Regras Sintáticas• Semântica: se preocupa com o significado de uma

sentença construída.

AlgoritmosSintaxe e Semântica

Page 28: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 28

• A sintaxe por si só não define completamente uma linguagem.– Exemplo:

• “Descoloridas idéias verdes sonham furiosamente” (Chomsky)

– Por outro lado:• “Nóis foi, mais já vortemo”

AlgoritmosSintaxe e Semântica

Page 29: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 29

Divisão para a conquista: Técnica de divisão do problema em partes menores.

As soluções das partes menores combinam-se para a composição da solução global. Receita de um bolo (modo de preparo do bolo, preparo do

receio, preparo da cobertura)

Reaproveitamento: Reutilização de soluções como parte de uma nova solução. Em um livro de receitas, os pratos que necessitassem o

preparo de um molho branco, poderiam referenciar a página da receita do molho branco. “Para o preparo do molho leia a página 25”

Técnicas de Construção de Algoritmos

Page 30: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 30

Passos para elaboração de um algoritmo

1. Compreender o problema.2. Definir os dados de entrada3. Definir o processamento dos dados de

entrada par alcançar a solução4. Definir os dados de saída5. Construir o algoritmo usando uma forma de

representação6. Testar o algoritmo realizando simulações

Page 31: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 31

c+bx+ax2

Passos para elaboração de um programaExemplo

• Calcular as raízes reais de:

Page 32: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 32

Compreender o problema

• Exemplo: Equação de 2o. grau• Possibilidades de raízes:

02 raízes complexas; 02 raízes reais idênticas; 02 raízes reais distintas;

• Condição para haver raízes reais: Δ ≥ 0

Page 33: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 33

Definir os dados de Entrada

• As entradas fornecidas são os temos a, b, c

Page 34: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 34

Definir o processamento

• Calcular Δ.• Se Δ ≥ 0, calcular raízes reais.• Caso contrário, informar que não há raízes

reais.

Page 35: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 35

Definir os dados de saída

02 raízes complexas; 02 raízes reais idênticas; 02 raízes reais distintas;

Page 36: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 36

Construir o algoritmo

ler(a,b,c)delta = b^2 – 4*a*cse (delta ≥ 0) então

r1 = – b – (delta)^(–1/2)r2 = – b + (delta)^(–1/2)escrever(r1,r2)senão

escrever(“Não há raiz real”)fim do sefim do algoritmo

Page 37: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 37

Construir o algoritmo

#include <stdio.h>#include <stdlib.h>#include <math.h>int main(void){

float a, b, c, delta, r1, r2;scanf("%f %f %f", &a, &b, &c);delta = b*b – 4*a*c;if (delta >= 0){

r1 = – b – sqrt(delta);r2 = – b + sqrt(delta);printf("r1 = %f \n r2 = %f", r1, r2);

}else

printf("Nao ha raiz real\n");}

Page 38: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 38

Exercícios

• Ler dois números inteiros e imprimir a soma.• Entrar com dois números inteiros e imprimir a

média aritmética.• Escreva um algoritmo que calcule o diâmetro, a

área e a circunferência de um círculo, sabendo que o único dado disponível é o seu raio.

• Diâmetro = 2 * Raio• Área = Pi * Raio * Raio• Circunferência= 2 * Pi * Raio

• Criar um algoritmo que solicite e imprima os valores da diagonal maior, diagonal menor e calcule a área de um losango.

• Fórmula: (diagonal maior * diagonal menor) dividido por 2

Page 39: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 39

Exercícios de Fixação

• Elaborar um algoritmo para calcular e apresentar o volume de uma lata de óleo, utilizando a fórmula:

• VOLUME = 3.14159 * (R*R) * ALTURA.

• Escreva um algoritmo que pergunte a altura (em metros) e a massa (em Kg) de uma pessoa. Em seguida o programa deverá exibir uma mensagem dizendo o índice de massa corporal.

• imc = peso / altura * altura

Page 40: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 40

O ambiente de programação CDT-Eclipse

Page 41: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 41

• A linguagem C é uma linguagem de programação genérica inventada na década de 1970 por Dennis Ritchie.

• O ANSI (American National Standard Institute) padronizou a versão ANSI-C

http://en.wikipedia.org/wiki/C_programming_language

A linguagem C

Page 42: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 42

A linguagem C

• Desenvolvida por Dennis Ritchie (Laboratórios Bell, 1972)

• Criada inicialmente para ser um "ASSEMBLY portátil".• Rodava num computador PDP-11, usando o sistema

operacional UNIX.• Posteriormente foi utilizada para reescrever o UNIX.• Somente em 1978 Brian W. Kernighan e Dennis

Ritchie estabeleceram a sintaxe e a semântica da linguagem C.

• O desenvolvimento de C foi influenciado pela linguagem B (Ken Thompson), que teve suas origens na BCPL (Martins Richards).

• Tais linguagens surgiram da evolução da Algol CPL.

Page 43: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 43

A linguagem C e sua família

• CPL (Combined Programming Language)• BCPL (Basic CPL)• B (Ken Thompson, Bell Labs, 1970)• C (Dennis Ritchie, Bell Labs, 1972).• C++ (Bjarne Stroustrup, Bell Labs, 1983)

Page 44: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 44

C é uma linguagem de médio nível

Alto nível Ada

Pascal

Cobol

Fortran

Basic

Médio nível C++

C

Baixo nível Assembly

Page 45: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 45

Por que estudar C?

• Versatilidade: ele possui tanto características de "alto nível" quanto de "baixo nível".

• Poder: possui ampla biblioteca de funções e é utilizado na construção de “software” para os mais diversos projetos.

• Portabilidade: é possível adaptar um programa em C de um tipo de computador para outro.

Page 46: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 46

Primeiros passos

• Um programa em C consiste de várias funções encadeadas.

• Uma função é um bloco de código de programa que pode ser usado diversas vezes em sua execução.

• Blocos de código são delimitados por chaves: {}

• O uso de funções permite que o programa fique mais legível, mais estruturado.

Page 47: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 47

O C é “Case Sensitive”

• Caracteres maiúsculos e minúsculos fazem diferença:

• Comandos do C (if ou for, por exemplo) só podem ser escritos em minúsculas, pois senão o compilador interpretará como variáveis.

Soma ≠ soma ≠ SOMA ≠ SomASoma ≠ soma ≠ SOMA ≠ SomASoma ≠ soma ≠ SOMA ≠ SomASoma ≠ soma ≠ SOMA ≠ SomA

Page 48: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 48

Estrutura de um programa em C

tipo_de_retorno main(){

comandosreturn valor;

}

tipo_de_retorno main(){

comandosreturn valor;

}

Page 49: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 49

Estrutura de um programa em CExemplo

Avisa ao compiladorque as funções deentrada e saída dedados da bibliotecastdio

A função main éo corpo principaldo programa.int main() { … }Todo programadeve ter um main.As chaves { e }marcam o início eo fim da função.

O programa usa a função printf(...) para imprimir a mensagem no console.Texto deve ser entre áspas:“Olá Mundo!”

Avisa o SO que o programa terminou sem problemas.

Page 50: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 50

A função main()

• Todo programa deve ter uma única função main.

• A função main é o ponto de partida quando o programa é executado.

• Arquivos auxiliares não devem conter a função main.

Page 51: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 51

• Programas que possuem a especificação das funções pré-definidas da linguagem.

• As bibliotecas que serão usadas devem ser os primeiros comandos de um programa em C.

#include <nome_da_biblioteca.h>

int main() {

<açoes>return 0;

}

#include <nome_da_biblioteca.h>

int main() {

<açoes>return 0;

}

Bibliotecas

Page 52: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 52

Bibliotecas

• Programas que possuem a especificação das funções pré-definidas da linguagem.

• As bibliotecas que serão usadas devem ser os primeiros comandos de um programa em C.

#include <nome_da_biblioteca.h>

int main() {

<açoes>return 0;

}

#include <nome_da_biblioteca.h>

int main() {

<açoes>return 0;

}

Page 53: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 53

Bibliotecas

• stdio.h: biblioteca de funções de entrada e saída (leitura e escrita de dados).

• math.h: biblioteca de funções matemáticas (potenciação, raiz quadrada, funções trigonométricas, etc.).

• string.h: biblioteca de funções para manipulação de conjunto de caracteres (por exemplo, palavras).

Page 54: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 54

Comentários

• Comentários em C podem ser escritos em qualquer lugar do texto para facilitar a interpretação do algoritmo.

• Tipos de comentários:– Delimitados por /* e */.

• Todo o texto delimitado é considerado pelo compilador como um comentário.

– Colocando // em uma linha.• Tudo que estiver à direita do símbolo é considerado

como um comentário.

Page 55: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 55

• Devem ser declaradas antes de serem usadas, no início de um bloco de código.

• Forma geral da declaração de variáveis:

tipo_da_variável lista_de_variáveis;tipo_da_variável lista_de_variáveis;

char letra;float temperatura, pressao;int dia, mes, ano;

char letra;float temperatura, pressao;int dia, mes, ano;

Exemplo:Exemplo:

Variáveis

Page 56: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 56

0000

0001

0002

0003

0004

0005

...

FFFF

Endereço Conteúdo

VariáveisVariáveis são Variáveis são armazenadas na memória armazenadas na memória do computador.do computador.

Page 57: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 57

• Estão descritos na biblioteca stdio.h

• Comandos de Saída:– Função printf()– Função putchar()

• Comandos de Entrada:– Função scanf()– Função gets()– Função getchar()

Comandos de Entrada e Saída

Page 58: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 58

printf (string_de_controle, argumentos);printf (string_de_controle, argumentos);

Comandos de Saída

• Função para a escrita formatada no dispositivo de saída padrão, normalmente o vídeo.

Page 59: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 59

Comandos de Saída

• string_de_controle consiste em:– Caracteres que serão exibidos na tela– Caracteres de controle (\)– Comandos de formato, que definem a maneira como

os argumentos serão mostrados (%)

• argumentos são as variáveis cujos conteúdos serão exibidos na tela.

Page 60: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 60

Comandos de Saída

• Caracteres de controle imprimem caracteres especiais na saída:– \n – nova linha– \t – tabulação horizontal– \\ – a própria contra-barra– \b – backspace– \" – aspas– \' – apóstrofe– \xnnn – código hexadecimal do caractere ASCII– \a – alerta sonoro

Page 61: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 61

Comandos de Saída

• Comandos de formato disponíveis (começam por %):– %d (%i)– números inteiros em decimal– %f – números reais do tipo float– %lf – números reais do tipo double– %e (%E)– números reais em notação científica– %c – caractere– %s – seqüência de caracteres (string)– %x (%X)– números em hexadecimal (base 16)– %o – números em octal (base 8)– %% – o próprio caractere %– %p – endereços de memória (em hexadecimal)

Page 62: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 62

• Outros comandos de alinhamento:– + - imprime o sinal de + mesmo quando o número é positivo– #x ou #X – imprime 0x ou 0X à esquerda do número hexa– #f, #e ou #E – imprime o ponto decimal, mesmo para

inteiros

Comandos de Saída

Page 63: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 63

Comandos de Saída

• Escreve um caractere na tela a partir da posição atual do cursor.

• O resultado do comando é a impressão do caractere corresponde ao código ASCII do argumento.

• Argumento pode ser do tipo int ou char.

putchar (<variável>);putchar (<variável>);

Page 64: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 64

Comandos de Entrada

• Rotina de leitura formatada de dados inseridos pelo usuário pelo teclado.

• string_de_controle: comandos de formato (%_), os mesmos relacionados para o printf().

• argumentos: endereço das variáveis onde serão colocados os valores de entrada: &nome_variável.– O operador & representa o endereço de uma variável.

scanf (string_de_controle, argumentos);scanf (string_de_controle, argumentos);

Page 65: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 65

• Rotina de entrada que lê uma seqüência de caracteres (string) até que seja pressionada a tecla ENTER.

gets(nome_da_variável);gets(nome_da_variável);

Comandos de Entrada

Page 66: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 66

nome_da_variável = getchar();nome_da_variável = getchar();

Comandos de Entrada

• getchar() - rotina que espera uma tecla ser pressionada e devolve seu valor na tela.

• Deve-se pressionar ENTER depois de digitar o caractere.

Page 67: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 67

• A linguagem C tem 5 tipos básicos:

– char – caractere ASCII– int – número inteiro– float – número real de precisão simples– void – sem valor– double – número real de precisão dupla

Tipos de dados

Page 68: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 69

• Um modificador de tipo altera o intervalo de valores que uma variável pode armazenar ou como o compilador representa um valor.

• Existem quatro modificadores de tipo:– signed– unsigned– long – short

Tipos de dados - Modificadores

Page 69: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 70

Tipos de dados - Modificadores

• Ao tipo float não se pode aplicar nenhum modificador.

• Ao tipo double pode-se aplicar apenas o modificador long.

• Os quatro modificadores podem ser aplicados a inteiros (int).

• O modificador unsigned serve para especificar variáveis sem sinal, instruindo o compilador a não considerar o primeiro bit como sinal.

Page 70: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 71

• O número de bits do tipo int normalmente corresponde ao tamanho da palavra de uma determinada arquitetura de computador.

• Dependendo do compilador, os modificadores short e long alteram a quantidade de bits reservados para representar números inteiros:– short int: reserva mais bits que o tipo int– long int: reserva menos bits que o tipo int

• Cada compilador é livre para escolher tamanhos adequados para o seu próprio hardware.

Tipos de dados - Modificadores

Page 71: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 72

Tipos de dados - GCCTipo Tamanho em bits Faixa de números representados

char 8 -128 a 127

unsigned char 8 0 a 255

signed char 8 -128 a 127

int 32 -2.147.483.647 a 2.147.483.647

unsigned int 32 0 a 4.294.967.295

signed int 32 -2.147.483.647 a 2.147.483.647

short int 16 -32.767 a 32.767

unsigned short int

16 0 a 65.535

signed short int 16 -32.767 a 32.767

long int 32 -2.147.483.647 a 2.147.483.647

unsigned long int 32 0 a 4.294.967.295

signed long int 32 -2.147.483.647 a 2.147.483.647

float 32 seis dígitos de precisão

double 64 dez dígitos de precisão

long double 80 dez dígitos de precisão

Page 72: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 73

• São os nomes que damos aos objetos utilizados (variáveis, constantes, funções, etc.)

• Podem ter qualquer nome, desde que:– Comece com uma letra ou sublinhado (underscore) _– Os caracteres subseqüentes devem ser letras,

números ou _.– Não seja igual a:

• uma palavra reservada, • uma função declarada• bibliotecas do C.

Identificadores

Page 73: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 74

int _mesint ano_atualfloat temp1char palavra_digitada

int _mesint ano_atualfloat temp1char palavra_digitada

char 2a_feiraint valores$float floatint mainchar stdio

char 2a_feiraint valores$float floatint mainchar stdio

PermitidoPermitido Não permitido!Não permitido!

Identificadores ou variáveis

Page 74: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 75

#define <identificador> <valor>#define <identificador> <valor>

#define PI 3.1415#define ANO 2007#define LETRA ' A'

#define PI 3.1415#define ANO 2007#define LETRA ' A'

Exemplos:Exemplos:

Constantes

• Constantes são valores fixos que não podem ser modificados em nenhuma parte do programa.

• Sua definição não usa ponto-e-vírgula, nem sinal de igualdade.

Page 75: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 76

Constantes

• Costuma-se definir o nome das constantes com letras maiúsculas, para diferenciá-los de nomes de variáveis e funções.

• Essa prática melhora a legibilidade do programa.

• Definição de constantes facilita a manutenção do programa.

Page 76: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 77

• Uma variável, ao ser definida, contém um valor qualquer e imprevisível. Costuma-se dizer que contém lixo de memória.

• O comando de atribuição (=) permite alterar o valor (conteúdo) de uma variável.

<variável> = <valor>;<variável> = <valor>;

Operador de Atribuição

Page 77: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 78

• Exemplos:

letra = 'H';

ano = 2007;

temperatura = 38.9;

nova_letra = letra;

float cateto = 3.1;

area_ret = base * altura;

letra = 'H';

ano = 2007;

temperatura = 38.9;

nova_letra = letra;

float cateto = 3.1;

area_ret = base * altura;

Operador de Atribuição

atribuição de valoratribuição de valor

atribuição de uma atribuição de uma variável a outravariável a outra

definição e definição e atribuiçãoatribuição

atribuição de fórmulaatribuição de fórmula

Page 78: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 79

Caractere × String de caracteres

• Quando uma variável possui apenas um caractere, ele ocupa apenas uma posição de memória:

A 0100 0001

char letra = 'A';char letra = 'A';

MemóriaMemóriaVariávelVariável

Page 79: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 80

Caractere × String de caracteres

• Uma string de n caracteres ocupa n+1 posições de memória.

• A posição adicional corresponde ao valor zero (\NULL em ASCII), indicativo do final da string.

0000 00000100 0011

A 0100 00100100 0001

B C

nn caracteres caracteres

n+1n+1posiçõesposições

char nome[] = "ABC";char nome[] = "ABC";

MemóriaMemóriaVariávelVariável

Page 80: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 81

• Aritméticos• Relacionais• Lógicos

Operadores

Page 81: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 82

Operador  Ação  Exemplo

+  Adição x = 0x1A + y;

-  Subtração x = x – y;

*  Multiplicação x = 8 * y;

/  Divisão x = y / 2;

%  Resto de divisão x = y % 2;

++ Incremento x++;

-- Decremento y--;

Operadores Aritméticos

Page 82: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 83

area = 2 * PI * raio;delta = b*b – 4*a*c;

area = 2 * PI * raio;delta = b*b – 4*a*c;

media = (a + b + c)/2;delta = (b*b) – (4*a*c);

media = (a + b + c)/2;delta = (b*b) – (4*a*c);

Operadores Aritméticos

• Diversos operadores podem ser utilizados em uma mesma expressão:

• A ordem de execução dos operadores pode ser determinada explicitamente pelo uso de parênteses:

Page 83: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 84

• Quando não há parênteses, o compilador usa regras de precedência para determinar qual operação executar primeiro

• Se duas operações têm a mesma precedência, segue-se a ordem da esquerda para a direita.

Maior precedênciaMaior precedência- (unário)- (unário)* / %* / %+ -+ -

Menor precedênciaMenor precedência

Maior precedênciaMaior precedência- (unário)- (unário)* / %* / %+ -+ -

Menor precedênciaMenor precedência

Operadores Aritméticos

Page 84: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 85

Operadores Aritméticos

• O operador incremento de 1 (++) realiza duas operações:– Soma 1 ao valor atual da variável– Armazena o resultado na própria variável– Em vez de x = x + 1; , escreve-se x++;

• De forma semelhante funciona o operador decremento de 1 (--).– Em vez de x = x - 1; , escreve-se x--;

Page 85: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 86

• Os operadores ++ e -- podem ser usados como:– Prefixos: antes da variável: ++x– Sufixos: após a variável: x++

• Se a operação aparece isolada, ambas notações são equivalentes:

int n = 6, m = 3;n++; /* resultado: n = 7 */++m; /* resultado: m = 4 */n--; /* resultado: n = 6 */--m; /* resultado: m = 3 */

int n = 6, m = 3;n++; /* resultado: n = 7 */++m; /* resultado: m = 4 */n--; /* resultado: n = 6 */--m; /* resultado: m = 3 */

Operadores Aritméticos

Page 86: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 87

• Se a operação é parte de uma expressão:– Prefixo: Valor usado na expressão é o valor

incrementado/decrementado.– Sufixo: Operação incremento/decremento será realizada

depois que o valor for usado na expressão.

int n = 0, m = 0, a, b, c, d;n++; /* resultado: n = 1 */++m; /* resultado: m = 1 */n--; --n; /* resultado: n = -1 */a = n++; /* resultado: a = -1; n =0 */b = ++m; /* resultado: b = 2; m = 2*/c = 2*(m++); /* resultado: c = 4; m = 3*/d = 3*(++n); /* resultado: d = 3; n = 1*/

int n = 0, m = 0, a, b, c, d;n++; /* resultado: n = 1 */++m; /* resultado: m = 1 */n--; --n; /* resultado: n = -1 */a = n++; /* resultado: a = -1; n =0 */b = ++m; /* resultado: b = 2; m = 2*/c = 2*(m++); /* resultado: c = 4; m = 3*/d = 3*(++n); /* resultado: d = 3; n = 1*/

Operadores Aritméticos

Page 87: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 88

• Uma operação pode ser combinada com a atribuição em um mesmo operador.

• Embora sejam mais eficientes, tornam o programa mais difícil de se compreendido.

Forma normalForma combinada

x = x + 5 x += 5

x = x - a x -= a

x = x * k x *= k

x = x / (x+1) x /= x+1

x = x & k x &= k

x = x << k x <<= k

... ...

Operações combinadas com atribuição

Page 88: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 89

Operadores Relacionais

• Compara dois valores, produzindo um resultado lógico:

– FALSO é indicado pelo valor zero.

– VERDADEIRO é indicado por um valor ≠ zero.

Operador Ação 

>  Maior do que 

>=  Maior ou igual a 

<  Menor do que 

<=  Menor ou igual a 

==  Igual a 

!=  Diferente de 

Page 89: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 90

int cond;int a = 3; float x = 1.5;

cond = a != x; /* cond=1 -> V */cond = a/2.0 == x; /* cond=1 -> V */cond = a/2 == x; /* cond=0 -> F */cond = a != 2*x; /* cond=0 -> F */cond = a >= x; /* cond=1 -> V */cond = a/3 <= x; /* cond=1 -> V */cond = a/2 > 2; /* cond=0 -> F */cond = a; /* cond=3 -> V */cond = a – 2*x; /* cond=0 -> F */

int cond;int a = 3; float x = 1.5;

cond = a != x; /* cond=1 -> V */cond = a/2.0 == x; /* cond=1 -> V */cond = a/2 == x; /* cond=0 -> F */cond = a != 2*x; /* cond=0 -> F */cond = a >= x; /* cond=1 -> V */cond = a/3 <= x; /* cond=1 -> V */cond = a/2 > 2; /* cond=0 -> F */cond = a; /* cond=3 -> V */cond = a – 2*x; /* cond=0 -> F */

Operadores Relacionais

Page 90: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 91

Operadores Lógicos

• Operam sobre os valores lógicos das variáveis, sem considerar seu bits individuais.

• Não confundir com operadores bit a bit.

Operador Ação 

&& AND (E) 

|| OR (OU)

! NOT (NÃO)

Page 91: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 92

int cond;int a = 3; float x = 1.5;

cond = (a/2 == x) && (a > 2); /* cond=0 -> F */cond = (a != x) || (a/x < 2); /* cond=1 -> V */cond = (x <= a) && (a >= 2*x); /* cond=1 -> V */cond = !(a/3 <= x); /* cond=0 -> F */cond = (a/2==x) || (a>=x) && !(2*x!=a); /* cond=1 -> V */cond = a && x; /* cond=1 -> V */cond = (a - 2*x) || (x < a/2); /* cond=0 -> F */

int cond;int a = 3; float x = 1.5;

cond = (a/2 == x) && (a > 2); /* cond=0 -> F */cond = (a != x) || (a/x < 2); /* cond=1 -> V */cond = (x <= a) && (a >= 2*x); /* cond=1 -> V */cond = !(a/3 <= x); /* cond=0 -> F */cond = (a/2==x) || (a>=x) && !(2*x!=a); /* cond=1 -> V */cond = a && x; /* cond=1 -> V */cond = (a - 2*x) || (x < a/2); /* cond=0 -> F */

Operadores Lógicos

Page 92: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 93

Precedência entre operadores++ --

-

!

Pré/pós incremento, decrementoMenos UnárioNegação

Maior precedência

Menor precedência

* /

%

Multiplicação, divisãoMódulo (resto da divisão inteira)

+ - Subtração, adição

> >= < <= Relacionais

== != Igual, diferente

&& E lógico

|| OU lógico

= += -= *= /=

Atribuição

Page 93: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 94

E o problema...

• dos Bits trocados, será que conseguimos implementar uma solução usando a linguagem C?

Page 94: Reginaldo@utfpr.edu.br – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré reginaldo@utfpr.edu.br  Universidade Tecnológica Federal

[email protected] – coinf.cm.utfpr.edu.br 95

E, outro problema...

• Reescreva o algoritmo de calculo de índice de massa corporal (IMC) de maneira que, além de mostrar o índice, deve-se mostrar as mensagens:• “Abaixo do peso.”, quando o imc for menor que 18,5,

inclusive• “Peso normal.”, quando o imc for maior que 18,5 e

menor que 25, inclusive• “Acima do peso.”, quando o imc for maior que 25 e

menor que 30, inclusive• “Muito acima do peso.”, quando o imc for mair do

que 30