四则运算
两种方法设计程序,从键盘输入任意两个数和一个运算符(+、-、*、/),计算其运算的结果并输出。考虑整型、小数等不同类型数的四则运算。
方法1函数原型:bool calc(int&result, int a, int b, char type);
bool calc(double&result, double a, double b, char type);
方法2函数模板原型:
template
bool calc(T&result,T a,T b, char type);
方法1的程序设计:
#include <iostream>
using namespace std;
bool calc(int& result, int a, int b, char type) {
switch(type) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
if (b == 0) {
cout << "Error: divide by zero" << endl;
return false;
}
result = a / b;
break;
default:
cout << "Error: invalid operator" << endl;
return false;
}
return true;
}
bool calc(double& result, double a, double b, char type) {
switch(type) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
if (b == 0) {
cout << "Error: divide by zero" << endl;
return false;
}
result = a / b;
break;
default:
cout << "Error: invalid operator" << endl;
return false;
}
return true;
}
int main() {
int a, b, int_result;
double double_a, double_b, double_result;
char type;
cout << "Enter two integers: ";
cin >> a >> b;
cout << "Enter an operator (+, -, *, /): ";
cin >> type;
if (calc(int_result, a, b, type)) {
cout << "Result (integer): " << int_result << endl;
}
cout << "Enter two doubles: ";
cin >> double_a >> double_b;
cout << "Enter an operator (+, -, *, /): ";
cin >> type;
if (calc(double_result, double_a, double_b, type)) {
cout << "Result (double): " << double_result << endl;
}
return 0;
}
方法2的程序设计:
#include <iostream>
using namespace std;
template <typename T>
bool calc(T& result, T a, T b, char type) {
switch(type) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
if (b == 0) {
cout << "Error: divide by zero" << endl;
return false;
}
result = a / b;
break;
default:
cout << "Error: invalid operator" << endl;
return false;
}
return true;
}
int main() {
int int_a, int_b, int_result;
double double_a, double_b, double_result;
char type;
cout << "Enter two integers: ";
cin >> int_a >> int_b;
cout << "Enter an operator (+, -, *, /): ";
cin >> type;
if (calc(int_result, int_a, int_b, type)) {
cout << "Result (integer): " << int_result << endl;
}
cout << "Enter two doubles: ";
cin >> double_a >> double_b;
cout << "Enter an operator (+, -, *, /): ";
cin >> type;
if (calc(double_result, double_a, double_b, type)) {
cout << "Result (double): " << double_result << endl;
}
return 0;
}
使用字符数组接受输入,然后遍历这个数组,根据内容判断是数值还是运算符。
我的这篇文章有四则运算,不过没有小数,不过稍微变一下就行,有多位数字、包括负数的判断,可以在这里加入对小数点的判断。
栈和队列:理解与使用_创意程序员的博客-CSDN博客
要参考的案例为链式栈四则运算,参考这里添加对小数点的判断,并设置isOperand = 1;
我可以解决第一个问题。
这个问题可以通过使用函数模板和C++的泛型编程来解决。通过使用模板,可以在不知道具体类型的情况下,对不同类型的数据进行相同的操作。
以下是使用函数模板实现的代码:
#include<iostream>
using namespace std;
template<typename T>
T calculate(T a, T b, char op) {
if(op == '+'){
return a + b;
}else if(op == '-'){
return a - b;
}else if(op == '*'){
return a * b;
}else if(op == '/'){
if(b == 0){
cout<<"Error: divide by zero"<<endl;
return 0;
}else{
return a / b;
}
}else{
cout<<"Error: invalid operator"<<endl;
return 0;
}
}
int main() {
cout<<"Please input two numbers and an operator:"<<endl;
cout<<"Number 1: ";
float num1;
cin>>num1;
cout<<"Number 2: ";
float num2;
cin>>num2;
cout<<"Operator: ";
char op;
cin>>op;
cout<<"Result: "<<calculate(num1, num2, op)<<endl;
return 0;
}
上面的代码中,calculate函数是一个模板函数,可以用于不同类型的数据。在函数中,根据输入的运算符进行不同的运算操作,并返回结果。
在主函数中,先根据用户输入读取两个数和一个运算符,然后调用calculate函数进行计算,并输出结果。
此外,如果除数为0或者运算符不合法,程序会输出错误信息。
以上是使用函数模板实现的一种方法。如果要使用特定数据类型的函数来实现,则需要为不同的数据类型编写不同的函数,比较麻烦。