解题思路:
观察数列,除了第一个数,之后每个数的分母都是前一个数的分子,分子是前一个数的分子分母之和。看清楚规律就好写了。
注意事项:
回头看看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分
3 人评分
母牛的故事 (C语言代码)浏览:1298 |
人见人爱A+B (C语言代码)浏览:625 |
最长单词 (C语言代码)浏览:1362 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:532 |
简单的a+b (C语言代码)浏览:597 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1162 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:460 |
printf基础练习2 (C语言代码)浏览:617 |
局部变量作函数返回值的问题浏览:963 |
The 3n + 1 problem (C语言代码)浏览:501 |
哈哈哈 2022-04-12 00:35:40 |
0.00和0.50