No artigo sobre o teste condicional SWITCH em C, mostramos como usar ele para fazer uma calculadora.
Refaça essa calculadora, com o mesmo SWITCH, mas agora mostrando as operações matemáticas como opções de um menu, dentro de um laço DO WHILE.
Vamos resolver esse exercício e comentar totalmente seu código, agora em nossa apostila de C!
- Leia esse conteúdo Offline: Apostila C Progressivo
Clique aqui e saiba como obter seu certificado de programação C! Entre já no Mercado de Trabalho!
Como criar uma calculadora em C
Já está na hora de fazer algo realmente útil, que você possa se orgulhar e até mostrar aos amigos.
Ou seja, vamos fazer uma calculadora que fazer as operações de soma, subtração, multiplicação, divisão e resto da divisão.
Tudo isso com base nos conhecimentos que acumulamos até aqui.
Obviamente, não será uma calculadora complexa e de utilidade geral, é mais para termos noção de como usar os conhecimentos que aprendemos até aqui.
Ela também não é uma aplicação 'robusta', que seja blindada e segura. Ela é facilmente 'hackeável'.
Por exemplo, ela está programada para receber números, então se você digitar uma letra, irá 'quebrar' nosso programa.
Mas ao passo que vamos estudando e evoluindo em nossa apostila, iremos criar aplicações cada vez melhores e mais seguras
Obviamente, não será uma calculadora complexa e de utilidade geral, é mais para termos noção de como usar os conhecimentos que aprendemos até aqui.
Ela também não é uma aplicação 'robusta', que seja blindada e segura. Ela é facilmente 'hackeável'.
Por exemplo, ela está programada para receber números, então se você digitar uma letra, irá 'quebrar' nosso programa.
Mas ao passo que vamos estudando e evoluindo em nossa apostila, iremos criar aplicações cada vez melhores e mais seguras
Pois bem, vamos começar!
A lógica de uma calculadora na linguagem C
Vamos usar apenas três variáveis nesse aplicativo C: dois floats (que vão representar os dois números) e uma variável do tipo char, que irá armazenar o tipo de operação o usuário quer: +, -, *, / ou %
Conforme pedimos, o menu será exibido através do laço DO WHILE.
Lembrando que temos que colocar uma condição para esse laço continuar. Você pode criar a sua, a minha foi a seguinte: se o usuário digitar num1=0, oper=0 e num2=0, o programa termina.
Pois bem, mostramos o menu ao usuário (meros printf, que você já domina totalmente) e demos exemplos de como deve ser a entrada do usuário. Que deve ser: numero operador numero
Se colocarmos os 3 scanf em sequência, dá para pegar o primeiro número, o char e em seguida o segundo número, mas o usuário tem que entrar com os dados da seguinte maneira: digita o primeiro número, dá um espaço, digita o operador e dá outro espaço.
Após isso, limpamos a tela e mostramos ao usuário a operação matemática que ele escolheu:
numero operador numero2 =
E o resultado dessa operação? Hora, vai depender do operador e números que ele tenha escolhido.
Essa resposta vai ser fornecida através do switch.
Mandamos o operador para o switch, que vai selecionar a operação e mostrar um printf com o resultado.
Caso o usuário tenha digitado um operador inválido, o switch manda isso pro default.
Lá no default temos que fazer uma espécie de tratamento de informação, para saber se o usuário digitou um operador inválido ou se digitou 0 0 0, pois se tiver digitado 0 0 0 é porque ele quer terminar o programa.
Isso é facilmente resolvido com o nosso conhecido e amado teste condicional IF ELSE.
#include <stdio.h> int main(void) { float num1, num2; char oper; do { printf("\t\tCalculadora do curso C Progressivo\n\n"); printf("Operacoes disponiveis\n"); printf("'+' : soma\n"); printf("'-' : subtracao\n"); printf("'*' : multiplicao\n"); printf("'/' : divisao\n"); printf("'%%' : resto da divisao\n"); printf("\nDigite a expressao na forma: numero1 operador numero2\n"); printf("Exemplos: 1 + 1 , 2.1 * 3.1\n"); printf("Para sair digite: 0 0 0\n"); scanf("%f", &num1); scanf(" %c",&oper); scanf("%f", &num2); system("cls || clear"); printf("Calculando: %.2f %c %.2f = ", num1,oper,num2); switch( oper ) { case '+': printf("%.2f\n\n", num1 + num2); break; case '-': printf("%.2f\n\n", num1 - num2); break; case '*': printf("%.2f\n\n", num1 * num2); break; case '/': if(num2 != 0) printf("%.2f\n\n", num1 / num2); else printf("Nao existe divisao por 0\n\n"); break; case '%': printf("%d\n\n", (int)num1 % (int)num2); break; default: if(num1 != 0 && oper != '0' && num2 != 0) printf(" Operador invalido\n\n "); else printf(" Fechando calculadora!\n "); } }while(num1 != 0 && oper != '0' && num2 != 0); }
44 comentários:
Paz seja convosco;
Do jeito que está aí, se compilado no terminal do Ubuntu 12.04 LTS, dá erro na linha 18:12:
$ gcc 1.c -o 1
1.c: In Funktion »main«:
1.c:18:13: Warnung: unbekanntes Konvertierungstyp-Zeichen »:« im Format [-Wformat]
Fora isso o código está legalzinho. Meus parabéns pelo o site. ^^
Opa, pra aparecer o % tem que colocar %%!
Corrigido, grato pela contribuição Van Dick.
Ai pessoas, eu fiz uma calculadora diferente, ela é baseada na calculadora que fizera aki.
ta aqui o code dela:
#include
int main()
{
int opcao,
num1,
num2;
do
{
printf("\t\t\nEscolha a Sua operação\n");
printf("0. Sair\n");
printf("1. Somar\n");
printf("2. Diminuir\n");
printf("3. Multiplicar\n");
printf("4. Dividir\n");
printf("Opcao: ");
scanf("%d", &opcao);
printf("Escolha um numero: ");
scanf("%d", &num1);
printf("Escolha outro numero: ");
scanf("%d", &num2);
switch( opcao )
{
case 0:
system("cls || clear");
printf("Saindo do menu...\n");
break;
case 1:
system("cls || clear");
printf("%d + %d = %d \n", num1, num2, num1 + num2);
break;
case 2:
system("cls || clear");
printf("%d - %d = %d \n", num1, num2, num1 - num2);
break;
case 3:
system("cls || clear");
printf("%d * %d = %d", num1, num2, num1 * num2);
break;
case 4:
system("cls || clear");
printf("%d / %d = %d", num1, num2, num1 / num2);
break;
default:
system("cls || clear");
printf("Opcao invalida! Tente novamente.\n");
}
} while(opcao);
Preciso de ajuda preciso de uma calculadora que use vetor e tenha 8 registradores em C, :(
Olá Luciano,
Qual, exatamente, é sua dúvida ?
O que já conseguiu fazer?
Oi gente, eu preciso de uma calculadora como a do anonimo,so q tem q ter as opções de exponenciação,raiz quadrada e porcentagem. Alguem me ajuda???
Ei Day meu nome é Luciano, eu posso te ajudar me passa seu e-mail assim ajudo com suas dúvidas.
Olá Day e Luciano,
Sugerimos que vocês usem nosso Fórum de C , pois com certeza esse assunto/dúvida poderá ajudar e ser útil para outros leitores de nossa apostila de C :)
Ola,em primeiro lugar gostaria de elogiar o vosso curço ,està muito bom! Estou com uma duvida,não consigo usar o função System("cls||clear") no Mac..uso o compilador Xcode e ele detecta o erro: implicit declaration of function 'system' is invalid in C99
Muito obrigado
Rehan Kadir
Não utilizes system("clear||cls"), é uma chamada ao sistema operativo, logo pode ser diferente.
em gcc para linux utilizo:
#include
#include
clrscr();
para o erro system' is invalid in C99, é só compilar com a opção:
gcc -std=c90 prog.c -o prog
gcc -std=c90
OK1Muito obrigado João Antunes Guimarães,vou tentar depois digo algo
Oi eu preciso fazer uma calculadora com as
Opera coes b asicas de: adi cao, subtra cao, divisao e multiplica cao com at e 2 operandos;
Raiz quadrada;
Seno; e
Cosseno.
mas ´so tenho um semestre de curso e estou perdida
Oi gente que quer a calculadora, dou uma sugestão: (diretaço)
#include
#include
void main(void){
float a,b,c,d,e,f,g,h;
printf("Calculadora do Rambo\n)";
scanf("%f %f %f %f %f %f",a,b,c,d,e,f,g);
printf("%f",a*b/c)-d+%e+sin(f)+sqr(g);
}
PRONTO!
sem aquela infinidade de IFs, CASEs, etc
dúvidas? entremos em contato, nao sei como, entao perguntem para qwqwqw3013@yahoo.com.br
ah, moderador, uma caixa de texto mais larga seria muito bom.
Olá, eu fiz um igual a esse mas não encontro o erro. Quando teclo enter pra ele fazer o cálculo, ele simplesmente "pula" e exibe a mensagem do default: veja:
/*
Programa simples em C que realiza cálculos com dois dígitos.
*/
#include
#include
int main(int argc, char *argv[]){
float num1, num2, resultado;
char operador;
printf("Digite o Primeiro numero, o Operador e o Segundo numero.\n");
scanf("%f, %s, %f", &num1, &operador, &num2);
switch(operador){
case 'soma':
resultado = num1+num2;
printf("\n%f\n\n\n", resultado);
break;
case 'subtração':
resultado = num1-num2;
printf("\n%f\n\n\n", resultado);
break;
case 'divisão': case ':':
resultado = num1/num2;
printf("\n%f\n\n\n", resultado);
break;
case 'multiplicação': case '.':
resultado = num1*num2;
printf("\n%f\n\n\n", resultado);
break;
default:
printf("\nNao foi possivel realizar esta operacao!\n\n\n ");
break;
}
}
system("cls || clear");
tive que apagar esta linha dae funcionou...
estou usando devc++ pq o codeblocks não ta executando... ta dando falta de arquivo pra executar.. ja o dev não...
Ernandes, experimente substituir o "%s" por "%c"
Boa noite. Eu tenho que fazer uma calculadora que some e multiplique so com binarios.
Boa noite pessoal , estou tentado montar o código fonte de uma calculado , que vai rodar em um PIC18F4520 , porem ainda não obtive muito avanço. Alguém
poria me ajudar ?
Boa noite pessoal , estou tentando montar o código fonte para uma calculadora de cálculos básicos (+,-,/,*) que vai rodar em um PIC18F4520 porem ainda não consegui desenvolver. Alguém pode me ajudar ?
Olá, precisava de uma ajudinha!
Teria como escrever esse mesmo programa usando Linguagem C# ? Precisava fazer um programa que funcionasse como uma calculadora, acredite que esse me atenda muito bem, mas não entendo a sintaxe de C, apenas C#
gostei do visual dela aparenta uma calculadora daquelas usadas em maquinas de trator de separar milho.
Por que a ordem com que eu entro com os dados faz diferença? Tipo, se eu faço no inicio do programa
printf("Primeiro termo: ");
scanf("%f",&num1);
printf("Operacao: ");
scanf("%c",&operacao);
printf("Segundo termo: ");
scanf("%f",&num2);
dá erro.
Bom dia pessoal. Gostei muito da calculadora. Tenho um exercício para fazer assim só que além desses recursos colocados acima ele deve fazer ao menos 1 conversão (tipo decimal para binário ou outro) e exibir um histórico que ao digitar o comando "historico" ele exiba as 10 ultimas operações. Como posso fazer isso? Obrigada!
Ola, preciso de uma calculadora porem da seguinte forma:
A+B=C
onde eu posso calcular qualquer variável.
Se eu informar A=1 e B=2 vai me dar a resposta que C=3
Se eu informar B=2 e C=4 vai me dar a resposta do A, que é 2 nesse caso.
Se alguém puder me ajudar, ficarei grato, pois é para o meu trabalho.
Eu consigo inserir esse programa "cauculadora" um outro programa tipo colocar em html.
boa noite galera!
instalei o programa Code:Blocks e tentei fazer este programa da calculadora do exemplo, mas nao funcionou deu erro: 'num2' undeclared (first use in this function).
Alguem pode me ajudar.
Desde já agradeço a ajuda e coloaboração.
Att. Weder
tenta começar assim:
float num1;
float num2;
char oper;
O meu "resto" não dá certo...
case '%':
system("clear || cls");
printf("Calculando: %.1f %c %.1f = %.1f \n", num1, oper, num2, (int)num1 % (int)num2 );
break;
Se eu coloco 5 % 3, por ex, a resposta é:
Calculando: 5.0 % 3.0 = 6205628055300728300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0
O que está errado? O (int) eu assumi que é pra transformar o float em inteiro, é isso? Não tinha explicação na apostila...
GOSTARIA DE SABER QUE CALCULADORA OU COMO POSSO FAZER NOVOS BASEADOS NESTES EXEMPLOS
c/VGVAUCAF5Snv8= 500.000 E ASSIM POR DIANTE QUERIA FAZER TIPO 5 BILHOES QUE NUMEROS POSSO MODIFICAR
gente me ajuda porfavol
fazer uma calculadora em C que leia dois números e o usuário tenha 7 funções possível para fazer operações com os dois números digitados
Precisa adicionar uma biblioteca
#include
Pq pode dar erro na hora de compilar, pois a stdio.h é somente para as funções de entrada e saída.
uma calculadora na linguagem visualg que faz somente duas operacao divisao de dois numero sem usar as operadores * / % mod ^ ...mim ajuda ai
uma calculadora na linguagem visualg que faz somente duas operacao divisao de dois numero sem usar as operadores * / % mod ^ ...mim ajuda ai
Meu codigo nao esta compilando
#include
#include
int main (void){
char op;
int num1, num2;
do{
printf("Escolha a operacao desejada [ + - / * ]: ");
scanf("%c", &op);
printf("Escolha o primeiro numero: ");
scanf("%d", &num1);
printf("Escolha o segundo numero: ");
scanf("%d", &num2);
switch (op){
case '+' : printf("%d + %d = %d", num1, num2, num1 + num2);
break;
case '-' : printf("%d - %d = %d", num1, num2, num1 - num2);
break;
case '/' : printf("%d / %d = %d", num1, num2, num1 / num2);
break;
case '*' : printf("%d * %d = %d", num1, num2, num1 * num2);
break;
default : printf("Digite uma opcao valida pfvr sua anta!\n");
} while(op);}
}
Fiz uma diferenca para fechar a calculadora so trocar o operador por 0. (Tirando o Modulo, funcionando normal)
#include
//Calculator using DO WHILE and SWITCH
int main(void)
{
float num1,num2;
char option;
do
{
system("clear||cls");
printf("\t\tCalculadora:\n");
printf("+ < Para somar\n- < para subtrair\n* < para multiplicar\n/ < para dividir\n%% < Modulo da divisao\n");
printf("Para fechar a calculadora, apenas coloque 0 no lugar da operacao.\n");
printf("Digite a conta que deseja fazer.(Exemplo: 10 * 2):\n");
scanf("%f %c %f",&num1,&option,&num2);
switch(option)
{
case '+':
printf("%.2f + %.2f = %.2f\n",num1,num2,(num1+num2));
system("pause");
break;
case '-':
printf("%.2f - %.2f = %.2f\n",num1,num2,(num1-num2));
system("pause");
break;
case '*':
printf("%.2f * %.2f = %.2f\n",num1,num2,(num1*num2));
system("pause");
break;
case '/':
if(num2==0||num1==0)//igualando a 0
printf("Nao existe divisao por 0\n");
else
printf("%.2f / %.2f = %.2f\n",num1,num2,(num1/num2));
system("pause");
break;
case '%': //Parte com defeito, qualquer resultado eh (-1.#R)
printf("%.2f %% %.2f = %.2f\n",num1,num2,(int)num1%(int)num2);
system("pause");
break;
default:
if(option!='0')
printf("Operaçao invalida!\n");
else
{
printf("Fechando Calculadora!\n");
return 0;
}
system("pause");
break;
}
}while(option);
}
#include
int main(void)
{
float numero_1, numero_2;
char operador;
do
{
printf("\n\n \t\t Calculadora do Curso C Progressivo \n\n");
printf("Operacoes Disponiveis \n");
printf("'+' : Soma \n");
printf("'-' : Subtracao \n");
printf("'*' : Multiplicacao \n");
printf("'/' : Divisao \n");
printf("'%%' : Resto \n\n");
printf("Digite a expressao na forma: numero_1 Operador numero_2 \n");
printf("Exemplos: 1 + 1 , 2.1 * 3.1 \n");
printf("Para sair digite: 0 0 0 \n");
scanf("%f", &numero_1);
scanf(" %c", &operador);
scanf("%f", &numero_2);
if (operador == 0)
continue;
system("cls || clear");
switch ( operador )
{
case '+':
printf("Calculando: %.2f + %.2f = %.2f ", numero_1, numero_2, numero_1 + numero_2 );
break;
case '-':
printf("Calculando: %.2f - %.2f = %.2f ", numero_1, numero_2, numero_1 - numero_2 );
break;
case '*':
printf("Calculando: %.2f * %.2f = %.2f ", numero_1, numero_2, numero_1 * numero_2 );
break;
case '/':
printf("Calculando: %.2f / %.2f = %.2f ", numero_1, numero_2, numero_1 / numero_2 );
break;
case '%':
printf("Calculando: %d %% %d = %d ", (int)numero_1, (int)numero_2, (int)numero_1 % (int)numero_2 );
break;
}
}
while(operador != '0' );
return 0;
}
Eu fiz o seguinte:
#include
#include
int soma(int a, int b);
int menos(int a, int b);
int vezes(int a, int b);
float dividir(int a, int b);
int main(){
int a, b, resultado;
char tecla;
do{
printf("ESCOLHA UMA OPÇÃO\n\n");
printf("+ parasomar\n");
printf("- para subtrair\n");
printf("* para multiplicar\n");
printf("/ para dividir\n\n");
scanf("%d", &a);
scanf("%c", &tecla);
scanf("%d", &b);
system("clear");
switch(tecla){
case '+':
resultado = soma(a,b);
printf("%d\n", resultado);
break;
case '-':
resultado = menos(a,b);
printf("%d\n", resultado);
break;
case '*':
resultado = vezes(a,b);
printf("%d\n", resultado);
break;
case '/':
resultado = dividir(a,b);
printf("%d\n", resultado);
break;
default:
printf("Encerrando programa");
}
}while((tecla != 's') && (a != 0));
}
int soma(int a,int b){
int resultado;
resultado = a+b;
return(resultado);
}
int menos(int a,int b){
int resultado;
resultado = a-b;
return(resultado);
}
int vezes(int a,int b){
int resultado;
resultado = a*b;
return(resultado);
}
float dividir(int a, int b){
float resultado;
resultado = a/b;
return(resultado);
}
Quando eu executo e digito o primeiro valor tá tudo certo, mas quando eu digito o sinal, o programa retorna ao menu.
#include
#include
int main() {
float x=0, y=0, result=0;
int op=0;
printf("Informe o primeiro valor a ser calculado: \n");
scanf("%f",&x);
printf("Informe o segundo valor a ser calculado: \n");
scanf("%f",&y);
printf("escolha um operador a seguir: \n\t 1 - Soma \n\t 2 - subtracao \n\t 3 - multiplicacao \n\t 4 - divisao \n");
scanf("%d",&op);
switch(op) {
case 1:
printf(" vc escolheu SOMA\n");
result = x+y;
printf("resultado do calculo e: %2.f",result);
break;
case 2:
printf(" vc escolheu SUBITRACAO\n");
result = x-y;
printf("resultado do calculo e: %2.f",result);
break;
case 3:
printf("vc escolheu a MULTIPLICACAO\n");
result = x*y;
printf("resultado do calculo e: %2.f",result);
break;
case 4:
printf("vc escolheu a DIVISAO\n");
result = x/y;
printf("resultado do calculo e: %2.f",result);
break;
case 5:
default:
printf("caracter invalido!");
break;
}
}
switch...case simulando uma calculadora:
) Fazer uma calculadora que resolve:
1. Adição entre A e B
2. Subtração entre A e B
3. Multiplicação entre A e B
4. Divisão entre A e B
a. ATENÇÃO: criar um teste aqui para saber se B for 0. SE for 0, não poderá fazer a divisão e
deverá aparecer uma mensagem na tela falando que é divisão por 0.
Obrigatóriamente:
a) Deve ter uma subrotina que é chamada depois de qualquer umas das quatro operações e que
serve apenas para começar uma nova operação.
b) Deve ter uma subrotina para entrada dos dados A e B – defina as variáveis como global
c) Deve ter uma subrotina para saída dos dados, apresentando o resultado das operações.
d) Deve ter uma subrotina para adição, uma para subtração, uma para multiplicação e uma para
divisão.
e) Na rotina principal main, criar uma estrutura de repetição para que a o programa fique rodando
enquanto for digitado algum número diferente de 5.
f) Faça um menu usando printf para que o usuário escolha entre as opções de 1 a 4 para operações
e 5 para fim do programa.
g) Use o SWITCH para decidir entre as opções. Dentro do case, chame as sub-rotinas.
Alguém sabe como montar um algoritmo de conta bancária???
Sendo uma poupança cm 3% de juros
Conta corrente 7% de juros
Como não é válido
Saiba antes do sistema internacional de numeração em Octal,decimal, hexadecimal,epois na variável ou na expressão em que na qual colocou /%1f poderá ser entendido de forma diferente pelo compilador
Postar um comentário