Introdução à Programação em
Linguagem C
Rodolfo Riyoei Goya
http://rgoya.sites.uol.com.br [email protected]
Modelo Abstrato de Programação
I
Elementos Estruturais
I
Dados de Tipo Simples
I
Dados em Estruturas Homogêneas
I
Dados em Estruturas Heterogêneas
I
Elementos Algorítmicos
I
Declaração
I
Comandos de Entrada/Saída
IComandos de Expressão
I
Comandos de Decisão
I
Comandos de Iteração
16.02.14
Linguagem C
Rodolfo Goya2
Comandos de Expressões
I
Permitem manipular e alterar valor de variáveis.
I
Operadores:
I
Aritméticos
I
Incremento e Decremento
I
Relacionais
I
Booleanos
I
Bit a bit
I
Atribuição
16.02.14
Linguagem C
Rodolfo Goya3
Comandos de Expressões
I
Aritméticos
+ Adição
- Subtração
* Multiplicação
% Resto de Divisão Entre Inteiros
/ Divisão (com truncamento se entre inteiros)
16.02.14
Linguagem C
Rodolfo Goya4
Comandos de Expressões –
Aritméticos
I
A aritmética em ponto flutuante procede de modo
convencional I
A aritmética inteira apresenta algumas diferenças:
I
O resto da divisão tem o mesmo sinal que o primeiro operando:
I
9 % 5 resulta em 4
I
-9 % 5 resulta em -4
I
A divisão de inteiros é com truncamento:
I
39 / 10 resulta em 3
I
A divisão de inteiros negativo é consistente com o resto:
I
9 / 5 resulta em 1
I
-9 / 5 resulta em -1
16.02.14
Linguagem C
Rodolfo Goya5
Comandos de Expressões –
Precedência em Aritmética
I
Multiplicações, divisões e resto têm precedência (s ão
executadas primeiro) sobre adição e subtração.
I
9 - 3 * 2 resulta em 3
I
9 - 3 / 3 resulta em 8
I
Multiplicações, divisões e resto têm mesma precedên cia
e são executadas da esquerda para a direita.
I
9 / 3 / 3 resulta em 1
I
Adições e subtrações têm mesma precedência e são
executadas da esquerda para a direita.
I
9 - 3 - 3 resulta em 3
16.02.14
Linguagem C
Rodolfo Goya6
Comandos de Expressões –
Aritméticos
I
A ordem de cálculo das expressões pode ser alterada
com o uso de parênteses
I
Expressões internas a parênteses são executadas ant es da
externas.
I
( 9 - 3 ) * 2 resulta em 12
I
( 9 - 3 ) / 3 resulta em 2
I
Parênteses podem ser aninhados.
I
( 3 - ( 2 + 5 ) / 7 ) * 4 resulta em 8
I
Parênteses podem ser usados para maior clareza (sem prejuízo
em termos de tamanho de código e desempenho).
I
( 9 / 3 ) / 3 resulta em 1
16.02.14
Linguagem C
Rodolfo Goya7
Comandos de Expressões –
Incremento e Decremento
I
Incremento e Decremento ++ Incremento
-- Decremento
++i Pré-incremento
--i Pré-decremento
i++ Pós-incremento
i-- Pós-decremento
16.02.14
Linguagem C
Rodolfo Goya8
Comandos de Expressões –
Incremento e Decremento
I
Somente sobre variáveis.
I
1++ e ( a + b )++ são usos inválidos para este comando.
I
Pré-incremento: Incrementa a variável antes de dar
qualquer outro uso para ela na expressão.
I
a = 2;
I
b = ++a; resulta em a = 3 e b = 3
I
Pós-incremento: Incrementa a variável após qualquer
outro uso para ela na expressão.
I
a = 2;
I
b = a++; resulta em a = 3 e b = 2
16.02.14
Linguagem C
Rodolfo Goya9
Comandos de Expressões –
Incremento e Decremento
I
Cuidados: i + 1 é diferente de i++
I
j = i + 1 não altera o valor de i.
I
j = i++ altera o valor de i.
Comandos de Expressões –
Operadores Relacionais
I
Relacionais
I
Resultam em 0 se falso.
I
Resultam em 1 se verdadeiro.
= = Igualdade
!= Desigualdade
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
16.02.14
Linguagem C
Rodolfo Goya11
Comandos de Expressões –
Operadores Relacionais
A B A == B A != B A > B
5 10 Falso Verdadeiro Falso
10 10 Verdadeiro Falso Falso
15 5 Falso Verdadeiro Verdadeiro
16.02.14
Linguagem C
Rodolfo Goya12
A B A >= B A <= B A < B
5 10 Falso Verdadeiro Verdadeiro
10 10 Verdadeiro Verdadeiro Falso
15 5 Verdadeiro Falso Falso
Comandos de Expressões –
Operadores Relacionais
A B A == B A != B A > B
5 10 0 1 0
10 10 1 0 0
15 5 0 1 1
16.02.14
Linguagem C
Rodolfo Goya13
A B A >= B A <= B A < B
5 10 0 1 1
10 10 1 1 0
15 5 1 0 0
Comandos de Expressões –
Operações Booleanos
I
Booleanos
I
Resultam em 0 se falso.
I
Resultam em 1 se verdadeiro.
&& AND
|| OR
! NOT
16.02.14
Linguagem C
Rodolfo Goya14
Comandos de Expressões –
Operadores Booleanos
A B A && B A ||B
Falso Falso Falso Falso
Falso Verdadeiro Falso Verdadeiro
Verdadeiro Falso Falso Verdadeiro
Verdadeiro Verdadeiro Verdadeiro Verdadeiro
16.02.14
Linguagem C
Rodolfo Goya15
A !A
Falso Verdadeiro
Verdadeiro Falso
Comandos de Expressões
I
Bit a bit
I
Operam sobre a representação binário do número.
& AND
| OR
~ NOT
^ EXCLUSIVE-OR
>> SHIFT-RIGHT
<< SHIFT-LEFT
16.02.14
Linguagem C
Rodolfo Goya16
Comandos de Expressões –
Operadores bit a bit
unsigned char x = 60 em binário: 00111100
unsigned char y = 85 em binário: 01010101
x & y x | y
00111100 00111100
01010101 & 01010101 |
00010100 (20) 01111101 (125)
x ^ y ~x
00111100 00111100
01010101 ^ 00111100 ~
01101001 (105) 11000011 (195)
16.02.14
Linguagem C
Rodolfo Goya17
Comandos de Expressões –
Operadores bit a bit
unsigned char x = 60 em binário: 00111100
unsigned char y = 85 em binário: 01010101
x >> 2 x << 2
00111100 >> 2 00111100 << 2
00001111 (15) 11110000 (240)
16.02.14
Linguagem C
Rodolfo Goya18
Comandos de Atribuição
= Atribuição
+= Soma e Atribuição
-= Subtração e Atribuição
*= Multiplicação e Atribuição
%= Resto de Divisão e Atribuição
/= Divisão e Atribuição
&= Operação AND e Atribuição
|= Operação OR e Atribuição
^= EXCLUSIVE-OR e Atribuição
<<= Deslocamento para Esquerda e Atribuição
>>= Deslocamento para Direita e Atribuição
16.02.14
Linguagem C
Rodolfo Goya19
Comandos de Atribuição
I
O lado esquerdo da atribuição é sempre uma variável:
I
Variável = Constante i = 10;
I
Variável = Variável x = y;
I
Variável = Expressão z = x + y – 1;
i = i + 1;
I
Uma atribuição é também uma operação com resultado:
a = i = j + 1;
b = x + ( y = c + d ); 16.02.14
Linguagem C
Rodolfo Goya20
Comandos de Atribuição –
Cuidados
I
Atribuição é um comando e não tem relação com o uso do símbolo “=” em equações matemáticas:
a = a + 1; (isso não faria sentido em uma equação)
I
Ordem de avaliação: da direita para a esquerda:
a = b = c = d = 1;
I
Atribuição e comparação:
a = 20
é diferente de
a == 20
I
No primeiro caso faz com que
a
passe a valer 20.
I
No segundo caso, o valor de
a
não é alterado. A expressão
resulta em 0 se
a
for diferente de 20 e resulta em 1 se
a
for 20.
16.02.14
Linguagem C
Rodolfo Goya21
Comandos de Atribuição
Aritmética
I
Formas compactas de produzir expressões:
I
+= -= i += 10; equivale a: i = i + 10;
i -= 10; equivale a: i = i - 10;
I
*= %= /= i *= 10; equivale a: i = i * 10;
i %= 10; equivale a: i = i % 10;
i /= 10; equivale a: i = i / 10; I
Uma atribuição é também uma operação com resultado:
a = i += j + 1;
b = x + ( y *= c + d ); 16.02.14
Linguagem C
Rodolfo Goya22
Precedência de operadores
Operador Associatividade
( ) Esquerda para Direita
++ -- Direita para Esquerda
+(sinal) Direita para Esquerda
-(sinal) Direita para Esquerda
! ~ Direita para Esquerda
* / % Esquerda para Direita
+ - Esquerda para Direita
>> << Esquerda para Direita
= = != Esquerda para Direita
& Esquerda para Direita
^ Esquerda para Direita
| Esquerda para Direita
&& Esquerda para Direita
|| Esquerda para Direita
= += -= *= %= /=&= |= <<= >>= Direita para Esquerda
, (vírgula) Esquerda para Direita
16.02.14
Linguagem C
Rodolfo Goya23