Buscar

04_-_Introducao_a_Linguagem_C_-_Variaveis

Prévia do material em texto

TÉCNICAS DE PROGRAMAÇÃO 1 
INTRODUÇÃO À LINGUAGEM C- 
VARIÁVEIS E EXPRESSÕES 
Prof Geiza Maria Hamazaki da Silva 2013.1 
Resumo 
 Ao desenvolver um algoritmo são utilizadas 
variáveis para armazenar uma informação ou para 
realizar operações lógicos e aritméticas. Este 
raciocínio é o mesmo aplicado nos programas 
utilizando a Linguagem C. 
 Neste conjunto de slides será apresentado como é 
realizado o armazenamento de uma variável em 
memória, quais são os tipos os básicos de variáveis, 
além de sua utilização em expressões lógicas e 
aritméticas. 
Exemplo apresentado na aula de 
algoritmos 
 Enunciado 
 Soma de dois números inteiros 
 Esboço do algoritmo 
 Leitura dos dados 
 Soma dos valores lidos 
 Saída do resultado 
Algoritmo Soma de dois números 
inteiros 
variáveis 
a,b,c: inteiro; 
início 
leia(a,b); 
c  a+b; 
imprima(c); 
fim. 
 
Leitura dos dados 
Algoritmo Soma de dois números 
inteiros 
variáveis 
a,b,c: inteiro; 
início 
leia(a,b); 
c  a+b; 
imprima(c); 
fim. 
 
Soma dos valores lidos 
Algoritmo Soma de dois números 
inteiros 
variáveis 
a,b,c: inteiro; 
início 
leia(a,b); 
c  a+b; 
imprima(c); 
fim. 
 
Saída do Resultado 
Bits, Bytes e Palavras 
As variáveis são utilizadas para armazenar informações em 
memória. Desta forma, é essencial saber como funciona a 
organização das unidades de memória. 
Bit -> menor unidade 
 armazena 0 ou 1 
Byte: 
 sequencia de 8 bits 
Palavra: 
 sequencia de bytes 
 número de bytes da palavra varia conforme a arquitetura 
do computador. Em computadores de 64 bits uma palavra 
terá 8 bytes e em um de 32 bits uma palavra terá 4 bytes. 
Variáveis 
 Tipos básicos das variáveis na Linguagem C e intervalo de valores que 
podem armazenar: 
Tipo Tamanho Menor valor Maior valor 
char 1 byte -128 +127 
unsigned char 1 byte 0 +255 
short int (short) 2 bytes -32.768 +32.767 
unsigned short int 2 bytes 0 +65.535 
int (*) 4 bytes -2.147.483.648 +2.147.483.647 
long int (long) 4 bytes -2.147.483.648 +2.147.483.647 
unsigned long int 4 bytes 0 +4.294.967.295 
float 4 bytes -1038 +1038 
double 8 bytes -10308 +10308 
(*) depende da máquina, sendo 4 bytes para arquiteturas de 32 bits 
Variáveis 
 Uma variável em qualquer linguagem de 
programação faz referência a um espaço de 
memória para armazenar um dado (valor). Deve-se 
reservar o espaço correspondente ao tipo do dado 
(char, int, float, etc..) a ser armazenado. 
 Uma variável é definida por um tipo e um nome: 
 nome: identifica o espaço de memória; e 
 tipo: determina a natureza do dado, reservando o 
espaço de memória necessário. 
Declaração de Variáveis 
 Variáveis devem ser explicitamente declaradas; 
Pode-se declarar um variável como vez ou em 
conjunto. 
 Exemplos: 
int a; /* declaração de uma variável do tipo int */ 
int b; /* declaração de uma variável do tipo int */ 
float c; /* declaração de uma variável do tipo float */ 
int d, e; /* declaração de duas variáveis do tipo int */ 
Declaração de Variáveis 
 Variáveis só armazenam valores do mesmo tipo 
que foram declaradas. 
int a; /* declara uma variável do tipo inteiro */ 
a = 4.3; /* a armazenará o valor 4, parte inteira
 do número real 4.3*/ 
Declaração de Variáveis 
Questão 1: 
Suponha que: 
a = 3 
b = a / 2 
c = b + 3.1 
Qual é o valor de c? 
c = 4.6 
c = 4.1 
c = 4 
Nenhuma das opções acima 
Não é possível determinar o valor de c 
Declaração de Variáveis 
Questão 1: 
Suponha que: 
a = 3 
b = a / 2 
c = b + 3.1 
Qual é o valor de c? 
c = 4.6 
c = 4.1 
c = 4 
Nenhuma das opções acima 
Não é possível determinar o valor de c 
Não é possível determinar o valor de c, 
visto que os tipos não foram definidos. 
Dependendo dos tipos das variáveis a e b 
a variável c poderá ter um valor diferente. 
Declaração de Variáveis 
 Na Linguagem C, as variáveis podem ser 
inicializadas na declaração. 
 Por exemplo: 
 
 int a = 5, b = 10; /* declara e inicializa as 
 variáveis */ 
 float c = 5.3; 
 
Nomes de identificadores 
 Na Linguagem C, os nomes de variáveis e vários 
outros itens definidos pelo usuário são chamados de 
identificadores. 
 Esses identificadores podem variar de um a 
diversos caracteres. 
 Regras para definição de um identificador: 
O primeiro caractere deve ser uma letra ou um 
sublinhado; 
Os caracteres subsequentes podem ser letras, números 
ou sublinhados (_); e 
Os identificadores não podem conter espaços. 
 
Nomes de identificadores 
 Na linguagem C, letras minúscula e maiúscula são 
tratadas diferentemente 
 A linguagem é “case sensitive” 
idade, Idade e IDADE 
Os identificadores acima são distintos. 
 Um identificador não pode ser igual a uma palavra 
chave da linguagem C (ou palavra reservada, por 
exempo: if, while, for,..) ou ter o mesmo nome que 
as funções escritas pelo programador ou as que 
estão na biblioteca da linguagem( printf, main ,...). 
Nomes de identificadores 
 Nomes de identificadores válidos podem ser, por 
exemplo: 
 x 
 J23qrsnf 
 minhaIdade 
Declaração de Variáveis 
 Bons nomes de variáveis dizem para que serve a 
variável 
 a utilização de bons nomes facilita o entendimento do 
fluxo do seu programa 
Declaração de Variáveis - exemplo 
 O que faz este código? 
 
 int main(){ 
 unsigned short x; 
 unsigned short y; 
 unsigned short z; 
 x = 5; 
 y = 10; 
 z = x * y; 
 return 0; 
 } 
Declaração de Variáveis - exemplo 
 O que faz este código? 
 
 int main(){ 
 unsigned short largura; 
 unsigned short comprimento; 
 unsigned short area; 
 largura = 5; 
 comprimento = 10; 
 area = largura * comprimento; 
 return 0; 
 } 
Declaração de Variáveis - exemplo 
 O que faz este código? 
 int main(){ 
 unsigned short largura; 
 unsigned short comprimento; 
 unsigned short area; 
 largura = 5; 
 comprimento = 10; 
 area = largura * comprimento; 
 return 0; 
 } 
 O propósito do programa acima é mais fácil de ser 
decifrado dado os nomes das variáveis. 
Declaração de Variáveis 
 Boas práticas de programação: 
 Escolher identificadores significativos ajuda a fazer um 
programa autodocumentado. Por exemplo, minhaIdade. 
 Restrinja o uso de nomes de uma letra só (como por 
exemplo x ou i) à variáveis que são utilizadas brevemente. 
 Evite identificadores que iniciem com sublinhados e 
sublinhadosduplos, pois os compiladores podem utilizar 
nomes assim internamente para seus próprios propósitos. 
Declaração de Variáveis 
 Não importa o método adotado para dar nomes as 
variáveis. O importante é ser consistente! 
 Exemplo de convenções populares: 
 muitos programadores usam letras minúsculas 
 meu_carro ou meuCarro 
Variáveis com valores indefinidos 
 Uma variável deve ter um valor definido quando 
for utilizada. 
 
 int a, b, c; /* declara e inicializa duas variáveis do tipo int */ 
a = 2; 
c = a + b; /* ERRO: b contém “lixo” */ 
Variáveis com valores indefinidos 
 Uma variável pode receber um valor quando é 
definida (inicializada), ou através de um operador 
de atribuição. 
 
int a = 5, b = 10; /* declara e inicializa duas variáveis do tipo int */ 
float c = 5.3; /* declara e inicializa uma variável do tipo float */ 
Valores Constantes 
 A diferença básica entre variáveis e constantes: 
 o valor armazenado numa constante não pode ser 
alterado. Exemplos de constantes: 3, 4.5, ‘a’. 
 Constantes em C podem ser de qualquer um dos 
tipos de dados básicos (e seus modificadores). 
 A maneira como cada constante é representada 
depende do seu tipo. 
 Constantes do tipo caractere são envolvidas por 
aspas simples: 
‘a’, ‘B’, ‘:’, ‘+’, ‘\n’, ‘\0’, ‘\” ’, ‘\\’, ‘\’ ’ 
Operadores 
 Aritméticos; 
 Relacionais e Lógicos; 
 Atribuição; 
 incremento e decremento; e 
 Outros. 
 
 
Operadores Aritméticos 
 Operadores aritméticos: 
 +: soma; 
 - : subtração; 
 * : multiplicação; 
 / : divisão; 
 % : modulo – retorna o resto da divisão. 
Operadores Aritméticos 
 Operadores aritméticos ( + , - , * , / , % ): 
 A operação é feita na precisão dos operandos 
 a expressão 5/2 resulta no valor 2, pois a operação de 
divisão é feita em precisão inteira, já que os dois 
operandos (5 e 2) são constantes inteiras. 
 a divisão de inteiros trunca a parte fracionária, pois o valor 
resultante é sempre do mesmo tipo da expressão. 
 a expressão 5.0/2.0 resulta no valor real 2.5 pois a 
operação é feita na precisão real (double, no caso). 
 
Operadores Aritméticos 
 O operando com tipo de menor expressividade é 
convertido para o tipo do operando de maior 
expressividade. No exemplo abaixo a parte 
fracionária é truncada. 
int a 
double b, c; 
a = 3.5; /* a recebe o valor 3 */ 
b = a / 2.0; /* b recebe o valor 1.5 */ 
c = 1/3 + b; /* 1/3 retorna 0 pois a operação será sobre inteiros */ 
 /* c recebe o valor de b */ 
Operadores Aritméticos 
 o operador módulo, “%”, aplica-se a inteiros . 
 Exemplo : Deseja-se saber se o valor armazenado 
numa determinada variável inteira x é par ou 
ímpar 
 Basta analisar o resultado da aplicação do operador 
%, aplicado à variável e ao valor dois 
 x % 2 se resultado for zero, o número é par 
 x % 2 se resultado for um, o número é ímpar 
precedência dos operadores: * , / , - , + 
a + b * c / d é equivalente a (a + ((b * c) / d)) 
Operadores de atribuição 
 A forma geral do operador de atribuição é 
variável = expressão; 
 onde expressão pode ser tão simples como uma única 
constante ou tão complexa quanto você necessite; e 
 a parte esquerda da atribuição deve ser uma variável 
ou ponteiro, mas não uma função ou uma constante. 
 
 
Operadores de atribuição 
 Na linguagem C, uma atribuição é uma expressão 
cujo valor resultante corresponde ao valor 
atribuído. 
 A atribuição: 
a = 5; /*armazena o valor 5 na variável a*/ 
 A ordem de avaliação é da direita para a 
esquerda: 
y = x = 5; 
 o computador avalia x = 5, armazenando 5 em x, e 
em seguida armazena em y o valor produzido por x = 
5, que é 5 
 Portanto, ambos, x e y, recebem o valor 5. 
Operadores de atribuição 
 C oferece uma notação compacta para atribuições 
em que a mesma variável aparece dos dois lados 
 var op= expr é equivalente a var = var op (expr) 
 
 
 
Operadores de atribuição de forma compacta: += , -= , *= , 
/= , %= 
i += 2; equivalente a i = i + 2; 
x *= y + 1; é equivalente a x = x * (y +1) que equivale a x= x*y +1 
Operadores de atribuição 
 Exemplos 
 
int a, b, c; 
a = 2; b = 3; c = 41; 
a += 5; b *= 3; c %= a+b; 
 
Qual o valor de a, b e c? 
 
 
Operadores de atribuição 
 Exemplos 
 
int a, b, c; 
a = 2; b = 3; c = 41; 
a += 5; b *= 3; c %= a+b; 
 
Qual o valor de a, b e c? 
 
 Resultado: a:7 b:9 c:9 
 
Operadores de incremento e 
decremento 
 Operadores de incremento e decremento ( ++ , -- ): 
 incrementa ou decrementa de uma unidade o valor de uma 
variável 
 os operadores não se aplicam a expressões; 
 o incremento pode ser antes ou depois da variável ser utilizada: 
 n++ incrementa n de uma unidade, depois de ser usado; e 
 ++n incrementa n de uma unidade, antes de ser usado. 
 
 
 
 
 
 
 Cuidado: Formas compactas dificulta a compreensão do código!! 
n = 5; 
x = n++; /* x recebe 5; n é incrementada para 6 */ 
x = ++n; /* n é incrementada para 7; x recebe 7*/ 
a = 3; 
b = a++ * 2; / b termina com o valor 6 e a com o valor 4 */ 
Operadores de incremento e 
decremento 
 Se n armazena o valor 5,então 
 x = n++; atribui 5 à x, mas: 
 x = ++n; atribuiria 6 à x. 
 
 Em ambos os casos, n passa a valer 6, pois seu valor foi 
incrementado em uma unidade 
Os operadores de incremento e decremento podem ser 
aplicados somente em variáveis 
 Uma expressão do tipo x = (i + 1)++ é ilegal 
 777++ é ilegal /* constante não pode ser 
 incrementada */ 
 
Operadores de incremento e 
decremento 
 Exemplo 
int i, a, b, c, d, e; 
i = 0; a = i; 
b = i++ - 5; 
c = i; 
d = ++i + 5; 
e = i; 
 
Qual o valor de a,b,c,d,e? 
Operadores de incremento e 
decremento 
 Exemplo 
int i, a, b, c, d, e; 
i = 0; a = i; 
b = i++ - 5; 
c = i; 
d = ++i + 5; 
e = i; 
Qual o valor de a,b,c,d,e? 
resultado: a:0 b:-5 c:1 d:7 e:2 
 As expressões ++a e a++ isoladas equivalem ao comando a = 
a+1 
 os efeitos do operador -- nas expressões --a e a-- e sua 
equivalência com o comando a = a - 1 são análogos 
Tabela da hierarquia dos 
operadores 
 Precedência em ordem decrescente 
 
 
 
 
 
 
 Parênteses podem ser usados para alterar a ordem de 
avaliação. 
 
Operadores Classe Associatividade 
- + ++ -- unários direita para esquerda 
* / % multiplicativos esquerda para direita 
+ - aditivos esquerda para direita 
= += -= *= /= de atribuição direita para esquerda 
Exercício:Avaliação de expressões 
 Declarações e inicializações 
int a = 1, b = 2, c = 3, d = 4; 
Expressão Expressão equivalente Valor 
a * b /c 
a * b % c + 1 
++ a * b - c -- 
7 - - b * ++ d 
Exercício:Avaliação de expressões 
 Declarações e inicializações 
int a = 1, b = 2, c = 3, d = 4; 
Expressão Expressão equivalente Valor 
a * b /c (a * b) /c 
a * b % c + 1 ((a * b) % c) + 1 
++ a * b - c -- ((++a)* b)-(c--) 
7 - - b * ++ d 7 - ((-b)*(++d)) 
Exercício:Avaliação de expressões 
 Declarações e inicializações 
int a = 1, b = 2, c = 3, d = 4; 
Expressão Expressão equivalente Valor 
a * b /c (a * b) /c 0 
a * b % c + 1 ((a * b) % c) + 1 3 
++ a * b - c -- ((++a)* b)-(c--) 1 
7 - - b * ++ d 7 - ((-b)*(++d)) 17 
Exercício:Avaliação de expressões 
 Declarações e inicializações 
int i = 1, j = 2, k = 3, m = 4; 
Expressão Expressão equivalente Valor 
i += j + k 
j *= k = m + 5 
Avaliação de expressões 
 Declarações e inicializações 
int i = 1, j = 2, k = 3, m = 4; 
Expressão Expressão equivalente Valor 
i += j + k i += (j+k) 
j *= k = m + 5 j *= (k = (m + 5)) 
Avaliação de expressões 
 Declarações e inicializações 
int i = 1, j = 2, k = 3, m = 4; 
Expressão Expressão equivalente Valor 
i += j + k i += (j+k) 6 
j *= k = m + 5 j *= (k = (m + 5)) 18 
Operadores e Expressões 
 Operadores relacionais (< , <= , == , >= , > , !=): 
< menor que 
> maior que 
<= menor ou igual que 
>= maior ou igual que 
== igual a 
!= diferente de 
Operadores e Expressões 
 O resultado da avaliação da expressão será 
0(falso) ou 1(verdadeiro) - não há valores 
booleanos na Linguagem C) 
int a, b; 
int c = 23; 
int d = c + 4; 
 
c < 20 retorna 0 
d > c retorna 1 
Operadores lógicos 
 Os operadores lógicos combinam expressões 
booleanas. 
 A linguagem oferece os seguintes operadores 
lógicos. 
&& operador binárioE (AND) 
|| operador binário OU (OR) 
! operador unário de NEGAÇÃO (NOT) 
Operadores e Expressões 
 Operadores lógicos ( && , || , ! ) 
 A avaliação é da esquerda para a direita; 
 A avaliação pára quando o resultado pode ser 
conhecido (ver b = (c < 20) && (d > c)) 
 
 
 
 
 
 
 É aconselhado o uso de parênteses para especificar a 
precedência entre os operadores lógicos e relacionais. 
int a, b; 
int c = 23; 
int d = c + 4; 
 
a = (c < 20) || (d > c); /* retorna 1 */ 
 /* as duas subexpressões são avaliadas */ 
b = (c < 20) && (d > c); /* retorna 0 */ 
 /* apenas a primeira subexpressão é avaliada */ 
Operadores lógicos 
 Expressões conectadas por && ou || são avaliadas 
da esquerda para a direita, e a avaliação pára 
assim que a veracidade ou falsidade do resultado 
for conhecida. 
 Recomenda-se o uso de parênteses em expressões 
que combinam operadores lógicos e relacionais. 
Operadores lógicos 
 Os operadores relacionais e lógicos são 
normalmente utilizados para tomada de decisões 
 No entanto, pode-se utilizá-los para atribuir valores 
a variáveis 
 
int a, b; 
int c = 23; 
int d = c + 4; 
a = (c < 20) || (d > c); /* verdadeiro */ 
b = (c < 20) && (d > c); /* falso * 
 
Operadores lógicos 
int a, b; 
int c = 23; 
int d = c + 4; 
a = (c < 20) || (d > c); /* verdadeiro */ 
b = (c < 20) && (d > c); /* falso * 
 
 Na avaliação da expressão atribuída à variável b, 
a operação (d>c) não chega a ser avaliada, pois 
independente do seu resultado a expressão como 
um todo terá como resultado 0 (falso), uma vez que 
a operação (c<20) tem valor falso 
Operadores lógicos 
 Operações lógicas 
 em operações lógicas, 
todo operando diferente 
de 0 (zero) torna-se 1 
 
 
 
a b !a a&&b a||b 
0 0 1 0 0 
0 1 1 0 1 
1 0 0 0 1 
1 1 0 1 1 
452 || 0 = 1 || 0 = 1 
36 && 2 = 1 && 1 = 1 
17502 && 0 = 1 && 0 = 0 
!57 = !1 = 0 
Operações lógicas com números quaisquer 
56 
Referências 
 W. Celes, R. Cerqueira e J.L. Rangel, Introdução a 
Estruturas de Dados - com técnicas de programação 
em C, Ed. Campus, 2004 
 A. Kelley, A Book on C, Benjamin Cummings, 1995 
 Notas de aulas do curso presencial de Técnicas de 
Programação1- UNIRIO - Desenvolvidos pelas 
professoras: Geiza Maria Hamazaki da Silva e Adriana 
C. F Alvim – primeiro semestre de 2011.

Continue navegando