分支与循环(下)

(一)while语句的使用
与之前学习的if语句相比,if语句只能执行执行一次,而while中的语句,只要满足while后面的条件,就会一直执行,如下图

#include <stdio.h>

int main()

{
int a=1;

if(a==1)

printf("hi");//只打印一次hi

return 0;
}
#include <stdio.h>

int main()

{
int a=1;

while(a==1)

{
  printf("hi");//无限循环打印hi
}
return 0;
}

while语句的使用就是在while后面的()里添上执行条件,然后在{}里写上你要求循环执行的语句,比如你要求打印数字1-10,可以用以下代码实现要求

#include <stdio.h>

int main()

{

int i=1;//循环变量的初始化

while(i<=10)  //()里的是循环结束条件的判断
{
printf("%d\n",i);
i++;//循环变量的调整
}
return 0;
}


(二)for语句的使用
与while语句相同,也是实现循环的效果,并且比while简单,高效,也是相较于前面的while和后面要提及的do…while语句中使用最多的一种语句。
for循环的语法格式如下

for(表达式1;表达式2;表达式3)
{

}


表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
什么意思呢,还是拿上述例子举例,要求打印出1-10的数字,那么我们就可以给一个变量i,前面提到,变量在使用的时候必须要初始化,那么我们就可以给它初始化为1,表达式1就是int i=1,然后我们想要打印到10结束,那么表达式2就是i<=10,最后要让程序从1到10依次打印数字,那么表达式3就是i++,从1开始打印,每打印一次之后就自动加一,直到10结束循环,具体代码如下

#include <stdio.h>

int main()

{
int i=1;
for(i=1;i<=10;i++)
{
printf("%d\n",i);
}

return 0;

}


(三)while与if的区别
两种都是循环语句,为什么if语句的使用更多呢,可以看一下如下代码,分别是if和while循环的格式


int i=1;//循环变量的初始化

while(i<=10)//循环结束条件的判断

{
printf("%d\n",i);
i++;//循环变量的调整
}


for(int i=1;i<=10;i++)//三部分在一起

{
printf("%d\n",i);
}


可以发现,while循环的初始化,判断和调整分别在不同的地方,而for循环的三个条件都集中在for后面的()里,非常集中,也便于后续代码的维护,所以for循环使用的更多
(四)do…while循环的使用
在三中循环语句中,do…while循环语句的使用最少,它的循环语法格式如下

do
{

语句;

}while();


它也与前面两种循环语句有着一定的区别,前面两种都是先判断条件能否满足,如果能满足,再进入循环,而do…while循环是先执行一次do后面的代码,然后到while这里再判断是否要循环执行下一次,所以do…while循环语句不管条件满不满足都会至少执行一次。
也是用上述例子举例,用do…while循环语句打印出1-10的数字,do…while语句中跟前两种语句一样也有初始化,判断,调整三部分,这三部分的位置也与前面两种不同,代码如下

#include <stdio.h>

int main()

{
int i=1;//循环变量的初始化

do

{
printf("%d\n",i);
i++;    //循环变量的调整
}while(i<=10); //循环结束条件的判断



return 0;
}


(五)while循环中的break和continue
当我们想要语句不再循环执行下去,或满足某一个条件时就停止,那么我们可以用break和continue来终止循环
break是当到达那个条件时,整个循环终止。
continue是当达到那个条件时,跳过continue后面的循环语句,而不是直接终止整个循环,然后继续进行下次循环的判断。
但在while语句中,continue的使用会出现一点问题,如下代码分别是break和continue在while中的使用

#include <stdio.h>

int main()

{
int i=1;
while(i<=10)
{
if(i==3)

break;//如果i=3,整个循环终止,屏幕上打印1,2

printf("%d\n",i);

i++;



return 0;
}
#include <stdio.h>

int main()

{
int i=1;
while(i<=10)
{
if(i==3)
continue;   //跳过continue后面的部分,然后进行下一次循环,但此时i++也被跳过,所以i仍然等于3,
            //程序死循环
printf("%d\n",i);
i++;
}




return 0;
}


可以看出,因为while中“循环变量调整”的位置的原因,所以导致程序进入了死循环
(六)for循环中的break和continue
在for循环中使用break和continue来终止循环也是和while循环一样的效果,只不过因为for循环中“循环变量调整”的位置在continue的前面,所以它并不会出现while中那样的死循环,而是跳过本次循环进行下一次循环,如下图

#include <stdio.h>

int main()

{
int i=1;
for(i=1;i<=10;i++)

{
if(i==3)
break;//如果i=3,结束整个循环,屏幕上打印1,2
printf("%d\n",i);
}


return 0;
}
#include <stdio.h>

int main()

{
int i=1;
for(i=1;i<=10;i++)

{
if(i==3)
continue;//i=3,跳过后面语句,但没有跳过i++,所以进行下一次循环时i变为4,可以继续循环
         //最终在屏幕上打印1,2,4,5,6,7,8,9,10
printf("%d\n",i);
}


return 0;
}


(七)do…while循环中的break和continue
do…while循环的变量的调整的位置与while循环一样在continue后面,所以也会出现死循环,所以do…while循环与while循环使用的break与continue用法一致
(八)循环的嵌套
前面提及的if…else语句可以重复嵌套使用,那么for,while,do…while这三种循环语句也可以嵌套使用,这样才能更好的解决问题

比如练习一个题目 “打印100-200内的素数”。

首先素数是大于1的自然数里,只能被1和它本身整除,不能被其他数整除的数。那么我们要编写这个代码首先要用第一个for循环产生100-200内的整数,然后对这100个数进行筛选,我们可以使用暴力枚举法,让这100个数分别除以2∽本身数字-1,如果都不能除尽,那么这个数就是素数,所以再用第二个for循环产生2∽i-1个数,我们定义为j,让i%j,再使用if语句判断,如果结果不为0,那么就是素数,如以下代码

#include <stdio.h>

int main()

{

	int i = 100;
	int j;
	for (i = 100; i <= 200; i++)//产生100个数

	{
		int flag = 1;//做标记,flag=1时i为素数
		for (j = 2; j < i; j++)//产生2~i-1个数
		{

			if (i % j == 0)
				{
                  flag = 0;//flag为0,此时i不是素数
			      break;//跳出内层循环
                }

		}if(flag==1)
			printf("%d\n", i);
	}


	return 0;
}

(九)goto语句

goto语句可实现在同一个函数内跳转到设置好的地方,如下

#include <stdio.h>

int main()

{
	printf("hi\n");

	goto next;
	printf("haha\n");

next:
	printf("hehe\n");//跳过了haha的打印

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值