如果我除以2个数字(10/2/2),它将为我提供正确的解决方案。另外,当一个数字除以另一个数字时,如何找到余数。
我如何能够除以2个或更多数字?使用if-else语句。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
char operation = 0;
double num1=0.0 ;
double num2=0.0 ;
printf("Enter the calculation\n");
scanf("%f %c %f", &num1, &operation, &num2);
switch (operation) {
case '+':
printf("= %f\n", num1 + num2);
break;
case '-':
printf("= %f\n", num1 - num2);
break;
case '*':
printf("= %f\n", num1*num2);
break;
case '/':
printf("= %f\n", num1 /(double)num2);
break;
case '%':
printf("= %f\n", num1 % (double)num2);
break;
default:
printf("Error!\n");
break;
}
system("pause");
}
答案 0 :(得分:1)
您可以使用%
运算符
case '%':
printf("= %d\n", (int)num1 %(int)num2);
break;
对于多次划分数字,您需要改进输入解析,创建循环以执行多个操作并保存结果(可能为num1)。
答案 1 :(得分:1)
要获得您正在寻找的剩余部分,您必须将双方都投向int
:
printf("= %d\n", (int)num1 % (int)num2);
要解析复杂的表达式,您需要完全不同的东西。现在你的代码只执行一次操作,因此可以忽略运算符的预测。但是当你进行连锁操作时,你需要注意这一点。与1 - 2 * 3
一样,您的代码应该执行2*3
,然后添加1
。最简单的方法是使用递归的解析器:http://en.wikipedia.org/wiki/Recursive_descent_parser
以下是基本/简单的规则概念:
line -> expression <EOF>
expression -> factor + expression
factor - expression
factor
factor -> term * factor
term / factor
term % factor
term
term -> ( expression )
<number>
然后,每个规则的代码看起来都像这样:
double read_factor(...) {
double first = read_term(...);
double second = 0.0;
switch(peek_next_symbol()) {
case '*':
consume_symbol();
second = read_term();
return first * second;
case '/':
consume_symbol();
second = read_term();
if (second == 0)
throw std::logic_error("div/0");
return first / second;
case '%':
consume_symbol();
second = read_term();
if (second == 0)
throw std::logic_error("mod/0");
return (double)((int)first % (int)second);
default:
return first;
}
}
然后术语看起来像这样:
double read_term() {
double first = 0.0;
switch(peek_next_symbol()) {
case '(':
consume_symbol();
first = read_expression();
if (peek_next_symbol() != ')')
throw std::logic_error("missing )");
consume_symbol();
default:
return read_number();
}
}
我引用的每个函数都相对复杂,并且有大量的状态被传递。现在我已经简要地解释了这个理论,这是一个很小的工作样本:http://ideone.com/wVqRw
答案 2 :(得分:0)
剩余和modulo相似,但通常略有不同。
在C中,%
是除法后的余数。在C中,modulo
没有为整数定义。
fmod()
,它也是“x/y
的浮点余数。”
要获得浮点“余数运算符”,代码可以使用
case '%':
{
printf("= %f\n", fmod(num1, num2));
break;
}
在数学中,模运算的结果通常被定义为欧几里德分裂的余数。如果代码想要Euclidean division来获取模数:
case 'M':
{
double quot = floor(num1/num2);
double rem = num1 - quot * num2;
printf("= %f\n", rem);
break;
}
注意:建议使用"%g"
或"%e"
进行打印。