第九次课-----循环结构
一、循环
什么时候用到循环结构:处理重复的问题的时候。
1.while语句
while(循环条件表达式)
循环体语句;
执行过程:只有循环条件表达式的值为真就 执行循环体语句,先判断后执行。
demo:输出1---n之间的数
int main(void)
{
int i = 1;
int n = 0;
printf("请输入n的值:");
scanf("%d",&n);//10 15
while(i <= n)
{
printf("%d\n",i);
i++;
}
return 0;
}
demo:计算m+...+n的值
int main(void)
{
int i = 1;
int n = 0;
int m = 0;
int sum = 0;
printf("请依次输入m和n的值:");
scanf("%d%d",&m,&n);//m+...n 10 15
while (m <= n)
{
sum = sum + m;
m++;
}
printf("sum=%d\n", sum);
return 0;
}
2.do...while语句
do
{
循环体语句;
}while(循环条件表达式);
执行过程:先执行循环体语句,再检查循环条件表达式的值是否为真,如果为真则继续 执行循环体语句,否则结束循环。
demo:计算m+...+n的值
int main(void)
{
int i = 1;
int n = 0;
int m = 0;
int sum = 0;
printf("请依次输入m和n的值:");
scanf("%d%d",&m,&n);//m+...n 10 15
do
{
sum = sum + m;
m++;
}while (m <= n);
printf("sum=%d\n", sum);
return 0;
}
demo:输出1---n之间的数
int main(void)
{
int i = 1;
int n = 0;
printf("请输入n的值:");
scanf("%d",&n);//10 15
do
{
printf("%d\n",i);
i++;
}while(i <= n);
return 0;
}
while语句和do...while语句的区别:while语句是先判断后执行,do...while语句是先 执行,至少会执行一次。
int main(void)
{
int i = 1;
int n = 11;
int m = 12;
int sum = 0;
while (m <= n)
{
sum = sum + m;
m++;
}
printf("sum=%d\n", sum);//sum的值为0
return 0;
}
int main(void)
{
int i = 1;
int n = 11;
int m = 12;
int sum = 0;
do
{//先执行一次循环体语句,再去判断条件表达式的值
sum = sum + m;
m++;
}while (m <= n);
printf("sum=%d\n", sum);//sum的值为12
return 0;
}
3.for语句
for(表达式1;表达式2;表达式3)
循环体语句;
m = 0;
while(m <= n)
{
sum = sum + m;
m++;
}
for(m = 0;m <= n;m++)
{
sum = sum + m;
}
表达式1:设置初始条件,只执行一次,为0个或多个变量设置初值。
表达式2:是循环条件表达式,用来判定是否继续循环。在每次执行循环体之前要先执行 表达式2,然后再决定是否继续执行循环。
表达式3:作为循环的调整,比如是循环体变量增值,它是执行循环体语句之后再执行。
demo:输出1---n之间的数
int main(void)
{
int i = 1;
int n = 0;
printf("请输入n的值:");
scanf("%d",&n);//10 15
/*while(i <= n)
{
printf("%d\n",i);
i++;
}*/
for(i = 1;i <= n;i++)
{
printf("%d\n",i);
}
return 0;
}
demo:计算m+...+n的值
int main(void)
{
int n = 0;
int m = 0;
int sum = 0;
printf("请依次输入m和n的值:");
scanf("%d%d",&m,&n);//m+...n 10 15
/*while (m <= n)
{
sum = sum + m;
m++;
}*/
for(;m <= n;m++)
{
sum = sum + m;
}
printf("sum=%d\n", sum);
return 0;
}
注意:
1>for语句的三个表达式不是必须的。
2>当条件表达式(表达式2)的值为假(为0)时for循环语句就结束。
3>可以在循环体内执行break,continue,goto语句。
for(;;)
{
}
相当于
while(1)
{
}
demo:计算m+...+n的值,当累加的值大于100时退出循环
int main(void)
{
int n = 0;
int m = 0;
int sum = 0;
printf("请依次输入m和n的值:");
scanf("%d%d",&m,&n);//m+...n 10 50
for(;m <= n;m++)
{
sum = sum + m;
if(sum > 100)break;
}
printf("sum=%d\n", sum);
return 0;
}
demo:输出1---n之间的数 ,当输出的数大于100时结束循环
int main(void)
{
int i = 1;
int n = 0;
printf("请输入n的值:");
scanf("%d",&n);//10 15
for(i = 1;i <= n;i++)
{
printf("%d\n",i);
if(i > 100)break;
}
return 0;
}
4.continue语句
只用于结束本次循环,即直接去执行表达式3.
int main(void)
{
int i = 1;
int n = 0;
int sum = 0;
printf("请输入n的值:");
scanf("%d", &n);//150
for (i = 1; i <= n; i++)
{
sum = sum + i;
printf("sum:%d\n",sum);
if (i > 100)continue;
printf("i=%d\n", i);
}
return 0;
}
C语言中的中断语句
break语句:跳出本层循环,执行循环后的语句。
continue语句:跳出本次循环,执行下一次循环。
goto语句:跳出到指定的标号位。
int main(void)
{
int i = 1;
int j = 0;
int k = 0;
for (j = 0; j < 2; j++)//2
{
for (i = 0; i < 15; i++)//15
{
if (i == 10)goto again;
printf("i=%d\t", i);
}
}
again:printf("穿越啦\n");
return 0;
}