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;
}