segunda-feira, 25 de fevereiro de 2008

Operadores aritméticos

A linguagem C disponibiliza cinco operadores aritméticos binários.
  1. (+) soma
  2. (-) subtração
  3. (*) multiplicação
  4. (/) divisão
  5. (%) resto de uma divisão entre inteiros

Os operadores binários recebem esse nome porque necessitam de dois operandos para que a operação exista.


x = a + b;


Nem todas as operações são binárias. A linguagem C disponibiliza a operação menos unário, a qual necessita somente de um operando para existir.


x = -a;


O menos unário é equivalente a multiplicação por -1. Estere aí! Na multiplicação por -1 não estamos empregando o menos unário no operando 1. Olhe o código abaixo e conclua!


x = -1 * a;


Todas as operações são aplicadas a números inteiros e de ponto flutuante, com exeção do resto.
O conceito de resto de uma divisão só existe quando falamos em números inteiros, portanto o operador % exige que seus operandos sejam do tipo int ou char.
De todas as operações, a mais ingrata é a divisão.
Você é capaz de responder o que será impresso pelo seguinte código?


001:  #include <stdio.h>
002:  #include <stdlib.h>
003:
004:  int main(int argc, char *argv[])
005:  {
006:    int a = 5, b = 2;
007:    float c;
008:    c = a/b;
009:    printf("O resultado da divisao e: %f", c);
010:    system("PAUSE");
011:    return 0;
012:  }


Se você pensou em 2.5, você pensou errado! O resultado é 2.0. Na linguagem C, a divisão entre dois inteiros, resulta em resultado inteiro, portando o resultado da divisão entre cinco e dois, é dois.
Se a sua intensão é apresentar o resultado real da divisão então, ao menos um dos operados deverá ser de ponto flutuante. Para isso recorro a utilização do cast que faz a conversão momentânea do dado.


001:  #include <stdio.h>
002:  #include <stdlib.h>
003:
004:  int main(int argc, char *argv[])
005:  {
006:    int a = 5, b = 2;
007:    float c;
008:    c = (float)a/b;
009:    printf("O resultado da divisao e: %f", c);
010:    system("PAUSE");
011:    return 0;
012:  }


Você pode ver a utilização do cast (float) na linha 8. Isso transforma o dado da variável a em float então este dado é dividido por 2. O resultado dessa operação é o 2.5.
Em resumo, os operadores aritméticos são tranqüilos de usar. O cuidado maior está sempre na divisão.

5 comentários:

Anônimo disse...

#include
#include
main()
{
//declaracao de variaveis

float a=5,b=2,x;

//processamento
x=a/b;
printf("O valor da divisao eh: %.1f\n",x);
getch();
}

No meu compilador (Dev-c++ 4.9.9.0) rodou legal e mostra 2.5 como resultado.

Anônimo disse...

#include
#include
main()
{
//declaracao de variaveis

float a=5,b=2,x;

//processamento
x=a/b;
printf("O valor da divisao eh: %.1f\n",x);
getch();
}

No meu compilador (Dev-c++ 4.9.9.0) rodou legal e mostra 2.5 como resultado.
___________________________________
Mostra 2.5 porque as três variaveis são "float's". Caso a e b fossem inteiros e x fosse float, ocorreria, detalhadamente, o seguinte :

Valor inteiro da divisão de 5 e 2 = 2. O valor deve ser um float(x=float), portanto, transformar 2 em float = 2.0

Anônimo disse...

kra parabens muito bem explicado, resolveu minha dúvida.
Agradeço

Aleciano Júnior disse...

Resolveu uma dúvida minha aqui em relação a divisão entre inteiros. Obrigado!

Anônimo disse...

Cara como faço para saber o resto da divisão de um float? tipo essa função:
int x,contador = 0;
float p, resto;
for(x=0; x<TAM; x++){
resto = v[x]%2; //ERRO
if(resto == 0){
contador++;
}
}
p = (contador * 100) / TAM;
return p;
}