C语言for循环&do-while循环

5 阅读2分钟

for循环

for循环的判断部分省略

for循环的判断部分省略意味着判断会恒成立所以是死循环

for (;;){
	printf("hh\n");
}

一个省略例子:

当i++ i=1但是j没有初始化所以j的值为第一轮循环后的3不满足条件循环退出

i=2也是同样情况

// 只有第一轮i=0时打印3次hh
// 
int i = 0;
    int j = 0;
    for (; i < 3; i++)
    {
        for (; j < 3; j++)
        {
            printf("hh\n");
        }
    }

for循环中的初始化变量注意事项

int i = 0 这种初始化方法在c99语法/c++语法中支持

for (int i = 0; i < 10; i++)
{ // int i = 0 这种初始化方法在c99语法/c++语法中支持
	printf("hh\n");
}

和break搭配使用

int i = 0;
for (i = 1; i <= 10; i++)
{
	if (i == 5)
		break;
	printf("%d ", i); // 1 2 3 4
}

和continue搭配使用

int i = 0;
for (i = 1; i <= 10; i++)
{
	if (i == 5)
		continue;
	printf("%d ", i); // 1 2 3 4 6 7 8 9 10
}

题1:请问要循环多少次?

int i = 0;
int k = 0;
// 情况1:
for (i = 0, k = 0; k = 0; i++, k++)
{
	printf("hh\n");//不会打印,因为表达式2:k=0是赋值不是判断,k=0是假
	k++;
}
// 情况2:
for (i = 0, k = 0; k == 0; i++, k++)
{
	printf("hh\n"); // 打印1次
	k++;
}

题2:求1!+2!+...+10!

int i = 1;
int j = 1;
int ret = 1;
int result = 0;
//方法一:双层for循环嵌套版
for (i = 1; i <= 10; i++)
{
	for (j = 1; j <= i; j++)
	{

		ret = ret * j;
	}
	result += ret;
	ret = 1;
}
printf("%d\n", result);

//方法二:找规律降低时间复杂度
for (i = 1; i <= 3; i++)
{
	ret = ret * i;
	result = result + ret;
}
printf("%d\n", result);

do-while循环

  • 循环至少执行一次

  • do{

    循环语句;

}while(表达式);

和break搭配使用

int i = 1;
do
{
	if (5 == i)
            break;
	printf("%d ", i); // 1 2 3 4
	i++;
} while (i < 10);

和continue搭配使用

int i = 1;
do
{
	if (5 == i)
		continue;
	printf("%d ", i); // 1 2 3 4 死循环
	i++;
} while (i < 10);