C语言中的循环语句,分为while语句和for语句两类分支语句。
a)所有while语句能表达的功能for语句全都能实现,反之亦然。
while层次清晰,for方便。(老外多爱用while,中国人多爱用for)
b)每个循环语句都由三个框架区域构成:
a)初始化区,条件判断区,递增区
一)while循环语句:
初始化区;
while(条件判断区)
{
核心运算区;
。。。。。
递增区;
}
例如:求60到100之间所有数字的加和。
int main()
{
int i = 60,sum = 0;
while(i<=100)
{
sum += i;
++i;
}
printf("结果是:%d\n",sum);
return 0;
}
二)do..while循环语句:特点是先执行再判断,核心运算区无条件地执行一次。
初始化区;
do
{
核心运算区;
。。。。。
递增区;
} while(条件判断区);
注意语句尾部要带有分号;
int main()
{
int sum=0,i = 6;
do
{
sum=sum+i;
++i;
}while(i<=10);
printf("结果是:%d\n",sum);
return 0;
}
三)for循环语句:完全可以和while语句或do..while语句互相替代。
a)for语句相当于将while语句的三个区域,用分号间隔全放在循环头部的小括号里:
for(初始化区;条件判断区;递增区)
{
核心运算区;
}
b)递增区是在每次循环结束时执行:
第一次进入循环之前,递增区并不执行
c)当条件区为空时代表无条件循环:
例如:for(初始化区;;递增区)
等价于for(初始化区;1;递增区)
d)for的括号内3个区全都可为以空:
初始化区;
for(;;)
{
核心运算区;递增区;
}
例如:求60到100之间所有数字的加和。
int main()
{
int i,sum;
for(i=60,sum=0;i<=100;++i)
{
sum += i;
}
printf("结果是:%d\n",sum);
return 0;
}
*************************************************************************************
小结
一)条件分支语句包括:if语句和switch语句两大类。
a)if语句有3种形式:
单分支条件语句、双分支条件语句和多分支条件语句。
b)switch语句:开关语句,只能对小范围的数值型开关管理。
if语句能实现所有switch语句的功能,但是switch语句不能实现所有if语句能表达的功能。
二)循环语句包括:while语句和for语句两大类。
a)while语句:
初始化区,条件判断区,递增区三个条件框架区独立分布,层次清晰。
b)for语句:
初始化区,条件判断区,递增区三个条件框架区混合在语句头部,方便灵活。
三)while和for语句对比:
a)while语句还包括一种do..while格式,当第一次必须无条件执行时使用。
b)所有while语句能表达的功能for语句全都能实现,反之亦然。
四)循环语句中的三个重要关键字:break,continue,return
a)break是结束整个循环体:
例如:找出20到50之间,第一个19的整数倍的数字。
int main()
{
int i = 20;
while(i<50)
{
if(i%19==0)
break;
++i;
}
printf("i=%d\n",i);
return 0;
}
实际上凡是break语句的条件,都可以提取到while语句的条件区。
但是break语句使循环体看上去更清晰,便于阅读和代码维护。
等价写法:
int main()
{
int i = 20;
while(i<50 && i%19!=0)
++i;
printf("i=%d\n",i);
return 0;
}
b)return是比break还强的中断:
直接退出中断该函数,return后面所有语句,包括循环体之外的语句全都不执行。
例如:找出20到50之间,第一个19的整数倍的数字。
int main()
{
int i = 20;
while(i<50)
{
if(i%19==0)
{
printf("i=%d\n",i);
return 1;
}
++i;
}
printf("很抱歉,没有找到匹配的数字\n",i);
return 0;
}
直接跳出函数,连循环体外的printf函数也未被执行。
c)continue是结束本次循环进入下一次循环:
如果是while语句,递增区必须放在continue之前;continue经常跟for语句连用效果更好,因为for语句的递增区是每次循环后自动执行。
int main()
{//求20到70之间13的整数倍的数字及个数
int i = 20,sum=0;
while(i<70)
{
++i;
if(i%13)
continue;
++sum;
printf("i=%d\n",i);
}
printf("总共%d个\n",sum);
return 0;
}
int main()
{//等价写法:
int i = 20,sum=0;
for(;i<70;++i)
{
if(i%13)
continue;
++sum;
printf("i=%d\n",i);
}
printf("总共%d个\n",sum);
return 0;
}