ETempC程序设计1第六讲-循环结构.ppt





《ETempC程序设计1第六讲-循环结构.ppt》由会员分享,可在线阅读,更多相关《ETempC程序设计1第六讲-循环结构.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、循环结构程序设计循环结构程序设计 C C 语言程序设计语言程序设计主讲:刘卫红1程序的三种基本结构程序的三种基本结构顺序结构顺序结构AB选择结构选择结构YNABP成成立立?循环结构循环结构NYP成立成立?AYNAP成立成立?直到型循环直到型循环直到型循环直到型循环当型循环当型循环当型循环当型循环2程序的基本结构程序的基本结构int a,b,sum;scanf(“%d%d”,&a,&b);sum=a+b;printf(“sum=%dn”,sum);顺序顺序结构结构int a,b,max;scanf(“%d%d”,&a,&b);if(ab)max=a;else max=b;printf(“max=
2、%dn”,max);选择选择结构结构如何连续求和或求最大值?如何连续求和或求最大值?3若连续求和的次数确定,即循环次数确定的循环若连续求和的次数确定,即循环次数确定的循环若连续求和的次数确定,即循环次数确定的循环若连续求和的次数确定,即循环次数确定的循环int i,a,b,sum;for(i=1;i=10;i+)scanf(“%d%d”,&a,&b);sum=a+b;printf(“sum=%dn”,sum);int i,a,b,sum;i=1;while(i=10)scanf(“%d%d”,&a,&b);sum=a+b;printf(“sum=%dn”,sum);i+;for循环循环whil
3、e循循环环4若循环次数不确定若循环次数不确定int a,b,sum;while(a!=0|b!=0)scanf(%d%d,&a,&b);sum=a+b;printf(sum=%dn,sum);getch();错误!错误!int a,b,sum;scanf(%d%d,&a,&b);while(a!=0|b!=0)sum=a+b;printf(sum=%dn,sum);getch();错误!错误!5int a,b,sum;scanf(%d%d,&a,&b);while(a!=0|b!=0)sum=a+b;printf(sum=%dn,sum);scanf(%d%d,&a,&b);getch();若
4、循环次数不确定(续)若循环次数不确定(续)循环初始条件循环初始条件循环控制条件循环控制条件循环体(红色大括号循环体(红色大括号内的部分)内的部分)循环因子循环因子(a,b)只要能够找到循环的四个要素,即可写出循环。当循环次数不确定时,用while循环更直观,当然也可可用for循环6goto语句构成的循环语句构成的循环int a,b,sum;loop:scanf(%d%d,&a,&b);sum=a+b;printf(sum=%dn,sum);if(a!=0|b!=0)goto loop;getch();注意注意:goto语句是有害的,会破坏程序的结构化语句是有害的,会破坏程序的结构化程度。程度。
5、因此应限制使用,尽量不用。因此应限制使用,尽量不用。7本节要点本节要点l lwhile循环循环l ldo-while循环循环l lfor循环循环l l循环的嵌套循环的嵌套l lbreak语句和语句和continue语句语句8while循环循环l l语句一般格式语句一般格式while(表达式表达式)语句语句l l一般为一般为一般为一般为关系关系关系关系表达式表达式表达式表达式或或或或逻辑逻辑逻辑逻辑表达式,也表达式,也表达式,也表达式,也可以是可以是可以是可以是C C语言其他类语言其他类语言其他类语言其他类型的合法表达式型的合法表达式型的合法表达式型的合法表达式 l l用来控制循环体是用来控制循
6、环体是用来控制循环体是用来控制循环体是否执行否执行否执行否执行l l称为称为称为称为内嵌语句内嵌语句内嵌语句内嵌语句,可,可,可,可以是基本语句、控以是基本语句、控以是基本语句、控以是基本语句、控制语句,也可以是制语句,也可以是制语句,也可以是制语句,也可以是复合语句复合语句复合语句复合语句l l是重复执行的部分是重复执行的部分是重复执行的部分是重复执行的部分 9功能:功能:l l计算表达式的值计算表达式的值计算表达式的值计算表达式的值,为非,为非,为非,为非0 0(逻辑真)时,重复执(逻辑真)时,重复执(逻辑真)时,重复执(逻辑真)时,重复执行行行行内嵌语句内嵌语句内嵌语句内嵌语句,每执行一
7、次,就判断一次表达式的,每执行一次,就判断一次表达式的,每执行一次,就判断一次表达式的,每执行一次,就判断一次表达式的值,直到表达式的值为值,直到表达式的值为值,直到表达式的值为值,直到表达式的值为00时结束循环,转去执行时结束循环,转去执行时结束循环,转去执行时结束循环,转去执行whilewhile后面的语句。后面的语句。后面的语句。后面的语句。当表达式为真当表达式为真 语句语句N-SN-S结构图结构图结构图结构图N NY Y流程图流程图流程图流程图表表达达式式非非0?语句语句循环控制条件循环控制条件循环控制条件循环控制条件循环体循环体循环体循环体10求累加和求累加和【例例】编写程序,求编写
8、程序,求100个自然数的和个自然数的和即:即:s=1+2+3+100思路:寻找思路:寻找加数加数与与求和求和的规律的规律 1+2+3+99+100isumi=sumi-1+i11求累加和(续)求累加和(续)int i,sum;i=1;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);getch();正确正确吗?吗?循环初始条件循环初始条件循环控制条件循环控制条件循环体(红色大括号循环体(红色大括号内的部分)内的部分)循环因子循环因子(i)12求累加和(续)求累加和(续)int i,sum=0;i=1;while(i=100)sum=sum+i;i+;pr
9、intf(sum=%dn,sum);getch();别忘了别忘了sum的初值!的初值!转换转换为为for循环循环int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);getch();for循循环更环更简洁!简洁!13for循环循环l l语句一般格式语句一般格式 for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句l l功能:功能:计算表达式计算表达式计算表达式计算表达式1 1的值,再的值,再的值,再的值,再判断表达式判断表达式判断表达式判断表达式2 2,如果其,如果其,如果其,如果其值为非值为非值为非值为非0 0(逻辑
10、真),则执行内嵌语句(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(循环体循环体循环体循环体),并,并,并,并计算表达式计算表达式计算表达式计算表达式3 3;之后再去判断表达式;之后再去判断表达式;之后再去判断表达式;之后再去判断表达式2 2,一直到其值为一直到其值为一直到其值为一直到其值为0 0时结束循环,执行后续语句。时结束循环,执行后续语句。时结束循环,执行后续语句。时结束循环,执行后续语句。循环初始条件循环初始条件循环初始条件循环初始条件循环控制条件循环控制条件循环控制条件循环控制条件循环体循环体循环体循环体14例如:求例如:求15的累加和的累加和.ma
11、in()int i,s=0;for(i=1;i=5;i+)s+=i;printf(“%d,%dn”,i,s)i=5?s=s+ii=i+1是否结束s=0i=1表达式表达式1表达式表达式2循环体循环体表达式表达式3s=0i=1s=1i=2s=3 i=3s=6 i=4s=10 i=5s=15 i=6for(循循环环变变量量赋赋初初值值;循循环环条条件件;循循环环变变量量增增值值)语语句句(即循环体)(即循环体)更为通俗的表示:更为通俗的表示:15说明:说明:l l所有用所有用while语句语句实现的循环都可以用实现的循环都可以用for语句语句实现。实现。等价于:等价于:for(表达式表达式1;表达式
12、表达式2;表达式表达式3)语句;语句;表达式表达式1;while(表达式表达式2)语句;语句;表达式表达式3;16几种几种for语句中表达式的省略情况语句中表达式的省略情况 表达式表达式表达式表达式1 1、2 2、3 3全省略,即:全省略,即:全省略,即:全省略,即:for(;)for(;)就等同于:就等同于:就等同于:就等同于:while(1)while(1),会无限循环(死循环),会无限循环(死循环),会无限循环(死循环),会无限循环(死循环)注意:在省略某个表达式时,应在适当位置进行循注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行环控制的必要操作,以保
13、证循环的正确执行 省略表达式省略表达式省略表达式省略表达式1 1和表达式和表达式和表达式和表达式3 3,即:即:即:即:forfor(;表达式(;表达式(;表达式(;表达式2 2;);););)就等同于:就等同于:就等同于:就等同于:whilewhile(表达式表达式表达式表达式22)省略表达式省略表达式省略表达式省略表达式2 2,即:即:即:即:forfor(表达式(表达式(表达式(表达式1 1;表达式;表达式;表达式;表达式3 3)就等同于:就等同于:就等同于:就等同于:表达式表达式表达式表达式1;while(1)1;while(1)表达式表达式表达式表达式3;3;17课堂练习课堂练习l
14、l1+3+5+7+99l l1-2+3-4+5+99-100l l1+1/2+1/3+1/4+1/100l l1-1/2+1/3-1/4+1/99-1/10018一个典型的错误一个典型的错误main(void)int i,sum=0;for(i=1;i=5;i+);sum=sum+i;printf(sum=%dn,sum);main(void)int i,sum=0;i=1;while(i=5);sum=sum+i;i+;printf(sum=%dn,sum);分号的问题!分号的问题!19求求5!Si=Si-1*i;main()int i;long s=1;for(i=1;i=5;i+)s=s
15、*i;printf(“%ldn”,s);若计算若计算1*3*5*7*.前前10项的积,怎么修项的积,怎么修改程序?改程序?20do-while循环循环l l语句一般格式语句一般格式 do语句语句while(表达式表达式););l l功能:功能:先执行内嵌语句先执行内嵌语句(循环体),之后计算(循环体),之后计算表达式的值,不为表达式的值,不为0(逻辑真)时,再(逻辑真)时,再执行循环体并判断条件,直到表达式的执行循环体并判断条件,直到表达式的值为值为 0结束循环,转去执行结束循环,转去执行while下面下面的语句。的语句。21While循环和循环和dowhile循环循环int i,sum=0;
16、i=1;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);getch();int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(sum=%dn,sum);getch();此时,两种循环实现的功能完全相同,如果将i的初值设为101,将出现什么情况?22说明:说明:l lwhile和和do-while都能实现循环控制,都能实现循环控制,while结构程序通常都可以转换成结构程序通常都可以转换成do-while结构结构l l区别:区别:do-while语句语句先执行循环体再判断条先执行循环体再判断条件,循环体件
17、,循环体至少执行一次至少执行一次;while语句语句先判断条件再执行循环体,先判断条件再执行循环体,循环体有可能一次也不执行循环体有可能一次也不执行l ldowhile循环也要遵守四要素,应该避免循环也要遵守四要素,应该避免死循环。死循环。23经典实例经典实例l l判断几位数,并逆序输出判断几位数,并逆序输出l l混合运算混合运算l l素数素数l l最小公倍数和最大公约数最小公倍数和最大公约数l la+aa+aaa+aaaa+l lFibonacci数列数列l l输出图形输出图形l l输出一个乘法口诀表输出一个乘法口诀表l l分解质因数分解质因数24实例实例1判断一个不多于五位的非负整数的位数
18、,并逆序判断一个不多于五位的非负整数的位数,并逆序判断一个不多于五位的非负整数的位数,并逆序判断一个不多于五位的非负整数的位数,并逆序输出,如输出,如输出,如输出,如1234512345,输出为,输出为,输出为,输出为5432154321 if(number/10000!=0)count=5;else if(number/1000!=0)count=4;else if(number/100!=0)count=3;else if(number/10)count=2;else count=1;判断位数:判断位数:判断位数:判断位数:tenthousand=number/10000 thousand
19、=number%10000/1000 hundred=number%1000/100 ten=number%100/10 individual=number%10从高位到低位分离:从高位到低位分离:从高位到低位分离:从高位到低位分离:individual=number%10 ten=number/10%10 hundred=number/100%10 thousand=number/1000%10 tenthousand=number/10000从低位到高位分离:从低位到高位分离:从低位到高位分离:从低位到高位分离:若要判断若要判断任意一个任意一个任意位数任意位数的整数怎的整数怎么办么办?25
20、实例实例1(续)(续)若用循环先找规律若用循环先找规律(12345):number%10 (5)number=number/10 (1234)number%10 (4)number=number/10 (123)number%10 (3)number=number/10 (12)number%10 (2)number=number/10 (1)number%10 (1)number=number/10 (0)退出条件退出条件循环体:number%10 number=number/10 循环条件:number!=0 while(number!=0)printf(“%d”,number%10);n
21、umber=number/10;do printf(“%d”,number%10);number=number/10;while(number!=0);问题在哪?为什么问题在哪?为什么必须用必须用do while?26实例实例2(1)(1)求求求求1-2+3-4+5-6+7+99-1001-2+3-4+5-6+7+99-100(2)(2)利用循环语句求利用循环语句求利用循环语句求利用循环语句求1-1/31-1/32 2+1/5+1/52 2-1/7-1/72 2+.+1/(2n-1)+.+1/(2n-1)22的值。的值。的值。的值。(本题求前本题求前本题求前本题求前5050项的和项的和项的和项
22、的和)main()int s=0,s1=0,s2=0,i;for(i=1;i=99;i+=2)s1=s1+i;for(i=2;i=100;i+=2)s2=s2+i;s=s1-s2;printf(s=%dn,s);分成两部分求和,然后相减:分成两部分求和,然后相减:main()int s=0,i,f=1;for(i=1;i=100;i+)s=s+f*i;f=-f;printf(s=%dn,s);设置一个表示正负的变量:设置一个表示正负的变量:for(i=1;i=99;i+=4)s1=s1+1/(i*i);for(i=3;i=99;i+=4)s2=s2+1/(i*i);?27实例实例2(续)(续)
23、(2)(2)利用循环语句求利用循环语句求利用循环语句求利用循环语句求1-1/31-1/32 2+1/5+1/52 2-1/7-1/72 2+.+1/(2n-1)+.+1/(2n-1)2 2的值。的值。的值。的值。(本本本本题求前题求前题求前题求前5050项的和项的和项的和项的和)main()float s=0,s1=0,s2=0;int i;for(i=1;i=99;i+=4)s1=s1+1.0/(i*i);for(i=3;i=99;i+=4)s2=s2+1.0/(i*i);s=s1-s2;printf(s=%fn,s);分成两部分求和,然后相减:分成两部分求和,然后相减:main()floa
24、t s=0,f=1;int i;for(i=1;i=100;i+=2)s=s+f/(i*i);f=-f;printf(s=%fn,s);设置一个表示正负的变量:设置一个表示正负的变量:若没有指定项数,而是要求最后一项的绝对值小于10-5,该如何修改程序?28实例实例2(续)(续)(3)(3)计算计算计算计算s=1+(1+2)+(1+2+3)+(1+2+3+10)s=1+(1+2)+(1+2+3)+(1+2+3+10)(4)(4)计算计算计算计算s=1+(1*2)+(1*2*3)+(1*2*3*10)s=1+(1*2)+(1*2*3)+(1*2*3*10)(5)(5)计算计算计算计算s=1*(1
25、+2)*(1+2+3)*(1+2+3+10)s=1*(1+2)*(1+2+3)*(1+2+3+10)(6)(6)计算计算计算计算s=1*(1*2)*(1*2*3)*(1*2*3*10)s=1*(1*2)*(1*2*3)*(1*2*3*10)imain()int i,s=0;for(i=1;i=10;i+)s=s+;ii表示第表示第i项的值,而第项的值,而第i项的值又是一个项的值又是一个“和和”s1int s1,j;s1=0;for(j=1;j=i;j+)s1=s1+j;main()int i,j;long s=0,s1;for(i=1;i=10;i+)s1=1;for(j=1;j=i;j+)s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ETempC 程序设计 第六 循环 结构

限制150内