循环结构

第一种:用while语句实现循环

while语句可简单地记为: 只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。

注意:while循环的特点是先判断条件表达式,后执行循环体语句。

#include<stdio.h>
int main()
{
	int i=1,sum=0;			//定义变量i的初值为1,sum的初值为0  
	while(i<=100)				//当i>100,条件表达式i<=100的值为假,不执行循环体
	{						//循环体开始
		sum=sum+i;			//第1次累加后,sum的值为1
		i++;					//加完后,i的值加1,为下次累加做准备
	}						//循环体结束
	printf("sum=%d\n",sum);	//输出1+2+3…+100的累加和
	return 0;
}

在这里插入图片描述

第二种:用do⋯while语句实现循环

注意:do…while语句的特点是,先无条件地执行循环体,然后判断循环条件是否成立。

#include <stdio.h>
int main()
{
	int i=1,sum=0;
	do 
	{
		sum=sum+i;
		i++;
	}while(i<=100);
	printf("sum=%d\n",sum);
	return 0;
}

在这里插入图片描述

在一般情况下,用while语句和用do…while语句处理同一问题时,若二者的循环体部分是一样的,那么结果也一样。
但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。

针对上面while表达式一开始为假的例子说明

while语句

#include <stdio.h>
int main()
{
	int i,sum=0;
	printf("please enter i,i=?");
	scanf("%d",&i);
	while(i<=10) 
	{
		sum=sum+i;
		i++;
	}
	printf("sum=%d\n",sum);
	return 0;
}

在这里插入图片描述
这里的结果sum=0,是因为一开始输入的i=11不满足i<=10的条件,所以不进入循环体,sum的最终值为初始值0。

do…while语句

#include <stdio.h>
int main()
{
	int i,sum=0;
	printf("please enter i,i=?");
	scanf("%d",&i);
	do 
	{
		sum=sum+i;
		i++;
	}while(i<=10);
	printf("sum=%d\n",sum);
	return 0;
}

在这里插入图片描述

这里的结果sum=11,是因为do…while语句的特点是先执行再判断,输入i=11,先进循环体执行sum=sum+i ; i++ ;最后判断i<=10,此时i不满足条件,输出sum=11。

第三种:用for语句实现循环

for(表达式1;表达式2;表达式3)
语句

表达式1: 设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值。

表达式2: 是循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环。

表达式3: 作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的

意思就是一个for循环体,先从表达式1开始赋初值(这个表达式1只执行一次,后续循环不再重新赋初值),然后到表达式2(判断当前条件是否满足for循环的条件,满足就进入下面的循环体,反正直接跳过),上述满足条件进入循环体执行完语句后到表达式3,执行完表达式3后返回表达式2再判断当前条件是否满足,以此循环,直到表达式3返回的值不满足表达式2退出循环。

改变循环执行的状态

第一种:用break语句提前终止循环

作用:使流程跳到循环体之外,接着执行循环体下面的语句。

例子:在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数以及平均每人捐款的数目。

#include <stdio.h>
#define SUM 100000	//指定符号常量SUM代表10万
int main()
{
	float amount,aver,total; 
	int i;
	for (i=1,total=0;i<=1000;i++)
	{
		printf("please enter amount:");
		scanf("%f",&amount);
		total=total+amount; 
		if(total>=SUM) break; 
	}
	aver=total/i;
	printf("num=%d\naver=%10.2f\n",i,aver); 
	return 0;
}

在这里插入图片描述

for语句指定执行循环体1000次。每次循环中,输入一个捐款人的捐款数,并累加到total中。设置了if语句,在每一次累加捐款数amount后,立即检查累加和total是否达到或超过SUM(即100 000),若超过就执行break语句,流程跳转到循环体的花括号外,提前结束循环。

第二种:用continue语句提前结束本次循环

作用:结束本次循环,即跳过循环体中下面尚未执行的语句,转到循环体结束点之前,接着执行for语句中的“表达式3”,然后进行下一次是否执行循环的判定

例子:输出100~200之间的不能被3整除的数。

#include <stdio.h>
int main()
{	int n;
	for (n=100;n<=200;n++)
	{	if (n%3==0)
			continue;
		printf("%d ",n);
	}
	printf("\n");
	return 0;
}

在这里插入图片描述

当n能被3整除时,执行continue语句,流程跳转到表示循环体结束的右花括号的前面(注意不是右花括号的后面),从而跳过printf函数语句,结束本次循环,然后进行循环变量的增值(n++),只要n<=200,就会接着执行下一次循环。

break语句和continue语句的区别

continue语句只结束本次循环,而非终止整个循环。break语句结束整个循环,不再判断执行循环的条件是否成立。

#include <stdio.h>
int main()
{
	int i,j,n=0;
	for(i=1;i<=4;i++)
		for(j=1;j<=5;j++,n++)		//n用来累计输出数据的个数
		{	if(n%5==0) printf("\n");	//控制在输出5个数据后换行
			
			printf("%d\t",i*j);
		}  
	printf("\n");    
	return 0;
}

正常输出

在这里插入图片描述

break语句

#include <stdio.h>
int main()
{
	int i,j,n=0;
	for(i=1;i<=4;i++)
		for(j=1;j<=5;j++,n++)		//n用来累计输出数据的个数
		{	if(n%5==0) printf("\n");	//控制在输出5个数据后换行
		
			if (i==3 && j==1) break;
			
			printf("%d\t",i*j);
		}  
	printf("\n");    
	return 0;
}

在这里插入图片描述

当i==3时直接终止此次循环for(j=1;j<=5;j++,n++),返回上面的循环for(i=1;i<=4;i++),所以第三行的没有输出,程序来到第四行输出。

continue语句

#include <stdio.h>
int main()
{
	int i,j,n=0;
	for(i=1;i<=4;i++)
		for(j=1;j<=5;j++,n++)		//n用来累计输出数据的个数
		{	if(n%5==0) printf("\n");	//控制在输出5个数据后换行
		
			if (i==3 && j==1) continue;
			
			printf("%d\t",i*j);
		}  
	printf("\n");    
	return 0;
}

在这里插入图片描述

当i==3时跳出此次循环for(j=1;j<=5;j++,n++)的表达式1(j=1)时的循环,返回到循环for(j=1;j<=5;j++,n++)表达式3(j++,n++),然后再到表达式2判断(j<=5)继续循环,所以第三行的第一个数没有输出,程序来到第二个数输出,最终输出为4个数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值