计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值(不同方法凸显值变换的技巧以及基本迭代算法的演示)

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

#include <stdio.h>
int main() {
	int i;
	double sum = 0;
	for (i = 1; i < 101; i++) {
		if (i % 2 == 0){
			sum = sum - 1.0 / i;
		}
		else {
			sum = sum + 1.0 / i;
		}
	}
	printf("sum=%lf", sum);
	system("pause");
}

编程思路:
首先定义整形变量i,用for循环实现i的变换;再定义双精度浮点数求和;
其次是用if语句判断i是奇数还是偶数,若为奇数则为加1.0/i,否则为减掉1.0/i;最外层用for更新循环体实现i的自增。
最后打印求和后的结果。

因为我们自增数i是正负相间的,因此,我们可以采用两种方法进行简单的值变换;
第一种:用三目运算符,让i%2是否为0来决定i的正负;
第二种:在大的for循环下,i的自增变量是每次加一,而i恰好正负相间,所以我们就可以在i的for循环里面每次进行flag的赋值运算即可。
我的代码如下:(注释掉的部分是可以去取代flag的赋值变化,取而代之的是三目运算符)

#include <stdio.h>

int main() {
	int i;
	double sum = 0, tmp, flag = 1;
	for (i = 1; i < 101; i++) {
		//tmp = 1.0 / i*flag*(i % 2 ? 1 : -1);
		tmp = 1.0 / i*flag;
		sum = sum + tmp;
		flag = flag * -1;
	}
	printf("%lf\n", sum);
	system("pause");
	return 0;
}

本程序的for训话是一个基本的迭代算法,tmp负责单值变换,sum负责统计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值