大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入知识整理复习模式。若有错误,请多多指教。
前言
在C语言中,有三个常用的程序结构,分别是:顺序结构、选择(分支)结构、循环结构。
1、顺序结构:代码从前向后跑;
2、选择(分支)结构:根据条件是否满足而决定执行不同的操作,重点要掌握 if else、switch 以 及条件运算符;
3、循环结构:重复执行同一段代码。
今天还是接着上一期的内容讲,若没有看上期的小伙伴可以去上期看看,满满的干货呦。
目录
大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入知识整理复习模式。若有错误,请多多指教。
【七】循环结构
思维导图
一、while
1)一般形式
while(循环条件)
{
循环体;
}
当循环条件为真(非零)时,执行循环体,执行完循环体,再次计算循环条件,如果循环条件为真,继续执行循环体。如果循环条件为假(零)跳出循环,执行while后的程序。
2)while循环流程图
3)用while循环 输入 n 个数并求和
#include "stdio.h"
int main()
{
int a, s = 0, i = 0, n;
printf("请输入相加个数:\n");
scanf("%d", &n);
while (i < n)
{
scanf("%d", &a);
s = s + a;
i++; //使i向n靠近
}
printf("%d个数相加和为%d\n", n , s);
return 0;
}
运行结果:
思考:结束时循环几次?i为多少?若循环体没有i++,结果如何?
代码分析:
1,当程序运行到scanf时输入 3,把3赋值给n;
2,当程序第一次运行到while时,i==0,0<3,即i<n成立;所以会执行循环体,执行结束后,i变成1
,a为4,s为4,
3,当程序第二次运行到while时,i==1,1<3,即i<n成立;所以会执行循环体,执行结束后,i变成2
,a为8,s为12。
4,当程序第三次运行到while时,i==2,2<3,即i<n成立;所以会执行循环体,执行结束后,i变成3
,a为12,s为24。
5,当程序第四次运行到while时,i=3,3==3,即i==n,i<n不成立,循环结束,此时 i=3,a=12,s=24.
由此可得:循环3次,结束时i为3,若没有i++,程序会变成死循环,即程序不会结束。
4)例题
以-1为终止标记,键盘输入若干个学生的成绩,然后求其平均成绩。
#include <stdio.h>
int main()
{
int x, n = 0, s = 0;
float av;
scanf("%d", &x);
while (x != -1)
{
n++; //学生人数。
s += x; //计算总分。
scanf("%d", &x);
}
av = 1.0 * s / n;
printf("%.2f\n", av);
return 0;
}
运行结果
本例程序中的循环条件为x!=-1,其意义是,只要从键盘输入的不是-1就继续循环。循环体n++;表示学生人数
。
二、do-while
1)一般形式
do
{
循环体;
}while(循环条件);//注意分号不能少。
do-while循环与while循环的不同在于:它会先执行“循环体”,然后再判断循环条件是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“循环体”,而while可能一次也不执行。
2)do-while循环流程图
3)用do-while循环 输入 n 个数并求和
#include "stdio.h"
int main()
{
int a, s = 0, i = 0, n;
printf("请输入相加个数:\n");
scanf("%d", &n);
do
{
scanf("%d", &a);
s = s + a;
i++;
}while (i < n); //分号不能少
printf("%d个数相加和为%d\n", n , s);
return 0;
}
运行结果:
建议:感兴趣的小伙伴可以根据上文的while循环 自己做一遍代码分析,注意第一次循环和最后一次循环,以及循环次数。
4)例题
以-1为终止标记,键盘输入若干个学生的成绩,然后求其平均成绩。
#include <stdio.h>
int main()
{
int x, n = 0, s = 0;
float av;
scanf("%d", &x);
do
{
n++; //学生人数。
s += x; //计算总分。
scanf("%d", &x);
}while (x != -1);
av = 1.0 * s / n;
printf("%.2f\n", av);
return 0;
}
运行结果:
三、while和do-while小结(重点)
1,while先判断,后循环。do-while先循环,后判断。
2,在循环体至少执行一次的前提下,while和do-while循环次数一样,不要以为do-while比while多循环一次。
//while
i=0;
while(i<5)
{
printf("*");
i++;
}
//do-while
i=0;
do
{
printf("*");
i++;
} while(i<5);
这两个都是循环5次哦
3,while循环的while后面没分号,do-while的while后面有分号。
4,do-while至少循环一次,while不一定。
5,循环体内必须有使循环趋于终止的条件;
6,注意循环初值与循环条件、循环体的联系;
四、for
1)一般形式
for(表达式1; 表达式2; 表达式3)
{
循环体;
}
//一般应用形式
for(循环变量赋初值; 循环条件; 循环变量增值)
//表达式可以没有,但分号必须有。一般表达式2也必须存在。
{
循环体语句;
}
特点:先判断条件, 后执行语句。
“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。
2)for循环流程图
循环执行步骤:
第一,先进行循环控制变量初始化(即表达式1);
第二,执行循环终止条件(相当于while的()里面的内容),如果判断结果为真,则进入第三步;如果为假则循环终止并退出;
第三,执行循环体;
第四,执行循环控制变量增量,转入第二步。
第二和 第三是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 第二和 第三。
3)用for循环 输入 n 个数并求和
#include "stdio.h"
int main()
{
int a, s = 0, i, n;
printf("请输入相加个数:\n");
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%d", &a);
s = s + a;
}
printf("%d个数相加和为%d\n", n , s);
return 0;
}
运行结果:
代码解析:
1,先运行表达式1(i=0)初始化;执行循环条件,0<3,即i<n成立,执行循环体,给n赋值为4,s=0+4,i变成1;
2,第二次执行循环条件,i=1,1<3,即i<n成立,执行循环体,给n赋值为8,s=4+8,s=12,i变成2
3,第三次执行循环条件,i=2,2<3,即i<n成立,执行循环体,给n赋值为12,s=12+12,s=24,i变成3
4,第四次执行循环条件,i=3,3=3,即i<n不成立,跳出循环,执行for循环后的语句。此时s=24,
i=3,
4)总结
1,for语句常用于循环次数固定,给定循环初值和终值的情况;
2,for循环为“当型”循环;
3, for语句的表达式可部分或全部省略,但分号不能省;
如:for( ;;)
4,for语句的循环体为多条语句时,应构成复合语句。
五、C语言中的break和continue
使用while和for循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue关键字。
1)break
定义:
break语句通常用在循环语句和开关语句中,用来从循环体内跳出循环结构,以提前结束循环。。
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,直到switch结构结束。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环。而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。
举例:
#include<stdio.h>
int main ()
{
int i;
for(i=0;i<8;i++)
{
if(i==4)
break;
printf("%d\n",i);
}
return 0;
}
运行结果:
break是跳出循环,故循环在i=4后面的4,5,6,7 没有打印。
2)continue
定义:
其作用为结束本次循环。即跳出循环体中下面尚未执行的语句,对于while循环,继续求解循环条件。而对于for循环程序流程接着求解for语句的表达式3。
举例:
#include<stdio.h>
int main()
{
int i;
for (i = 0; i < 8; i++)
{
if (i == 4)
continue;
printf("%d\n", i);
}
return 0;
}
运行结果:
continue只跳过i=4的continue后面的本次循环,故只没有打印4.
3)总结
break跳过整个循环,continue跳过本次循环。
六、循环的嵌套
1)概念:
循环体中内嵌了一个或多个循环语句。
2)说明:
① 嵌套可以是多层的 ;
② 一个循环体必须完完整整嵌套在另一个循环体内,不能出现交叉;
③ 三种循环可以互相嵌套 。
3)例题:
计算 1!+2!+ … +20!
方法一:
#include "stdio.h"
int main()
{
double s = 0, t = 1;
int i;
for (i = 1; i <= 20; i++)
{
t *= i;
s += t;
}
printf("%e\n", s);
return 0;
}
运行结果
方法二(循环嵌套):
#include "stdio.h"
int main()
{
int i, n;
double s = 0, t;
for (n = 1; n <= 20; n++)
{
t = 1;
for (i = 1; i <= n; i++)
t = t * i;
s += t;
}
printf("s=%e\n", s);
return 0;
}
运行结果:
循环语句我们复习完了,小主讲的都是基础知识点,若大家觉得有帮助,不妨动动你的小手指给小主个关注。去刷点题上手吧!