目前主要分为三个专栏,后续还会添加:
感谢阅读!
初来乍到,如有错误请指出,感谢!
描述
牛牛准备继续进阶,计算更难的数列
输入一个整数n,计算 1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...((-1)^(n-1))*(2n-1))的值
输入描述:
输入一个整数
输出描述:
输出一个浮点数,保留3位小数
题目解析 :
数列的公式是:
1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...((-1)^(n-1))*(2n-1))
这个数列的每一项可以看作是一个分数,分子是1,分母是一个由奇数构成的序列,奇数的符号取决于项的位置是奇数还是偶数。具体来说:
- 当项的位置是奇数时,分母是正的奇数。
- 当项的位置是偶数时,分母是负的奇数。
因此,第k项可以表示为:
代码 1 :
别被难住了,分母看上去很长的样子,但如果我们仔细看,就会发现是 1-1/2+1/3这样,既然如此那代码就很简单了。
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
double sum = 0;
double q = 2.0;
scanf("%d",&i);
for(double j = 1;j<=i;j++)
{
if(fmod(j, q) !=0)
{
sum += (1/j);
}
else
sum -= (1/j);
}
printf("%.3lf\n",sum);
return 0;
}
代码 2 :
//仔细观察不难发现分母其实是有规律的,我们不妨设一个变量来表示不断变化的分母
#include<stdio.h>
int main()
{
int n,denominator=0,i;
float sum=0;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
i%2==0?(denominator-=2*i-1):(denominator+=2*i-1);
sum+=1.0/denominator;
}
printf("%.3f\n",sum);
return 0;
}
代码 3 :
#include <stdio.h>
// 函数用于计算数列的第k项
double sequence_term(int k) {
// 根据k的奇偶性,交替使用正负号
double sign = (k % 2 == 0) ? 1 : -1;
// 计算第k项的分母,即(2k-1)
double denominator = sign * (2 * k - 1);
// 返回第k项的值,分子是1
return 1.0 / denominator;
}
// 函数用于计算数列的和
double calculate_sequence_sum(int n) {
double sum = 0.0; // 用于累加数列的和
for (int k = 1; k <= n; ++k) {
// 计算第k项,并累加到总和中
sum += sequence_term(k);
}
return sum;
}
int main() {
int n;
// 读取用户输入的整数n
printf("请输入一个整数n:");
scanf("%d", &n);
// 计算数列的和
double sum = calculate_sequence_sum(n);
// 输出结果,保留三位小数
printf("数列的和为:%.3f\n", sum);
return 0; // 程序结束
}
代码 4 :
#include<stdio.h> // 引入标准输入输出库
#include<math.h> // 引入数学库,这里实际上不需要math.h
int main() {
int i = 0; // 声明一个整型变量i,用于存储项数
double sum = 0; // 声明一个双精度浮点数变量sum,用于累加数列的和
double q = 2.0; // 声明一个双精度浮点数变量q,实际上这里q的值应该是2,不需要是浮点数
scanf("%d", &i); // 从标准输入读取一个整数,存储在变量i中
for(double j = 1; j <= i; j++) { // 开始一个for循环,从1迭代到i
// 修正逻辑:直接检查j是否为奇数,而不是使用fmod
if((int)j % 2 != 0) { // 如果j是奇数
sum += 1 / j; // 累加正项
} else { // 如果j是偶数
sum -= 1 / j; // 累加负项
}
}
printf("%.3lf\n", sum); // 打印结果,保留三位小数
return 0; // 程序执行成功,返回0
}
知识点:pow函数
详见这篇文章
数列和序列:理解数列的概念,即一系列按照一定规律排列的数。
数学公式解析:解析给定的数学公式,并理解其数学意义。
条件表达式:使用条件表达式来确定数列中各项的符号,这涉及到奇偶性判断。
循环结构:使用循环结构来遍历数列的每一项,计算其值。
函数调用:在C语言中,使用 pow
函数来计算幂运算。
类型转换:在C语言中,进行类型转换以确保数学表达式中运算的准确性,例如,确保在进行除法运算时,至少有一个操作数是 double
类型。
输入输出操作:使用 scanf
进行输入操作,使用 printf
进行输出操作。
浮点数精度:处理浮点数时,理解精度问题,以及如何使用 %.3f
格式化输出来保留三位小数。
算法逻辑:设计算法来计算数列的和,这需要对数列的规律有清晰的认识。
代码结构:理解C语言的基本结构,包括函数定义、循环、条件语句等。
数学规律:识别并利用数学规律简化计算过程,例如,通过观察可以发现数列的符号交替出现,分母是递增的奇数。