for循环中的循环判断条件部分的变量确定原理

img

img
for循环里的循环判断条件部分的变量是可以和初始化值得变量不同的吗?此处里的p是没有办法确定范围的,但是在范围的地方写上N>0,再去执行就成功了,是什么原理呢?

可以。
for循环里用;分成了三段,不要求必须用同一个变量。
而且中间那段不叫“范围”,应该叫“循环条件”,是for循环能够继续执行下去的条件,并不是初始化变量的范围。
再考考你,下面代码能正常执行吗

int p=0;
for(;N>0;p++)
{
    a[p]=N%10;
    N/=10;
    sum+=a[p];
}

这样呢:


for (int p=0; ;p++)
{
    a[p]=N%10;
    N/=10;
    sum+=a[p];
    if (N>0)break;
}

给你来个极端的

#include <iostream>
using namespace std;
int main()
{
    int p,N,a[10],sum=0;
    cin>>N;
    p=0;
    for(;;)
    {
        a[p]=N%10;
        N/=10;
        sum+=a[p];
        p++;
        if (N<=0)break;
    }
    cout<<p<<" "<<sum;
    return 0;
}

for(表达式1;表达式2;表达式3)
{
循环体
}
执行顺序:
表达式1

表达式2值是否为True?成立则执行循环体,否则退出循环
循环体
表达式3

表达式2值是否为True?成立则执行循环体,否则退出循环
循环体
表达式3

。。。

可以看出来,表达式1只执行1次,所以通常用来对循环中的变量进行初始化。
表达式2在循环体前执行,所以通常用来进行判断是否继续循环
表达式3在循环体后执行,所以通常用来改变循环体中的变量
从语法上讲,这3个表达式之间可以没有任何关系。但一般来说,为了增加可读性,大家都写成for(int i;i<100;i++)这种形式,好读易懂嘛

其实,for循环和while循环可以互换。一般来说,明确知道要循环多少次的,用for循环。不知道要循环多少次的,用while循环。
比如这个程序,可以这样写:

#include <iostream>
using namespace std;
int main()
{
    int p,N,a[10],sum=0;
    cin>>N;
    p=0;
    while(N>0)
    {
        a[p]=N%10;
        N/=10;
        sum+=a[p];
        p++;
    }
    cout<<p<<" "<<sum;
    return 0;
}


for(这里可以定义变量[可有可无,但只能在循环内使用];这里写循环条件;这里写对变量的操作[可有可无])