Programar em C/Operações matemáticas (Básico)

Origem: Wikilivros, livros abertos por um mundo aberto.

Operações matemáticas[editar | editar código-fonte]

Em C, fazer operações matemáticas simples é bastante fácil e intuitivo. Por exemplo, se quisermos que uma variável contenha o resultado da conta 123 + 912, fazemos assim:

Em C, fazer operações matemáticas simples é bastante fácil e intuitivo. Por exemplo, se quisermos que uma variável contenha o resultado da conta 123 + 912, fazemos assim:

var = 123 + 912;

Os operadores aritméticos básicos são 5: + (adição), - (subtração), * (multiplicação), / (divisão) e % (resto de divisão inteira).

Outro exemplo:

int a = 15;
int b = 72;
int c = a * b;  /* c valerá 15×72 */

Código de uma calculadora BASICA em C:

int main()

int main()
{
    int num,num1,subtracao,multi,div,soma, mod;

    printf("Calculadora basica\n");
    printf("Entre com 2 numeros a serem processados: ");
    scanf("%i%i", &num, &num1);

    soma = num + num1;
    subtracao  = num - num1;
    multi   = num * num1;
    div  = num / num1;
    mod = num % num1;

    printf("soma e: %i\n", soma);
    printf("subtracao e: %i\n", subtracao);
    printf("multiplicacao e: %i \n", multi);
    printf("divisao e: %i \n", div);
    printf("resto da divisao e: %i \n", mod);
    return 0;
}

Podemos usar mais de um operador na mesma expressão. A precedência é igual à usada na matemática comum:

a = 2 + 4 * 10;      /* retornará 42, o mesmo que (2 + (4 * 10)) */
a = 2 + 40 / 2 + 5;  /* retornará 27, o mesmo que (2 + (40 / 2) + 5) */

Você pode usar parênteses, como em expressões matemáticas normais:

a = (2 + 4) * 10;        /* retornará 60 */
a = (2 + 40) / (2 + 5);  /* retornará 6 */

Note que uma operação entre números inteiros sempre retornará um número inteiro. Isso é evidente para a adição, subtração e multiplicação. Mas em uma divisão de inteiros, por exemplo 3/2, a expressão retornará apenas a parte inteira do resultado, ou seja, 1.

Se quisermos um resultado não-inteiro, um dos operandos deve ser não-inteiro. Nesse exemplo, poderíamos usar 3.0/2 ou 3/2.0, ou mesmo 3./2 ou (1.0 * 3)/2, pois, em C, uma operação envolvendo um número não-inteiro sempre terá como resultado um número real.

Note que em C o separador decimal é o ponto e não a vírgula.

O seguinte exemplo poderia surpreender, pois o programa dirá que o valor de f continua sendo 3.

#include <stdio.h>

int main()
{
   int i = 5;
   int j = 2;
   float f = 3.0;
   f = f + j / i;
   printf("O valor de f é %f", f);
   return 0;
}

Mas, segundo a precedência dos operadores, j / i deveria ser calculado primeiro, e como ambos os valores são do tipo inteiro, o valor dessa expressão é zero.

É importante que você grave um arquivo .c com o código acima e execute usando o compilador para ver o funcionamento com os próprios olhos.

Abreviações[editar | editar código-fonte]

Alguns tipos de atribuições são bastante comuns, e por isso foram criadas abreviações. Por exemplo, é muito comum incrementar em uma unidade o valor de uma variável (em loops, por exemplo). Em vez de escrever var = var + 1, podemos escrever simplesmente var++. Da mesma maneira, existe o operador de decremento, que decrementa em uma unidade o valor da variável: var-- (equivalente a var = var - 1).

Os operadores de decremento e incremento também podem ser utilizados antes do nome da variável. Isso significa que estas duas instruções são equivalentes:

var++;
++var;

Agora vamos supor que você use em seu programa uma variável que aumenta de 10 em 10 unidades. É claro que usar var++ dez vezes não abreviaria nada. Em vez disso, existe a abreviação var += 10.

Genericamente, para qualquer dos cinco operadores aritméticos op, vale a abreviação:

var = var op num;
var op= num;

Ou seja, os seguintes pares são equivalentes:

x *= 12;         x = x * 12;
x /= 10;         x = x / 10;
x -= 2;          x = x - 2;
x %= 11;         x = x % 11;

Este exemplo clarifica o uso dos operadores de incremento:

#include <stdio.h>

int main()
{
   int a, b;
   a = b = 5;
   printf("%d\n", ++a + 5);
   printf("%d\n", a);
   printf("%d\n", b++ + 5);
   printf("%d\n", b);
   return 0;
}

O resultado que você deve obter ao executar o exemplo é:

11
6
10
6

Esse resultado mostra que ++var e var++ não são a mesma coisa se usados como uma expressão. Quando usamos os operadores na forma prefixal (antes do nome da variável), o valor é retornado depois de ser incrementado; na forma sufixal, o valor é retornado e depois incrementado. O mesmo vale para o operador de decremento.

E o que aconteceria se você escrevesse algo como o seguinte?

printf("%d\n", a / ++a);

A resposta é: não sabemos. Segundo o padrão C, o resultado disso é indefinido (o que significa que pode variar de um compilador para outro). Não existe uma regra sobre avaliar primeiro o numerador ou o denominador de uma fração. Ou seja, não use uma variável mais de uma vez numa expressão se usar operadores que a modificam.

Talvez você tenha achado estranha a linha:

a = b = 5;

Isso é possível porque atribuições são feitas da direita para a esquerda e uma instrução de atribuição é também uma expressão que retorna o valor atribuído. Ou seja, a expressão b = 5 retornou o valor 5, que foi usado pela atribuição a = (b = 5), equivalente a a = 5.

Exemplo[editar | editar código-fonte]

Fluxo de Caixa[editar | editar código-fonte]

O código abaixo descreve o funcionamento de um comércio online.

Primeiramente, o programa solicita um valor de depósito. Em seguida, descreve as opções de produtos disponíveis e seus valores. Após a seleção do produto, você poderá digitar a quantidade que deseja comprar. Feito isso, a compra será efetuada, custo total e saldo restante seram informados.

Condições[editar | editar código-fonte]
  • Se você tentar realizar a compra e seu saldo inicial for menor ou igual a zero, o programa retornará a seguinte mensagem: 'Voce nao tem saldo suficiente para realizar a compra'.
  • Se o produto selecionado for diferente dos produtos listados, o programa retornará a seguinte mensagem: 'Desculpe, o produto nao esta disponivel no momento'.
  • Se a quantidade informada for menor ou igual a zero, o programa retornará a seguinte mensagem: 'Por favor, insira um valor maior que zero'.
  • Se o custo total da compra (custo = valor do produto * quantidade), for maior que o saldo inicial informado, o programa retornará a seguinte mensagem: 'Voce nao tem saldo suficiente para realizar a compra'.

#include <stdio.h> int main(){

    int carteira, preco, quantidade, produto, saldo, custo;

    printf("Conveniencia Online\n");

    printf("\nDigite o valor do deposito.\n");

    scanf("%i", &carteira);

    printf("Seu saldo eh: %i\n", carteira);

    printf("Qual produto deseja adicionar ao carrinho? Selecione apenas um numero por vez.\n");

    printf("Temos:\n 1- Refrigerante = R$ 8,00 \n 2- Energetico  = R$ 10,00\n 3- Cerveja = R$ 5,00\n 4- Agua = R$ 1,00\n");

    scanf("%i", &produto);

    if(produto == 1 || produto == 2 || produto == 3 || produto == 4){

        printf("Escolha a quantidade:\n");

        scanf("%i", &quantidade);

        }

    else{

        printf("Desculpe, o produto nao esta disponivel no momento.\n");

        return 0;}

    if(produto == 1){

        custo= 8*quantidade;

    }

    else{

        if(produto== 2){

            custo = 10*quantidade;

        }

        else{

          if(produto== 3){

            custo = 5*quantidade;

}

            if(produto== 4){

                custo = 1*quantidade;

    }        }

}

    if (custo > carteira)

    {

    printf("\nVoce nao tem saldo suficiente para realizar a compra.");

    return 0;}

    if (quantidade <= 0)

    {

    printf("\nPor favor, insira um valor maior que zero.");

    return 0;}

    printf("\nCompra realizada com sucesso!");

    printf("\nCusto total:%i", custo);

    saldo = carteira - custo;

    printf("\nSaldo restante:%i", saldo);

return 0;}


Após, realizar a compra, o programa retornará zero e será encerrado.