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);