分支语句与循环语句(下)

文章介绍了编程中for循环和while循环的语法和优缺点,强调了for循环的紧凑性和易修改性。同时,讨论了break和continue在循环控制中的作用,以及在for和do...while循环中的应用。还提到了goto语句在跳出多层循环中的功能,但指出其使用应谨慎。
摘要由CSDN通过智能技术生成

3.2 for循环

3.2.1 语法

与while循环相比,for循环的优点是什么呢?

#include<stdio.h>
int main()
{
		int i = 0;//初始化部分
		while (i<=10)//表示条件判断部分
		{
			printf("%d", i);
			i++;//调整部分
    	}
	return 0;
}

这个是while循环中的打印1到10的数字代码

int main()
{
	int i = 0;
	for (i = 0;i <= 10;i++)//分别是初始化部分 条件判断部分 调整部分  
	{
		printf("%d", i);
	}
	return 0;
}

而这个是使用for循环打印出1到10的数字的代码。while循环中的三个必要循环条件由于代码风格使得距离较远,而for循环中的循环的三个必要条件足够集中,方便以后进行修改和思考,因此for循环更具有语法优势。

3.2.2 break和continue在for循环中的用法

int main()
{
	int i = 0;
	for (i = 0;i < 10;i++)
	{
		if (5 == i)
			break;      //break的作用是跳出本次循环
		printf("%d", i);//只能打印出0 1 2 3 4
	}
	return 0;
}
int main()
{
	int i = 0;
	for (i = 0;i < 10;i++)
	{
		if (5 == i)
			continue;      //continue的作用是跳出本次循环
		printf("%d", i);//只能打印出0 1 2 3 4 5 6 7 8 9
	}
	return 0;
}

tip:其中(i==5)写成(5==i)是因为如果当你少写了一个等号时,(i=5)仍然会进行下去,它表达的是将5赋值给i,而写成(5=i)时,其中5是常量,不可以被改变,此时就会出现错误,所以写成第二种形式时可以避免错误的发生。

下面是错误写法:

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

它表达的是将5赋值给i,判断为真,一进入循环体内就会一直执行continue,一直跳出本次循环,所以什么都不输出。

3.2.3for语句的循环控制变量

建议:1.不可以在循环体内修改循环变量,防止循环体失去控制

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

 它表示的是一直输出6,进入死循环,不能输出1到10的数字

            2.for语句的循环控制变量的取值采取“前闭后开区间”写法

int i = 0;
for (i = 0;i < 10;i++);
//前闭后开的写法

int i = 0;
for (i = 0;i <= 9;i++);
//前闭后闭的写法
//都是循环十次,而第一次可以更直接的看出循环了十次

3.24 一些for循环的变种

int main()
{
	for (;;)
	{
		printf("hehe");
	}
	return 0;
}

这里的初始化和调整部分省略时,表示什么都不干,当省略判断部分时,表示恒为真,就会一直进行循环,相当于死循环。 

int main()
{
	int i = 0;
	int j = 0;
	int n=0;
	for (i=0;i < 10;i++)
	{
		for (j=0;j < 10;j++)
		{
			printf("hehe");
			n++;
		}
	}                       //该代码可以打印100个hehe
	
	printf("%d", n);
	return 0;
}
int main()
{
	int i = 0;
	int j = 0;
	int n = 0;
	for (;i < 10;i++)
	{
		for (;j < 10;j++)
		{
			printf("hehe");
			n++;
		}
	}

	printf("%d", n);
	return 0;
}

如果去掉初始化的部分,这里可以打印10个hehe。

我们可以看一下这个代码是怎么运行的?当进入内层循环时,j一直循环到成为10之后,重新从外层循环进入时,j=10,所以不满足内层循环的条件,不会进入内层循环,因此只打印出10个hehe。

int main()
{
	int x, y;
	for (x = 0, y = 0;x < 2 && y < 5;x++, y++)
	{
		printf("hehe\n");
	}
	return 0;
}

该代码中使用多个变量控制循环,对循环没有影响。

这里有一道题请判断一下循环要循环多少次?

int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0;k = 0;i++, k++)
		k++;
	//printf("%d", k);
	return 0;
}

由于判断部分将0赋值给k,表示假,所以不会进入循环,循环次数为零。

3.3 do...while()循环

3.3.1 do语句的语法

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

 特点:循环至少执行一次,使用的场景有限,所以不经常使用。

int main()
{
	int i = 1;
	do 
	{
		printf("%d\n", i);
		i++;
	} while (i < =100);
	return 0;
}

该代码可以打印出1到100之间的数字

3.3.4   do...while循环中的continue和break

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

该代码只可以打印出1,2,3,4,当i等于5时,每一次循环都会判断i是否等于5,等于5时就会跳过本次循环,每次循环时都为5,所以只能打印出1,2,3,4,进入死循环,重复此过程。

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

break的作用是结束循环,当遇到i等于5时就会结束,因此只可以打印出1,2,3,4。

4.goto语句

goto语句的作用是一次性跳出一层或多层循环。只使用break是达不到目的的,它只能从最内层循环退出到上一层的循环。以下是goto语句真正适合的场景

for{
	for{
		for{
			if (diaster)
				goto error;
		}
   }
}
error:
    if(diaster)
      //处理错误情况

下面是使用goto语句的一个例子,然后使用循环的方式实现替换goto语句:
      一个关机程序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{   
	char input[10] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("电脑将在60秒后关机,如果输入:我是猪,将取消关机!\n请输入:>");
	scanf_s("%s", input);
	if (0 == strcmp(input, "我是猪"))
	{
		system("system -a");  //取消关机
	}
	else
	{
		goto again;
	}
	return 0;
}

如果不适用goto语句,则可以使用循环:

int main()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("电脑将在60秒后关机,如果输入:我是猪,将取消关机!\n请输入:>");
	scanf_s("%s", input);
	while (1)
	{
		if (0 == strcmp(input, "我是猪"))
		{
			system("system -a");  //取消关机
			break;
		}
	}
	return 0;
}

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值