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

简介: 在C语言中如何打印某个范围中满足某些条件的数(素数,闰年,水仙花数等)
+关注继续查看

前言

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


一.For语句

1.For语句的使用场景

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

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

以下为MSDN中对for的解释

17f5f37d183b47ecbecc5179bb5856e9.png


(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;
}

结果如下

85555b16279c475ebd263402a0242471.png


分析代码

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;
}

运行结果

00c8d2b306aa40aca1cf13cbfdb0c09f.png


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;
}

运行结果

060aeb5d6df94a4c82f494830020d6ae.png


四.总结

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


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


ps:

今天花了太长时间了就先到这吧,过段时间还会补充一下用函数解决该类问题的。


目录
相关文章
|
24天前
|
C语言
【C语言刷题】水仙花数、打印菱形、求和
【C语言刷题】水仙花数、打印菱形、求和
15 0
|
1月前
|
算法 搜索推荐 程序员
C语言第十三练——输入一个正整数,判断这个数是否是素数
C语言第十三练——输入一个正整数,判断这个数是否是素数
38 0
|
2月前
|
C语言
C语言之水仙花数的求解与二维数组结合,使用函数调用
C语言之水仙花数的求解与二维数组结合,使用函数调用
|
4月前
|
C语言
C语言练习---【求素数】(一篇带你掌握素数求解)
C语言练习---【求素数】(一篇带你掌握素数求解)
53 0
C语言练习---【求素数】(一篇带你掌握素数求解)
|
4月前
|
C语言
【C语言初学必看】水仙花数、变种水仙花数背后的知识
【C语言初学必看】水仙花数、变种水仙花数背后的知识
|
5月前
|
C语言
C语言:打印0-100000中的自幂数(水仙花数是其中一种)
思路: 总体思路: (一). 计算 i 的位数: 使用 for循环 产生 0~100000 的数(变量i)
|
5月前
|
C语言
C语言:写一个代码,使用 试除法 打印100~200之间的素数(质数)-2
思路二: 总体思路: 因为偶数除了 2 都不是素数,且题目范围中没有 2 , 所以可以只生成 100~200 之间的奇数,可以排除一半的数字, 效率提升一倍。
|
5月前
|
C语言
C语言实例:求水仙花数(阿姆斯壮数)和回文数(附带求一串数字的位数方法和每一位数字的计算方法)
C语言实例:求水仙花数(阿姆斯壮数)和回文数(附带求一串数字的位数方法和每一位数字的计算方法)
50 0
|
6月前
|
C语言
C语言:输出“水仙花数”
题目:输出100到1000的水仙花数。 背景:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身 1^3 + 5^3+ 3^3 = 153 思路:采用 for 循环,利用数学知识。
50 0
|
6月前
|
C语言
C语言刷题系列——4.使用函数输出水仙花数
C语言刷题系列——4.使用函数输出水仙花数
109 0