循环结构: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,我想问问各位大佬这个循环出了什么问题? i的值在变啊
而且你在哪写了判断条件?
嘉岳呀 发表于 2021-10-30 13:09
i的值在变啊
而且你在哪写了判断条件?
哪个的判断条件,是num的,i的,还是flag的 而且num=3的情况i也没有打印出i 而且这个代码好像接近死循环 本帖最后由 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 ++)
试试看呢 嘉岳呀 发表于 2021-10-30 13:17
而且这个代码好像接近死循环
这道题是小甲鱼c语言作业break和continue那一讲的第二题,它要求我要求出10000之内的素数,所以数据量就会大点 嘉岳呀 发表于 2021-10-30 13:16
num=3的情况经过if后不就会接着执行printf语句吗,但是num=3的情况是没有执行printf的 嘉岳呀 发表于 2021-10-30 13:09
i的值在变啊
而且你在哪写了判断条件?
i的值后面是在变的但是我想问的是num=3时i为什么还是2 楼主试试这个代码
#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>
这是我修改的你的代码 jackz007 发表于 2021-10-30 13:27
楼主试试这个代码
编译、运行实况:
是的,你改的那个答案是对的,我想问下我这个代码还有什么问题?因为距离答案还差1 jackz007 发表于 2021-10-30 13:27
楼主试试这个代码
编译、运行实况:
我在for语句内赋值flag是因为我的if语句那将flag的值改了所以才需要重新赋值,是吗 jackz007 发表于 2021-10-30 13:27
楼主试试这个代码
编译、运行实况:
我解决了,谢谢大佬
页:
[1]