注册 登录
编程论坛 C++教室

C++ 新手 下面这个程序正确 但不懂第二个 IF 的逻辑 我认为第二个 if 等于 else 但实际上不等于

於晓琪123 发布于 2014-11-04 22:20, 452 次点击
#include <iostream>
#include <cmath>
using namespace std;
int main()
{int n=2,i,k,sum=0;
for(n;n<1000;n++)
{if(n>1)
{for(i=2;i<=int(sqrt(n));i++)
{k=n%i;
if(k==0)
{break;}
}
if(k!=0)      
{sum=sum+n;
cout<<n<<" ";
}
}
}
cout<<endl;
cout<<"sum"<<sum<<endl;
return 0;
}
8 回复
#2
於晓琪1232014-11-04 22:22
这个地方第二个if(K!=0)
然后就sum+=N 了  那不就是没有走循环直接下来了吗?
 求大神解说一下 为什么
#3
stop12042014-11-05 08:19
if (k == 0)
{
    break;
}


这个就已经跳出for循环了,而不是跳出if的判断语句, 然后跳出去就是直接到for循环的结尾.
你的第二个for循环的结尾后一句就是 if (k != 0)

其实你的程序是有经过循环的.你在每个地方加个cout输出一个信息提示,  运行你的程序你就知道了

[ 本帖最后由 stop1204 于 2014-11-5 08:28 编辑 ]
#4
於晓琪1232014-11-05 16:33
回复 3 楼 stop1204
是不是就是说第二个for只进行第一个if的循环判断,等跳出循环之后才进行第二个if的判断。  ( 换而言之,是不是for语句  只进行for下面一个if的判断循环  等跳出循环之后才进行第一个if之后的if 或者其他的东西
#5
於晓琪1232014-11-05 16:43
回复 3 楼 stop1204
不对  我刚刚简化了一下那个程序 是不是for循环是循环它括号里面的跳出去了才去括号外面  是吧...
#6
於晓琪1232014-11-05 17:05
回复 2 楼 於晓琪 123
我刚刚按刚刚的对if for 及大括号的理解  编了个这个
{int a,b;
cin>>a;
for(b=2;b<a;b++)
{if(a%b==0)
cout<<"notprime"<<endl;
break;
}
if(a%b!=0)
cout<<"isprime"<<endl;
return 0;
}

判断素数的    还是有问题  能请教一下  到底哪里出问题了嘛?
#7
stop12042014-11-05 17:40
程序代码:

int main()
{
    {
        int a=5, b;
        cin >> a;
        for (b = 2; b < a; b++)   //如果b<a 就跳出循环,否则进如循环
        {
            if (a % b == 0)
                cout << "notprime" << endl;        //就只有这条语句是属于if
            break;                    //不管你if怎么判断.for循环只执行一次,
        }

        if (a % b != 0)
            cout << "isprime" << endl;
        return 0;
    }
}

//当你输入4时候将输出 notprime  输入5则为isprime

#8
stop12042014-11-05 17:42
回复 5 楼 於晓琪 123
不是,
for循环的第二个语句结果为false就跳出循环, 或者 for循环里面存在break
或者 存在goto . 这些都是可以跳出循环的
#9
於晓琪1232014-11-05 22:28
回复 7 楼 stop1204
恩恩  终于懂了 谢谢
1