引言
C语言提供了多种循环结构,包括for循环、while循环和do-while循环。
-
for循环:for循环是C语言中最常用的循环结构,它的语法如下:
for (初始化表达式; 循环条件; 循环后操作表达式) { 循环体; }
初始化表达式用于初始化循环变量,循环条件用于判断是否继续循环,循环后操作表达式用于在每次循环结束后更新循环变量的值。循环体是需要执行的代码块。
-
while循环:while循环的语法如下:
while (循环条件) { 循环体; }
while循环会在每次循环开始前先判断循环条件,如果满足条件则执行循环体,然后再次判断循环条件。直到循环条件不满足时,跳出循环。
-
do-while循环:do-while循环的语法如下:
do { 循环体; } while (循环条件);
do-while循环会先执行循环体,然后判断循环条件。如果循环条件满足,则继续执行循环体,否则跳出循环。
这些循环结构可以根据具体的需求选择使用,可以帮助实现重复执行某段代码的功能。
1 循环定义
定义:循环是计算机科学运算领域的用语,也是一种常见的控制流程。循环是一段在程序中只出现一次,但可能会连续运行多次的代码。循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都运行一次。
可以理解位重复的去执行某件事情,但需要有一个终止条件,否则会形成死循环,导致内存溢出;
2 循环分类
2.1 while循环
基本语法:
while(循环条件){
执行语句;
}
循环条件:布尔类型的值或者表达式,需要不断变化,如果是一个常量或者固定不变的值,则称为没有意义的循环或者死循环;
执行语句:当循环条件为true时执行语句,false终止循环,不执行语句
执行流程:
1) 第一次判断条件true,继续执行
2) 第二次判断条件true,继续执行
3) 第三次判断条件true,继续执行
4) 。。。。。
5) 直到第n次判断条件false,终止循环
示例:
#include <stdio.h>
int main(int argc, char const *argv[])
{
/*打印1到10之间的数字*/
int i=1;
while(i<11){
printf("%d\n",i);
i++;
}
printf("---------------------------------\n");
/*打印1到10之间的偶数*/
int j=1;
while(j<11){
if(j%2==0){
printf("%d\n",j);
}
j++;
}
return 0;
}
2.2 do...while循环
基本语法:
do{
执行语句;
}while(循环条件);
循环条件:布尔类型的值或者表达式,需要不断变化,如果是一个常量或者固定不变的值,则称为没有意义的循环或者死循环;
执行语句:当循环条件为true时执行语句,false终止循环,不执行语句
执行流程:
-
首先执行do后面结构体中的执行语句
-
判断循环条件是否为true,如果true,执行do后执行语句,如果为false终止循环
示例:
/*打印1到10之间的数字*/
int i =1;
do{
printf(i);
i++;
}while(i<11);
2.3 for循环
基本语法:
for(初始化条件A;判断条件B;循环后语句C){
执行语句D;
}
初始化条件A:初始化一个值,用来作为B中的判断条件
判断条件B:布尔类型的值或者表达式
执行语句D:当B中的判断条件满足,为true执行D,false,则不执行
循环后语句C:循环后执行的代码,目的是为了改变初始条件A的值,使B中条件不是一个固定的值
执行流程:
第一次:A-->B(true)-->D-->C
第二次: B(true)-->D-->C
第三次: B(true)-->D-->C
…
第n次: B(false) 结束整个循环
示例:
/*打印1到10之间的数字*/
for(int i=1;i<11;i++){
printf(i);
}
注意事项:
1. 特殊写法:
//死循环
for(;;){
printf("Hello");
}
2. 初始条件中变量的作用域
/*打印1到10之间的数字*/
for(int i=1;i<11;i++){
printf("for入门i=%d\n",i);
}
printf(i);//报错,i只作用于循环结构体中
嵌套for循环
#include <stdio.h>
int main(int argc, char const *argv[])
{
/*
1.图形
*
* *
* * *
* * * *
* * * * *
*/
for(int i=1;i<=5;i++){
for(int j=1;j<=i;j++){
printf("*");
}
printf("\n");
}
/*
2.数字塔
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
*/
for (int i = 1; i <=9; i++){
for (int j = 1; j <=i; j++){
if (i==6){
/*break和return都能中断循环,
有区别break是中断本循环,
外层循环或者循环外的后续代码要执行。
retrun外层循环和循环外的后续代码都不执行了*/
//return 0;
break;
}
if (i==j){//是最后一个就回车
printf("%d\n",j);
}else{ //不是最后一个加上空格
printf("%d ",j);
}
}
}
/*3.九九乘法表
*/
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
printf("%d*%d=%d\t",j,i,j*i);
}
printf("\n");
}
return 0;
}
4 goto
C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。
注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。
#include <stdio.h>
int main(int argc, char const *argv[])
{
//通过go实现循环 1+2+3+...+10
//定义一坨语句
int i = 1;
int sum = 0;
sum_state: //定义一个语句块,名字随便取
sum = sum +i;
i++;
//如果满足条件就跳转,可以让他多次跳转就形成循环了。 最终要跳出
if (i<=10)
{
goto sum_state; //跳转执行语句
}
printf("%d,%d",i,sum);
return 0;
}
5 循环控制语句
5.1 定义
对整个循环流程进行控制,可提前终止或跳出循环。 break,continue,goto,return
5.2 控制语句分类
5.2.1 break
作用:终止当前循环
示例:
/* 一个循环 如果循环中出现了6 则终止循环 后面的也不再执行*/
for(int i=1;i<8;i++){
if(i==6){
break;
}
printf("i=%d\n",i);
}
5.2.2 continue
作用:跳出当前循环
示例:
/* 一个循环 如果循环中出现了6 则跳过循环 后面的继续执行*/
for(int i=1;i<8;i++){
if(i==6){
continue;
}
printf("i=%d\n",i);
}
5.2.3 return
作用:终止当前方法
示例:
#include <stdio.h>
int main(int argc, char const *argv[])
{
for (int i = 0; i < 10; i++)
{
printf("%d ",i);
//干预循环 6的时候结束
if (i==6)
{
break; //中断,跳出本循环
}
}
printf("\n==================\n ");
for (int i = 0; i < 10; i++)
{
//干预循环 6的时候不执行
if (i==6)
{
continue; //跳出这个循环本次执行情况
}
printf("%d ",i);
}
printf("\n==================\n ");
/*
for (int i = 0; i < 10; i++)
{
printf("%d ",i);
//干预循环 6的时候结束
if (i==6)
{
return 0; //函数返回了,函数都结束了,里面for自然结束了。
}
}
*/
printf("\n==================\n ");
for (int i = 1; i <=9; i++)
{
for (int j = 1; j <=i; j++)
{
if (i==6)
{
return 0; //break和return都能中断循环,有区别break是中断本循环,外层循环或者循环外的后续代码要执行。retrun外层循环和循环外的后续代码都不执行了
}
if (i==j) //是最后一个就回车
{
printf("%d\n",j);
}else{ //不是最后一个加上空格
printf("%d ",j);
}
}
}
}
5.2.4 goto
#include <stdio.h>
int main(int argc, char const *argv[])
{
for (int i = 0; i < 10; i++)
{
printf("%d ",i);
//干预循环 6的时候结束
if (i==6)
{
goto g_stat;
}
}
g_stat:
printf("跳出循环了!");
}