Programar em C/Operações matemáticas (Básico)
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.