目录
循环结构
循环结构是在一定条件下反复执行某段程序的流程结构。
根据判断条件,循环结构又可分为先判断后执行的循环结构和先执行后判断的循环结构
循环结构的三要素:循环变量、循环体和循环终止条件
循环类型
1. while 循环
2. for 循环
总结:
- for中的每一个表达式都是可以省略的,但是 ' ;'必须要保留 ,即for( ; ; )
- for (; 条件;)==while(条件),for循环等价于while循环
例:求n的阶乘
#include<stdio.h>
int main(){
int n;
scanf ("%d", &n);
int fact =1; //设fact和 i 的初始值都为1
int i=1;
//while(i<=n){
// fact *=i;
// i++;
//}
for (i=1;i<=n;i++){
fact *=i; // *=为赋值运算,fact *=i相当于fact=fact*i;
}
printf("%d!=%d\n",n,fact);
}
语句分析:
1. while (i<=n){
fact *=i;
++
} //while循环语句,当i<=n时,fact=fact * i,然后计算i++,即i=i+1此时i=2,i<=n,则继续执行循环体中的语句.然后就一直循环直到不满足i<=n这个条件时,结束循环
2. for (i=1;i<=n;i++)
{
fact *=i;
}
//执行到for语句时,先给i赋初值1,如果i<=n,执行循环体,循环结束后,计算i++.
此时i=2,i<=n成立,则进行第二次循环,循环结束计算i++;然后一直进行循环操作,直到不满足条件,退出循环
这里两个语句是等价的,for==while循环语句3.死循环:即循环条件始终成立,循环一直会进行下去
例:for(i=1; ;i++) { //省略了循环条件,程序陷入死循环 ,要避免这种情况
fact *=i;
}
实验结果如下:
3. do...while 循环
while 、do...while 的区别:
while | do...while |
while:先判断条件,后进循环体 | do while: 先进循环体,后判断条件 |
同:都是满足条件时执行循环,不满足条件结束循环 |
循环语句的选择:
1.如果有固定次数,用for
2.如果必须执行一次,用do...while
3.其他情况用while
嵌套循环
嵌套循环语句:一个循环体内又存在一个完整的循环结构。
多层循环语句:内嵌循环中还可以嵌套循环
三种循环(while、do...while、for)可以互相嵌套,且层次不限
1.嵌套for循环
for(表达式1;表达式2;表达式3) //for外循环
{ 语句;
for(表达式1;表达式2;表达式3)
{
语句;
}
}
例:打印九九乘法表:
#include <stdio.h>
int main(){
int i, j;
for(i=1; i<=9; i++){ //外层for循环
for(j=1; j<=i; j++){ //内层for循环
printf("%d*%d=%2d ", i, j, i*j);
}
printf("\n");
}
return 0;
}
实验结果:
2.嵌套while循环
while(条件)//外循环
{
表达式;
while (条件) //内循环
{ 表达式;
}
... ... ...
}
3.for嵌套while循环
for(表达式1;表达式2;表达式3)
{ 循环体;
表达式1;
while(表达式2) //内层while循环
{
循环体;
表达式3;
}
例:输出50以内的质数
#include<stdio.h>
#include<math.h>
int main()
{
int i,n,yes;
for(n=1;n<50;n++) //外层for循环
{
yes=1;i=2;
while(yes&&i<=sqrt(n))//内层while循环
if(n%i++==0)yes=0;
if(yes) printf("%4d",n);
}
return 0;
}
实验结果如下:
循环控制语句
1.break 语句
break 语句结构:
while(表达式1)
{ ...
if(表达式2)break;
...
} //使用break语句,会提前结束循环,接着执行循环下面的语句
注:1.break语句只用于循环语句和switch语句
2.如果程序是多层循环,break只能退出本层循环
例:
#include <stdio.h>
int main ()
{
int a = 10;
while( a < 20 )
{
printf("a 的值是: %d\n", a);
a++;
if( a > 15)
{
break;
}
}
return 0;
}
运行结果如下:
2.continue语句
while(表达式1)
{ ...
if(表达式2)continue;
...
} //使用continue语句,会结束本次循环,即跳过循环体中下面还没有执行的语句,接着进行下一次是否执行循环的判断
例:输出100以内能被3整除且个位数是6的所有整数
#include <stdio.h>
int main(){
int i,j;
for(i=0;i<10;i++)
{
j=i*10+6;
if(i%3!=0) //判断i是否能被3整除
continue; //条件为真则退出本次循环,控制流回到for进行下一次的循环
printf("%4d\n",j);
}
return 0;
}
运行结果如下:
continue与break语句的区别
break语句 | continue语句 |
跳出循环,不再判断循环条件是否成立 | 结束本次循环,还会判断循环条件 |
同:break和continue语句都能改变循环状态 |