查看: 344|回复: 2

[原创图文] 逆向学习第6天_分支循环语句练习

[复制链接]

15

主题

28

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
198
荣耀
0
rank
0
违规
0
发表于 2020-10-16 21:56:25 | 显示全部楼层 |阅读模式
本帖最后由 Guido 于 2020-10-17 16:55 编辑

1.打印2到100以内的所有素数。
#include<stdio.h>
//打印2到100以内的所有素数
//首先判断是不是偶数,是偶数,则不是素数
//然后循环到n/2+1即可,计算到一半就可以判断其到底是不是素数,假如判断11,只需要依次循环n是否能整除2 3 4 5 6 即可
//每次循环判断可以加2,能减少循环次数,因为你前面已经判断过其是奇数还是偶数了,因此加2即可
int main()
{
        int n;//2循环到100
        int i;//依次拿n%i
        int sum=0;//存储素数有多少个
                for (n=2;n<100;n++)
        {
                if (n % 2 == 0)
                        ;//说明是偶数,是偶数就不是素数
                else     //从奇数中继续筛选谁为素数,这时候就需要循环了
                {
                        //int m = n / 2 + 1;//m做为中间的数
                        i = 3;//i之间从3开始,因为刚才已经判断过了2不是素数
                        while (i<=n)
                        {
                                if (n%i == 0)
                                        break;
                                i+=2;
                        }
                        if (n == i)
                        {
                                printf("%d  ", n);
                                sum++;
                        }
                }
        }
                printf("\n共有%d个素数", sum);
        return 0;
}

2.输出9*9口诀,共9行9列,i控制行,j控制列。
#include<stdio.h>
//输出9*9口诀,共9行9列,i控制行,j控制列。
int main()
{
        int i = 0;
        for (i; i < 9; i++)//先来个控制9行的循环
        {
                int j = 0;
                int k = 1;
                while (j<i+1 )//在来个每行的控制
                {
                        printf("%dx%d=%d\t",k, i + 1, (k)*(i + 1));
                        k++;
                        j++;
                }
                printf("\n");
        }
        return 0;
}

3.判断101-200之间有多少个素数,并输出所有素数及素数的个数。
#include<stdio.h>
//打印101到200以内的所有素数
//首先判断是不是偶数,是偶数,则不是素数
//然后循环到n/2+1即可,计算到一半就可以判断其到底是不是素数,假如判断11,只需要依次循环n是否能整除2 3 4 5 6 即可
//每次循环判断可以加2,能减少循环次数,因为你前面已经判断过其是奇数还是偶数了,因此加2即可
int main()
{
        int n;
        int i;//依次拿n%i
        int sum=0;//存储素数有多少个
                for (n=101;n<200;n++)
        {
                if (n % 2 == 0)
                        ;//说明是偶数,是偶数就不是素数
                else     //从奇数中继续筛选谁为素数,这时候就需要循环了
                {
                        //int m = n / 2 + 1;//m做为中间的数
                        i = 3;//i之间从3开始,因为刚才已经判断过了2不是素数
                        while (i<=n)
                        {
                                if (n%i == 0)
                                        break;
                                i+=2;
                        }
                        if (n == i)
                        {
                                printf("%d  ", n);
                                sum++;
                        }
                }
        }
                printf("\n共有%d个素数", sum);
        return 0;
}

4.打印100以上总共85个素数。
#include<stdio.h>
#include <math.h>
//打印101到200以内的所有素数
//首先判断是不是偶数,是偶数,则不是素数
//然后循环到n/2+1即可,计算到一半就可以判断其到底是不是素数,假如判断11,只需要依次循环n是否能整除2 3 4 5 6 即可
//每次循环判断可以加2,能减少循环次数,因为你前面已经判断过其是奇数还是偶数了,因此加2即可
int main()
{
        int n;//2循环到100
        int i;//依次拿n%i
        int sum = 0;//存储素数有多少个
        for (n = 101; sum<85; n++)
        {
                if (n % 2 == 0)
                        ;//说明是偶数,是偶数就不是素数
                else     //从奇数中继续筛选谁为素数,这时候就需要循环了
                {
                        int m = sqrt(n) + 1;//m做为中间的数         若换为sqrt效率更高
                        i = 3;//i之间从3开始,因为刚才已经判断过了2不是素数
                        while (i < m)//
                        {
                                if (n%i == 0)
                                        break;
                                i += 2;
                        }
                        if (i >= m)
                        {
                                printf("%d  ", n);
                                sum++;
                        }
                }
        }
        printf("\n共有%d个素数", sum);
        return 0;
}

5.打印7行7列菱形一角。
#include<stdio.h>
//*
//**
//***
//****
//*****
//******
//*******

//一看是两层,说明要嵌套循环了,外层用for,内层用while结构会清晰一些。
int main()
{
        int i=0;
        for (i; i < 7; i++)
        {
                int j = 0;
                while (j < i+1)
                {
                        printf("*");
                        j++;
                }
                printf("\n");
        }
        return 0;
}

6.打印7列13行的菱形两角。
#include<stdio.h>
//*
//**
//***
//****
//*****
//******
//*******
//******
//*****
//****
//***
//**
//*

//之间利用上一题,在写一个for,依次打印即可
int main()
{
        int i = 0;
        for (i; i < 7; i++)
        {
                int j = 0;
                while (j < i + 1)
                {
                        printf("*");
                        j++;
                }
                printf("\n");
        }
        i = 0;
        for (i; i < 7; i++)
        {
                int j = 0;
                while (j < 7-i)
                {
                        printf("*");
                        j++;
                }
                printf("\n");
        }

        return 0;
}

7.打印13行13列完整菱形。
#include<stdio.h>
//      *           6个空格  
//     ***                        5个空格
//    *****                        4个空格
//   *******                        
//  *********
// ***********
//*************                
// ***********      1个空格  6+5个*
//  *********                2个空格  5+4
//   *******                3        4+3
//    *****                        4             3+2
//     ***                        5                 2+1        
//      *                        6                 1+0

int main()
{
        int i = 0;
        for (i; i < 7; i++)
        {
                int j = 0;
                while (j < 6-i)
                {
                        printf(" ");
                        j++;
                }
                while (j <7)
                {
                        printf("*");
                        j++;
                }
                j = 0;
                while (j < i)
                {
                        printf("*");
                        ++j;
                }
                printf("\n");
        }
        for (i = 0; i < 6; i++)
        {
                int j = 0;
                while (j < i+1)
                {
                        printf(" ");
                        j++;
                }
                while (j<7)
                {
                        printf("*");
                        j++;
                }
                j = 0;
                while (j<5-i)
                {
                        printf("*");
                        j++;
                }
                printf("\n");
        }
        return 0;
}
8.总结
一定得多练习,突然发现了调试的乐趣。在不断调试的过程中,一步一步逼近结果,这个过程真的很让人兴奋!



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
发表于 2020-10-16 22:06:48 | 显示全部楼层
加油,坚持!

点评

继续奋斗奋斗  详情 回复 发表于 2020-10-17 20:54
论坛交流群:672619046
回复 打印

使用道具 举报

15

主题

28

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
198
荣耀
0
rank
0
违规
0
 楼主| 发表于 2020-10-17 20:54:10 | 显示全部楼层

继续奋斗奋斗
学逆向论坛-免费的逆向学习论坛
微信公众号
快速回复 返回顶部 返回列表