[email protected] – coinf.cm.utfpr.edu.br 1 prof. reginaldo ré [email protected] ...
TRANSCRIPT
[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
[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/
[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
[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
[email protected] – coinf.cm.utfpr.edu.br 5
Recursos Disponíveis
• coinf.cm.utfpr.edu.br• CDT-Eclipse
[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 ?
[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!
[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”)
[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]
[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]
[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]
[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
[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.
[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
[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
[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
[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.
[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.
[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.
[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
[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
[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
[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.
[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
[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.
[email protected] – coinf.cm.utfpr.edu.br 26
Exemplo
[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
[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
[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
[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
[email protected] – coinf.cm.utfpr.edu.br 31
c+bx+ax2
Passos para elaboração de um programaExemplo
• Calcular as raízes reais de:
[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
[email protected] – coinf.cm.utfpr.edu.br 33
Definir os dados de Entrada
• As entradas fornecidas são os temos a, b, c
[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.
[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;
[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
[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");}
[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
[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
[email protected] – coinf.cm.utfpr.edu.br 40
O ambiente de programação CDT-Eclipse
[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
[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.
[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)
[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
[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.
[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.
[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
[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;
}
[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.
[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.
[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
[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;
}
[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).
[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.
[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
[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.
[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
[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.
[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.
[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
[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)
[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
[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>);
[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);
[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
[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.
[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
[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
[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.
[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
[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
[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
[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
[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.
[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.
[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
[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
[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
[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
[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
[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:
[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
[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--;
[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
[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
[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
[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
[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
[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)
[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
[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
[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?
[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