6、C语言循环结构

什么是循环结构

在解决问题时,经常要重复执行某些计算或操作,将这些计算和操作写成循环结构可以使计算机重复的执行。

for语句

for语句是功能最强、使用最广的一种循环语句。
for语句可以直接处理循环变量的初值、终止、步长。
for循环一般用来执行一个指定次数的循环。
for的一般格式
for(表达式1;表达式2;表达式3)
{
循环体语句
}
3个表达式要用分号隔开

  • 表达式1通常用来給变量赋值(这个变量称为循环变量),一般为赋值表达式。(表达式1可以省略,省略时应在循环语句前为循环变量赋值)
  • 表达式2通常是循环条件,一般为条件表达式或逻辑表达式。(表达式也可以省略,省略时应在循环体内用if()设置退出条件,否者会死循环)
  • 表达式3通常用来修改循环变量,即处理步长,一般是赋值语句。(表达式3也可以省略,省略时在循环体内设置步长,不然会死循环)
  • 无论省略哪个表达式分号都不能少。(3个表达式都省了也要写分号)
  • 每个表达式都可以使用逗号表达式。(一般只在表达式1和表达式3使用)
  • 循环体只能是一个语句,如果有多个语句要用花括号括起来变成复合语句。
#include"stdio.h"
int main()
{
	//输出0-100,两个数之间用空格隔开
	//int i=0是表达式1(为循环变量赋值),i<=100是表达式2(确定循环结束条件),i++是表达式3(确定循环步长,一般循环变量每次加1)
	for(int i=0;i<=100;i++)
	{
		printf("%d ",i);	
	} 
	//表达式1和表达式3可以是逗号表达式
	int a=0; 
	//在0到100中有多少对数相加为100
	for(int i=0,j=100;i<j;i++,j--)
	{
		a++;	
	} 
	printf("%d\n",a);
    return 0;
}

for的执行过程 :
1、执行表达式1获得循环变量的值。
2、执行表达式2,结果为假for循环不执行,为真执行循环体 。
3、循环体执行完后执行表达式3。
4、表达式3执行完后继续执行表达式2 。
也就是说表达式1执行后,只要表达式2的值为真,那么会按表达式2——循环体——表达式3——表达式2——循环体——表达式3…这种顺序一只执行下去,直到表达式2的值为假时结束for循环。
for语句中省略表达式

#include"stdio.h"
int main()
{
	//省略for循环中的表达式 
	int i=0;//相当于for循环的表达式1
	for(;;)
	{
		printf("%d ",i);
		i++;//相当于for循环的表达式3
		if(i>100)//相当于for循环的表达式2,不同的是这个if表达式为真时退出循环
		{
			break;//i大于100结束for循环
			//注意这个break不是结束if语句而是结束这个if所在的循环。
		}
	}
    return 0;
}

可以省略任何一个,也可以全部省略。(注意结束条件)

for的死循环

#include"stdio.h"
int main()
{
	//要注意循环指定次数后,循环变量要不满足表达式2 的条件。(使表达式2的值为假,不然会死循环)
	for(int i=0;i<=100;i--)
	{//i只会越来越小,没有其他终止条件这个for将一直执行(死循环) 
		printf("%d ",i);	
	} 
	for(int i=1;i!=100;i+=2)
	{//i永远不会等于100,
		printf("%d ",i);
	}
	int a=0;
	for(;;)
	{//没有结束条件
		printf("%d ",a);
		a++;
	}
    return 0;
}

for循环的嵌套
for语句可以像if语句那样嵌套。
外层for循环每执行一次,内层的for语句要执行完(要执行指定的n次循环),外层for才能开始下一次执行。

#include"stdio.h"
int main()
{
	for(int i=1;i<=10;i++)
	{
		//i=0时内层的for要执行1次 
		for(int j=1;j<=10;j++)
		{//每次执行要循环10次 
			printf("%d ",i*j);
		}
		printf("\n");
	}
    return 0;
}

注意:外层循环变量和内层循环变量不能相同,内层循环表达式2和表达式3的循环变量不要写成外层循环的循环变量
外层的for循环要执行10次,内层的for也要执行10次,而外层for循环每执行1次,内层的for都要执行10次,循环总次数为10*10=100次。
for语句的嵌套建议不要超过3层,最多4层,否则代码可读性或很差差,循环时间也会呈几何增长。

while语句

while循环的一般格式:
while(循环条件表达式)
{
循环体语句
}

  • 循环条件表达式一般是关系表达式或逻辑表达式,表达式为真执行循环体。
  • 循环体超过一个语句时要用花括号括起来变成复合语句。
  • while语句先判断循环条件表达式,条件为真执行,为假不执行。
  • 注意循环条件,避免死循环。
#include"stdio.h"
int main()
{
	int a=0; 
	while(a<=100)//关系表达式
	{
		printf("%d ",a);
		a+=2;
	} 
    return 0;
}
#include"stdio.h"
int main()
{
	int a=20,b=50; 
	while(a<=30||b<=80)//逻辑表达式
	{
		printf("%d ",a);
		a+=2;
		b+=3;
	} 
    return 0;
}

while的执行过程:
1、判断循环条件表达式否为真。(关系表达式或逻辑表达式)
2、表达式值为真执行循环体,为假循环结束。
3.循环体执行完继续判断表达式的值是否为真。
while循环更适合执行不知道循环次数的循环

#include"stdio.h"
int main()
{
	//将一个整个的各个位上的数单独输出。  
	int a=12548468;
	while(a>0)
	{
		printf("%d\n",a%10);
		a/=10;
	} 
	//输入一个整数,输出其各个位上的数。
	int b;
	scanf("%d",&b);//并不知道你输入的是几位数,无法确定循环次数
	while(b>0)//(只知道循环条件不知道循环次数)
	{
		printf("%d\n",b%10);
		b/=10;
	 } 
    return 0;
}

switch的嵌套
switch语句也可以向for语句那样嵌套。

#include"stdio.h"
int main()
{
	int a=10;
	switch(a--) 
	{
		int b=10
		switch(b--)//外层switch每执行一次,内层switch执行10次 
		{
			
		}
	}
    return 0;
}

break语句和continue语句
break语句和continue语句用来打断一个循环结构的正常执行,break语句可以直接退出循环(直接让循环结束),continue语句可以让本次循环结束直接开始下一次循环(循环体中剩余的语句不参与执行直接开始下一次循环)
break语句多用于循环过程中有多个结束条件。
continue语句多用于循环过程中满足某些条件时,跳过这次循环。
break语句适用于循环结构和switch语句,continue语句只适用于循环结构。
break和continue配合if语句使用。

#include"stdio.h"
int main()
{
	//在1-100中找到10个3的倍数 
	int a=0; 
	for(int i=1;i<=100;i++)
	{
		if(i%3==0)
		{
			printf("%d\n",i);
			a++;//找到一个3的倍数a加1 
		}
		if(a==10)//a等于10证明找到过10次
		{//退出循环 (结束整个for循环)
			break;
		}
	}
	
    return 0;
}
#include"stdio.h"
int main()
{
	//输出1-100中不能被10整除的数 
	int a=0; 
	for(int i=1;i<=100;i++)
	{
		if(i%10==0)
		{//结束本次循环开始下一次循环(本次循环后面的代码不执行)
			continue;
		}
		printf("%d ",i); 
	}
    return 0;
}

do…while循环

do…while循环的一般形式:
do
{
循环体
}while(循环条件表达式);
do…while循环和while循环类似,不同的是while循环时先判断循环条件表达式,如果第一次条件表达式为假那么while循环一次也不执行(先判断后执行)。而do…while(); 循环是先执行循环体,然后判断条件表达式是否为真(先执行后判断)。在do…while中无论表达式的值是真是假,do…while循环都会执行一次(do…while循环至少执行一次)。

#include"stdio.h"
int main()
{
	int a=20,b=20; 
	do
	{
		printf("a=%d\n",a);
		a--;
	}while(a>30);
	//do...while循环至少执行一次 
	while(b>20)
	{
		printf("b=%d\n",b);
		b--;
	}
    return 0;
}

在这里插入图片描述
for循环多用于已知循环次数的循环,while循环多用于只知道循环条件的循环(循环要满足关系表达式或逻辑表达式的条件)。do while循环并不常用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值