目录
数据运算
编写C++代码要经常锻炼你的逻辑思维能力,我认为利用数学是一个很不错的做法。接下来,我们先了解加减乘除的混合运算怎么在C++中呈现。
题目:
计算:
代码实现:
#include <iostream>
template <typename T>
T calculateExpression(T a, T b, T c, T d, T e, T f, T g, T h, T i, T j, T k, T l) {
return (-(a * c + b) / c) - (-(d * f + e) / f) - (-(g * i + h) / i) + (-(j * l + k) / l);
}
int main() {
double result = calculateExpression(4.0, 7.0, 9.0, 3.0, 1.0, 6.0, 2.0, 2.0, 15.0, 6.0, 1.0, 10.0);
std::cout << "Result: " << result << std::endl;
return 0;
}
代码分析:
头文件不能少。
接下来就是编写模板函数。
计算复杂的混合运算,并且相同类型题目只是数字不同,我们就写模板函数来减少主函数代码复杂度,以便我们维护。那么我们怎么写模板函数呢?
在计算中的模板函数,我认为就是带有参数计算公式。我们先加上关键字,其实就是模板函数中的模板参数,比如例子中的T,可以是任何类型。(注:模板参数T可以不使用,但是这样就会让代码变的复杂,因为参数的设定要指定数据类型,比如:单精度的参数a,你就要写成 int& a,如果你的参数很多的话,就需要每一个参数都要指定,并且参数不一定都是同一类型,因此利用T万能的指定,就简化了代码。)
然后开始让函数接受参数。(注:T与参数之间要有空格。)
完成之后就编写公式,这个公式就是你怎么解释你要计算的式子,这个就靠你的数学功底。(注:公式编写前一定要写return,它是将函数计算结果返回给调用者,如果没写这个会导致编译错误或者未定义的行为。)
主函数的编写就简单许多了,调用模板函数赋予每个参数确定的值就可以计算了,得出的结果就可以指定数据类型,也可以让计算机自动确认输出的结果数据类型。以下的就不必多说了。
结果:
注:auto用于自动推导函数返回类型,根据实际情况推定输出结果数据类型,而不需要指定。
进阶训练
根据前一节我们可知要计算混合运算只要根据相应逻辑就可以完成对应题目的计算,但是我们也看到了前一节的局限性——计算一题就得更改代码中的对应参数数值,然后再启动计算。操作很麻烦,能否利用代码实现计算器计算对应混合应算呢?(注:下节讨论输入不同值,不需要重新点击调试器就能计算不同参数值。)
答案是肯定的。
代码实现:
#include <iostream>
using namespace std;
template <typename T>
T calculateExpression(T a, T b, T c, T d, T e, T f, T g, T h, T i, T j, T k, T l) {
return (-(a * c + b) / c) - (-(d * f + e) / f) - (-(g * i + h) / i) + (-(j * l + k) / l);
}
int main() {
double a, b, c, d, e, f, g, h, i, j, k, l;
cout << "Enter the values of a, b, c, d, e, f, g, h, i, j, k, l: ";
cin >> a >> b >> c >> d >> e >> f >> g >> h >> i >> j >> k >> l;
double result = calculateExpression(a, b, c, d, e, f, g, h, i, j, k, l);
cout << "Result: " << result << endl;
return 0;
}
此段代码就很好的实现了我输入相应参数数值,回车就能得出答案。代码中的头文件、模板函数就不再赘述。
主函数的逻辑就很简单了。首先定义一个mian函数,在函数中声明12个double类型的变量,用于存储我们输入的12个值;然后,在输入面板中显示cout中的内容,提示我们输入;cin表示输入;结果得出就调用模板函数来计算;最后将得出的结果显示在屏幕上。(注:输入完成后回车得答案。)
结果:
附件
在上述分析中我们看到了定义和声明,这有什么不同呢?
在C++中声明和定义是不同的概念。明白的讲,前者只是告诉编译器这里有个函数、变量或者类的存在,没有具体的实现,而后者不同,不仅告诉编译器相关内容,并且有具体的实现。
在上述代码中我们就可以看到主函数就是定义的,大括号中的内容就是主函数的具体实现,而参数是声明的,只表明了参数的类型,没有具体实现。
举例来说:
int add(int a, int b); 这句代码就是函数声明
int add(int a, int b) { return a+b;} 这句代码就是函数定义
变量的定义与声明:
int x = 10;定义
extern int x;声明
(注:extern关键字是用于声明一个变量或者函数,表示该变量或者函数在其他文件中定义的,它告诉编译器变量或者函数的定义将在其他文件中找到,从而避免重复定义。)