贝蒂陷入无限循环啦~

引言:

    前面贝蒂带大家了解了选择结构,今天就来为大家介绍循环结构,也就是我们熟悉的while,do while,还有for的用法~

1.while

1.1while的用法

while循环的一般形式为:

while(表达式)

{
    语句块;
}

      代码会先判断表达式的内容,如果为真(非0),则执行语句块的内容,然后再次判断表达式的内容......一直到表达式的内容为假(0),跳出循环,执行其他语句。 

      一般条件下,表达式执行次数比循环体内部语句块执行次数多1,因为最后一次判断表达式内容为0,跳出循环。 

      举个简单的例子:

​//计算1~100的和
#include
int main()
{
	int i = 1;
	int sum = 0;
	while (i <= 100)//判断条件,当i大于100跳出循环
	{
		sum = sum + i;
		i++;
	}
	printf("%d\n", sum);
	return 0;
}

​
sum=5050

   1.2死循环

   陷入死循环:

#include
int main()
{
	while (1)
	{
		printf("陷入死循环啦\n");
	}
	return 0;
}

贝蒂陷入无限循环啦~_第1张图片

      贝蒂说:“如果表达式的内容一直为真,就会陷入无限循环,所以大家在写表达式条件时候一定要注意哦~”

 2.do while

   2.1do while的用法

    除了while,C语言还有一种相似的do while的语法的结构,让我们来学习学习吧~

do-while循环的一般形式为:

do{
    语句块;
}while(表达式);

      do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。

    2.2简单的例子

输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4321
输⼊:521,输出:125

分析:

1.我们要想逆序打印一个正整数,首先我们要先得到每一位的数字。

2.要得到每一位数字,我们可以先定义一个整数n,输出n%10,然后将n/10。

3.重复步骤2,直到n=0,也就是达到我们的循环条件。

   代码如下 :

#include
int main()
{
	int n = 0;
	scanf("%d", &n);
	while (n)//当n为0时候跳出循环
	{
		printf("%d ", n % 10);//输出最低位的值
		n /= 10;
	}
	return 0;
}

       贝蒂说:“while循环和do-while各有特点,大家可以适当选择,但在实际编程中使用while循环较多,毕竟while用法相对来说比较简单啦~”

      3.for循环

         3.1for的用法

 for 循环的一般形式为:

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

{
    语句块;
}

它的运行过程为:
1.先执行“表达式1”。

2. 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。

3. 执行完循环体后再执行“表达式3”。

4).重复执行步骤 2 和 3,直到“表达式2”的值为假,就结束循环。

上面的步骤中,表达式1只执行一次,步骤2与步骤3会重复执行,for 语句的主要作用就是不断执行步骤 2和 3。

       贝蒂说:“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。” 

       3.2例子

         我们还是用计算1~100的和来举例子吧~

#include 
int main(){
    int i, sum=0;
    for(i=1; i<=100; i++)
    {
        sum+=i;
    }
    printf("%d\n",sum);
    return 0;
}

3.3for的几种写法 

      其实在for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号;必须保留)。

      我们还是用计算1~100的题目来举例。

(1)省略表达式1

      如果省略表达式1,也就是初始化内容,编译器会默认上面的初始化内容为表达式1。也就相当于把初始化内容提出来了,对结果并不会产生影响~

int i = 1, sum = 0;
for( ; i<=100; i++)//默认i开始为1
{
    sum+=i;
}
(2)省略表达式2

      如果省略表达式2,相当于循环没有判断结束的标志,就会死循环。

for(i=1; ; i++)
{ 
sum=sum+i;
}//没有判断条件,死循环
 (3)省略表达式3

      如果省略表达式3,我们可以在循环内容中添加,这种循环方式类似while循环,但是如果不添加的话就会死循环哦~

for(i=1; i<=100; )
{
    sum=sum+i;
    i++;//如果没有这个条件,就会死循环
} 

      贝蒂说:“虽然for循环可以省略其中表达式内容,但是贝蒂还是不推荐省略,这样可以避免很多不必要的错误~” 

 4.循环语句中的continue,break

    4.1continue的作用

      continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。

    4.2while,for里的continue

        (1)while里的continue

            让我们看看下面这个例子:

#include 
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			continue;
		}//当i等于5后,就执⾏continue,循环直接进行下次循环
		//不执行continue后面的内容
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

输出结果为:1,2,3,4 ......死循环

因为i不执行i+1,所以i一直都是5,陷入死循环

            (2)for里的continue 

                我们还是上面的例子,看看是否也会陷入死循环   

#include 
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
		{
			continue;
		} //这⾥continue跳过了后边的打印,来到了i++的部分
		printf("%d ", i);
	}
	return 0;
}

输出结果:1,2,3,4,6,7,8,9,10,没有5 

         贝蒂说:“从这里我们就可以看出while,for中的continue的区别啦~,for中的i+1不受continue的影响,这或许也是我们大家常用for的原因之一吧~”

       4.3break的作用 

      当 break 关键字用于 while、for 循环时,会终止循环,不会执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。

       4.4while,for里的break

         (1)while里的break

              让我们继续借用上面的那个例子,如果continue换成break会怎么样呢~

#include 
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			break;
		} //当i等于5后,就执⾏break,循环就终⽌了
		printf("%d ", i);
		i++;
	}
	return 0;
}

输出结果:1,2,3,4 

   (2)for里的break

      我们继续看看for里面的break,和while有什么不同呢

#include 
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

输出结果:1,2,3,4 

      贝蒂说:“通过观察我们知道,不管是在while,还是for循环中,break的作用几乎是相同的” 

    4.5 do-while循环中的continue,break

#include 
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1;
	} while (i <= 10);
	return 0;
}
#include 
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	} while (i <= 10);
	return 0;
}

    贝蒂说:“do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样,大家感兴趣的话,可以自行运行一下,贝蒂在这里就不在赘述啦~”

   5.嵌套循环

       我们知道在选择语句中有嵌套,那么循环里面是否有嵌套呢,答案自然是有的~

    5.1打印1~100的素数

题目:

找出100~200之间的素数,并打印在屏幕上。
注:素数⼜称质数,只能被1和本⾝整除的数字。

解析:

1. 要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。
2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤循环解决。
3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
 

    代码如下:

#include

输出结果 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

5.2打印九九乘法表

#include
int main()
{
	int i = 1;
	for (i = 1; i < 10; i++)
	{
		int j = 0;
		for (j = 1; j <= i; j++)
		{
			printf("%d*%d=%2d  ", i, j, i * j);
		}
		printf("\n");
	}
	return 0;
}

输出结果

1*1= 1
2*1= 2  2*2= 4
3*1= 3  3*2= 6  3*3= 9
4*1= 4  4*2= 8  4*3=12  4*4=16
5*1= 5  5*2=10  5*3=15  5*4=20  5*5=25
6*1= 6  6*2=12  6*3=18  6*4=24  6*5=30  6*6=36
7*1= 7  7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49
8*1= 8  8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64
9*1= 9  9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81

    贝蒂说:“break是跳出最近的一次循环哦 ,大家千万不要搞错啦~” 

 6.goto语句

   6.1goto语句的用法

        C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。

goto label;
..
.
label: statement;

贝蒂陷入无限循环啦~_第2张图片 

    6.2goto的例子

#include 
int main()
{
	printf("1\n");
	goto next;//直接跳过下一步,执行next后的语句
	printf("2\n");
next:
	printf("3\n");
	return 0;
}

输出:1 3 

     贝蒂说:“在任何编程语言中,都不建议使用 goto 语句。因为它使得程序难以受我们的掌控,使程序难以理解和难以修改,且任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法,所以大家在写程序时候尽量避免写goto哦~” 

结言: 

       通过这些,贝蒂相信你已经对循环有了一定的理解,有能力成功把贝蒂从无限循环中拯救出来哦~ 

你可能感兴趣的:(C语言学习,c语言,学习)