书P50
什么是 for 语句: 一般形式:
for([表达式1];[表达式2];[表达式 3])语句
执行流程:
解表达式1
解表达式2,若真(非 0):
执行语句a【for语句中指定的内嵌语句(即最后的语句)】
解(执行)表达式3
转回解表达式2,继续循环。
若假(0):结束循环
for语句
最简单、最容易理解的使用形式:
for(<循环变量赋初值>;<循环条件>;<循环变量增量>)语句
此处,
表达式1:赋初值;
表达式2:判断退出循环;
表达式3:每次循环中做的改变;
例:求∑1~100
根据书上P50的程序示例,我们即可编写出以下程序:
#include<iostream>
using namespace std;
int main()
{
int i,sum=0;
for (i = 1; i <= 100; i++)
sum = sum + i;
cout << sum << endl << i << endl;
}
结果:
过程中遇到的问题:(习惯性的忘记(每一位变量都要)赋初值)like:
#include<iostream>
using namespace std;
int main()
{
int i,sum;
for (i = 1; i <= 100; i++)
sum = sum + i;
cout << sum << endl << i << endl;
}
结果:
并且,对于该(这个)程序,我们把 i++改成 ++i并不影响结果:
#include<iostream>
using namespace std;
int main()
{
int i,sum=0;
for (i = 1; i <= 100; ++i)
sum = sum + i;
cout << sum << endl << i << endl;
}
其流程图如下:
根据书上P50的程序所示,该程序等价 like:
#include<iostream>
using namespace std;
int main()
{
int i, sum = 0;
i = 1;
while (i <= 100)
{
sum = sum + i;
i++;
}
cout << sum << endl << i << endl;
}
for语句的一般形式等价于如下形式的 while循环:
[表达式 1];
While( [表达式2] )
{
语句;
[表达式 3];
}
特殊情况: for (;;) 语句
相当于: while (1) 语句
具体实际操作:
例1:
#include<iostream>
using namespace std;
int main()
{
int i=1,sum=0;
for (;;)
sum=sum+i;
cout << sum << endl;
}
结果:
哪里出错了?
for后面的语句最后(忘了这里是复合语句)忘了加大(花)括号“{ }”这样的话程序永远在
sum=sum+i; 语句内部循环,永远不会输出cout
应改为:
#include<iostream>
using namespace std;
int main()
{
int i=1,sum=0;
for (;;)
{
sum = sum + i;
cout << sum << endl;
}
}
当然,这是一个死循环的程序,只要将内存够大,这个程序永远不会终止。
例2:
而且为了区别在循环内和在循环外,我们单独给 “i++”单个语句外面加上花括号:
#include<iostream>
using namespace std;
int main()
{
int i = 0;
for (;;)
{
i++;
}
cout << i << endl;
}
结果却和上面一样:
同时,这个程序等效于:(这两个程序效果一样)
#include<iostream>
using namespace std;
int main()
{
int i = 0;
for (;;)
i++;
cout << i << endl;
}
其实前面的例1也已经证明了下面下列结论:
for语句后面如果有多个语句(即后面为复合语句)
如果我们把它们用花括号括起来
那么就把它们(所有的复合语句作为一个整体)看作(“for([表达式1];[表达式2];[表达式 3])语句”)循环内最后的那个语句模块。
如果我们不把它们用花括号括起来
那么程序默认只把后面的第一句作为循环内最后的那个语句模块
后面的其他语句一律看作循环外的语句,即只有当循环结束后才会开始执行后面的语句
同理,这个程序一直在内部死循环,也就是说他循环的过程永远不会结束,所以后面的cout语句永远都等不到他的输出到来,所以我们应该把他的输出和循环放在一起。所以,这里应改为:
#include<iostream>
using namespace std;
int main()
{
int i = 0;
for (;;)
{
i++;
cout << i << endl;
}
}
当然,结果也是不断地输出死循环,只不过(但是)这里我们至少有了(看得到)输出。