(Parte 4 de 10)

2.5.7 OPERADORES DE PRÉ E PÓS-INCREMENTO

As operações abaixo podem ser representadas assim:

i = i + 1; à i = ++i; à ++i; i = i – 1; à i = --i; à --i; z = a; a = a + 1; à z = a++; z = a; a = a – 1; à z = a--; a = a + 1; z = a; à z = ++a; a = a - 1; z = a; à z = --a;

2.5.8 OPERADORES DE ENDEREÇO

Usados com ponteiros (pointers), para acesso a endereços de memória.

Operador Significado

& * endereço de uma variável conteúdo do endereço especificado

Exemplos:

int var, *x; M x = &var; M var = *x;

2.6 TABELA DE OPERADORES DO C

Operador Função Exemplo “C” Exemplo PASCAL

- menos unário a = -b a := -b + mais unário a = +b a := +b ! negação lógica ! flag not flag ~ bitwise not a = ~b a := not b & endereço de a = &b a := ADDR(B) * referência a ptr a = *ptr a := ptr sizeof tamanho de var a = sizeof(b) a := sizeof(b) ++ incremento ++a ou a++ a := succ(a) -- decremento --a ou a-- a := pred(a) * multiplicação a = b * c a := b * c / divisão inteira a = b / c a := b div c

/ divisão real a = b / c a := b / c % resto da divisão a = b % c a := b mod c + soma a = b + c a := b + c - subtração a = b - c a := b - c >> shift right a = b >> n a := b shr n

Operador Função Exemplo “C” Exemplo PASCAL

<< shift left a = b << n a := b shl n > maior que a > b a > b

>= maior ou igual a a >= b a >= b < menor que a < b a < b

<= menor ou igual a a <= b a <= b == igual a a == b a = b != diferente de a != b a <> b & bitwise AND a = b & c a := b and c | bitwise OR a = b | c a := b or c bitwise XOR a = b c a := b xor c && logical AND flag1 && flag2 flag1 and flag2 || logical OR flag1 || flag2 flag1 or flag2 = assinalamento a = b a := b OP= assinalamento a OP= b a := a OP b

2.7 EXPRESSÕES

Operadores, constantes e variáveis constituem expressões. Uma expressão em C é qualquer combinação válida dessas partes. Uma vez que muitas expressões tendem a seguir as regras gerais da álgebra, estas regras são freqüentemente consideradas. Entretanto, existem alguns aspectos das expressões que estão especificamente relacionadas com a linguagem C e serão discutidas agora.

2.7.1 CONVERSÕES DE TIPOS EM EXPRESSÕES

Quando constantes e variáveis de tipos diferentes são misturadas em uma expressão, elas são convertidas para o mesmo tipo. O compilador C converterá todos os operandos para o tipo do operando maior. Isso é feito na base de operação a operação, como descrito nestas regras de conversão de tipos:

· Todos os chars e shor ints são convertidos para ints. Todos os floats são convertidos para doubles;

• Para todos os pares de operandos, se um deles é um long double, o outro operando é convertido para uma long double. Se um dos operandos é double, o outro é convertido para double. Se um é long, o outro é convertido para long. Se um é unsigned, o outro é convertido para unsigned.

Uma vez que essas regras de conversão tenham sido aplicadas, cada par de operandos será do mesmo tipo e o resultado de cada operação terá o mesmo tipo dos dois operandos. Note que a regra 2 tem muitas condições que devem ser aplicada em seqüência.

Por exemplo, considere a conversão de tipos que ocorre na expressão a seguir. Primeiro, o caractere ch é convertido para um inteiro e float f é convertido para double. Então, o resultado de ch/i é convertido para um double, já que f * d é um double. O resultado final é um double, tendo em vista que, neste caso, os dois operandos são double.

char ch; int i; float f; double d; result = (ch/i) + (f * d) – (f + i);

2.7.2 MODELADORES (CASTS)

É possível forçar uma expressão a ser de um tipo específico usando-se uma construção chamada de modelador. A forma geral de um modelador é:

(tipo) expressão onde tipo é um dos tipos dado-padrão da linguagem C. Por exemplo, se x é um inteiro e você quer certificar-se de que a expressão x/2 resulta em um tipo float, garantindo um componente fracionário, pode escrever

(float) x / 2;

Aqui, o modelador (float) é associado com o x, o que faz com que o 2 seja elevado ao tipo float e o resultado seja um float. Entretanto, tome cuidado: se você escrever a expressão acima como segue, o componente fracionário não será considerado:

(float) (x/2);

Neste caso, uma divisão de inteiros é levada a cabo e o resultado é transformado em float.

Modeladores são freqüentemente considerados como operadores. Como um operador, um modelador é unário e tem a mesma precedência de qualquer outro operador unário.

2.7.3 ESPAÇAMENTO E PARÊNTESES

Você pode colocar espaços numa expressão ao seu critério para torná-la mais legível. Por exemplo, as duas expressões seguintes são as mesmas:

int int double double double double double double x=645/(num_entry)-y*(3217/balance); x = 645 / (num_entry) – y * (3127 / balance);

O uso de parênteses redundantes ou adicionais não causará erros ou diminuirá a velocidade de execução da expressão. Você é estimulado a usar parênteses para tornar clara e exata a ordem de avaliação, tanto para você como para outros que precisarem entender o seu programa mais tarde. Por exemplo, qual das duas expressões seguintes é mais fácil de ler?

2.8 ESQUELETO DE UM PROGRAMA EM C

Todo o programa em C deve conter a função main( ). Esta função é responsável pelo início da execução, de forma semelhante ao bloco BEGIN/END. do Pascal.

No C só existeM funções e não existe o conceito de procedimento, ou seja, todas devem retornar algo a quem a chamou, mesmo que o retorno seja do tipo void (sem valor).

Os comentários no C são feitos através do par “/*” e “*/”, sendo um “/*” usado para abrir um comentário e um “*/” para encerrá-lo. Um bloco de comandos é delimitado por chaves (“{“ e “}”). Exemplo:

bibliotecas usadas */
int a_global;/* Declaração de variáveis globais */
int main(){/* Declaração da função principal. Sempre
necessária */
/* comandos*/

#include <stdio.h> /* No início do programa, declara-se as /* Declaração de funções do programador, se for o caso */ int conta; /* Variáveis locais a esta função */ }

UNIDADE 3 – ESTRUTURAS BÁSICAS DE PROGRAMAÇÃO (FLUXO DE CONTROLE)

Os comandos de fluxo de controle de uma linguagem especificam a ordem em que a computação é feita.

3.1 COMANDOS E BLOCOS

Uma expressão tal como x = 0 ou i++ ou printf(...) torna-se um comando quando seguida por um ponto-e-vírgula, como em:

x = 0; i++; printf (“Olá !”);

Em C, o ponto-e-vírgula é um terminador de comandos, e não um separador como em linguagens do tipo Pascal.

As chaves { e } são usadas para agruparem declarações e comandos num comando composto ou bloco de modo que são sintaticamente equivalentes a um único comando. Não há um ponto-e-vírgula após a chave direita que termina um bloco.

(Parte 4 de 10)

Comentários