在介绍循环语句前,先介绍一下break和continue语句。在循环执行过程中,可能遇到需要终止循环的情况时,需要利用break和continue达到目的。
while(表达式)
语句;//在循环体中想包含更多语句,可以加上大括号
if语句执行时,只执行一次,而while是循环语句,在它之后的语句在执行时,会一直执行。遇到人为无法干涉的循环时称为死循环。
#include
int main()
{
:::info
练习1:在屏幕上打印出1-100的奇数
:::
#include
int main()
{
int a = 1;//变量初始化
while(a <= 100)//while的循环语句
{
if(a%2 == 1)//判断数字是否为奇数
{
printf("%d ",a);//打印出所判断出来的奇数,
}//%d 这样的格式让数字分隔开,更清晰
a++;从1到100逐渐增加
}
return 0;
}
结果显示如下:
:::info
练习2:输入一个正的整数,逆序打印出这个整数的每一位
例如:输入:1234,输出:4 3 2 1
:::
#include
int main()
{
int a = 0;//变量初始化
//输入
scanf("%d",&a);//记得取地址
while (a != 0)//while循环,表达式是当a除尽10时等于0
{
printf("%d\n",a%10);//此时的a是进入循环的a
a = a / 10;//此处的a被赋值为a/10
}
return 0;
}
for循环时三中循环中使用最多的,for循环的语法形式如下:
for(表达式1;表达式2;表达式3)
语句;//如果循环像包含更多语句可以加上大括号
//表达式1是用于循环变量的初始化
//表达式2是用于循环结束条件的判断
//表达式3适用于循环变量的调整
:::info
练习1:在屏幕上打印出1-100的奇数
:::
#include
int main()
{
int i = 1;
//for循环
for (i = 1; i <= 100; i++)
{
if (i % 2 == 1)//判断是否为奇数
{
printf("%d ",i);//输出i对应的奇数
}
}
return 0;
}
:::info
练习2:计算1-100之间3的倍数的数字之和
:::
#include
int main()
{
int i = 1;
int sum = 0;
//循环
for (i = 1; i <= 100; i++)
{
if (i % 3 == 0)//判断是否是3的倍数
{
sum += i;
}//当第一次倍数时,i=3,第二次为6
}
printf("%d",sum);
return 0;
}
//优化,上列循环中,需要循环100次
#include
int main()
{
int i = 0;
int sum =0;
//循环
for(i=3; i<=100; i+=3)
{
sum += i;
}
printf("%d",sum);
return 0;
}
while和if循环过程中都有初始化、判断、调整这三个部分,但是if循环的三个部分非常集中,便于代码维护,如果代码较多的时候while循环的三个部分比较分散,形式上for循环更醒目。
在循环语句中,do while语句的使用最少。
do
{
语句;
}while(表达式);//注意此处while后有分号
:::info
练习1:在屏幕上打印1-100的奇数
:::
#include
int main()
{
int i = 1;//变量初始化
//循环
do
{
if (1 == i % 2)//判断是狗为奇数
{
printf("%d ", i);//打印出所以奇数
}
i++;//调整
} while (i <= 100);//while后注意有分号
return 0;
}
:::info
练习2:输入一个正整数,计算这个整数是几位数?
例如:输入:1234 输出:4
:::
#include
int main()
{
int i = 0;
int num = 0;
//输入
scanf("%d", &i);//记得取地址
//循环
do
{
if (i % 10 != 0)//余数不为0,表示至少两位数,循环直到一位数
{
i = i / 10;//当i被除到一位数时,i为0
num++;//计算几位数,逐渐增加
}
} while(0 != i);//表达式判断
printf("%d",num );//打印出最终答案
return 0;
}
#include
int main()
{
int i = 0;
while(i<=10)
{
if(5 == i)
break;
printf("%d",i);
i += 1;
}
return 0;
}
continue 是继续的意思,在循环中的作用就是跳过本次循环中 continue 后边的代码,继续进行下一次循环的判断。
#include
int main()
{
int i = 0;
while(i<=10)
{
if(5 == i)
continue;
printf("%d ",i);
i += 1;//循环的调整,位置很重要
}//如果放在continue后方,可能陷入死循环
return 0;
}
#include
int main()
{
int i = 0;
while(i<=10)
{
if(5 == i)
continue;
i += 1;//循环的调整,位置很重要
printf("%d ",i);
}//如果放在continue后方,可能陷入死循环
return 0;
}
#include
int main()
{
int i = 0;
while (i <= 10)
{
i += 1;//continue无法跳过这段代码
if (5 == i)
continue;
printf("%d ", i);//这样写的话continue跳过printf函数
}
return 0;
}
先猜测一下结果为什么?
#include
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(5 == i)
break;
printf("%d ",i);//猜猜他的结果是?
}
return 0;
}
先猜测一下结果为什么?
#include
int main()
{
int i =0;
for(i=1; i<=10; i++)
{
if(5 == i)
continue;
printf("%d ",i);//结果如何?
}
return 0;
}
do while语句中的break和continue的作用和while循环中几乎一模一样
#include
int main()
{
int i = 0;
do
{
if(5 == i)
break;
printf("%d ",i);
i += 1;
}while(i<=10);
return 0;
}
#include
int main()
{
int i = 0;
do
{
if(5 == i)
continue;
printf("%d ",i);
i += 1;
}while(i<=10);
return 0;
}
C语言提供了一种非常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同一个函数内跳转到设置好的标号处
#include
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("heihei\n");//跳过haha的打印
return 0;
}
goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以能不用尽量不去使用;但是 goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用 goto 就非常的方便了。
for(…)
{
for(…)
{
for(…)
{
if(disaster)
goto error;
}
}
}
本来 for 循环想提前退出得使用 break ,一个 break 只能跳出一层 for 循环,如果3层循环嵌套就得使用3个 break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷。