在C语言中如何打印某个范围中满足某些条件的数(素数,闰年,水仙花数等)

由于在代码实现的过程中会大量使用for语句,所以我们首先介绍一下for语句的使用方法.

在这里插入图片描述

君兮_的个人主页

勤时当勉励 岁月不待人

C/C++ 游戏开发



前言

>在我们编程中,经常会遇到这样一个问题,要求我们编写一个程序来筛选某个范围里某些特殊的数。下面让我们用素数的例子来讲解一下几种具体的实现方法

一.For语句

1.For语句的使用场景

  • 在c语言中,for语句通常适用于循环次数已知的场景。其初始化通常是一个赋值语句,一般用于循环控制变化量的初始化,当然也可以给其他变量初始化。

2.具体for语句的基本用法

以下为MSDN中对for的解释

  • (1) for语句括号中三个部分均是语句,用分号’;'隔开,而且三个语句均可以省略,可以省略部分或者全部。
  • (2) for语句中括号中的三个部分分别代表 <初始化>,<条件表达式>,<控制变量增量>

举一个简单的例子:

#include<stdio.h>
int main()
{
	int i;
	for (i = 1; i < 100; i++)
	{
		printf("%d ", i);
	}
	return 0;
}
  • "i=1"即为循环开始时对i的初始化,"i<100"是for循环进行的条件,"i++"是控制变量的增量.

需要注意的是:
如果在上面你给i初始化为0,即"int i=0;“,而在下面循环中,第一个条件你又将i初始化为"1”,那么此时,for循环会按着for括号(即i=1)里面的初始化运行


二.打印素数

1.什么是素数

  • 素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

2.具体实现方法

1)基本方法

利用for循环。
下面我们来用代码具体实现一下。

//打印从100~200之间的素数
int main()
{
	int n, i;
	

	for (n = 100; n <= 200; n++)
	{
		for (i = 2; i < n; i++)
		{
			if (n % i == 0)
			{
				break;
			}

		}
		if (n==i) //被1和它自身整除是素数
		{
			printf("%d ",n);

		}

	
	}
	return 0;
}
  • 结果如下

在这里插入图片描述

分析代码
  • 1*使用for循环嵌套的方式实现双层循环,其中第一层循环是让n自己从100增加到200,第二层循环是让i从2开始增加到n。
  • 2*其中第一层循环的目的比较简单不再缀叙,第二层的循环的目的是配合里面的if语句达到筛选的目的。当n%i时如果等于0,则证明n除了1和它本身以外还有其他因数,此时通过break让循环停止。而当程序遍历了2-n都没有发现其他因数,退出第二层循环,此时i应该等于n。用if判断(n==i)条件满足时,即可证明此时的n为素数。

三.其他例子

通过以上例子,我们可以发现,其实只要改变for语句中的条件,那么除了素数,我们还可以随心所欲的打印其他范围中满足其他条件的特殊值

1.打印闰年

  • 代码如下
//打印1000-2000年之间的闰年
//闰年是公历中的名词。闰年分为普通闰年和世纪闰年。
//普通闰年 : 公历年份是4的倍数的,且不是100的倍数,为普通闰年。(如2004年就是闰年);
//世纪闰年 : 公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年)
#include <stdio.h>
int main()
{
	int year;
	int a = 0;
	int b = 0;
	int c = 0;
	
	for (year = 1000; year < 2001; year++)//年份从1000增加到2000
	{
		if (year % 4 == 0 && year % 100 != 0)//普通闰年
		{
			printf("%d ", year);
			a++;
		}
		if (year % 400 == 0)//世纪闰年
		{
			printf("%d", year);
			b++;
		}
	}
	c = a + b;//所有闰年之和
	printf("\n");//换行
	printf("闰年共%d个", c);
	return 0;
}
  • 运行结果

在这里插入图片描述

2.打印水仙花数

  • 代码如下

//输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。
//例如,153是一个水仙花数,因为153 = 1³ + 5³+3³
#include<stdio.h>
int main()
{
	printf("输出所有的水仙花数:\n");
	int i, a, b, c;
	for (i = 100; i <= 999; i++) //整数的取值范围
	{
		int a = i % 10;//个位 
		int b = (i / 10) % 10;//十位 
		int c = i / 100;//百位

		if (i == a * a * a + b * b * b + c * c * c) //判断各个位的数字立方之和是否等于该数
			printf("%d\n", i);
	}

	return 0;
}

  • 运行结果

在这里插入图片描述

四.总结

好了,以上就是今天要介绍的所有内容了,今天通过具体例子素数介绍了for语句的用法以及怎样打印某个范围中的某些满足条件的数,比如闰年,水仙花数(闰年,水仙花数的解释及解题思路都放在代码里)。还有其他特殊的数各位都可以通过以上内容的思路自己具体去实现哦。

因个人水平不足导致文章中出现的错误欢迎在评论区或者私信我指出,如果有什么问题想要与我讨论也欢迎评论或者私信我哦,博主看到后会第一时间回复的。

  • ps:
  • 今天花了太长时间了就先到这吧,过段时间还会补充一下用函数解决该类问题的。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君兮_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值