• Nenhum resultado encontrado

Tipos de Dados, Declaração e tipos de variáveis, Operadores e expressão aritmética e lógica

N/A
N/A
Protected

Academic year: 2022

Share "Tipos de Dados, Declaração e tipos de variáveis, Operadores e expressão aritmética e lógica"

Copied!
36
0
0

Texto

(1)

Tipos de Dados, Declaração e tipos de variáveis, Operadores e expressão aritmética e lógica

INF01202

Prof. Lucas Mello Schnorr

1 / 34

(2)

O que veremos hoje

I Tipos de dados na declaração de variáveis

I Expressões aritméticas e lógicas

(3)

Tipos de dados

Tipos de dados

Determina o conteúdo e tamanho de área de memória reservada para o dado.

No C, os tipos básicos de dados são:

Tipo Tamanho* Valores Válidos char 1 byte Caracteres do Código

ASCII int 2 ou 4

bytes -2 e31 a 2 e32 float 4 bytes -2 e63 a 2 e64 doubl

e

8 bytes ...

* Varia de acordo com a arquitetura da máquina e o sistema operacional

Cortesia: Prof. Mara Abel

Melhor jeito de se saber o tamanho é com o comando sizeof

3 / 34

(4)

Vejamos um exemplo com sizeof

/* Programa que fornece o tamanho do tipo */

#include <stdio.h>

int main ()

{ printf ("char = %d\n", sizeof(char));

printf ("int = %d\n", sizeof(int));

printf ("long int = %d\n", sizeof(long int));

printf ("float = %d\n", sizeof(float));

printf ("double = %d\n", sizeof(double));

return 0;

}

A implementação destes tipos:

I inteiros, do menor ao maior valor inteiro que cabe no tamanho I ponto-utuante (float, double), veja a norma IEEE 754, em pt-br

https://pt.wikipedia.org/wiki/IEEE_754

I Tabela ASCII para o tipo char

(5)

Tabela ASCII

5 / 34

(6)

Presença do tipo na declaração de variáveis

Declaração de variáveis

Sintaxe:

<tipo> <nome_da_variavel>;

14

declaração das variáveis / conteúdos usadas no programa;

nomes: letra inicial + letras, dígitos ou _ (até 32) – minúsculas!

tipos principais:

int /inteiro

float /decimal, precisão simples double /decimal, precisão dupla char / 1 único caractere

exemplos:

int n;

int quantidade_valores;

float x, y, somavalores;

char sexo;

Cortesia: Prof. Mara Abel

(7)

Inicialização de variáveis na declaração

Declaração de Variável Inicializada

20

//testando inicializacao de constante

#include <stdio.h>

#define LIMITE 30 // LIMITE não pode ser alterado no programa int main ( )

{

int v = 3; // v é variável - pode ter o valor alterado ...

v = 7;

...

}

Ex: <tipo> <nome variável> = <valor>

int v = 3;

int v ;

//mais adiante no programa v = 3;

Idêntico a

Cortesia: Prof. Mara Abel 7 / 34

(8)

Vejamos um exemplo

/* Programa para realizar testes de inicializacao de variaveis na declaracao */

#include <stdio.h>

int main () { int v = 3;

printf ("O valor da variavel v eh %d.\n", v);

return 0;

}

gcc exemplo-inicializacao-variaveis.c -o exemplo-inicializacao-variaveis ./exemplo-inicializacao-variaveis

Caso não seja inicializada, a variável tem qual valor?

(9)

Tipos no scanf

Entrada formatada de dados:

função scanf

Exemplos:

int i, j;

float x;

char c;

scanf("

%d

", &i);

scanf("

%d %f

", &j, &x);

scanf("

%c

", &c);

15

%d 1 número inteiro in base 10

%i mesmo que %d, mas detecta que base é, hexadecimal ou decimal

%f 1 número float

%lf 1 número double

%c 1 caractere char scanf ("formatos", &var1, &var2,...);

Sintaxe:

Espaço em branco : importante para limpar

o buffer de entrada

 %d assume base 10 while %i auto detects the base. 

Cortesia: Prof. Mara Abel

9 / 34

(10)

Tipos no printf

Saída formatada de dados: função printf

Exemplos:

int i, j;

float x;

char c;

printf(“Resultados: i=%d \n j=%d \ n“,i,j);

printf("%d", i);

printf("%d, %f", j, x);

printf("%c", c);

\ Função

\b BackSpace

\n New Line (mudança de Linha)

\t Tabulação Horizontal

\v Tabulação Vertical

\\ imprime o próprio caractere \

\' imprime o caractere '

\" imprime o caractere "

\? imprime o caractere ?

%c char

%d inteiro

%i inteiro

%f float ou double com notação comum

%e float ou double com notação científica

%g dependendo do conteúdo, usa %f ou

%e printf ("formatos", var1, var2,...);

Sintaxe:

Cortesia: Prof. Mara Abel

(11)

Contantes do pré-processador

Sintaxe:

#define < identificador em maiúsculas> <valor inicial>

Constantes

• Valores ou locais identificados onde os dados armazenados nunca se alteram durante a execução de um programa.

• Identificador será substituído em tempo de compilação pelo valor indicado;

• São declaradas e instanciadas na linha seguinte à declaração das bibliotecas (após as definições #include)

• Entre identificador e valor nada além de espaços deve ser colocado

• Identificadores de constantes devem utilizar apenas letras maiúsculas!

Cortesia: Prof. Mara Abel 11 / 34

(12)

Vejamos exemplos de constantes

19 //testando

#include <stdio.h>

#define QUANTIDADE 30 int main ( )

{ int x ;

x = x + QUANTIDADE ; ...

}

Ex:

QUANTIDADE = 7;

scanf(“%d”,& QUANTIDADE )

printf(“%d”, QUANTIDADE );

indice = QUANTIDADE ;

Constantes

#define PI 3.1416 // valor do pi, real #define INT5 5 // valor 5, inteiro

Cortesia: Prof. Mara Abel

(13)

O comando de atribuição =

Comando (operador) de atribuição

Atribui o valor da direita à variável da esquerda

O valor pode ser uma constante, uma variável ou uma expressão

Exemplos

x = 4; // significa que a variável X recebe conteúdo 4

y = x + 2;

y = y + 4;

valor = 2.5; //casa decimal indicada pelo ponto sexo = 'F’; /*atribuição de 1 único caractere para uma

variável char é entre apóstrofos*/

17

Sintaxe:

identificador = expressão;

Cortesia: Prof. Mara Abel

Do lado direito da atribuição, temos uma expressão.

13 / 34

(14)

Expressões aritméticas

Expressões Aritmé?cas

•  Operando: corresponde a um valor constante, de uma variável, resultante de uma função aritmé?ca ou de outra expressão.

•  Operador: aritmé?co.

  Sintaxe:

operando operador operando

18 INF01202 - Marcelo Walter - Aula 03

Cortesia: Prof. Marcelo Walter

(15)

Operadores aritméticos sem utilizar bibliotecas externas

Operadores Aritméticos

(sem biblioteca)

Resto da divisão inteira de x por y (requer operandos inteiros) x % y

%

Divide x por y (se operandos inteiros, executa divisão inteira, senão float) x / y

/

Multiplica x e y

*

Subtrai y de x x – y

-

Soma x e y x + y

+

Comentário Exemplo

Operador

x * y

21 INF01202 - Prof. Edison- Aula 03

Cortesia: Prof. Edison Pignaton de Freitas

Todos estes operadores fazem parte da linguagem C.

15 / 34

(16)

Exemplo do uso de operadores aritméticos

/* Programa para ilustrar funcionamento dos operadores aritmeticos */

#include <stdio.h>

int main ()

{ int val_1, val_2;

int divisao, resto;

val_1 = 13;

val_2 = 5;

divisao = val_1 / val_2;

resto = val_1 % val_2;

printf("Divisao inteira = %d Resto = %d\n", divisao, resto);

return 0;

}

gcc exemplo-operadores-aritmeticos.c -o exemplo-operadores-aritmeticos ./exemplo-operadores-aritmeticos

Divisão inteira = 2 Resto = 3

(17)

O resto da divisão inteira é útil sim

Resto da Divisão Inteira

• O resto da divisão inteira é útil em várias situações

• Vamos supor o cálculo do número de botes salva- vidas necessários num transatlântico

• Vamos supor 950 passageiros e tripulantes. Quantos botes de 23 lugares são necessários? E botes com 25 lugares?

INF01202 - Prof. Edison- Aula 03 23

Se o resto da divisão não der zero, significa que precisamos mais um bote que irá ser parcialmente utilizado

Cortesia: Prof. Edison Pignaton de Freitas 17 / 34

(18)

Vejamos

Com botes de 23 lugares

int passageiros = 950;

int lugares_no_bote = 23;

printf("%d %d\n",

passageiros / lugares_no_bote, passageiros % lugares_no_bote);

41 7

Com botes de 25 lugares

int passageiros = 950;

int lugares_no_bote = 25;

printf("%d %d\n",

passageiros / lugares_no_bote, passageiros % lugares_no_bote);

38 0

(19)

Funções matemáticas mais complexas com math.h

Slide 6 INF 01202

Algumas Funções Matemáticas

(#include <math.h>)

Tangente de x tan(x)

tan

Raiz quadrada de x sqrt(x)

sqrt

Seno de x sin(x)

sin

Calcula x elevado à potência y pow(x,y)

pow

Logaritmo decimal de x log10(x)

log10

Logaritmo natural de x log(x)

log

Arredonda o número real para baixo: floor(3.2) é 3 floor(x)

floor

Valor absoluto de x fabs(x)

fabs

e elevado à potencia x exp(x)

exp

Cosseno de x (x em radianos) cos(x)

cos

Arredonda o número real para cima: ceil(3.2) é 4 ceil(x)

ceil

Comentário Exemplo

Função

Cortesia: Prof. Claudio Jung

19 / 34

(20)

Exemplo de operações matemáticas

/* Programa para ilustrar funcionamento de algumas operacoes aritmeticas mais complexas. */

#include <stdio.h>

#include <math.h>

int main(void) { float val_1;

printf("Entre com valor float: ");

scanf("%f", &val_1);

printf("Valor fornecido como entrada: [%f]\n", val_1);

printf("Resultado do ceil : [%f]\n", ceil(val_1));

printf("Resultado do floor : [%f]\n", floor(val_1));

printf("Resultado do round : [%f]\n", round(val_1));

return 0;

}

gcc exemplo-com-biblioteca-math.c -o exemplo-com-biblioteca-math -lm ./exemplo-com-biblioteca-math

(21)

Outras saídas possíveis do exemplo

Execução

INF01202 - Prof. Edison- Aula 03 26

Cortesia: Prof. Edison Pignaton de Freitas 21 / 34

(22)

Precedência e associatividade de operadores em C

Precedência de operadores em C

ordem operador

1o funções

2o * / %

3o + -

val_final = val1 * val2 + 5;

val_final = val1 * (val2 + 5);

Podemos usar parêntesis para modificar a precedência

Cortesia: Prof. Marcelo Walter

Qual é a associatividade de operadores?

Exemplo ilustrativo: a + b + c

(23)

Equivalência entre álgebra e C

Slide 11 INF 01202

Equivalência de expressões aritméticas em C

Expressão

algébrica Expressão em C Interpretação a+ b + c + d

4 (a+b+c+d) / 4 Necessidade de parênteses, para que a soma dos 4 valores ocorra antes da divisão. Se não usados, d será dividido (/) por 4 antes de somado com a e b.

b

4ad b / (4 * a * d) Tome cuidado para não esquecer os parêntesis no denominador. Um erro comum é fazer b / 4 * a * d.

(a + b) 2 ( a + b ) * ( a + b ) pow(a+b,2)ou

Não existe operador potência: multiplica 2 vezes ou usa função pow (biblioteca

<math.h>).

1 + c

a – b (1 + c) / (a – b) Observar a necessidade dos parênteses.

4r 3 4 * 3.1416 * (r*r*r) 4*3.1416 * ou

pow(r,3)

é um caractere grego, sem significado para C++ padrão.

Cortesia: Prof. Claudio Jung 23 / 34

(24)

Relação entre tipos e expressoes aritméticas

Vejams um exemplo representativo

/* Exemplo para ilustrar um problema com expressoes aritmeticas */

#include<stdio.h>

int main() { float num_real;

int x=1, y=2, z=1;

num_real = x/2 + y/2 + z/2;

printf("Resultado: [%f]\n", num_real);

return 0;

}

Qual é o resultado?

gcc exemplo-tipos-expressoes-aritmeticas.c -o exemplo-tipos-expressoes-aritmeticas ./exemplo-tipos-expressoes-aritmeticas

Resultado: [1.000000]

(25)

Relação entre tipos e expressoes aritméticas

Vejams um exemplo representativo

/* Exemplo para ilustrar um problema com expressoes aritmeticas */

#include<stdio.h>

int main() { float num_real;

int x=1, y=2, z=1;

num_real = x/2 + y/2 + z/2;

printf("Resultado: [%f]\n", num_real);

return 0;

}

Qual é o resultado?

gcc exemplo-tipos-expressoes-aritmeticas.c -o exemplo-tipos-expressoes-aritmeticas ./exemplo-tipos-expressoes-aritmeticas

Resultado: [1.000000]

24 / 34

(26)

Constatação: resultados parciais são do tipo inteiro

Modeladores - casts

•  Altera o ?po retornado por operações parciais de uma expressão.

•  Funcionamento:

... float num_real; // variável real

int x=1,y=2,z=1; // valores inteiros – inicializados na declaração /*expressão com operadores inteiros,todos resultados parciais em

inteiro: */

num_real= x/2+ y/2 + z/2;

  Sintaxe: (tipo) expressão

int int int

int int

int

int int int

float 0 + 1 + 0 ↔ 1.0

26 INF01202 - Marcelo Walter - Aula 03

Cortesia: Prof. Marcelo Walter

(27)

Modeladores (casts) para explicitamente trocar o tipo

/* Exemplo para ilustrar um problema com expressoes aritmeticas */

#include <stdio.h>

int main()

{ float num_real_0, num_real_1, num_real_2, num_real_3; // variaveis reais int x=1, y=2, z=1; // valores inteiros inicializados na declaracao

num_real_0 = x/2 + y/2 + z/2;

num_real_1 = (float)x/2 + y/2 + z/2;

num_real_2 = (float)x/2 + (float)y/2 + z/2;

num_real_3 = (float)x/2 + (float)y/2 + (float)z/2;

printf("Resultados -> "

"C0: [%f] "

"C1: [%f] "

"C2: [%f] "

"C3: [%f]\n", num_real_0, num_real_1, num_real_2, num_real_3);

return 0;

}

gcc exemplo-tipos-expressoes-aritmeticas-cast.c -o exemplo-tipos-expressoes-aritmeticas-cast ./exemplo-tipos-expressoes-aritmeticas-cast

Resultados -> C0: [1.000000] C1: [1.500000] C2: [1.500000] C3: [2.000000]

26 / 34

(28)

Modeladores (casts) para explicitamente trocar o tipo

/* Exemplo para ilustrar um problema com expressoes aritmeticas */

#include <stdio.h>

int main()

{ float num_real_0, num_real_1, num_real_2, num_real_3; // variaveis reais int x=1, y=2, z=1; // valores inteiros inicializados na declaracao

num_real_0 = x/2 + y/2 + z/2;

num_real_1 = (float)x/2 + y/2 + z/2;

num_real_2 = (float)x/2 + (float)y/2 + z/2;

num_real_3 = (float)x/2 + (float)y/2 + (float)z/2;

printf("Resultados -> "

"C0: [%f] "

"C1: [%f] "

"C2: [%f] "

"C3: [%f]\n", num_real_0, num_real_1, num_real_2, num_real_3);

return 0;

}

gcc exemplo-tipos-expressoes-aritmeticas-cast.c -o exemplo-tipos-expressoes-aritmeticas-cast ./exemplo-tipos-expressoes-aritmeticas-cast

Resultados -> C0: [1.000000] C1: [1.500000] C2: [1.500000] C3: [2.000000]

(29)

Operadores de Atribuição (atalhos)

Slide 10 INF 01202

Operadores de Atribuição (atalhos)

Operado

r Exempl

o Comentário

= x = y Atribui o valor de y a x

++ x++ x = x + 1

-- x-- x = x – 1

+= x += y x = x + y -= x -= y x = x – y

*= x *= y x = x * y /= x /= y x = x / y

%= x %= y x = x % y

Cortesia: Prof. Claudio Jung 27 / 34

(30)

Exercício

Slide 16 INF 01202

Exercícios

2) Faça um algoritmo que:

leia um valor inteiro;

calcule o menor número de notas necessárias para completar este valor. Lembre que as notas correntes no real são 100, 50, 20, 10, 5, 2 e 1 (incluindo aqui também a moeda).

Obs: não vamos analisar ainda o caso da parte fracionária. Podemos implementar o mesmo algorimo para ele tratando-o como um inteiro.

Cortesia: Prof. Claudio Jung

(31)

Análise e Denição do Problema

Slide 17 INF 01202

Dada uma quantia (inteira) em reais, calcular e mostrar o número de cédulas de cada nota

(R$ 100, 50, 20, 10, 5 , 2 ou 1)

que totalizem este valor, gerando o menor número possível de notas no total

Especificação do Problema: Enunciado

Objetivo: determinar tipos de notas e suas quantidades

Entradas: valor inteiro

Saída: quantidade de cada nota que totalize o valor inicial

Análise e Definição do Problema

Cortesia: Prof. Claudio Jung 29 / 34

(32)

Algoritmo

Slide 18 INF 01202

Algoritmo

algoritmo calculanotas;

/* calcula o nro mínimo de notas cujo valor total seja igual a um valor dado

entradas: valor (inteiro)

saídas: n100, n50, n20, n10, n5, n2 e n1 ( notas ) */

1. início 2. ler valor

3. v = valor //copia para outra variável, para preservar valor lido 4. n100 = v div 100 // quociente da divisao inteira entre v e 100 5. v = v mod 100 // resto da divisao inteira entre v e 100 6. n50 = v div 50

7. v = v mod 50 8. n20 = v div 20 9. v = v mod 20 10. n10 = v div 10 11. v = v mod 10 12. n5 = v div 5 13. v = v mod 5 14. n2 = v div 2

15. n1 = v mod 2 // recebe resto da div inteira por 2: já está pronto 16. ... //informa notas calculadas...

Cortesia: Prof. Claudio Jung

(33)

Programa (página 1)

Slide 19 INF 01202

Resolução do problema

/* Calcula quantidade de cada cédula (ou moeda) tal que a soma dos valores totalize um valor inteiro dado.

Entrada: valor inteiro

Saida: quandidade de cedulas/moedas de 100, 50, 20, 10, 5, 2 e 1 reais */

#include <stdio.h>

int main( )

{ int valor, v; //valores inteiros lido e usado nos cálculos int n100, n50,n20,n10,n5,n2,n1;

printf(“Informe valor inteiro:“);

scanf("%d", &valor);

v = valor; // copia, para preservar valor lido

n100 = v/100; // RESULTADO DA DIVISÃO INTEIRA POR 100 v = v%100; // RESTO DA DIVISÃO INTEIRA POR 100 n50 = v/50;

v = v%50;

n20 = v/20;

v = v%20;

n10 = v/10;

v = v%10;

n5 = v/5;

v = v % 5;

n2 = v/2; // RESULTADO DA DIVISÃO INTEIRA POR 2 n1 = v%2; // RESTO DA DIVISÃO INTEIRA POR 2

Cortesia: Prof. Claudio Jung 31 / 34

(34)

Programa (página 2)

Slide 20 INF 01202

Resolução do problema

// ... continuação

//quebra 2 linhas e insere caracteres ,00 depois do valor:

printf("\n\nValor lido: R$%d,00\n",valor); // insere vírgula zero zero

printf("notas de 100: %d\n",n100);

printf("notas de 50: %d\n",n50);

printf("notas de 20: %d\n",n20);

printf("notas de 10: %d\n",n10);

printf("notas de 5: %d\n",n5);

printf("notas de 2: %d\n",n2);

printf("notas de 1: %d\n",n1);

return 0;

}

Cortesia: Prof. Claudio Jung

(35)

Testes

/* Calcula quantidade de cada cédula (ou moeda) tal que a soma dos valores totalize um valor inteiro dado.

Entrada: valor inteiro

Saida: quandidade de cedulas/moedas de 100, 50, 20, 10, 5, 2 e 1 reais */

#include <stdio.h>

intmain( )

{intvalor, v;//valores inteiros lido e usado nos cálculos intn100, n50,n20,n10,n5,n2,n1;

printf("Informe valor inteiro:");

scanf("%d",&valor);

v=valor;// copia, para preservar valor lido n100=v/100;// RESULTADO DA DIVISÃO INTEIRA POR 100 v=v%100; // RESTO DA DIVISÃO INTEIRA POR 100 n50=v/50;

v=v%50;

n20=v/20;

v=v%20;

n10=v/10;

v=v%10;

n5=v/5;

v=v% 5;

n2=v/2; // RESULTADO DA DIVISÃO INTEIRA POR 2 n1=v%2; // RESTO DA DIVISÃO INTEIRA POR 2

//quebra 2 linhas e insere caracteres ,00 depois do valor:

printf("\n\nValor lido: R$%d,00\n",valor);// insere vírgula zero printf("notas de 100: %d\n",n100);

printf("notas de 50: %d\n",n50);

printf("notas de 20: %d\n",n20);

printf("notas de 10: %d\n",n10);

printf("notas de 5: %d\n",n5);

printf("notas de 2: %d\n",n2);

printf("notas de 1: %d\n",n1);

return0;

}

33 / 34

(36)

Exercício para casa

Slide 22 INF 01202

Exercício para a próxima aula!

3) Faça um algoritmo que:

leia um valor real, com casas decimais;

tranforme este valor real em dois valores inteiros correspondentes, respectivamente, à parte inteira e à parte decimal (centavos) do valor lido (se o valor lido for 123,98, parte_inteira deve receber 123 e parte_decimal deve receber 98);

calcule o menor número de notas e moedas necessárias para completar este valor. Lembre que as notas correntes no real são 100, 50, 20, 10, 5, 2 e 1 (incluindo aqui também a moeda) e as moedas 50, 25, 10, 5 e 1 centavos.

implemente em C um programa que corresponda ao

Cortesia: Prof. Claudio Jung

Referências

Documentos relacionados

(grifos nossos). b) Em observância ao princípio da impessoalidade, a Administração não pode atuar com vistas a prejudicar ou beneficiar pessoas determinadas, vez que é

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

E ele funciona como um elo entre o time e os torcedores, com calçada da fama, uma série de brincadeiras para crianças e até área para pegar autógrafos dos jogadores.. O local

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Conforme a Máquina do Esporte havia calculado, ao mandar o jogo para o Pacaembu, o Bragantino pre- cisaria colocar pelo menos 20 mil torcedores para faturar mais do que no duelo

Frente ao exposto, este trabalho teve por objetivo avaliar discentes da disciplina de Matemática Discreta nos conteúdos de lógica formal, teoria dos conjuntos e

Como irá trabalhar com JavaServer Faces voltado para um container compatível com a tecnologia Java EE 5, você deverá baixar a versão JSF 1.2, a utilizada nesse tutorial.. Ao baixar

Neste tipo de situações, os valores da propriedade cuisine da classe Restaurant deixam de ser apenas “valores” sem semântica a apresentar (possivelmente) numa caixa