Guido 发表于 2020-10-16 21:56:25

逆向学习第6天_分支循环语句练习

本帖最后由 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.总结
一定得多练习,突然发现了调试的乐趣。在不断调试的过程中,一步一步逼近结果,这个过程真的很让人兴奋!



roger 发表于 2020-10-16 22:06:48

加油,坚持!

Guido 发表于 2020-10-17 20:54:10

roger 发表于 2020-10-16 22:06
加油,坚持!

{:95:}继续奋斗奋斗
页: [1]
查看完整版本: 逆向学习第6天_分支循环语句练习