C语言 循环结构

while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。

入口条件循环:while

while语句创建了一个循环,重复执行直到测试表达式为假或0。while语句是一种入口条件循环,也就是说,在执行多次循环之前已决定是否执行循环。因此,循环有可能不被执行。循环体可以是简单语句,也可以是复合语句。

格式:

while(表达式expression)

{

  循环体statement;

}

运行顺序:

当表达式为真,则执行下面的语句;语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句;然后再判断表达式是否为真……就这样一直循环下去,直到表达式为假,跳出循环。这个就是 while 的执行顺序。
注意,初学者编程时,if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加“{}”,养成良好的编程习惯尤为重要。

#include<stdio.h>

int main(void)

{

 long num;

 long sum=0L;

 int status;

 printf("Please enter an integer to be summed(q to quit):\n");

 status=scanf("%ld",&num);

 while(status==1)

 {

   sum=sum+num;

   printf("Please enter an integer to be summed(q to quit):\n");

   status=scanf("%ld",&num);

 }

 printf("Sum is %ld",sum);

 getchar();

 getchar();

 return 0;

}

总之,因为while循环是入口条件循环,程序在进入循环体之前必须获取输入的数据并检查status的值,所以在 while 前面要有一个 scanf()。要让循环继续执行,在循环内需要一个读取数据的语句,这样程序才能获取下一个status的值,所以在while循环末尾还要有一个scanf(),它为下一次迭代做好了准备。

关系运算符

< 小于

> 大于

<= 小于或等于

== 等于

>= 大于或等于

!= 不等于

优先级

关系运算符之间有两种不同的优先级

高优先级组: <<= >>=

低优先级组: == !=

关系表达式

关系为真,关系表达式的值为1;关系为假,关系表达式的值为0

入口条件循环:for

for语句使用3个表达式控制循环过程,分别用分号隔开。initialize表达式在执行for语句之前只执行一次;然后对test表达式求值,如果表达式为真(或非零),执行循环一次;接着对update表达式求值,并再次检查test表达式。for语句是一种入口条件循环,即在执行循环之前就决定了是否执行循环。因此,for循环可能一次都不执行。statement部分可以是一条简单语句或复合语句。

格式:

for(表达式1initialize;表达式2test;表达式3update;)

 statement

1.用于初始化,只用一次 2.判断 3.遍历(i=i+1)

二者联系

在 for 循环的格式中,表达式 1、表达式 2 和表达式 3 在 while 循环中一个也不少,只不过不像 for 循环那样写在一起,而是分开写。在 while 循环中,循环变量 i 在定义的时候就给它赋初值,++i 则是写在 while 的循环体内。只有循环判断表达式与 for 一样,都是写在其后的括号中。
那么,是不是所有的 for 循环都可以转化成 while 循环?答案是“Yes”!不仅如此,所有的 while 循环也都可以转化成 for 循环,for 循环和 while 循环可以相互转换。
当程序中需要用到循环结构时,for 循环和 while 循环都可以使用,具体如何选择要根据实际情况分析。比如死循环往往就是用 while(1),这样更方便!

二者区别

一、循环的结构不同

for循环的表达式为:

for(单次表达式;条件表达式;末尾循环体)

{

 中间循环体;

}

while循环的表达式为:

while(表达式)

{

 循环体;

}

二、执行条件的判断方式不同

for循环执行末尾循环体后将再次进行条件判断,若条件还成立,则继续重复上述循环,当条件不成立时则跳出当下for循环。

while循环当满足条件时进入循环,进入循环后,当条件不满足时,执行完循环体内全部语句后再跳出(而不是立即跳出循环)。

三、使用的目的不同

for循环的目的是为了限制循环体的执行次数,使结果更精确。

while循环的目的是为了反复执行语句或代码块。

四、语法不同

for循环的语法为:for (变量 = 开始值;变量<= 结束值;变量 = 变量 + 步进值) {需执行的代码 }。

while循环的语法为:while (<条件>) {需执行的代码 }。

出口条件循环:do while

do while 语句创建一个循环,在 expression 为假或 0 之前重复执行循环体中的内容。do while语句是一种出口条件循环,即在执行完循环体后才根据测试条件决定是否再次执行循环。因此,该循环至少必须执行一次。statement部分可是一条简单语句或复合语句。

格式

do

{

 statement;

}while(expression);

如何选择循环?

如何选择使用哪一种循环?首先,确定是需要入口条件循环还是出口条件循环。通常,入口条件循环用得比较多,有几个原因。其一,一般原则是在执行循环之前测试条件比较好。其二,测试放在循环的开头,程序的可读性更高。另外,在许多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。

那么,假设需要一个入口条件循环,用for循环还是while循环?这取决于个人喜好,因为二者皆可。要让for循环看起来像while循环,可以省略第1个和第3个表达式。例如:

for ( ; test ; )

与下面的while效果相同:

while ( test )

要让while循环看起来像for循环,可以在while循环的前面初始化变量,并在while循环体中包含更新语句。例如:

初始化;

while ( 测试 )

{

 其他语句更新语句

}

与下面的for循环效果相同:

for ( 初始化 ;测试 ; 更新 )

 其他语句

一般而言,当循环涉及初始化和更新变量时,用for循环比较合适,而在其他情况下用while循环更好。对于下面这种条件,用while循环就很合适:

while (scanf("%ld", &num) == 1)

对于涉及索引计数的循环,用for循环更适合。例如:

for (count = 1; count <= 100; count++)

嵌套循环

指一个循环内包含另一个循环

嵌套循环中的内层循环在每次外层循环迭代时都执行完所有的循环

6.17

#include<stdio.h>

#define ROWS 6

#define CHARS 10

int main(void)

{

 int row;

 char ch;

 for(row=0;row<ROWS;row++)

 {

   for(ch='A';ch<('A'+CHARS);ch++)

   printf("%c",ch);

   printf("\n"); //换行

 }

 getchar();

 getchar();

 return 0;

}

6.18

#include<stdio.h>

int main(void)

{

 const int ROWS=6;

 const int CHARS=6;

 int row;

 char ch;

 for(row=0;row<ROWS;row++)

 {

   for(ch=('A'+row);ch<('A'+CHARS);ch++) //对ch重新初始化

   printf("%c",ch);

   printf("\n");

 }

 getchar();

 getchar();

 return 0;

}

多个循环是否可以合并成一个循环?

可以。合并后的程序显得更加紧凑。但是,调整时要注意遵循模块化(modularity)的原则。模块化隐含的思想是:应该把程序划分为一些独立的单元,每个单元执行一个任务。这样做提高了程序的可读性。也许更重要的是,模块化使程序的不同部分彼此独立,方便后续更新或修改程序。在掌握如何使用函数后,可以把每个执行任务的单元放进函数中,提高程序的模块化。

continue语句

作用:

执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代。如果其在嵌套循环之内,只会影响包含该语句的内层循环。

应用:

所用循环都可以使用,但是switch语句不行。

优点:

a.减少主语句组中的一级缩进。当语句很长或嵌套较多时,紧凑简洁的格式提高了代码的可读性。

b.用作占位符,提高可读性。

while(getchar() !='\n')

 ;

改进:

while(getchar() !='\n')

 continue;

continue语句让程序跳过循环体的余下部分,那么,从何处开始继续循环?

对于while和do while循环,执行continue语句后的下一个行为是对循环测试表达式求值。

对于for循环,执行continue后的下一个行为是对更新表达式求值,然后是对循环测试表达式求值。

对于while和for循环,程序执行到continue语句后会开始进入下一轮迭代。

对于do while循环,对于出口条件求值后,如有必要会进入下一轮迭代。

break语句

作用:

程序执行到循环中的break语句时,会终止包含它的循环,并继续执行下一阶段。如果break语句位于嵌套循环内,它只会影响包含它的当前循环。break还可用于因其他其他原因退出循环的情况。

应用:

所有的循环和switch语句都可以使用break语句。文章来源地址https://www.uudwc.com/A/AAXWg/

原文地址:https://blog.csdn.net/weixin_65951505/article/details/133267113

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年09月26日 16:15
踩中AIGC 美图看清自己“工具”本职
下一篇 2023年09月26日 16:16