921934-C语言编程-5-第五章(桂林理工大学) 循环结构程序设计
C语言第5章-循环结构程序设计PPT课件

当i<=10 (直到i>10) 输出sum
#include "stdio.h" int main() {
int i,sum; i=1; sum=0; do { sum=sum+i; i++; }while(i<=10);
至少执 行一次
循环体语句
真 表达式 假
说明
printf("sum=%5d\n",sum); return 0;
7
举例
例5.2 设s=1×2×3×……×n,求s不大于400000时 最大的n。
#include <stdio.h>
int main( )
{ int n=1; long int s=1;
前n项的乘积
P81
while(s<=400000)
{
n=n+1;
s=s*n;
}
printf("不大于400000时的最大n为:%d\ns值为:%ld\n",n-1,s/n);
输入:1 输出:sum=55 输入:11 输出:sum=0
sum=55 sum=11
什么情况下两 者结果相同?
11
§5.3 for语句
P87
格式 for (表达式1;表达式2;表达式3) 语句
for (循环变量赋初值;循环条件;循环变量增值) 语句
执行 过程
求解表达式1
假 表达式2
真 循环体语句
求解表达式3
一、实现循环结构的控制语句 二、循环嵌套 三、循环结构程序举例
1
• while语句 • do-while语句 • for语句 • break、continue语句 • 几种循环的比较
C语言程序设计第五单元循环结构程序设计

相关知识
3.for语句说明: (1)表达式1一般为赋值表达式,用于进 入循环之前给循环变量赋初值,后面有“;” 分隔。 (2)表达式2一般为关系表达式或逻辑表 达式,用于执行循环的条件判定,它与 while、do-while循环中的表达式作用完全 相同,后面用“;”分隔。 (3)表达式3一般为赋值表达式或自增 (i=i+1 可表示成i++)、自减 (i=i-1可表示成i-)表达式,用于修改循环变量的值。 (4)如果循环体部分是多个语句组成的, 则必须用大括号括起来,使其成为一个复 合语句。
设评委人数不固定,由输入的评委人数决定,每个 评委打分,进行求和,打分次数和评委人数不相等继 续打分和求和,打分结束计算平均分,最后输出最终 成绩。
思路指导
输入:评委人数(int n)。 次数统计:计数器(int i) 循环:循环条件i<=n 循环任务输入评委打分0-100分之间(int scr ), 求和(int sum),打分次数i增1 求平均分:平均分(int ave) ave=sum/n 输出:平均分为选手比赛成绩
if (sum1<sum2)
printf(“偶数玩家赢!”);
else
if (sum1=sum2)
printf(“平局!”);
}
特别提示
while语句和do-while语句的区别: (1)在循环条件和循环体相同的情况下while后面的 表达式第一次的值为“真”时,两种循环得到的结果相 同。 (2)当while后面的表达式第一次的值为“假”时, while语句一次也不执行,而do-while 语句可以顺利执行 一次。
相关知识
(三)当型循环while语句 1. while语句的语法格式
5循环结构程序设计

5.6
break语句和continue语句
一、break语句
break语句的一般形式为: break;
说明: 其执行过程是:在循环语句中如果执行到break语句, 则终止break所在循环的执行,循环体中break语句之后的语 句也不再执行。通常break语句总是与if语句联用,即满足 条件时便跳出循环。
goto语句
[例5.7] 利用goto语句“求1+2+3+„„+99+10 0 ”的和。
运行结果: 1+2+3....+100=5050
label ['leibl] 基本翻译 vt. 标注;贴标 签于 n. 标签;商标; 签条
5.4
goto语句
[例5.8] 利用goto语句跳出循环。
main( ) { int i, sum=0; i=1; 运行结果: 1+2+3....+50=1275 while(i<=100) { sum=sum+i; i++; if (i>50) goto label; } label:printf("\n1+2+3....+50=%d",sum); }
习题
P110
1.(3) 4.(1)
5.3
for语句
for语句的一般形式 for (表达式1; 表达式2; 表达式3) 语句(循环体)
for语句最简单的应用形式也是最容易理解的形式 如下: for(循环变量赋初值;循环条件;循环变量增量) 语句(循环体)
说明:
“表达式1”一般是是一个赋值表达式, 它用来给循环控制变量 赋初值; “表达式2”一般是一个关系表达式或逻辑表达式,它 决定什么时候退出循环;“表达式3”一般是个算术表达式,定义 循环控制变量每循环一次后按什么方式变化。这三个部分之间用 “;”间隔。
C语言 第5章 循环结构ppt课件

for( n=1; ; n++)
{
sum += h;
h = h/2;
//落地后反弹跳回原高度的一半
if( n==10 ) break;
//终止执行本循环
sum += h;
}
printf(“共经过%f米,第10次反弹%f米\n",sum,h);
56
单击此处编辑母版标题样式 continue 语句类似于 break 语句,但不是退出循环,而是跳 过循环体下部未执行的语句,回到循环头部(while 处)接着进行 下一次循环。 格式:while (条件1) { . . .;if (条件2) continue;. . . } Continue 执行过程: • 当条件1成立时,进入 while 的循环体; • 执行到 if 语句时,计算条件2的值; • 如果条件2满足,执行 continue 语句,结果为:执行转到
27
单击此处编辑母版标题样式
(3)逆序打印出各位数字; a) 从最低位开始输出; b) 最低位为: m%10; c) 除去最低位,其它的部分为:m/10; d) 循环,直到最高位输出结束。
28
29
(1):求位数 (2):从高位到低 位求每一位。
(3):从低位到高 位求每一位。
30
31
(2):从高位到低位求每一位。
一、循环概述
5
在很多实际问题中会遇到有规律性的重复运算,因此 在程序中就需要将某些语句重复执行。 • 一组被重复执行的语句称为循环体; • 每重复一次,都必须作出是继续还是停止循环的决定, 这个决定所依据的条件称为循环条件;
循环:在给定条件成立时,反复执行某程序段,直到 条件不成立为止。
C语言第5章 循环结构程序设计

(3)表达式3也可以省略,但此时程序设计者应另外 设法保证循环能正常结束。如: for(i=l;i<=100;) (=; = ;) {sum=sum+i; +; i++; ++; } (4)可以省略表达式1和表达式3,只有表达式2,即只给循 4 1 3 2 环条件。如: for(; =100) (;i<= ) while(i<=100) (; ( = ) {sum=sum+i; 相当于 = +; {sum=sum+i; = +; i++;} i++;} ++;} ++;}
for循环、while循环、do-while循环既可以自己嵌套 自己,又可以互相嵌套。
下面几种情况均为合法的形式 (1) while ( ) {… while( ) {…} } (2) do {… do {…} while ( ); } while( ); (3) for(; ;) { for(; ;) {…} } (4) while( ) {… do {…} while( ); …. }
i=i+c
例5-5 计算1至50中是7的倍数的数值的和。 - #include "stdio.h" main() { int i,sum; sum=0; for(i=1;i<=50;i++) if(!(i%7)) sum+=i; printf("sum=%d\n",sum); }
多重循环
一个循环体内又可包含另一个完整的循环结构,称 为循环的嵌套,内嵌的循环中还可以嵌套循环,这 就是多层循环
(7)表达式2一般是关系表达式(如 i<=100)或逻辑 < 表达式(如a<b&&x<y),但也可以是数值表达式 < < 或字符表达式,只要其值为非零,就执行循环体。分 析下面两个例子: i=0 取一个字 符=>c
第5章C语言程序设计的循环结构

5.8 循环结构程序设计实例
【例5-15】计算1-1/2+1/3+…-1/n-1+1/n的结果。 【例5-16】求1+2+3+…+n<m中最大的n值,并求和。 【例5-17】是一个按照规律翻译密码的例子。程序描述:翻译密
码的规律是将每一个字母变成它后面的字母,如将A变成B,Z变成 A,非字母字符不变,‘!’作为电文结束标志。例如,有一电文 “right”,翻译成“sjhiu”。 【例5-18】 花100块钱买100斤蔬菜。程序描述:西红柿每斤5元, 黄瓜每斤3元,白菜3斤一元,问100块钱买100斤蔬菜有几种解法。
(2)用while和do-while循环时,循环变量初始化的操作应在while和 do-while语句之前完成。而for语句可以在< expression-1>中实现循环 变量的初始化。
(3)for、while属“当型”循环,先判断,后执行循环体。因此当条件 一开始就不成立时,循环体就一次也不执行。这两种循环可以互相取代。 而do–while循环属“直到型”循环,先执行循环体,后判断。因此无论 条件是否成立,循环体至少要执行一次。
5.2.1 while循环的基本语法 5.2.2 while循环的使用实例
3
5.2.1 while循环的基本语法
while循环语句用来实现“当型”循环结构。while循环的一般格 式如下所示: while(<condition>) { <可执行语句序列> }
4
5.2.2 while循环的使用实例
21
5.9 小结
循环结构是C语言程序设计中一种非常重要的编程结构,用于让计 算机反复执行,完成大量类同的计算。主要包括while结构、dowhile结构、for结构和goto语句实现的循环结构,这4种结构可以 嵌套使用。本章主要讲述了这4种循环结构的语法和使用,并对这 4种循环结构进行了对比。
C语言--第五章 循环结构程序设计

5.4 几种循环的比较
(1)三种循环都可以用来处理同一问题,一般情 况下它们可以互相代替。 (2)在while循环和do-while循环中,只在while 后面的括号内指定循环条件,因此为了使循 环能正常结束,应在循环体中包含使循环趋 于结束的语句(如i++,或i=i+1等)。
5.4 几种循环的比较
作用为结束本次循环,即跳过循环体中下面 尚未执行的语句,接着进行下一次是否执行 循环的判定. 一般形式: continue;
5.5 break语句和continue语句
continue和break的区别 break语句则是结束整个循环 过程,不再判断执行循环的条 件是否成立。 while(表达式1) for
5.2 用do-while语句实现循环
例5.2求1+2+...+n的值 #include <stdio.h> main() { int i,n,sum; printf(“n=”); scanf(“%d”,&i); sum=0; do { sum=sum+i; i++; } while (i<=10); printf(“sum=%d”,sum); }
第五章
主要内容
5.1 用while循环 6.4 用do-while语句实现循环 6.5 用for 语句实现循环 6.6 循环的嵌套 6.7 几种循环的比较 6.8 break语句continue和语句 6.9 程 序 举 例
5.1
用while语句实现循环
while语句用来实现“当型”循环结构 。
可以看到当输入i<=10,二者结果一样。 对于while循环,一次也不执行循环体 。而对do-while来说要执行一次。 因此用do-while循环时,应将条件取反 。把例5.2中的i<=10改为i>10。只有这 样才是对同一问题的两种表述。
C语言程序设计第五章 循环结构程序设计

设计者应从问题中或从循环体中寻找规则变化的量来控制循环。
3.找出循环控制变量的3个要素。循环控制变量的3个要素是控制循 环结构正确执行的必要组成部分。
Page 2
5.2 实现循环的语句
while语句 当型循环的执行流程如图5.2所示。
0
条件 P 1
条件 P
循环体 A
循环体 A
图 5.2(a)当型循环传统流程图 图
套的循环不能相互交叉。嵌套其他循环的循环称之为外循环,被其他 循环嵌套的循环称之为内循环。
Page 11
5.5 循环结构程序设计举例
【例5-13】 求Fibonacci数列的前20项之和。 【例5-14】 求数列a,−aa,aaa,−aaaa,aaaaa,…的前n项之和。 【例5-15】 求ex近似值, 【例5-16】 将所有小于n且个位数不等于3的素数在屏幕上输出,n的值 由用户输入来确定。
如果为0,则结束循环,执行循环的后续语句。
(3)求解表达式2,转向第2步执行。 for语句的执行过程如图5.9(a)所示。
0 逻辑量 求解表达式 2 1 循环体语句 求解表达式 1
图5.9(a)for语句的传统流程图
Page 8
5.2 实现循环的语句
for语句 使用for语句应注意以下几点:
Page 4
5.2 实现循环的语句
do~while语句 直到型循环的执行流程如图5.5所示。
循环体 A
循环体 A 0 条件 P 1 条件 P
图 5.5(a)直到型循环传统流程图
图 5.5(b) 直到型循环 ห้องสมุดไป่ตู้-S 流程图
Page 5
5.2 实现循环的语句
do~while语句 do~while语句是实现直到型循环的语句,其一般形式为: do 循环体语句 while(逻辑量);
C语言程序设计:第5章循环结构课件教案

C语言程序设计:第5章循环结构课件教案C语言程序设计课件教案第五章循环结构教学目的掌握循环结构中的while语句、do while语句、for语句的用法,掌握中断语句中break和continue语句的用法。
教学要求1.熟练掌握while语句、do while语句、for语句2.熟练掌握break语句、continue语句重点和难点1.while语句、do while语句、for语句的使用2.break语句、continue语句的使用教学支撑环境与教学资源:1.笔记本电脑2.VC20103.投影仪教学方法讲授法、练习法、讨论法授课课时6课时教学过程---------------------------------AM---------------------------------一、课程引入计算1+2+3+...+n有几种方法,需要多少步骤?二、循环结构语句什么时候用到循环结构:处理重复的问题的时候。
循环结构的三大语句:while语句、do while语句、for语句。
1.while语句while(循环条件表达式)循环体语句;执行过程:只有循环条件表达式的值为真就执行循环体语句,先判断后执行。
课堂练习1:1.输出1---n之间的数int main(void){int i = 1;int n = 0;printf("请输入n的值:");scanf("%d",&n);//10 15while(i <= n){printf("%d\n",i);i++;}return 0;}2.计算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(循环条件表达式);执行过程:先执行循环体语句,再检查循环条件表达式的值是否为真,如果为真则继续执行循环体语句,否则结束循环。
C语言程序设计第5章-循环结构程序设计ppt课件

while(i<=k && !flag)
if(n % i==0) flag=1;
else i=i+1;
if(!flag)
printf("%d is a prime
number.\n",n);
else
printf("%d is not a prime
number.\n",n);
}
.
返回本章首页
第5章 循环结构程序设计
【例5_1】用while语句求p=n!
#include<stdio.h>
int main()
{ int i=1,p=1; //循环初始化部分 while(i<=5) //循环控制部分
{ p=p*i; //循环体语句 i++; //循环修改部分
}
printf("5!=%d\n",p);
return 0;
10-3,则再执行循环体,把 term 值赋给term1.然后再累加 到s中去。可以看出:程序中 term1代表当前要累加的项, term代表下一项,如果这两项 之差未超过10-3,就将下一项 加到s 中。
五章节 循环结构C程序设计

46
while循环语句示例
例1:利用while语句实现:从键盘输入n(n>0)个数,求其之和。
程序:
void main() { int i, n, k, sum;
i=1; sum=0; printf("Input n:"); scanf("%d",&n); while(i<=n) { scanf("%d",&k);
48
while循环语句示例
例1:利用while语句实现:从键盘输入n(n>0)个数,求其之和。
程序:
void main() { int i, n, k, sum;
i=1; sum=0; printf("Input n:"); scanf("%d",&n); while(i<=n) { scanf("%d",&k);
48
while循环语句示例
例1:利用while语句实现:从键盘输入n(n>0)个数,求其之和。
程序:
void main() { int i, n, k, sum;
i=1; sum=0; printf("Input n:"); scanf("%d",&n); while(i<=n) { scanf("%d",&k);
while循环语句示例
例1:利用while语句实现:从键盘输入n(n>0)个数,求其之和。
程序:
void main() { int i, n, k, sum;
i=1; sum=0; printf("Input n:"); scanf("%d",&n); while(i<=n) { scanf("%d",&k);
c语言第5章循环结构程序设计课件

第五章 循环结构程序设计
典型例题(例5-8) :求两个整数的最大公约数、最小公倍数
12 8 4 mn r
84
0
mn r
最大公约数 4 最小公倍数 12*8/4=24
求最大公约数的N-S流程图
辗转相除法
7
第五章 循环结构程序设计
void main( )
{ int n, m, nm, r, t; printf( " Enter m, n= ? " ) ; scanf( " % d% d" , & m, & n) ; nm= n* m; if ( m< n)
例如: for(i=1;i<=n;) { t=t*i; i++; } (4)可以省略表达式1和表达式3,只有表达式2 , 即只给循环条件。
i=1; for(;i<=n;)
{t=t*i; i++;}
14
第五章 循环结构程序设计
(5) 3个表达式都可省略。 例如: for(;;) 语句 相当于 while(1)语句。
3
第五章 循环结构程序设计
例: 编程序求: s=1+2+3+……+100
main()
{ int s=0,i=1;
while (i<=100) { s=s+i;
思考:如何求n!
i++; }
printf("S=%d",s); }
4
第五章 循环结构程序设计 二、 do...while语句
Do-while语句的一般形式为:
(1) while( ) {… while( ) {…}
第5章 循环结构程序设计【C语言程序设计】

for (j=1;j<=i;j++) printf("*");
printf("\n"); /* 每输出一行需要换行 */ } }
【分析】程序需要输 出5行星号,但每行 输出的个数不等,其 规律如下:行数 = 星号 数
【思考】
如何输出以下图形:
循环次数 = (终值-初值)/ 步长 + 1 步长为循环变量每次增加或减少的值,例如上例循环次 数为: (100 –1)/1 + 1,即100次. 步长可以为负数,例如以下程序语句:
int i,s; i=100;s=0; while(i>=1) { s=s+i; i=i-1; } …
【例5-2】 计算1到100之间所有3的倍数的和
do-while循环
(1) do-while循环和while循环可以完成相同的任务。例如 上面的程序都可以计算出1到100的数的和。
(2)do-while循环的循环条件的判断在循环体的后面,所以和 while循环有区别,例如下面两个程序:
int i=1;s=0; while(i<1) { s=s+i; i=i+1; } printf("s=%d\n",s); }
for (①;②;③) ; 一个分号即是一条空语句。 (10) 如果①、②、③、④均省略,即如以下形式:
for (;;); 这将构成一个死循环。
【例5-5】 计算1+1.5+2.0+2.5+3.0+3.5+…+10
/* EX5-5.C */ #include <stdio.h> main( ) { float i, s; /*i,s需要定义为float型 */ for(i=1,s=0;i<=10;i=i+0.5)
c5第五章 循环结构

例:用do~while求 1+2+3+4+5+·· ·+100。
(ch5_03.c)
8
使用循环结构要注意:
1. 循环体如果包含一个以上的语句,应该用 花括号括起来,以复合语句形式出现。 2. 循环体中应有使循环趋于结束的语句。 例:分析下列三个程序段
i=1; putchar(„*‟); i++; i=1; while(i<=100); putchar(„*‟); i++;
表达式1; while(表达式2) { 语句; 表达式3; }
13
3、for语句中表达式的省略
(1)for语句一般形式中的“表达式1”可以省 略;
如: sum=0;i=1; for ( ; i<=100;i++) sum=sum+i;
(2)表达式2省略,即不判断循环条件,循 环无终止地进行下去;
如: for(sum=0,i=1;;i++) { if(i>100) break; sum=sum+i; }
while(1)
循环体;
4
例 (ch5_01.c)求1+2+3+4+5+·· ·+100。
#include <stdio.h> 循环条件 main() 循环初值 { int i=1,sum=0; while(i<=100) { sum+=i; 循环变量增值 循环终值 i++; } printf("%d",sum); } 循环体
printf("%d*%d=%d\n",i,i,i*i);
C语言程序设计课件第5章 循环结构程序设计

完整版ppt
19
➢break语句的一般形式为: break;
只能用于循环语句和switch 语句之中,而不能单独使用
完整版ppt
20
5.5.2 用continue语句提前结束 本次循环 P126
➢ continue语句的一般形式为:
continue;
➢其作用为结束本次循环,即跳过循环体 中下面尚未执行的语句,接着进行下一 次是否执行循环的判断。
循环体
完整版ppt
7
while语句的一般形式如下:
while (表达式) 语句
循环条件表达式
“真”时执行循环体语句 “假”时不执行
表达式
0(假)
while循环的特点是: 先判断条件表达式 后执行循环体语句
非0(真) 语句
完整版ppt
8
P117
5.2.2 用do…while语句实现循环
➢do---while语句的特点:先无条件地执
第5章 循环结构程序设计 P115
5.1 程序中需要用循环结构
5.2 用while语句和do…while语句实现循环 5.3 用for语句实现循环
5.4 循环的嵌套
5.5 提前结束循环
5.6 几种循环的比较
5.7 程序举例
5.8 提高部分
完整版ppt
1
5.1 程序中需要用循环结构 P115
➢现实生活中许多问题是需要重复处理
➢for语句的一般形式为 for(表达式1;表达式2;表达式3) 语句
作为循环的调整器,例如 使循环变量增值,它是在 执行完循环体后才进行的
完整版ppt
14
➢for语句的执行过程:
(1) 先求解表达式1 (2) 求解表达式2,若其值为真,执行循环体, 然后执行下面第(3)步。若为假,则结束循环, 转到第(5)步 (3) 求解表达式3 (4) 转回上面步骤(2)继续执行 (5) 循环结束,执行for语句下面的一个语句
c语言课件-第五章-循环结构程序设计

5.5 for语句(当型循环)
例:读程序,判断程序的功能 #include<stdio.h> void main( ) {char c; for(;(c=getchar( ))!=‘\n’;) putchar(c); } 输入ok!<回车>,输出_______
读入一个字符,当它不是回车符就输出.
5.5 for语句(当型循环)
分析:用辗转相除法求最大公约数。
5.3 while语句(当型循环)
5.3 while语句(当型循环)
例:利用while语句计算1+1/2+1/4+1/6…+1/50.
解:观察数列1,1/2,1/4,1/6…,1/50。
分子全部为1,分母除第一项外,全部是偶数。 同样考虑用循环实现。
其中累加器用sum表示(初值设置为第一项1,以 后不累加第一项),循环控制用变量i(i:2-50)控 制,数列通项:1/i。
5.2 goto语句及用goto构成循环
一、goto语句 goto语句的一般形式:goto 语句标号
语句标号:用于定义程序中的某个位置 用标识符表示,不能只用数字
如:goto start(对) goto 20(错)
goto语句的功能是无条件地转到标号所指的语句。
因为滥用goto语句会破坏结构化,所以应该限制 使用goto语句。
i=1 for(; i<=3; )
{ s=s+k; i++; }
i=1 while (i<=3)
{ s=s+k; i++; }
5.5 for语句(当型循环)
(6)表达式2一般是关系表达式或逻辑表达式,但 也可以是数值表达式或字符表达式,只要其值不等于 0就执行循环体。
C语言程序设计第5章循环结构程序设计简明教程PPT课件

循环结构程序设计
第5 章
循环结构程序设计
当你对C语言程序设计有了一定了解和掌握后,若 想要处理一些更复杂的任务时,当满足某一条件想反 复执行某个程序时,该如何处理呢?
控制语句能够控制程序的流程,根据判断决 定重复运行什么。
程序的三种结构
•顺序结构 •选择结构 •循环结构
本章所
学Байду номын сангаас目标
了解循环结构的特点; 掌握while语句、do-while语句、for语句; 掌握while循环结构、do-while循环结构、for循 环结构 掌握break和continue语句的使用; 理解循环嵌套。 掌握各种循环的应用;
C语言程序设计
第5章 循环结构程序设计
4
【例5.1】输入10个数,求它们的和并输出。
#include <stdio.h> int main() { float x,sum=0; int k=0; while(k<10) { printf("please input x:\n"); scanf("%f",&x); //输入一个数 sum=sum+x; //进行累加 k++; } printf("sum=%f\n",sum); return 0; } 运行结果: please input x:5↙ please input x:7↙ please input x:8↙ please input x:14↙ please input x:53↙ please input x:12↙ please input x:35↙ please input x:9↙ please input x:10↙ please input x:47↙ sum=200
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. i=a%10
5. t=t*10+i 6. a=a/10,并返回第3步 7. 输出t
#include<stdio.h>
后一个称为计数循环,即根据设定 的执行次数来执行循环。
5.1 while语句
一般形式: while(表达式)
语句
此处语法规定为一条语句,如果要 执行多条语句,必须以复合语句形 式出现。
假
表达式
执行流程:
1.计算表达式 2.如果表达式的值为非零,执行语句 3. 返回第一步,重新计算表达式 4. 如果表达式的值为零,则结束循环
5.3 for循环语句
一般形式: for(表达式1;表达式2;表达式3) 循环体语句
表达式1
执行流程 1.计算表达式1,通常用于循环开始前设 置变量初值。
2.计算表达式2,值为0则结束循环 否则执行第3步。
3.执行循环体语句。
表达式2
真
假
循环体
表达式3
4.计算表达式3,返回第2步。
例: 求 1+2 +…+99
教学重点:
各种循环语句应用的特点及异同 点。
编程解决这样的一个问题: 从键盘输入一百个学生的成绩,求总成绩。
1.设一百个变量,分别输入学生的成绩,然后求和。
2.设一个变量,每次输入一个学生成 绩,累加后再输入下一个学生成绩, 如下:
scanf(“%f”,&a); s=s+a; scanf(“%f”,&a); s=s+a; …………. 这样重复一百次,然后输出s的值。
原因是什么?
注意(续):
• 为了保证循环正常运行,应该特别注意:
– 循环控制条件的描述 – 控制条件的初始状态(初始值) – 循环体内部对控制条件的影响
想想这样的一段循环语句的执行结果:
i=1; while (i<=100) putchar(‘*’); i++;
这个循环永远不会结束, 因为循环控制变量i没有 在循环体内被改变,i++; 不属于循环体。
这样写显然非常麻烦。我们注意到 程序中的
scanf(“%f”,&a);
s=s+a;
两句话是一直重复的,如果能用一 种语句,使这两句话能自动的重复 执行一百次,就可以简化了书写的 麻烦,这就是循环语句。
C语言有while 、 do - while 、和for 语句三种循环结构语句。
前两个称为条件循环,即根据条件 来决定是否继续循环;
表达式1:通常是给循环变量赋初值
表达式2:循环是否继续执行的判别表达式,这个表达 式通常与某一个(或多个)变量的值有关,随着这个 (些)变量的值的改变,表达式的结果发生变化,这 个(些)变量被称为循环因变量。
表达式3:通常用于改变循环因变量的值。
在某些情况下,for语句中的表达式1、2、3都可以 省略,而改用其他的方式来实现这些功能。我们还用 上面的例子说明for语句省略表达式的情形。
注意此处 的分号。
此处,表达式1用逗号表达式的形式,给多 个变量赋初值。表达式3用逗号表达式把循环体 也写入其中。注意表达式3书写顺序不能交换。
例:求 1/100+2/99+…+1
分析:用变量i从1开始循环,每次增加1;用变量j 从100开始循环,每次减少1。累加i/j的值到s中。当 i>j时结束循环(即i<=j时继续循环)。最后输出s。 程序如下:
main( )
程 { long a,i,t=0;
序
scanf(“%ld”,&a);
while(a>0)
{ i=a%10;
t=t*10+i;
a=a/10; }
printf(“\n%ld”,t);
}
例:有数列2/3、4/5、6/9、10/15……求此数列前30项的和。
算法分析:
对于数列的题,首先要找出通项公式,或前后项的计算关 系公式,根据公式求所需。由于数列的题一般执行次数能确定, 用for语句来编写比较方便。
printf(“s=%d”,s); }
2.省略表达式3: 注意:表达
#include<stdio.h> 式省略,分
main( )
号不省略。
{ int i,s=0;
for(i=1;i<=99;)
{s=s+i;i++;}
printf(“s=%d”,s);
}
表达式2也可以省略 但在循环体中要借助 break;语句来实现循 环的结束,我们将在 后面介绍。
n++; s=s+score; }while(score>=0); if(n>1) printf (“ \n %f” ,(s-score)/(n-1)); else printf(“no student score!”); }
[例]从键盘上输入一个整数,判断其是几位数。
main() { long m, a ; int n=0 ;
do{s=s+i; i++; }while(i<=99);
printf(“\ns=%d”,s); }
例:任意输入一个自然数,把它反序输出。(如:原数 为123,输出321)。
分析:此题不确定循环执行的次数,也不涉及一个规律 变化的变量,一般用while或do-while来编写。又由于第 一次就要判断输入的是否是自然数,通常用while来实现。 算法步骤如下:
5. s=s+score 6. 录入下一个score,并返回第3步 7. 如果n>0,输出s/n否则输出没有学生成绩
程序:
main( ) { int n=0 ;
float s=0,score; scanf( “%f” ,&score); while (score >= 0 )
{ n++; s=s+score; scanf( “%f” ,& score);
别要注意n和s的取值 问题!
}
}while(score>=0);
if(n!=0) printf (“ \n %f” ,s/n);
else printf(“no student score!”);
}
main( ) { int n=0 ;
float s=0,score; do { scanf( “%f” ,& score);
#include<stdio.h>
main( )
{ int i,j;
float s=0;
for( i=1,j=100 ; i<=j ; i++,j--)
s=s+(float)i/j;
printf(“\ns=%f”,s);
}
例:求n! ,即计算p=1×2×3×…×n的值。
main( )
{ int i, n; long p; p=1; printf("Enter n:"); scanf("%d",&n);
第五章 循环结构程序设计
• 5.1 while语句 • 5.2 do-while语句 • 5.3 for 语句 • 5.4 break、continue和goto语句 • 5.5 循环的嵌套 • 5.6 复合结构程序举例
教学目的和基本要求:
要求学生了解循环结构程序设计, 掌握各种循环语句应用的特点及异 同点,掌握循环嵌套及复合结构。
printf (“input data:”); scanf (“%ld” ,&m);
a = m; do { a = a/10 ;
n++ ; }while(a>0) ; printf (“%d\n” , n); }
[例] e 1 1 1 1 ... 1 ... 求e的近似值。
for语句中的表达式可以是一切形式的表达式, 逗号运算符参与的表达式也可以运用在for语句中, 通常运用于表达式1和表达式3。
如上面的例子可以改写为:
#include<stdio.h> main( ) { int i,s;
for(s=0,i=1;i<=99;s=s+i,i++) ; printf(“s=%d”,s); }
真
语句
如果表达式的值一开始就为0,则语 句一次也不会被执行。
【例】编写程序,求100个自然数的和 即: s=1+2+3+ … +100
思路:寻找加数与求和的规律
加数i——从1变到100,每循环一次,使i增1, 直到i的值超过100。i的初值设为1。
求和——设变量 sum 存放和,循环求 sum=sum+i,直至i超过100。
比如求1+2+…+99的问题我们也可以分别用 while与do-while语句编写如下:
用while:
用do-while:
#include<stdio.h> main( ) { int i=1,s=0;
while(i<=99) {s=s+i; i++; }
printf(“\ns=%d”,s); }
#include<stdio.h> main( ) { int i=1,s=0;
应该改为:
循环语句中一定要注
意表达式的值是否能在 循环执行过程中被改变, 以免造成死循环。