循环语句——Linux C编程一站式学习

while语句

如上一节中用递归的方法解决计算n!这一迭代问题,不过虽然可以用递归实现,但是循环语句实现起来更为方便,如循环语句计算n!
使用:while(控制表达式) 语句
如果控制表达式的值为真,子语句就被执行,不断判断循环这一过程直到控制表达式的值为假,跳出循环。

int factorial(int n)
{
	int res=1;
	while(n>0)
	{
		res=res*n;
		n=n-1;
	}
	return res;
}

变量res在这个循环中的作用是累加器,把每次循环的中间结果累积起来,变量n是循环变量,每次循环要改变它的值,在控制表达式中要测试它的值,这两点合起来起到控制循环次数的作用。

可见,递归能解决的问题用循环也能解决,但解决问题的思路不一样。
在循环过程中注意一定要有跳出循环的点防止死循环。

do/while语句

使用:do 语句 while(控制表达式)
与while语句区别在于:while语句先测试控制表达式的值再执行循环体,而do/while语句先执行循环体再测试控制表达式的值。如果控制表达式的值一开始就是假,while语句的循环体一次都不执行,而do/while语句的循环体仍然要执行一次再跳出循环。
如求n!:

int factorial(int n)
{
	int result = 1;
	int i = 1;
	do 
	{
		result = result * i;
		i = i + 1;
 	} while (i <= n);
	return result;
}

注意:写循环一定要注意循环即将结束时控制表达式的临界条件是否准确。

for语句

使用:for (控制表达式1; 控制表达式2; 控制表达式3) 语句
若循环体内不含continue,for循环相当于控制表达式1; while(控制表达式2){ 语句 控制表达式3}
表达式1、3都可以为空。
求n!:

int factorial(int n)
{
	int result = 1;
	int i;
	for(i = 1; i <= n; ++i)
		result = result * i;
	return result;
}

break、continue语句

break语句:用来跳出switch语句块、跳出循环体。
continue语句:终止当前循环,和break语句不同的是,continue语句终止当前循环后又回到循环体的开头准备执行下一次循环。

对于while循环和do/while循环,执行continue语句之后测试控制表达式,如果值为真则继续执行下一次循环;对于for循环,执行continue语句之后首先计算控制表达式3,然后测试控制表达式2,如果值为真则继续执行下一次循环。

嵌套循环

在循环中调用一个函数,而那个函数里面又有一个循环,这就是一种嵌套循环。
如用嵌套循环求1-100的素数:

int main(void)
{
 	int i, j;
 	for (i = 1; i <= 100; i++) 
 	{
 		for (j = 2; j < i; j++)
			if (i % j == 0)
 				break;
			if (j == i)
 				printf("%d\n", i);
	}
 	return 0;
}

goto语句和标号

goto语句,可以实现无条件跳转。如果在一个嵌套循环中遇到某个错误条件需要立即跳
出最外层循环做出错处理,就可以用goto语句。如:

for (...)
{	
	for (...) 
	{
 		...
 		if(出现错误条件)
 			goto error;
 	}
error:
 出错处理;
}

这里error叫做标号,任何语句前面都可以加若干个标号,每个标号的命名也要遵循标识符的命名规则。
goto语句过于强大了,从程序中的任何地方都可以无条件跳转到任何其它地方,只要在那个地方定义一个标号就行,唯一的限制是goto只能跳转到同一个函数中的某个标号处,而不能跳到别的函数中。如上面只能跳到error后进行出错处理。

发布了39 篇原创文章 · 获赞 4 · 访问量 1128

猜你喜欢

转载自blog.csdn.net/qq_41403559/article/details/104171001