1、循环结构之while循环
当条件满足的情况下,if语句后的语句执行,否则不执行。但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是同一件事情我们需要完成很多次。那我们怎么做呢?C语言中给我们引入了while语句,可以实现循环。
反复不停的执行某个动作就是江湖人称的循环 。
C语言中有三种循环结构,先看一下C语言while循环的结构
其中表达式表示循环条件,执行代码块为循环体。
while语句的语义是计算表达式的值,当值为真(非0)时,执行循环体代码块。
注意
1)while语句中的表达式一般是关系表达或逻辑表达式,当表达式的值为假时不执行循环体,反之则循环体一直执行。
2)一定要记着在循环体中改变循环变量的值,否则会出现死循环(无休止的执行)。
3)循环体如果包括有一个以上的语句,则必须用{}括起来,组成复合语句。
2、循环结构之do-while循环
C语言中的do-while循环,一般形式如下:
do-while循环语句的语义是:它先执行循环中的执行代码块,然后再判断while中表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
注意使用do-while结构语句时,while括号后必须有分号。
3、while语句中的break和continue
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以,while中的break是用于永久终止循环的。
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
4、循环结构之for循环
C语言中for循环一般形式:
它的执行过程如下:
1)执行表达式1,表达式1为初始化部分,用于初始化循环变量的。
2)判断表达式2,表达式2为条件判断部分,用于判断循环是否终止。若其值为真(非0),则执行for循环体中执行代码块,然后向下执行;若其值为假(0),则结束循环。
3)执行表达式3,表达式3为调整部分,用于循环条件的调整。(i++)等对于循环变量进行操作的语句。
4)这三部分之间用分号 ; 分开。
5)执行for循环中执行代码块后执行第二步;第一步初始化只会执行一次。
循环结束,程序继续向下执行。
注意for循环中的两个分号一定要写。
使用for语句应该注意:
- for循环中的“表达式1、2、3”均可不写,为空,但两个分号(;;)不能缺省。
- 省略“表达式1(循环变量赋初值)”,表示不对循环变量赋初始值。
- 省略“表达式2(循环条件)”,不做其它处理,循环一直执行(死循环)。
- 省略“表达式3(循环变量增减量)”,不做其他处理,循环一直执行(死循环)。
- 表达式1可以是设置循环变量初值的赋值表达式,也可以是其他表达式。
- 表达式1和表达式3可以是简单表达式也可以是多个表达式以逗号分割。
- 表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。
- 各表达式中的变量一定要在for循环之前定义。
break和continue在for循环中
我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。
for语句的循环控制变量
建议:
1)不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2)建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
5、循环结构之三种循环比较
while,do-while和for三种循环在具体的使用场合上是有区别的,如下:
1)在知道循环次数的情况下更适合使用for循环;
2)在不知道循环次数的情况下适合使用while或者do-while循环;
3)如果有可能一次都不循环应考虑使用while循环;
4)如果至少循环一次应考虑使用do-while循环。
但是从本质上讲,while,do-while和for循环之间是可以相互转换的。
6、循环结构的嵌套
多重循环就是在循环结构的循环体中又出现循环结构。
在实际开发中一般最多用到三层重循环。
1)因为循环层数越多,运行时间越长,程序越复杂,所以一般用2-3层多重循环就可以了。另外不同循环之间也是可以嵌套的。
2)多重循环在执行的过程中,外层循环为父循环,内层循环为子循环
3)父循环一次,子循环需要全部执行完,直到跳出循环。父循环再进入下一次,子循环继续执行。
7、简单冒泡排序
代码:
void Bubble_Sort(int arr[], int sz)
{
int i = 0;
//趟数
for (i = 0; i < sz - 1; i++)
{
//一趟冒泡排序
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}