目录
前言
所谓循环语句,其最重要的三点便是:有效性,确定性以及有穷性。
循环结构的特点即为:在给定条件成立时,反复执行某程序段,直到条件不成立为止。
举一个生动的例子:给定条件就是饿了,需要执行的程序段就是吃饭,直到吃到不饿为止。(写代码咱可能不精通,吃饭那必定是不能再熟悉了)
其中给定的条件称为循环条件,反复执行的程序段就叫做循环体。
C语言中提供了while,do-while,for三种语句来实现循环结构。
1、while语句(当型循环控制语句)
(图片真的不太好搞)
所谓当型,就是给定条件满足while后括号内条件时执行循环体。
while(饿了)
吃饭;
如图,简单易懂吧,吃到不饿了就退出循环不吃了。
用来解决实际问题的话,例如计算1+2+3...+100。一般可以写为
int sum;
sum=(1+100)*100/2;
printf("sum=%d",sum)
那么用循环就可以写为
int i=1,sum=0;
while(i<=100)
{
sum+=1;
i++;
}
printf("sum=%d",sum);
return 0;
}
其实这样简单的问题有更简便的替代方法,循环语句就显得很冗长,但要是求最大公因数,在使用辗转相除法时循环语句就会更简洁:
#include<stdio.h>
int main()
{
int a,b,r;
printf("请输入两个整数");
scanf("%d %d",&a,&b);
while(b!=0)
{
r=a%b; //求余数
a=b;
b=r;
} //即辗转相除法
printf("两数的最大公因数为=%d",a);
return 0;
}
2、do-whlie语句(直到型循环语句)
直到型语句,即是先执行,直到不满足循环条件为止。依然以从1加到100为例:
#include<stdio.h>
int main()
{
int i=1,sum=0;
do
{ sum+=i;
i++;
}while(i<=100);
printf("sum=%d",sum);
return 0;
}
其与while语句的区别在于:while语句先判断是否满足循环条件再决定是否执行循环体,而do-while语句则无论如何先执行一次循环体,再判断是否进行下一次循环。(就像是网上购物,while型是有需要才买,解决需要了就不买了,而do-while则是看到了先买,买后再思考到底需不需要)
注意:do-while语句循环体中要有改变循环控制变量的步骤,否则极易陷入死循环。
3、for语句
for语句常用于已知循环次数的情况,基本形式为:
for(表达式1;表达式2/*循环条件*/;表达式3)
语句;//循环体(执行多条语句时使用复合语句,要加{})
//注意:for后的括号()不可以省略,表达式之间用逗号隔开
表达式1:一般为赋值表达式,给循环初始变量赋初值(初始化)
表达式2:一般为关系表达式或逻辑表达式,作为循环控制条件(判断)
表达式3:一般为赋值表达式,使循环控制变量打破循环控制条件(改变)
依旧是求1加到100:
#include<stdio.h>
int main()
{
int i,sum;
for(i=1,sum=0/*表达式1*/;i<=100/*表达式2*/;i++/*表达式3*/)
sum+=i;//语句(循环体)
printf("sum=%d",sum);
return 0;
}
其中,最重要的是所要执行的循环体,三个表达式可以省略,因为有另外控制的方法。
例如上面程序中:表达式1赋初值的功能可以交给int,写成
int i=1,sum=0;//代替表达式1
for(;i<=100;i++)
sum+=i;
表达式2所起的判断功能也可以放至循环体中写成判断语句(break功能退出循环体会在以后讲到)
int i,sum;
for(i=1,sum=0;;i++)
{ if(i>100) break;//代替表达式2
sum+=i;
}
表达式3改变循环控制变量也可写在循环体中:
int i,sum;
for(i=1,sum=0;i<=100;)
{ sum+=i;
i++;//代替表达式3
}
甚至可以三者都省略:
int i=1,sum=0;//代替表达式1
for(;;)
{
if(i>100) break;代替表达式2
sum+=i;
i++;//代替表达式3
}
就目前所学,for语句可以将判断是否执行循环部分和循环体实际执行部分分开,更加便于使用。
关于循环嵌套和break,continue语句且听下回分解。