解题思路:

观察数列,除了第一个数,之后每个数的分母都是前一个数的分子,分子是前一个数的分子分母之和。看清楚规律就好写了。


注意事项:

回头看看1015: [编程入门]求和训练(链接:https://blog.dotcpp.com/a/84306)。那一题中也要求是保留两位小数,而且是在参数传递的过程中就开始保留。本题我一开始写的是(float)(numerator / denominator),然而发现每次结果都是1.00,原来是我对强制类型转换的优先级的理解出了问题。

(1)(float)(num)意思是把num的类型转换成float,顺序是先计算num,如果这个num是两个整型做除法,那就是先算出int的结果,再转成float。在本题中,我定义的numerator和denominator都是short型的,所以会先算出两个short变量的商,再转成float,所以是1.00。

(2)(float)num意思是输出浮点型的num,是(float)在先,反之如果(num)则计算num在先。可以试着编译执行一下这行代码:

cout << fixed << setprecision(2) << (float)(1 / 2) << " " << (float)1 / 2 << endl;

也许会有更好的理解。


参考代码:

#include #include using namespace std;

float seqSum(short n); //有规律数列求和
int main() {
	short N = 0;
	cin >> N;
	cout << fixed << setprecision(2) << seqSum(N) << endl;
	return 0;
}
float seqSum(short n) {
	float res = 0; //求和
	short numerator = 2; //分子,初始为2
	short denominator = 1; //分母,初始为1
	for (short i = 0; i < n; i++) {
		res += (float)numerator / denominator; //注意和(float)(numerator / denominator)的区别
		short tempDen = denominator; //分母的副本
		denominator = numerator; //数列下一个数的分母是上一个数的分子
		numerator += tempDen; //数列下一个数的分子是上一个数的分子和分母之和
	}
	return res;
}


点赞(0)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

哈哈哈 2年前 回复TA
@哈哈哈 0.00和0.50
哈哈哈 2年前 回复TA
cout << fixed << setprecision(2) << (float)(1 / 2) << " " << (float)1 / 2 << endl;
分析的很到位,学到了