循环语句

  • 1、for 循环
  • 2、while 循环
  • 3、do while 循环
  • 4、break 的使用
  • 5、continue 的使用
  • 6、综合练习

1、for 循环

表达式:

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

表达式1:初始化,最早被执行,有且执行一次;
表达式2:判断条件,为真循环继续,为假循环结束,每次进入循环都需要判断,每次都执行
表达式3:步进,修改循环因子值,执行完语句块1之后执行,每次都执行

分析如下代码:

例1:

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

android 语句循环 循环语句的代码_c语言

例2:输出 3 个数字

int main()
{
	int i;
	for (i = 0; i < 3; i++)
	{
		printf("%d\n", i);
	}
	return 0;
}

for 循环中的三个表达式都可以省略(两个分号不能省略),例如上面的程序可以(但是不建议)改成如下代码

int main()
{
	int i = 0;   // 初始化
	for (; ; )
	{
		if (i >= 3) {  // 判断
			break;
		}
		printf("%d\n", i);
		i++;   // 修改循环因子
	}
	return 0;
}

总结:for 循环是使用最多的循环语句,其最大的特点就是三个表达式放在一起,不容易漏写,大家且用且珍惜(●’◡’●)

2、while 循环

表达式:

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

表达式1为真循环继续,为假循环结束

例子:将上面的例子改为 while 循环

int main()
{
	int i = 0;   // 初始化
	while (i < 3) {  // 判断
		printf("%d\n", i);
		i++;   // 修改循环因子
	}
	return 0;
}

3、do while 循环

表达式:

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

表达式1为真循环继续,为假循环结束

例子:将上面的例子改成 do while 循环

int main()
{
	int i = 0;   // 初始化
	do {
		printf("%d\n", i);
		i++;   // 修改循环因子
	} while (i < 3);   // 判断条件
	return 0;
}

注意:

  • while 保证语句块至少执行 0 次及以上
  • do while 保证语句块至少执行 1 次及以上
  • 当表达式的第一次的值为 “真” 时,两种循环完全相同

4、break 的使用

break 用于跳出 switch 或者跳出一层循环

例如:求满足如下条件的 x 的值

1 + 2 + 3 + … + x < 1000 且 1 + 2 + 3 + … + x + (x+1) > 1000

输出 x 和求和的值

void SumTo1000()
{
	int sum = 0;   // 保存累加的值
	int i;   // i 后面还需要使用,则定义在 for 循环外面
	for (i = 1; ; i++) {
		sum += i;
		if (sum > 1000) {
			break;   // 符合条件,结束循环
		}
	}
	printf("x = %d, 和 = %d\n", i - 1, sum);
}

输出结果:

android 语句循环 循环语句的代码_算法_02

5、continue 的使用

continue:提前结束本次(趟)循环,直接进入下一次(趟)循环

例子:输出 100~200 之间的不能被 3 整除的数

法一:

for (n = 100; n < 200; n++) {
	if (n % 3 != 0) {
		printf("%d  ", n);
	}
}

法二:利用 continue 关键字实现

for (n = 100; n < 200; n++) {
	if (n % 3 == 0) {
		continue;   // 提前结束本次循环,后面的输出不执行
	}
	printf("%d  ", n);
}

6、综合练习

例1:用android 语句循环 循环语句的代码_数据结构_03 公式求 android 语句循环 循环语句的代码_i++_04 的近似值,直到发现某一项的绝对值小于10-6 为止

分析:

  • 该公式用于求 android 语句循环 循环语句的代码_android 语句循环_05,只需要将最后的结果乘以 4 即为 android 语句循环 循环语句的代码_i++_06
  • 公式中的每一项均由符号、分子和分母组成,那么在程序中只需要将这三部分处理好

代码如下:

double GetPi()
{
	int flg = 1;   // 保存符号位
	double m = 1;  // 分母
	double n = 1;  // 分子
	double tmp = 0;  // 累加和
	while (n / m > 1e-6) {
		tmp += flg * n / m;
		flg *= -1;
		m += 2;
	}
	return tmp * 4;
}
int main()
{
	double ret = GetPi();
	printf("%lf\n", ret);
	return 0;
}

例2:求斐波那契(Fibonacci)数列的第 n 个数。这个数列有如下特点:第1、第2两个数为 1、1。从第 3 个数开始,该数是前面两个数之和。即:
android 语句循环 循环语句的代码_数据结构_07

int Fibon(int n)
{
	int f1 = 1;   // 保存第一项的值
	int f2 = 1;   // 保存第二项的值
	int f3 = 1;   // 当前项的值
	for (int i = 3; i <= n; ++i) {
		f3 = f1 + f2;   // 当前项的值等于前两项之和
		f1 = f2;   // 还没达到需要求的项数,则两个值需要后移
		f2 = f3;
	}
	return f3;
}
int main()
{
	int n = 3;
	printf("%d\n", Fibon(n));
	return 0;
}