MC102MN

Introdução a Algoritmos e programação de computadores

Aula III, apresentação a operações básicas

Recomendo que imprimam isso e mantenham à mão para os laboratórios e para as provas. Não é do meu interesse que vocês tenham que decorar isso, embora eventualmente saber algumas dessas operações de cabeça pode ajudar vocês.

Operações aritméticas

As operações aritméticas básicas da linguagem C de programação são:

+soma dois números
-subtrai dois números
*multiplica dois números
divide dois números (se ambos são inteiros, retorna o piso da divisão)
%calcula o resto da divisão de dois números

Operações de comparação

As operações de comparação principais da linguagem C são:

<é verdadeira se o número da esquerda é menor que o da direita
>ao contrário
<=menor ou igual
>=maior ou igual
é verdadeira se os dois números são iguais
é verdadeira se os dois números são diferentes

Cada operação dessas retorna 1 se é verdadeira e 0 se é falsa. Por exemplo,

1 + (2 == 2) - (2 >= 3)
é equivalente a
2

Operações lógicas

As principais operações lógicas da linguagem C são:

negação
&&conjunção
disjunção

Constantes

Podemos definir, em C, constantes numéricas, que podem ser usadas a qualquer ponto no programa, e terão sempre o mesmo valor. A sintaxe para isso é

#define CONSTANTE valor
por exemplo, é normalmente definido como
#define M_PI 3.14159265358979323846

Essas constantes podem ser usadas livremente em operações matemáticas como se fossem números.

Comandos de atribuição

Ao criar uma variável, o seu valor é indefinido. Não faz sentido, por exemplo, fazer

int i;
e depois fazer
10*i + 1 <= 2
já que, como o valor de i é indefinido, essa expressão pode ter qualquer valor. Para atribuir um valor a uma variável, usamos o operador = e suas variantes, que são
a = ba variável a recebe o valor de b
a += ba variável a recebe o valor de a + b
a -= ba variável a recebe o valor de a - b
a *= ba variável a recebe o valor de a * b
a /= ba variável a recebe o valor de a / b
a++a variável a recebe o valor de a+1, retorna o valor antigo de a
++aa variável a recebe o valor de a+1, retorna o novo valor de a
a–a variável a recebe o valor de a-1, retorna o valor antigo de a
–aa variável a recebe o valor de a-1, retorna o novo valor de a

Qual é o valor então do seguinte trecho de programa?

int a,b;
a = 10;
b = 5;
a++ - b * 10

Como ler e escrever variáveis numéricas

Nem sempre você já tem acesso, ao escrever seu programa, a todos os valores de todas as variáveis que você quererá utilizar. Por exemplo, um programa que calcula as raízes de uma equação do segundo grau ( ) só é realmente útil se você pode utilizar vários valores para , e . Para lermos uma variável inteira, usamos

scanf("%d", &variavel);
e para ler uma variável real usamos
scanf("%f", &variavel);
onde variavel é o nome da variável.

Para escrever essas variáveis na tela usamos, conversamente,

printf("%d", variavel);
para uma variavel real e
printf("%f", variavel);
para uma variável inteira. Para escrever uma linha vazia usamos
printf("\n");
Esses comandos serão melhor explicados em aulas futuras, quando chegarmos nas aulas de entrada e saída e processamento de valores. Por enquanto, todas as tarefas poderão ser feitas utilizando apenas esses comandos.

Uma nota sobre algo que não será aceito em sala de aula

Algumas pessoas gostam de utilizar o arquivo de cabeçalho conio.h e a função getch() para impedir que a janela do DOS feche quando se executa um programa C no windows. Nessa aula não aceitamos isso. Se você usa windows e quer ver o resultado do seu programa, você tem duas opções: ou você executa ele dentro de cmd ou você coloca vários comandos scanf no fim dele.

Precedência de operadores, e como ler essa tabela

A tabela de precedência de operadores em C é:

++ –
+ - (unário)
\!
* / %
+ -
< <=
> >=
\=\= !\=
&&
\=
+= -=
*= /= %=

Para interpretar essa tabela é simples. Olhe para uma expressão exemplo:

a++ - 2 * 3 + 4 / --x += 1 -= 5 + 2 % 6

De cima pra baixo da tabela, vá colocando parênteses em todas expressões que usam os operadores:

(a++) - 2 * 3 + 4 / (--x) += 1 -= 5 + 2 % 6
(a++) - (2 * 3) + (4 / (--x)) += 1 -= 5 + (2 % 6)
(((a++) - (2 * 3)) + (4 / (--x))) += 1 -= (5 + (2 % 6))
((((a++) - (2 * 3)) + (4 / (--x))) += 1) -= (5 + (2 % 6))

E agora você já sabe em que ordem calcular as expressões. Existe mais um problema, que é associação da esquerda para direita ou da direita para esquerda, mas isso não deve incomodá-los com frequência. Se sentirem necessidade, olhem para a wikipedia sobre operadores em C para mais informações.

Introdução a math.h

A linguagem C contém diretamente apenas alguns comandos muito básicos. Qualquer coisa mais complexa, se estiver acessível, será através da biblioteca padrão ou de outras bibliotecas. Já vimos algumas funções da biblioteca padrão: printf, scanf, e sqrt. Para usar uma parte da biblioteca padrão, normalmente você pode precisar fazer duas coisas. A primeira é incluir o cabeçalho necessário. Para printf e scanf, esse cabeçalho é

#include <stdio.h>

e para as funções matemáticas, como sqrt, esse cabeçalho é

#include <math.h>

Para usar math.h, além disso, é necessário que, na hora de compilar o seu programa, você passe o comando "-lm" para o gcc. Em outros compiladores isso pode ser diferente. Math.h, além de constantes importantes (MPI, ME, MAXFLOAT, INFINITY, NAN), as seguintes funções:

acos(x)arco coseno de x
acosh(x)arco coseno hiperbólico de x
asin(x)arco seno de x
asinh(x)arco seno hiperbólico de x
atan(x)arco tangente de x
atan2(x,y)arco tangente de x/y
atanh(x)arco tangente hiperbólico de x
cbrt(x)raiz cúbica de x
ceil(x)teto de x
cos(x)coseno de x
cosh(x)coseno hiperbólico de x
erf(y)integral de e(-x2) de -infinito a y
erc(y)a mesma integral, só que de y a +infinito
exp(x)ex
exp2(x)2x
expm1(x)ex-1
fabs(x)módulo de x
fdim(x,y)módulo de x-y
floor(x)piso de x
fma(x,y,z)x*y+z
fmax(x,y)máximo entre x e y
fmin(x,y)mínimo entre x e y
fmod(x,y)resto da divisão de x por y (sim, isso pode ser definido)
hypot(x,y)raiz(x2 + y2)
lgamma(x)log(gamma(x))
log(x)ln(x)
log10(x)log de x na base 10
log1p(x)ln(x+1)
log2(x)log de x na base 2
pow(x,y)xy
roundarredonda para um inteiro
sin(x)seno de x
sinh(x)seno hiperbólico de x
sqrt(x)raiz quadrada de x
tan(x)tangente de x
tanh(x)tangente hiperbólica de x
tgamma(x)gamma(x)

Author: Alexandre Tachard Passos <alexandre.tp@gmail.com>

Date: 2010-08-09 21:36:44 BRT

HTML generated by org-mode 6.21b in emacs 23