C言语教程第三章: C言语挨次妄想开端(7)

do-while语句

do-while语句的泛泛方式为:
do
语句;
while(表达式);
其中语句是循环体,表达式是循环前提。
do-while语句的语义是:
先实验循环体语句一次, 再鉴别表达式的值,若为真(非0)则担任循环,否则遏制循环。
do-while语句和while语句的区别在于do-while是先实验后鉴别,因此do-while至多要实验一次循环体。而while是先鉴别后实验,如果前提不知足,则一次循环体语句也不实验。
while语句和do-while语句泛泛都可以互相改写。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
do printf("%d ",a *2);
while (--n);
}

在本例中,循环前提改为--n,否则把多实验一次循环。这是因为先实验后鉴别而构成的。
关于do-while语句还应属意以下几点:
1.在if语句,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 频频可用来修正循环变量的值,平但凡赋值语句。
这三个表达式都可所以逗号表达式, 即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。
泛泛方式中的“语句”即为循环体语句。for语句的语义是:
1.首先比赛争论表达式1的值。
2.再比赛争论表达式2的值,若值为真(非0)则实验循环体一次, 否则跳出循环。
3.然后再比赛争论表达式3的值,转回第2步频频实验。在整个for循环过程中,表达式1只比赛争论一次,表达式2和表达式,3则可以比赛争论屡次。循环体可以屡次实验,也可以一次都不实验。for 语句的实验过程如图所示。
void main(){
int n,s=0;
for(n=1;n<=100;n )
s=s n;
printf("s=%d\n",s);
}
用for语句比赛争论s=1 2 3 ... 99 100

int n,s=0;
for(n=1;n<=100;n )
s=s n;
printf("s=%d\n",s);
本例for语句中的表达式3为n ,理论上也是一种赋值语句,相当于n=n 1,以变化循环变量的值。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;a ,n--)
printf("%d ",a*2);
}
用for语句修正例题。从0起源,输出n个接连的偶数。
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;a ,n--)
printf("%d ",a*2);
本例的for语句中,表达式1已省去,循环变量的初值在for语句之前由scanf语句取得,表达式3是一个逗号表达式,由a ,n-- 两个表达式组成。每循环一次a自增1,n自减1。a的革新使输出的偶数递增,n的革新节制循次数。
在行使for语句中要属意以下几点
1.for语句中的各表达式都可省略,但分号间隔符不克不及少。如:for(;表达式;表达式)省去了表达式1。for(表达式;;表达式)省去了表达式2。
for(表达式;表达式;)省去了表达式3。for(;;)省去了全部表达式。
2.在循环变量已赋初值时,可省去表达式1,如例3.27即属于这种环境。如省去表达式2或表达式3则把构成无穷循环, 这时应在循环体内设法结束循环。例题即属于此环境。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;)
{ a ;n--;
printf("%d ",a*2);
}
}
本例中省略了表达式1和表达式3,由循环体内的n--语句遏制循环变量n的递加,以节制循环次数。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;;){
a ;n--;
printf("%d ",a*2);
if(n==0)break;
}
}
本例中for语句的表达式全部省去。由循环体中的语句完成循环变量的递加和循环前提的鉴别。当n值为0时,由break语句中止循环,转去实验for当前的挨次。在此环境下,for语句已等效于while( 1)语句。如在循环体中没有响应的节制伎俩,则构成去世循环。
3.循环体可所以空语句。
#include"stdio.h"
void main(){
int n=0;
printf("input a string:\n");
for(;getchar()!='\n';n );
printf("%d",n);
}
本例中,省去了for语句的表达式1,表达式3也不是用来修正循环变量,而是用作输出字符的计数。多么, 就把本应在循环体中完成的计数放在表达式中完成了。因此循环体是空语句。应属意的是,空语句后的分号不可少,如短少此分号,则把前面的printf 语句当成循环体来实验。反已往说,如循环体不为空语句时, 决不克不及在表达式的括号后加分号, 多么又会以为循环体是空语句而不克不及频频实验。这些都是编程中罕见的错误,要特别很是属意。
4.for语句也可与while,do-while语句互相嵌套,组成多重循环。以下构成都公道的嵌套。
(1)for(){…
  while()
   {…}
  …
    }
(2)do{
   …
  for()
   {…}
  …
  }while();
(3)while(){
      …
      for()
       {…}
      …
     }
(4)for(){
    …
    for(){
    …
     }
    }
void main(){
int i,j,k;
for(i=1;i<=3;i )
{ for(j=1;j<=3-i 5;j )
printf(" ");
for(k=1;k<=2*i-1 5;k )
{
if(k<=5) printf(" ");
else printf("*");
}
printf("\n");
}
}



版权声明: 原创作品,答理转载,转载时请务必以超链接方式标明文章 原始情由 、作者信息和本声明。否则将究查法令责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975616.html