循环结构是中种很重要结构其特点是在给定条件成立时反复执行某段直到条件不成立为止给定条件称为循环条件反复执行段称为循环体C语言提供了多种循环语句可以组成各种区别形式循环结构
while语句
while语句般形式为:while(表达式)语句;其中表达式是循环条件语句为循环体
while语句语义是:计算表达式值当值为真(非0)时执行循环体语句其执行过程可用图3—4表示统计从键盘输入行个数
#
void{
n=0;
prf("inputa:\\n");
while(getchar!=\\n)n;
prf("%d",n);
}n=0;
prf("inputa:\\n");
while(getchar!=\\n)
n;
prf("%d",n);
本例中循环条件为getchar!=\\n,其意义是只要从键盘输入不是回车就继续循环循环体n完成对输入个数计数从而实现了对输入行个数计数
使用while语句应注意以下几点:
1.while语句中表达式般是关系表达或逻辑表达式只要表达式值为真(非0)即可继续循环
void{
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
while(n--)
prf("%d",a*2);
}a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
while(n--)
prf("%d",a*2);
本例将执行n次循环每执行次n值减1循环体输出表达式a*2值该表达式等效于(a*2;a)
2.循环体如包括有个以上语句则必须用{}括起来组成复合语句
3.应注意循环条件选择以避免死循环
void{
a,n=0;
while(a=5)
prf("%d",n);
}a,n=0;
while(a=5)
prf("%d",n);
本例中while语句循环条件为赋值表达式a=5因此该表达式值永远为真而循环体中又没有其它中止循环手段因此该循环将无休止地进行下去形成死循环4.允许while语句循环体又是while语句从而形成双重循环
do-while语句
do-while语句般形式为:
do
语句;
while(表达式);
其中语句是循环体表达式是循环条件
do-while语句语义是:
先执行循环体语句次再判别表达式值若为真(非0)则继续循环否则终止循环
do-while语句和while语句区别在于do-while是先执行后判断因此do-while至少要执行次循环体而while是先判断后执行如果条件不满足则次循环体语句也不执行
while语句和do-while语句般都可以相互改写
void{
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
doprf("%d",a*2);
while(--n);
}
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
doprf("%d",a*2);
while(--n);
在本例中循环条件改为--n否则将多执行次循环这是由于先执行后判断而造成
对于do-while语句还应注意以下几点:
1.在语句while语句中表达式后面都不能加分号而在do-while语句表达式后面则必须加分号
2.do-while语句也可以组成多重循环而且也可以和while语句相互嵌套
3.在do和while的间循环体由多个语句组成时也必须用{}括起来组成个复合语句
4.do-while和while语句相互替换时要注意修改循环控制条件
for语句
for语句是C语言所提供功能更强使用更广泛种循环语句其般形式为:
for(表达式1;表达式2;表达3)
语句:
表达式1 通常用来给循环变量赋初值般是赋值表达式也允许在for语句外给循环变量赋初值此时可以省略该表达式
表达式2 通常是循环条件般为关系表达式或逻辑表达式
表达式3 通常可用来修改循环变量值般是赋值语句
这 3个表达式都可以是逗号表达式即每个表达式都可由多个表达式组成 3个表达式都是任选项都可以省略
般形式中“语句”即为循环体语句for语句语义是:
1.首先计算表达式1值
2.再计算表达式2值若值为真(非0)则执行循环体次否则跳出循环
3.然后再计算表达式3值转回第2步重复执行在整个for循环过程中表达式1只计算次表达式2和表达式3则可能计算多次循环体可能多次执行也可能次都不执行for语句执行过程如图所示
void{
n,s=0;
for(n=1;n<=100;n)
s=sn;
prf("s=%d\\n",s);
}
用for语句计算s=123...99100
n,s=0;
for(n=1;n<=100;n)
s=sn;
prf("s=%d\\n",s);
本例for语句中表达式3为n实际上也是种赋值语句相当于n=n1以改变循环变量值
void{
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
for(;n>0;a,n--)
prf("%d",a*2);
}
用for语句修改例题从0开始输出n个连续偶数
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
for(;n>0;a
,n--)
prf("%d",a*2);
本例for语句中表达式1已省去循环变量初值在for语句的前由scanf语句取得表达式3是个逗号表达式由an--两个表达式组成每循环次a自增1n自减1a变化使输出偶数递增n变化控制循次数
在使用for语句中要注意以下几点
1.for语句中各表达式都可省略但分号间隔符不能少如:for(;表达式;表达式)省去了表达式1for(表达式;;表达式)省去了表达式2
for(表达式;表达式;)省去了表达式3for(;;)省去了全部表达式
2.在循环变量已赋初值时可省去表达式1如例3.27即属于这种情形如省去表达式2或表达式3则将造成无限循环这时应在循环体内设法结束循环例题即属于此情况
void{
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
for(;n>0;)
{a;n--;
prf("%d",a*2);
}
}a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
for(;n>0;)
{a;n--;
prf("%d",a*2);
}
本例中省略了表达式1和表达式3由循环体内n--语句进行循环变量n递减以控制循环次数
void{
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
for(;;){
a;n--;
prf("%d",a*2);
(n0);
}
}
a=0,n;
prf("\\ninputn:");
scanf("%d",&n);
for(;;){
a;n--;
prf("%d",a*2);
(n0);
}
本例中for语句表达式全部省去由循环体中语句实现循环变量递减和循环条件判断当n值为0时由语句中止循环转去执行for以后在此情况下for语句已等效于while(1)语句如在循环体中没有相应控制手段则造成死循环
3.循环体可以是空语句
#"stdio.h"
void{
n=0;
prf("inputa:\\n");
for(;getchar!=\\n;n);
prf("%d",n);
}
本例中省去了for语句表达式1表达式3也不是用来修改循环变量而是用作输入计数这样就把本应在循环体中完成计数放在表达式中完成了因此循环体是空语句应注意是空语句后分号不可少如缺少此分号则把后面prf语句当成循环体来执行反过来说如循环体不为空语句时决不能在表达式括号后加分号这样又会认为循环体是空语句而不能反复执行这些都是编程中常见要十分注意
4.for语句也可和while,do-while语句相互嵌套构成多重循环以下形成都合法嵌套
(1)for{…
while
{…}
…
}
(2)do{
…
for
{…}
…
}while;
(3)while{
…
for
{…}
…
}
(4)for{
…
for{
…
}
}
void{
i,j,k;
for(i=1;i<=3;i)
{
for(j=1;j<=3-i5;j)
prf("");
for(k=1;k<=2*i-15;k)
{
(k<=5)prf("");
prf("*");
}
prf("\\n");
}
}
最新评论