循环语句
上几篇文章我提到了选择结构程序https://mp.csdn.net/mp_blog/creation/editor/141129528,例如if语句、Switch语句,当满足条件时执行,否则不执行,选择结构程序是为了解决生活中的选择性问题。那么循环语句就是为了解决生活中的简单而重复的工作。
C语言有3种循环语句,即while、do...while和for循环语句。下面由我来一一介绍:
一、while语句
1.一般形式:
while (表达式)
{
语句块(循环体)
}
特点:
先判断循环条件是否成立,再执行循环体语句块中的内容。
我们先拿if语句和while语句做个对比。
int main()
{
if (1)
{
printf("haha\n");
}
return 0;
}
我们可以看到如果是if语句,当括号内表达式是1,为真,则打印出“haha”
int main()
{
while(1)
{
printf("haha\n");
}
return 0;
}
如果是while语句,当括号内的表达式是1时,为真,则会一直打印出“haha”。
向上面这样一直执行条件,无法终止的循环被称为死循环或无限循环。
2.while语句的执行流程图
我们通过一道经典的题目来熟悉while语句:
计算n~100的累加和
int main()
{
int n, sum=0; //定义变量n,sum,并初始化sum
printf("请输入一个自然数:");
scanf("%d", &n); //输入自然数
while (n <= 100) //使用while循环
{
sum = sum + n; //进行累加
n++; //n的自增运算
}
printf("结果为:%d\n", sum);//输出
return 0;
}
二、do...while语句
1.一般形式:
do...while语句,不论条件是否满足,循环过程必须执行一次
do
{
语句块(循环体)
} while (表达式);
特点:
先执行循环体语句块中的内容,然后再判断循环条件是否成立。
int main() { do { printf("haha"); break; } while (1); return 0; }
上面的代码,是把前面if语句和while语句进行的替换,我们可以根据看出while语句和do...while语句的区别:while语句在每次循环前检验条件,do...while在每次循环后检验条件。
2.do...while语句的执行流程图
在上面的学习中,我们利用while语句计算n~100累加和 ,在我们下面的例子中,我们将使用do...while语句实现相同功能。在程序运行过程中,虽然两者的结果是相同的,但我们要了解两者的区别
int main()
{
int n,sum = 0;
printf("请输入一个自然数:");
scanf("%d", &n);
do //使用do...while循环
{
sum = sum + n;
n++; //进行累加
} while (n <= 100); //while循环条件
printf("结果为:%d\n", sum);
return 0;
}
三、for语句
1.一般形式
for语句也可以控制循环,并且在每次循环时修改循环变量。
for (表达式1; 表达式2; 表达式3;)
{
语句块(循环体)
}
//还可以表示为
for(循环变量赋初值;循环条件;循环变量改变;)
{
语句块
}
2.for语句的执行流程图
3.循环控制语句的互换
for循环的执行过程也可以使用while循环来表示:
表达式1;
while (表达式2)
{
语句块
表达式3;
}
上面就是使用while循环表示for循环的一般形式。下面我们还是利用计算n~100的累加和来了解for循环的使用
int main()
{
int n, sum = 0;
int i;
printf("请输入一个自然数:");
scanf("%d", &n);
for (i = n; n <= 100; i++)
{
sum = sum + i;
}
printf("结果为:%d\n", sum);
return 0;
}
4.for循环的变体
(1)for语句中省略表达式1
int main()
{
int n, i , sum = 0;
i=n; //省略前应先对循环变量赋初值
pritnf("请输入n的值:\n");
scanf("%d", &n);
for (; i <= n; i++) //省略表达式1
{
sum = sum + i;
}
printf("结果为:%d\n", sum);
return 0;
}
上面在for的另一种表达形式中我们以了解到,表达式1的作用是对循环变量赋初值,如果省略了表达式1,为了保证程序正常的运行,应在for语句之前先给循环变量赋值 。另外,需要额外注意的是,省略表达式1时,其后的分号不能省略。
(2)for语句中省略表达式2
int main()
{
int n, i , sum = 0;
printf("请输入n的值:");
scanf("%d", &n);
for (i=n;;i++) //缺少循环条件,陷入死循环
{
sum = sum + i;
}
printf("结果为:%d\n", sum);
return 0;
}
for语句中不能省略表达式2。
(3)for语句中省略表达式3
int main()
{
int n, i , sum = 0;
printf("请输入n的值:");
scanf("%d", &n);
for (i=n;i<=100;)
{
sum = sum + i;
i++; //此处可代替表达式3的功能
}
printf("结果为:%d\n", sum);
return 0;
}
表达式3的作用是使循环变量改变,如果省略表达式3,为保证程序运行,应该在循环体内增加类似功能的语句。
(4)for循环中的逗号应用
int main()
{
int i , sum;
for (sum=0,i=0;i<=100;i++,i++)
{
sum = sum + i;
}
printf("结果为:%d\n", sum);
return 0;
}
表达式1、3都可以是逗号表达式,在逗号表达式内按照自左至右的顺序执行
如果我们将表达式2也加上逗号运算符会发生什么呢?
int main()
{
int i;
for (i = 0; i < 5,printf("%d\n",i); i++)
{
printf("hello world!\n");
}
return 0;
}
for循环之所以能限制循环的次数,就是应为有第二个表达式的存在,如果第二个表达式不满足条件,就会退出循环,上面的表达式2变成了逗号表达式,两个表达式都会执行,但是结果取最后一个表达式的结果,for循环的第二个表达式结果就变成了printf的返回值,由此可知,此程序会无限的循环下去
3种循环语句的区别
1.while、do...while循环只在while后面指定循环条件,在循环体中包含趋于循环结束的语句,而for循环可以在表达式3中包含使循环处于结束的操作,凡是用while完成的功能,用for循环都能完成;
2.while、do...while循环,循环变量初始化在while和do...while语句之前完成,而for循环则在表达式1中实现。
3.while循环、do...while循环和for循环都可以使用break语句跳出循环,用continue语句结束本次循环;
以上便是关于循环语句所有的内容了如果有不清楚的地方,欢迎大家在评论区讨论。
感谢您的观看,这里是磊磊吖的学习笔记,记得订阅和关注,让我们一起学习