循环控制(1/3)

 循环语句

   上几篇文章我提到了选择结构程序https://mp.csdn.net/mp_blog/creation/editor/141129528,例如if语句、Switch语句,当满足条件时执行,否则不执行,选择结构程序是为了解决生活中的选择性问题。那么循环语句就是为了解决生活中的简单而重复的工作。

  C语言有3种循环语句,即while、do...while和for循环语句。下面由我来一一介绍:

一、while语句

1.一般形式:


while (表达式)
{
	语句块(循环体)
}

特点:

先判断循环条件是否成立,再执行循环体语句块中的内容。 

 我们先拿if语句和while语句做个对比。

int main()
{
	if (1)
	{
		printf("haha\n");
	}
	return 0;
}

 我们可以看到如果是if语句,当括号内表达式是1,为真,则打印出“haha”

int main()
{
	while(1)
	{
		printf("haha\n");
	}
	return 0;
}

 如果是while语句,当括号内的表达式是1时,为真,则会一直打印出“haha”。

 向上面这样一直执行条件,无法终止的循环被称为死循环或无限循环。


 2.while语句的执行流程图

我们通过一道经典的题目来熟悉while语句:

计算n~100的累加和

int main()
{
	int n, sum=0;         //定义变量n,sum,并初始化sum
	printf("请输入一个自然数:");
	scanf("%d", &n);      //输入自然数
	while (n <= 100)      //使用while循环
	{
		sum = sum + n;    //进行累加
		n++;              //n的自增运算
	}
	printf("结果为:%d\n", sum);//输出
	return 0;
}

二、do...while语句

1.一般形式:

do...while语句,不论条件是否满足,循环过程必须执行一次

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

特点:

先执行循环体语句块中的内容,然后再判断循环条件是否成立。 

int main()
{
	do
	{
		printf("haha");
		break;
	} while (1);
	return 0;
}

 上面的代码,是把前面if语句和while语句进行的替换,我们可以根据看出while语句和do...while语句的区别:while语句在每次循环前检验条件,do...while在每次循环后检验条件

2.do...while语句的执行流程图

在上面的学习中,我们利用while语句计算n~100累加和 ,在我们下面的例子中,我们将使用do...while语句实现相同功能。在程序运行过程中,虽然两者的结果是相同的,但我们要了解两者的区别

int main()
{
	int n,sum = 0;
	printf("请输入一个自然数:");
	scanf("%d", &n);
	do                              //使用do...while循环
	{
		sum = sum + n; 
        n++;             //进行累加
	} while (n <= 100);             //while循环条件
	printf("结果为:%d\n", sum);
	return 0;
}

三、for语句 

1.一般形式

for语句也可以控制循环,并且在每次循环时修改循环变量。

for (表达式1; 表达式2; 表达式3;)
{
	语句块(循环体)
}

//还可以表示为
for(循环变量赋初值;循环条件;循环变量改变;)
{
     语句块
}

2.for语句的执行流程图 

3.循环控制语句的互换 

for循环的执行过程也可以使用while循环来表示:

表达式1;
while (表达式2)
{
	语句块
	表达式3;
}

上面就是使用while循环表示for循环的一般形式。下面我们还是利用计算n~100的累加和来了解for循环的使用

int main()
{
	int n, sum = 0;
	int i;
	printf("请输入一个自然数:");
	scanf("%d", &n);
	for (i = n; n <= 100; i++)
	{
		sum = sum + i;
	}
	printf("结果为:%d\n", sum);
	return 0;
}

4.for循环的变体

(1)for语句中省略表达式1
int main()
{
	int n, i , sum = 0;
    i=n;                  //省略前应先对循环变量赋初值
	pritnf("请输入n的值:\n");
	scanf("%d", &n);
	for (; i <= n; i++)         //省略表达式1
	{
		sum = sum + i;
		
	}
	printf("结果为:%d\n", sum);
	return 0;
}

上面在for的另一种表达形式中我们以了解到,表达式1的作用是对循环变量赋初值,如果省略了表达式1,为了保证程序正常的运行,应在for语句之前先给循环变量赋值 。另外,需要额外注意的是,省略表达式1时,其后的分号不能省略。

(2)for语句中省略表达式2
int main()
{
	int n, i , sum = 0;
	printf("请输入n的值:");
	scanf("%d", &n);
	for (i=n;;i++)                //缺少循环条件,陷入死循环
	{
		sum = sum + i;
	}
	printf("结果为:%d\n", sum);
	return 0;
}

for语句中不能省略表达式2。

(3)for语句中省略表达式3
int main()
{
	int n, i , sum = 0;
	printf("请输入n的值:");
	scanf("%d", &n);
	
	for (i=n;i<=100;)
	{
		sum = sum + i;
		i++;                           //此处可代替表达式3的功能
	}
	printf("结果为:%d\n", sum);
	return 0;
}

 表达式3的作用是使循环变量改变,如果省略表达式3,为保证程序运行,应该在循环体内增加类似功能的语句。

(4)for循环中的逗号应用

int main()
{
	int  i , sum;
	for (sum=0,i=0;i<=100;i++,i++)
	{
		sum = sum + i;
	}
	printf("结果为:%d\n", sum);
	return 0;
}

表达式1、3都可以是逗号表达式,在逗号表达式内按照自左至右的顺序执行 

如果我们将表达式2也加上逗号运算符会发生什么呢?

int main()
{
	int i;

	for (i = 0; i < 5,printf("%d\n",i); i++)
	{
		printf("hello world!\n");
	}
	return 0;
}

for循环之所以能限制循环的次数,就是应为有第二个表达式的存在,如果第二个表达式不满足条件,就会退出循环,上面的表达式2变成了逗号表达式,两个表达式都会执行,但是结果取最后一个表达式的结果,for循环的第二个表达式结果就变成了printf的返回值,由此可知,此程序会无限的循环下去 

3种循环语句的区别

1.while、do...while循环只在while后面指定循环条件,在循环体中包含趋于循环结束的语句,而for循环可以在表达式3中包含使循环处于结束的操作,凡是用while完成的功能,用for循环都能完成;

2.while、do...while循环,循环变量初始化在while和do...while语句之前完成,而for循环则在表达式1中实现。

3.while循环、do...while循环和for循环都可以使用break语句跳出循环,用continue语句结束本次循环

以上便是关于循环语句所有的内容了如果有不清楚的地方,欢迎大家在评论区讨论。

感谢您的观看,这里是磊磊吖的学习笔记,记得订阅和关注,让我们一起学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值