第六章循环控制 6.1概述 63whle语句 6.4d0 while语句 65for语句 ■6.6循环的嵌套 68 break语句和 continue语句
第六章 循环控制 ◼ 6.1 概述 ◼ 6.3 while语句 ◼ 6.4 do-while语句 ◼ 6.5 for语句 ◼ 6.6 循环的嵌套 ◼ 6.8 break语句和continue语句
6概述 在实际问题中,我们常常遇到需要重复处理的工作 例如:求1100的和,或求一个班英语成绩的平均 分 般来说循环控制方法分两种: (1)条件循环(whil循环和do- while循环) 条件满足时执行循环,条件不满足时结束循 环 (2)计数循环(for循环) 先确定循环次数,然后执行循环,完成循环次数 后结束
6.1 概述 在实际问题中, 我们常常遇到需要重复处理的工作 例如: 求1—100的和 , 或求一个班英语成绩的平均 分 一般来说循环控制方法分两种: (1) 条件循环 ( while循环 和 do – while 循环 ) 条件满足时执行循环, 条件不满足时结束循 环 (2) 计数循环 ( for 循环 ) 先确定循环次数, 然后执行循环, 完成循环次数 后结束
63 while语句 1.格式: while(表达式) A 循环体语句 当P成立 A 2.执行过程: 成立 不成立 (先判断后执行) 先计算表达式的值, 值为真(非零)时执行循环体, 值为假时结束循环 3.注意: (1)表达式必须用()括起来 (2)循环体语句为多条语句时,必须用{}把它们括起来 (3)循环体语句中必须有使循环趋向结束的语句
6.3 while语句 2. 执行过程 : (先判断后执行) 先计算表达式的值, 值为真(非零)时执行循环体, 值为假时结束循环 1. 格式 : while (表达式) 循环体语句 3. 注意 : (1) 表达式必须用( ) 括起来 (2) 循环体语句为多条语句时, 必须用{ }把它们括起来 (3) 循环体语句中必须有使循环趋向结束的语句 A 当P成立 A P 成立 不成立
例:在屏幕上打印7行星花 (此问题是简单重复⑦次格式输出操作) include 运行结果为: void main( i int i i=1 whlie(k<=7) printf((“n***3y) + 7772777
例:在屏幕上打印7行星花 (此问题是简单重复7次格式输出操作) #include void main( ) { int i; i=1; whlie(i<=7) { printf(“\n********”); i++; } } 运行结果为: ******** ******** ******** ******** ******** ******** ********
口例:求1-100的和 分析:需要几个变量? 输入,输出分别是什么? 1+2+3+,+99100=∑i(1 sum=0 void main o i=1 i int i, sum; sum=0 i<=100 =1 while (<=100) sum=sum+ sum=sum+i; i=i+1 i++ 输出sum的值 printf(“sum=%dⅦn”,sum);
例: 求1—100 的和 1+2+3+…+99+100=∑i (1 void main ( ) { int i , sum; sum=0; i=1; while (i<=100) { sum=sum+i; i++; } printf(“sum=%d\n”, sum); } 分析: 需要几个变量? 输入, 输出分别是什么? 程序大体可分为几个步骤? sum=0 i=1 i<=100 ? sum=sum+i i=i+1 输出sum的值
例:求1n的和,n为任意正整数 Sum ∑i(1 void main( 输入n i int i, sum, n; n sum=0 sum=sum+l scanf(“%od”,&n); i=i+1 while (is i sum=sum+i; 输出sum的值 printi(sum=%dⅦm”,sum);
例: 求1—n 的和, n为任意正整数 ∑i (1 void main ( ) { int i , sum , n ; sum=0; i=1; scanf(“%d”, &n); while (i<=n) { sum=sum+i; i++; } printf(“sum=%d\n”, sum); }
例:计算x=1+3+5+7+9+n #include maIn i int s 分析: int n.ix: 题目是累加求和,只不过 scanf(“%d”,&n) 其累加项为等差递增的奇 i=1;x=0 while(i<=n) 数序列。 i x=X+i; i=i+2; printf(“x=%dn”,x);
例:计算x=1+3+5+7+9…+n #include main( ) { int s; int n , i , x ; scanf(“%d”,&n); i=1; x=0; while ( i <= n ) { x=x+i ; i=i+2; } printf(“ x=%d\n”, x ); } 分析: 题目是累加求和,只不过 其累加项为等差递增的奇 数序列
例:求某个班英语成绩的平均分,该班学生人数和每个 学生的成绩由键盘输入 思路:先求所有学生的总成 绩,再除以学生个数n,得学 sum=0 生的平均成绩。 include void main( i int i,n; 输入n(n表示学生人数) float s, sum, ave i En sum=0 i=1 scanf(%od”,&n); 输入s(s表示成绩 while (i<=n) { scanf(“%f,&s) sum=sums sum=sum+s i i=i+1 i++; ave=sum/n ave=sum/n printf(ave=%6.2fn", ave); 输出ave的值
例: 求某个班英语成绩的平均分, 该班学生人数和每个 学生的成绩由键盘输入 sum=0 i=1 i void main ( ) { int i , n ; float s , sum , ave ; sum=0; i=1; scanf(“%d”, &n); while (i<=n) { scanf(“%f”, &s); sum=sum+s ; i++ ; } ave=sum/n ; printf(“ave=%6.2f\n”, ave); } 思路:先求所有学生的总成 绩,再除以学生个数n,得学 生的平均成绩
例:计算x=1+1/3+15+1/7+1/9.¥相加项的绝对值小于 0.0000(即106)时停止计算 分析: #include void main( 题目仍可以看成是累加 i int s; 求和,只不过其累加项 float n, t,x; 为分母等差递增的分数 X=0 while(t>=1.0e-6) {x=x+t;n=n+2; n printi“x=%10.6fn”,x);
例:计算x=1+1/3+1/5+1/7+1/9…当相加项的绝对值小于 0.000001(即10–6 )时停止计算 #include void main( ) { int s; float n , t , x ; n=1; t=1; x=0; while ( t >= 1.0e-6 ) { x=x+t ; n=n+2; t=1/n; } printf(“ x=%10.6f\n”, x ); } 分析: 题目仍可以看成是累加 求和,只不过其累加项 为分母等差递增的分数
例:编程求π的近似值,公式元14≈1-1/3+1/5-1/7+1/9 分析: #include 题目仍可以看成是累加求和 #include 不同的是,相加的每一项正负相间 void maino 公式是无穷的,所以我们规定当 i int s; 相加项的绝对值小于0000001 float n, t, pi s=1;n=1;t=1,pi=0;,(即106)时停止计算 while( fabs(t)>=le-6) t1/5 pi-pi+t; n=n+2 5 pi067 S=-S t=s/n pi=4 pi i printf(“pi=%10.6fn”,pi);
例: 编程求π 的近似值, 公式 π/4 ≈ 1-1/3+1/5-1/7+1/9-… 分析: 题目仍可以看成是累加求和 不同的是, 相加的每一项正负相间, 公式是无穷的, 所以我们规定当 相加项的绝对值小于0.000001 (即10–6 )时停止计算 #include #include void main( ) { int s; float n , t , pi ; s=1 ; n=1; t=1; pi=0; while ( fabs(t)>=1e-6 ) { pi=pi+t ; n=n+2; s=-s; t=s/n; } pi=4*pi ; printf(“ pi=%10.6f\n”, pi ); } t n pi s 1 1 -1 3 -1/3 1 0.67 01 1/5 5 1