题目链接:小试循环
写出实现下面求解任务的程序【提示:m是一个变量,在程序中输入】
(1)求1到m的平方和
12+22+32...m2
(2)求1到m间所有奇数的和
1×2×3×4...×m
(3)求1到m的倒数和,即
1+12+13+...+1m
(4)求值:
1−12+13−14+...+(−1)(m+1)×1m
(5)求m!,即
1×2×3×4...×m
源代码: tryloop.cpp
/*cpoyright(c++) 2017.
*All rights reserved
*文件名称:小试循环
*作 者:xc
*完成日期:2017年3月18日
*版 本 号:v1.0
*
*题目链接:http://blog.csdn.net/sxhelijian/article/details/50825117
*问题描述: 1. 求1到m的平方和;
* 2. 求1到m间所有奇数的和;
* 3. 求1到m的倒数和,即 1+1/2+1/3+1/4+...+1/m
* 4. 求1-1/2+1/3...+(-1)(m+1)*1/m;
* 5. 求 m!;
*输入描述:输入变量m;
*程序输出:输出5个表达式结果;
*/
#include <iostream>
using namespace std;
// 1到m的平方和;
double expression1 (int &m)
{
double total;
for (int n=1; n<=m; n++) {
total += n*n;
}
return total;
}
// 1+3+5+...+m;
double expression2 (int &m)
{
double total;
for (int n=1; n<=m; n++) {
if (n%2 != 0) {
total += n;
}
}
// 转换思维 for (int n=1; n<=m; n+=2) total+=n;
return total;
}
// 1+1/2+1/3+1/4+...+1/m
double expression3 (int &m)
{
double total=0;
for (int n=1; n<=m; n++) {
total += 1.0/n; // 注意1.0引发的类型转换
}
return total;
}
// 1-1/2+1/3...+(-1)(m+1)*1/m;
double expression4 (int &m)
{
double total=0;
for (int n=1; n<=m; n++) {
if (n%2 == 0) {
total += -(1.0/n);
} else {
total += (1.0/n);
}
total += n*n;
}
return total;
}
// 1*2*3*...*m;
double expression5 (int &m)
{
double total=1;
for (int n=1; n<=m; n++) {
total *= n;
}
return total;
}
int main()
{
int m;
cout << "输入变量m:";
cin >> m;
cout << "表达式 1 结果为:" << expression1(m) << endl;
cout << "表达式 2 结果为:" << expression2(m) << endl;
cout << "表达式 3 结果为:" << expression3(m) << endl;
cout << "表达式 4 结果为:" << expression4(m) << endl;
cout << "表达式 5 结果为:" << expression5(m) << endl;
return 0;
}
总结
注重基础:
计算除法时,注意等式两边整型浮点型的转换
int n, m;
double total;
...
total += (1.0/n); // 注意1.0引发的类型转换,非常重要!
正负累项加时,记得使用标记变量
int n, m, sign;
sign = 1; // 用sign代表累加项的符号,这是处理一正一负累加的技巧
...
sign *= -1; // sign变号
Markdown编辑 & Latex数学公式
basic tutorial and quick reference 基本教程和快速参考
you can ask quetions here
第一次用Markdown编辑博客,打公式,感觉还不错,值得一试哟~