Introdução à Programação em
Linguagem C
Rodolfo Riyoei Goya
http://rgoya.sites.uol.com.br
rgoya@uol.com.br
Modelo Abstrato de Programação
Elementos Estruturais
Dados de Tipo Simples
Dados em Estruturas Homogêneas
Dados em Estruturas Heterogêneas
Elementos Algorítmicos
Declaração
Comandos de Entrada/Saída
Comandos de Expressão
Comandos de Decisão
Comandos de Iteração
16.02.14
Linguagem C
Rodolfo Goya 2
Comandos de Expressões
Permitem manipular e alterar valor de variáveis.
Operadores:
Aritméticos
Incremento e Decremento
Relacionais
Booleanos
Bit a bit
Atribuição
16.02.14
Linguagem C
Rodolfo Goya 3
Comandos de Expressões
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 Goya 4
Comandos de Expressões –
Aritméticos
A aritmética em ponto flutuante procede de modo
convencional
A aritmética inteira apresenta algumas diferenças:
O resto da divisão tem o mesmo sinal que o primeiro operando:
9 % 5 resulta em 4
-9 % 5 resulta em -4
A divisão de inteiros é com truncamento:
39 / 10 resulta em 3
A divisão de inteiros negativo é consistente com o resto:
9 / 5 resulta em 1
-9 / 5 resulta em -1
16.02.14
Linguagem C
Rodolfo Goya 5
Comandos de Expressões –
Precedência em Aritmética
Multiplicações, divisões e resto têm precedência (são
executadas primeiro) sobre adição e subtração.
9 - 3 * 2 resulta em 3
9 - 3 / 3 resulta em 8
Multiplicações, divisões e resto têm mesma precedência
e são executadas da esquerda para a direita.
9 / 3 / 3 resulta em 1
Adições e subtrações têm mesma precedência e são
executadas da esquerda para a direita.
9 - 3 - 3 resulta em 3
16.02.14
Linguagem C
Rodolfo Goya 6
Comandos de Expressões –
Aritméticos
A ordem de cálculo das expressões pode ser alterada
com o uso de parênteses
Expressões internas a parênteses são executadas antes da
externas.
( 9 - 3 ) * 2 resulta em 12
( 9 - 3 ) / 3 resulta em 2
Parênteses podem ser aninhados.
( 3 - ( 2 + 5 ) / 7 ) * 4 resulta em 8
Parênteses podem ser usados para maior clareza (sem prejuízo
em termos de tamanho de código e desempenho).
( 9 / 3 ) / 3 resulta em 1
16.02.14
Linguagem C
Rodolfo Goya 7
Comandos de Expressões –
Incremento e Decremento
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 Goya 8
Comandos de Expressões –
Incremento e Decremento
Somente sobre variáveis.
1++ e ( a + b )++ são usos inválidos para este comando.
Pré-incremento: Incrementa a variável antes de dar
qualquer outro uso para ela na expressão.
a = 2;
b = ++a; resulta em a = 3 e b = 3
Pós-incremento: Incrementa a variável após qualquer
outro uso para ela na expressão.
a = 2;
b = a++; resulta em a = 3 e b = 2
16.02.14
Linguagem C
Rodolfo Goya 9
Comandos de Expressões –
Incremento e Decremento
Cuidados: i + 1 é diferente de i++
j = i + 1 não altera o valor de i.
j = i++ altera o valor de i.
Comandos de Expressões –
Operadores Relacionais
Relacionais
Resultam em 0 se falso.
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 Goya 11
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 Goya 12
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 Goya 13
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
Booleanos
Resultam em 0 se falso.
Resultam em 1 se verdadeiro.
&& AND
|| OR
! NOT
16.02.14
Linguagem C
Rodolfo Goya 14
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 Goya 15
A !A
Falso Verdadeiro
Verdadeiro Falso
Comandos de Expressões
Bit a bit
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 Goya 16
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 Goya 17
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 Goya 18
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 Goya 19
Comandos de Atribuição
O lado esquerdo da atribuição é sempre uma variável:
Variável = Constante
i = 10;
Variável = Variável
x = y;
Variável = Expressão
z = x + y – 1;
i = i + 1;
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 Goya 20
Comandos de Atribuição –
Cuidados
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)
Ordem de avaliação: da direita para a esquerda:
a = b = c = d = 1;
Atribuição e comparação:
a = 20 é diferente de a == 20
No primeiro caso faz com que a passe a valer 20.
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 Goya 21
Comandos de Atribuição
Aritmética
Formas compactas de produzir expressões:
+= -=
i += 10; equivale a: i = i + 10;
i -= 10; equivale a: i = i - 10;
*= %= /=
i *= 10; equivale a: i = i * 10;
i %= 10; equivale a: i = i % 10;
i /= 10; equivale a: i = i / 10;
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 Goya 22
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 Goya 23

Linguagem C (Parte 3)

  • 1.
    Introdução à Programaçãoem Linguagem C Rodolfo Riyoei Goya http://rgoya.sites.uol.com.br rgoya@uol.com.br
  • 2.
    Modelo Abstrato deProgramação Elementos Estruturais Dados de Tipo Simples Dados em Estruturas Homogêneas Dados em Estruturas Heterogêneas Elementos Algorítmicos Declaração Comandos de Entrada/Saída Comandos de Expressão Comandos de Decisão Comandos de Iteração 16.02.14 Linguagem C Rodolfo Goya 2
  • 3.
    Comandos de Expressões Permitemmanipular e alterar valor de variáveis. Operadores: Aritméticos Incremento e Decremento Relacionais Booleanos Bit a bit Atribuição 16.02.14 Linguagem C Rodolfo Goya 3
  • 4.
    Comandos de Expressões 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 Goya 4
  • 5.
    Comandos de Expressões– Aritméticos A aritmética em ponto flutuante procede de modo convencional A aritmética inteira apresenta algumas diferenças: O resto da divisão tem o mesmo sinal que o primeiro operando: 9 % 5 resulta em 4 -9 % 5 resulta em -4 A divisão de inteiros é com truncamento: 39 / 10 resulta em 3 A divisão de inteiros negativo é consistente com o resto: 9 / 5 resulta em 1 -9 / 5 resulta em -1 16.02.14 Linguagem C Rodolfo Goya 5
  • 6.
    Comandos de Expressões– Precedência em Aritmética Multiplicações, divisões e resto têm precedência (são executadas primeiro) sobre adição e subtração. 9 - 3 * 2 resulta em 3 9 - 3 / 3 resulta em 8 Multiplicações, divisões e resto têm mesma precedência e são executadas da esquerda para a direita. 9 / 3 / 3 resulta em 1 Adições e subtrações têm mesma precedência e são executadas da esquerda para a direita. 9 - 3 - 3 resulta em 3 16.02.14 Linguagem C Rodolfo Goya 6
  • 7.
    Comandos de Expressões– Aritméticos A ordem de cálculo das expressões pode ser alterada com o uso de parênteses Expressões internas a parênteses são executadas antes da externas. ( 9 - 3 ) * 2 resulta em 12 ( 9 - 3 ) / 3 resulta em 2 Parênteses podem ser aninhados. ( 3 - ( 2 + 5 ) / 7 ) * 4 resulta em 8 Parênteses podem ser usados para maior clareza (sem prejuízo em termos de tamanho de código e desempenho). ( 9 / 3 ) / 3 resulta em 1 16.02.14 Linguagem C Rodolfo Goya 7
  • 8.
    Comandos de Expressões– Incremento e Decremento 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 Goya 8
  • 9.
    Comandos de Expressões– Incremento e Decremento Somente sobre variáveis. 1++ e ( a + b )++ são usos inválidos para este comando. Pré-incremento: Incrementa a variável antes de dar qualquer outro uso para ela na expressão. a = 2; b = ++a; resulta em a = 3 e b = 3 Pós-incremento: Incrementa a variável após qualquer outro uso para ela na expressão. a = 2; b = a++; resulta em a = 3 e b = 2 16.02.14 Linguagem C Rodolfo Goya 9
  • 10.
    Comandos de Expressões– Incremento e Decremento Cuidados: i + 1 é diferente de i++ j = i + 1 não altera o valor de i. j = i++ altera o valor de i.
  • 11.
    Comandos de Expressões– Operadores Relacionais Relacionais Resultam em 0 se falso. 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 Goya 11
  • 12.
    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 Goya 12 A B A >= B A <= B A < B 5 10 Falso Verdadeiro Verdadeiro 10 10 Verdadeiro Verdadeiro Falso 15 5 Verdadeiro Falso Falso
  • 13.
    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 Goya 13 A B A >= B A <= B A < B 5 10 0 1 1 10 10 1 1 0 15 5 1 0 0
  • 14.
    Comandos de Expressões– Operações Booleanos Booleanos Resultam em 0 se falso. Resultam em 1 se verdadeiro. && AND || OR ! NOT 16.02.14 Linguagem C Rodolfo Goya 14
  • 15.
    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 Goya 15 A !A Falso Verdadeiro Verdadeiro Falso
  • 16.
    Comandos de Expressões Bita bit 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 Goya 16
  • 17.
    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 Goya 17
  • 18.
    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 Goya 18
  • 19.
    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 Goya 19
  • 20.
    Comandos de Atribuição Olado esquerdo da atribuição é sempre uma variável: Variável = Constante i = 10; Variável = Variável x = y; Variável = Expressão z = x + y – 1; i = i + 1; 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 Goya 20
  • 21.
    Comandos de Atribuição– Cuidados 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) Ordem de avaliação: da direita para a esquerda: a = b = c = d = 1; Atribuição e comparação: a = 20 é diferente de a == 20 No primeiro caso faz com que a passe a valer 20. 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 Goya 21
  • 22.
    Comandos de Atribuição Aritmética Formascompactas de produzir expressões: += -= i += 10; equivale a: i = i + 10; i -= 10; equivale a: i = i - 10; *= %= /= i *= 10; equivale a: i = i * 10; i %= 10; equivale a: i = i % 10; i /= 10; equivale a: i = i / 10; 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 Goya 22
  • 23.
    Precedência de operadores OperadorAssociatividade ( ) 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 Goya 23