5.continue语句(使用continue语句跳出本次循环体直接进入下一轮循环。continue通常要和if语句一起使用。)
二 . do-while循环
三。for循环 用于定长循环(循环次数确定的循环)。还可以用于变长循环。且完全可以取代while循环。
最后说下这课视频仅十分钟貌似少了许多内容……
以下是后来下载了本视频的第九节听完后的笔记,因为这段出现了问题不能看,所以我会尽量把老师讲的每句话都说一下
对于for循环。我们可以用当型循环来描述:
e1;
while(e2){语句 e3;}
其中e1 e2 e3分别对应的是for循环中的相应变量,语句等同于for循环中的循环执行语句.
例如:i=1;
while(i<=10){sum=sum+i;i++}
等价于:for (i=1;i<=10;i++)sum+=i;
例题:编写程序依次写出2到32767之间的所有素数(质数)
分析:2为最小的素数,而32767为常整形中的最大十进制数(现在的编程系统中好像int变量增加至4个字节也就是32位了,最大数远超过了32767)
本程序中我们要完成的任务其实是两个,一是将2到32767之间的所有数字全部列出来,然后对它们挨个分析,依次寻找出素数,并打印出来。
那么我们这里就要引入一个多重循环的思想
对于多重循环我们先看一个程序
对于一般的石英表,是由秒(s)分(m)时(h)三个针组成的,并且最小的s是一直走动,当s转动一周m才动一下.于是我们有以下程序:
for(h=0;h<=23;h++)
for(m=0;m<=59;m++)
for(s=0;s<=59;s++)
主意我们这里出现的缩进的处理,可以看到这是一个三重的for循环,由内层s的循环,中层m的,外层h的组成.
那么根据钟表原理我们理解多重循环:最内层的是一直在进行的,当最内层s进行了59次循环达到59的时候,再循环依次达到60不再满足条件,这时候中层循环开始一次,内层循环再次重新开始。从s=0再度开始.而且内部是一直在变化的,这样外部才能持续变化.
那么对于我们的问题我们的程序如下(前面的编号是为了解释的时候容易一点,不是程序里的东西):
1.main()
2.{
3.int i,n;
4.for(n=2;n<=32767;++n)
5. {for(i=2;n%i;++i);
7. if(i==n)printf("%d\n",n);
8. }
9.}
注意几点:1.本程序用到的是二重循环2.第5行中的n%i等价于n%i!=0 3.第5行中最后的";"相当于空语句,不经行操作,并且内层的循环题就是";"本身
具体的多重循环后面还会讲到的
for循环注意的几点:
1.for循环中部分表达式或者全部的表达式可以省去,但是";"是不可以省的
如果e2省去了那么循环恒为真
for(;;);这是一个空语句的死循环
for(;;)putchar('a')是一个持续输出字符a的死循环
但是下面的循环不会持续经行下去(也是死循环)
for(i=1;;i++)sum=sum+i;它会因为数据太大而溢出终止(整型数据的大小是有限的)
2.for中e1和e2 e3可以是任何有效的表达式或者是逗号表达式
例如:for(i=1,sum=0;i<5;i++,i++)它实际上输出的是5以内的所有奇数
3.for语句中循环体由多条语句组成的时候,那么也要使用复合语句("{}"括起来所有循环语句)
4.也只吃continue和break语句
例如:
main()
{
for(i=1;i<=100;i++)
{if(i==5)continue;
printf("%d\n",i);
if(i==10)break;
}
}本程序输出的是1 2 3 4 6 7 8 9 10(注意转义序列\n这里就不表示出来了)