bild 发表于 2021-10-30 12:46:19

循环结构:i的值无变化

#include<stdio.h>
int main()
{
        int i,num,sum=0;
        _Bool flag=1;
        for(num=3;num<=10000;num++)
        {
                printf("n=%2d",num);
                for(i=2;i<=num/2;i++)
                {
                        printf("i=%2d",i);
                        if(num%i==0)
                        {
                                flag=0;
                                break;
                        }
                        printf("flag=%d",flag);
                }
                if(flag)
                {
                        sum++;
                }
               
        }

        printf("10000以内共有%d个素数",sum);
}
我将每个循环的num,i和flag的值打印出来检查,我虽然打了i++,但是每个i都是2,完全没有变过,而且num=3的情况i也没有打印出i,我想问问各位大佬这个循环出了什么问题?

嘉岳呀 发表于 2021-10-30 13:09:00

i的值在变啊

而且你在哪写了判断条件?

bild 发表于 2021-10-30 13:15:50

嘉岳呀 发表于 2021-10-30 13:09
i的值在变啊

而且你在哪写了判断条件?

哪个的判断条件,是num的,i的,还是flag的

嘉岳呀 发表于 2021-10-30 13:16:32

而且num=3的情况i也没有打印出i

嘉岳呀 发表于 2021-10-30 13:17:05

而且这个代码好像接近死循环

jackz007 发表于 2021-10-30 13:17:59

本帖最后由 jackz007 于 2021-10-30 13:19 编辑

      每个 num 都必须对 flag 进行初始化。
      第9行,也就是这一句
                for(i=2;i<=num/2;i++)
      改为:
                for(flag = 1 , i = 2 ; i <= num / 2 ; i ++)
      试试看呢

bild 发表于 2021-10-30 13:19:58

嘉岳呀 发表于 2021-10-30 13:17
而且这个代码好像接近死循环

这道题是小甲鱼c语言作业break和continue那一讲的第二题,它要求我要求出10000之内的素数,所以数据量就会大点

bild 发表于 2021-10-30 13:21:51

嘉岳呀 发表于 2021-10-30 13:16


num=3的情况经过if后不就会接着执行printf语句吗,但是num=3的情况是没有执行printf的

bild 发表于 2021-10-30 13:23:32

嘉岳呀 发表于 2021-10-30 13:09
i的值在变啊

而且你在哪写了判断条件?

i的值后面是在变的但是我想问的是num=3时i为什么还是2

jackz007 发表于 2021-10-30 13:27:23

      楼主试试这个代码
#include<stdio.h>
int main()
{
      int i,num,sum=0 ;
      int flag=1      ;
      for(sum =0 , num = 3 ; num <= 10000 ; num ++){
                for(flag = 1 , i = 2 ; i <= num /2 ; i ++) {
                        if(num % i == 0) {
                              flag = 0 ;
                              break    ;
                        }
                }
                if(flag) sum ++          ;
      }
      printf("10000以内共有%d个素数",sum);
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
10000以内共有1228个素数
D:\00.Excise\C>
      这是我修改的你的代码

bild 发表于 2021-10-30 13:30:52

jackz007 发表于 2021-10-30 13:27
楼主试试这个代码

      编译、运行实况:


是的,你改的那个答案是对的,我想问下我这个代码还有什么问题?因为距离答案还差1

bild 发表于 2021-10-30 13:33:29

jackz007 发表于 2021-10-30 13:27
楼主试试这个代码

      编译、运行实况:


我在for语句内赋值flag是因为我的if语句那将flag的值改了所以才需要重新赋值,是吗

bild 发表于 2021-10-30 13:35:42

jackz007 发表于 2021-10-30 13:27
楼主试试这个代码

      编译、运行实况:


我解决了,谢谢大佬
页: [1]
查看完整版本: 循环结构:i的值无变化