C语言中for循环的应用场景和案例分析


思维导图


for循环应用

应用一:使用累加

分数求和

要求:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

步骤:

  • 定义变量sum为0.0,用于存储最后的总和
  • 定义变量flag为1,用于标识当前分数项的符号,初始化为正数
  • 使用一个for循环,从i=1,逐个遍历到i=100
  • 在每一次循环中,计算当前分数项的值,并将其累加到总和sum中
    • 使用1.0 / 分母,是为了确保分数计算的结果为double类型
  • 每次循环结束后,更新flag的值为相反数,切换下一项的符号
#include <stdio.h>

int main()
{
	double sum = 0.0;
	int flag = 1;

	for (int i = 1; i <= 100; i++)
	{
		sum += 1.0 / (flag * i); //1.0 /整数,结果为double类型
		flag = -flag;
	}

	printf("%lf", sum); //使用%lf输出double类型的数据

	return 0;
}

输出结果:0.688172


应用二:使用累乘

计算 n的阶乘

思路:

  • 定义一个变量product,初始化为1,用于存储总乘积的结果
  • 然后通过for循环从1到n的范围内遍历,将每次遍历到的数字与product相乘,并将结果赋值给product
int main()
{
	int n = 10;
	int product = 1;
	//循环计算乘积
	for (int i = 1; i <= n; i++)
	{
		product = product * i;
	}

	printf("%d\n", product);

	return 0;
}

计算 1!+ 2!+ 3!+ …… + 10!

  • 通过一个外层for循环,从1到10的范围内遍历,控制每个数的阶乘求和
  • 然后使用一个内层for循环,从1到i的范围内遍历,将每个数与fac累乘,并将结果赋给fac
  • 最后将每个数的阶乘,累加到sum变量中
int main()
{
	int sum = 0;
	//外层循环控制各数阶乘求和
	for (int i = 1; i <= 10; i++)
	{
		int fac = 1;
		//内层循环控制每个数的阶乘
		for (int j = 1; j <= i; j++)
		{
			fac *= j; //累乘
		}

		//求阶乘之和
		sum += fac; //累加
	}

	printf("%d\n", sum);

	return 0;
}

应用三:使用标记变量

判断一个数是否为素数

要求:写一个代码:打印100~200之间的素数i

前置知识:

  • 偶数不是素数
  • 如果一个数有其他因数(除1和本身外),那至少有一个小于等于其平方根sqrt(i)的因数

思路:试除法

  • 用一个外层for循环,从101开始,遍历到199之间的奇数
  • 设置一个标记变量isPrime,用于标识素数,初始化为素数
  • 用一个内层for循环,用于判断当前数是否为素数
    • 判断标准:如果一个数有其他因数(除1和本身外),那至少有一个小于等于其平方根的因数
  • 如果当前数能给被除尽,即存在其他因数,并改变isPrime的值,表示不是素数,跳出内存循环
  • 判断isPrime是否等于1,如果等于1,表示当前数是素数
#include <stdio.h>
#include <math.h>

int main()
{
	int primeCount = 0; //统计素数个数

	for (int num = 101; num <= 199; num += 2) //素数不可能为偶数
	{
		int isPrime = 1; //首先假设这个数是素数
		//判断是否为素数
		for (int divisor = 2; divisor <= sqrt(num); divisor++)
		{
			if (num % divisor == 0) 
				isPrime = 0;
			}
		}

        //循环结束:
        //情况1:遇到素数,提前结束循环
        //情况2:没有遇到素数,正常结束循环
		//检查标记
		if (isPrime == 1) //如果等于1,说明是情况2
		{
			printf("%d ", num);
			primeCount++;
		}
	}
	
	printf("\nprimeCount:%d\n", primeCount);

	return 0;
}

输出结果:

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
primeCount: 21

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值