c语言100题100-200中的素数(附易错事项

法一:错误例子对比理解int pot位置对于函数的影响

#include<stdio.h>

int main()
{
    /*思路如下,
    1,先将100-200运出出来 要运用到for循环,
    2,然后判断是否为素数,具体措施就是分别除自身和1以外小于自身的数看余数是否为零,若输入i则除2到i-1
    3,将2到i-1运行出来 还要运用到for循环*/

    int pot = 1;//添加变量的原因在+号处//注意此处
    for (int i = 100; i <= 200; i++)//100-200的罗列
    {
        for (int j = 2; j < i; j++)//2到i-1的罗列,接下来要判断是否能整除运用到if语句;
        {
            //before  :if (i % j == 0);
            //          break;
            //+难点是如何表达当j为素数时,让其被打印在屏幕上,这里运用到一个标量标记法;
            //+即定义一个变量值并在if语句中标记一下,如果变量值由定义值变为了标记值则说明if语句为真且执行了
            //+若变量值未发生改变则说明if条件为满足也说明当前的i是素数

            if (i % j == 0)//now
            {
                pot = 0;//如果可以整除将pot值标记为0
                break;
            }
    
        }
        if (pot==1)
            printf("%d ",i);
        


    }


    return 0;
}

运行后发现结果无法正常运行出

,这是因为定义变量的位置出错,int j=1应该在第一个for循环内部

#include<stdio.h>

int main()
{
    /*思路如下,
    1,先将100-200运出出来 要运用到for循环,
    2,然后判断是否为素数,具体措施就是分别除自身和1以外小于自身的数看余数是否为零,若输入i则除2到i-1
    3,将2到i-1运行出来 还要运用到for循环*/

    
    for (int i = 100; i <= 200; i++)//100-200的罗列
    {

        int pot = 1;//假设i为素数
        for (int j = 2; j < i; j++)//2到i-1的罗列,接下来要判断是否能整除运用到if语句;
        {
            //before  :if (i % j == 0);
            //          break;
            //+难点是如何表达当j为素数时,让其被打印在屏幕上,这里运用到一个标量标记法;
            //+即定义一个变量值并在if语句中标记一下,如果变量值由定义值变为了标记值则说明if语句为真且执行了
            //+若变量值未发生改变则说明if条件为满足也说明当前的i是素数

            if (i % j == 0)//now
            {
                pot = 0;//如果可以整除将pot值标记为0
                break;
            }
    
        }
        if (pot==1)
            printf("%d ",i);
        


    }


    return 0;
}

法二:减少运行代码占用内存

从数的组成入手,分为奇数偶数题目要找出100-200中的素数已知偶数不是素数所以还可以这样写

#include <stdio.h>

int main()

{

for (int i = 101;i<200;i+=2)//这样直接减少了接近一半的内存占用

{

  int j = 2;

 int pot = 1;//假设i是素数

   for(j = 2;j<i;j++)

     {

        if(i%j==0)
         {

            pot = 0;

            break;

           }


     }

     if(pot==1)

      {

        printf(”%d“,i);

       }

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值