《最新北京科技大学创新C语言第5章PPT课件》由会员分享,可在线阅读,更多相关《最新北京科技大学创新C语言第5章PPT课件(47页珍藏版)》请在金锄头文库上搜索。
1、北京科技大学北京科技大学 创新创新C C语言语言 第第5 5章章7/19/20242问题问题1 1:如何根据收入,确定一个人的纳税比例及纳税额如何根据收入,确定一个人的纳税比例及纳税额如何根据收入,确定一个人的纳税比例及纳税额如何根据收入,确定一个人的纳税比例及纳税额?当一个公司有多名员工时,如何计算每个人的当一个公司有多名员工时,如何计算每个人的当一个公司有多名员工时,如何计算每个人的当一个公司有多名员工时,如何计算每个人的纳税比例及纳税额?纳税比例及纳税额?纳税比例及纳税额?纳税比例及纳税额?提出问题:提出问题:C语言:语言:循环语句循环语句 问题问题2 2如何根据学生的分数判断是否及格?
2、如何根据学生的分数判断是否及格?如何根据学生的分数判断是否及格?如何根据学生的分数判断是否及格?如何根据全班学生的分数,分别如何根据全班学生的分数,分别如何根据全班学生的分数,分别如何根据全班学生的分数,分别判断他们是否及格?判断他们是否及格?判断他们是否及格?判断他们是否及格?Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/20249inti=0;while(+i=100+i+i;+i;判断判断判断判断i
3、=100i=100sum+=i;inti=0;while(i+100i+判断判断判断判断i100i100;i+i+sum+=i;inti=0;while(i+i;sum+=i+i;sum+=i不同的不同的while语句形式语句形式设:设:sum=0;inti=1;while(isum+=i;+i;sum+=i;+i;运行结束后:运行结束后: i i、sum = ?sum = ?运行结束后运行结束后:i=101,sum=5050i=101,sum=5050i=101,sum=5050i=101,sum=5050i=101,sum=5050i=101,sum=5050i=101,sum=5050i
4、=101,sum=5050i=101,sum=5050i=101,sum=5050i=101,sum=5050i=101,sum=5050i=100,sum=5050i=100,sum=5050i=100,sum=5050i=100,sum=5050运行运行运行运行jC5_ajC5_ajC5_ajC5_aEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202410其他的其他的while语句形式语句形式l l
5、while(while(0 0).). 由于表达式恒等于由于表达式恒等于由于表达式恒等于由于表达式恒等于0 0,所以循环体永远也不,所以循环体永远也不,所以循环体永远也不,所以循环体永远也不会执行,是一个逻辑会执行,是一个逻辑会执行,是一个逻辑会执行,是一个逻辑错误的语句错误的语句错误的语句错误的语句l lwhile(while(1 1).). 由于表达式恒等于由于表达式恒等于由于表达式恒等于由于表达式恒等于1 1,所以不可能通过循环,所以不可能通过循环,所以不可能通过循环,所以不可能通过循环控制条件来结束循环体的执行,即控制条件来结束循环体的执行,即控制条件来结束循环体的执行,即控制条件来结
6、束循环体的执行,即死循环死循环死循环死循环。l l为了保证循环正常运行,应该特别注意:为了保证循环正常运行,应该特别注意:为了保证循环正常运行,应该特别注意:为了保证循环正常运行,应该特别注意: 循环控制条件的描述循环控制条件的描述循环控制条件的描述循环控制条件的描述 控制条件的初始状态(初始值)控制条件的初始状态(初始值)控制条件的初始状态(初始值)控制条件的初始状态(初始值) 循环体内部对控制条件的影响循环体内部对控制条件的影响循环体内部对控制条件的影响循环体内部对控制条件的影响Evaluation only.Created with Aspose.Slides for .NET 3.5
7、Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/2024115.2do-while语句语句l l语句一般格式语句一般格式 do语句语句while(表达式表达式););l l功能:功能: 先执行内嵌语句先执行内嵌语句(循环体),之后计算(循环体),之后计算表达式的值,不为表达式的值,不为0(逻辑真)时,再(逻辑真)时,再执行循环体并判断条件,直到表达式的执行循环体并判断条件,直到表达式的值为值为 0结束循环,转去执行结束循环,转去执行while下面下面的语句。的语句。Evaluation only.Created wi
8、th Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202412do-while循环的算法循环的算法 循环体循环体当表达式为真当表达式为真N-S结构图结构图NY循环体循环体表达式非表达式非0?流程图流程图main()main()inti=1,sum=0;inti=1,sum=0; dodo sum=sum+i;sum=sum+i;i+;i+; while(i=100);while(i=100);printf(%dn,sum);printf(%dn,sum); 用
9、用用用do-whiledo-while语句语句语句语句求求求求100100个自然数的和个自然数的和个自然数的和个自然数的和 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202413说明:说明:l lwhile和和do-while都能实现循环控制,都能实现循环控制,while结构程序通常都可以转换成结构程序通常都可以转换成do-while结构结构l l区别:区别: do-while语句语句先执行循环体再判
10、断条先执行循环体再判断条件,循环体件,循环体至少执行一次至少执行一次; while语句语句先判断条件再执行循环体,先判断条件再执行循环体,循环体有可能一次也不执行循环体有可能一次也不执行l ldowhile循环体中一定要有能使表达式值循环体中一定要有能使表达式值趋于趋于0的操作的操作(如如i+),否则会出现,否则会出现死循环死循环。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202414do-while
11、语句的简单应用语句的简单应用【例【例5.3】用辗转相除法求】用辗转相除法求m和和n的最大公约数的最大公约数思路:思路:先求先求m和和n相除的余数相除的余数r然后将然后将mn,将,将nr,并判断,并判断r(或(或n)如果如果r0,再重复求余数,直到,再重复求余数,直到 r 等于等于 0 时结束循环时结束循环此时的此时的m为最大公约数为最大公约数Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202415算法和
12、程序:算法和程序:main()intm,n,r;scanf(%d,%d,&m,&n);if(mn)r=m;m=n;n=r;dodor=m%n;r=m%n;m=n;n=r;m=n;n=r;while(r!=0);while(r!=0);printf(%dn,m);运行运行jc5_3程序运行情况如下:程序运行情况如下:程序运行情况如下:程序运行情况如下:24,6024,60 1212定义定义m、n、rmnT F m和和n交换交换r=m%nm=nn=r 当当r != 0时时输出最大公约数输出最大公约数mEvaluation only.Created with Aspose.Slides for .N
13、ET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/2024165.3for语句语句l l语句一般格式语句一般格式for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句l l功能:功能: 计算表达式计算表达式计算表达式计算表达式1 1的值,再的值,再的值,再的值,再判断表达式判断表达式判断表达式判断表达式2 2,如果其,如果其,如果其,如果其值为非值为非值为非值为非0 0(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句( (循环体循环体循环体
14、循环体) ),并,并,并,并计算表达式计算表达式计算表达式计算表达式3 3;之后再去判断表达式;之后再去判断表达式;之后再去判断表达式;之后再去判断表达式2 2,一直到其值为一直到其值为一直到其值为一直到其值为0 0时结束循环,执行后续语句。时结束循环,执行后续语句。时结束循环,执行后续语句。时结束循环,执行后续语句。循环初始条件循环初始条件循环初始条件循环初始条件循环控制条件循环控制条件循环控制条件循环控制条件循环体循环体循环体循环体Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.C
15、opyright 2004-2011 Aspose Pty Ltd.7/19/202417for语句的算法语句的算法N-S结构图结构图for (表达式表达式1;表达式表达式2;表达式表达式3) 语句语句NY流程图流程图计算表达式计算表达式1 语句语句计算表达式计算表达式3表达式表达式2为真为真?例如:例如:例如:例如:main()inti,sum;sum=0;for(i=1;i=100;i+)for(i=1;i=100;i+)sum=sum+i;sum=sum+i; printf(sum=%dn,sum);可部分或全部省略,可部分或全部省略,可部分或全部省略,可部分或全部省略,但但但但“ “;
16、 ;” ”不可省略不可省略不可省略不可省略Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202418省略省略for语句的表达式语句的表达式 表达式表达式表达式表达式1 1、2 2、3 3全省略,全省略,全省略,全省略,即:即:即:即:for(;)for(;) 就等同于:就等同于:就等同于:就等同于:while(while(1)1),会无限循环(,会无限循环(,会无限循环(,会无限循环(死循环死循环死循环死
17、循环)注意:在省略某个表达式时,应在适当位置进行循注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行环控制的必要操作,以保证循环的正确执行 省略表达式省略表达式省略表达式省略表达式1 1和表达式和表达式和表达式和表达式3 3,即:即:即:即:forfor(;表达式(;表达式(;表达式(;表达式2 2;);););)就等同于:就等同于:就等同于:就等同于:whilewhile( 表达式表达式表达式表达式22) 省略表达式省略表达式省略表达式省略表达式2 2,即:即:即:即:forfor(表达式(表达式(表达式(表达式1 1; ;表达式;表达式;表达式;表达式3 3
18、)就等同于:就等同于:就等同于:就等同于:表达式表达式表达式表达式1;while(1)1;while(1)表达式表达式表达式表达式3;3;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202419例如:例如:i=1;for(;i100)for(i=1;i100)i+;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile
19、 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202420说明:说明:l l所有用所有用while语句实现的循环都可以用语句实现的循环都可以用for语句实现。语句实现。等价于:等价于:for(表达式表达式1;表达式表达式2;表达式表达式3)语句;语句;表达式表达式1;while(表达式表达式2)语句;语句;表达式表达式3;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Lt
20、d.7/19/202421for语句的简单应用语句的简单应用【例【例5.4】求】求n!,即计算,即计算p=123n的值。的值。思路:求阶乘与求累加的运算处理过程类似,只要思路:求阶乘与求累加的运算处理过程类似,只要将将“+ +”变为变为“* *”。设置:设置:乘数乘数乘数乘数i i ,初值为,初值为1,终值为,终值为n(n是循环控制终是循环控制终值,需要从键盘输入)值,需要从键盘输入)累乘器累乘器累乘器累乘器 p p ,每次循环令,每次循环令p = p*iEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile
21、 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202422程序:程序:main()inti,n;longp;p=1;printf(Entern:);scanf(%d,&n);for(i=1;i=n;i+)p=p*i;printf(p=%ldn,p);思考:思考:思考:思考:如何输出如何输出如何输出如何输出1!, 2!, , n! 1!, 2!, , n! ?如何求如何求如何求如何求s =1!+ 2!+ + n! s =1!+ 2!+ + n! ? 运行运行jc5_4Evaluation only.Created with Aspose.Sli
22、des for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202423熟悉几个循环语句熟悉几个循环语句l lwhile(!x)x+;while(!x)x+; 当当当当 x=0x=0 时,执行循环体时,执行循环体时,执行循环体时,执行循环体x+;x+;l lwhile(c=getchar()!=n)n=n+1;while(c=getchar()!=n)n=n+1;n n 称为称为称为称为计数器计数器计数器计数器,作用是统计输入字符的个数,作用是统计输入字符的个数,作用是统计输入字符的个数,作用是
23、统计输入字符的个数l lwhile(num+=2);printf(%dn,num);while(num+5);dox*=-3;while(x5);先执行循环体先执行循环体先执行循环体先执行循环体x*=-3x*=-3,再判断条件,再判断条件,再判断条件,再判断条件(x5) (x5) l lfor(n=0;n26;n+)printf(%c,n+A);for(n=0;n26;n+)printf(%c,n+A);作用是作用是作用是作用是输出输出输出输出2626个大写字母个大写字母个大写字母个大写字母l lfor(sum=0,i=1;i=100;sum=sum+i,i+=2);for(sum=0,i=1
24、;i=100;sum=sum+i,i+=2);作用是作用是作用是作用是计算计算计算计算100100以内的奇数和以内的奇数和以内的奇数和以内的奇数和 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202424几种循环语句的比较几种循环语句的比较l lwhilewhile和和和和do-whiledo-while语句的语句的语句的语句的表达式表达式表达式表达式只有只有只有只有一个一个一个一个,forfor语语语
25、语句有句有句有句有三个三个三个三个。l lwhilewhile和和和和forfor先判断先判断先判断先判断循环条件循环条件循环条件循环条件后执行后执行后执行后执行循环体,循环体,循环体,循环体,do-do-whilewhile语句语句语句语句先执行先执行先执行先执行循环体循环体循环体循环体后判断后判断后判断后判断循环条件。循环条件。循环条件。循环条件。whilewhile语句多用于语句多用于语句多用于语句多用于循环次数不定循环次数不定循环次数不定循环次数不定的情况的情况的情况的情况do-whiledo-while语句多用于语句多用于语句多用于语句多用于至少要运行一次至少要运行一次至少要运行一次
26、至少要运行一次的情况的情况的情况的情况forfor语句语句语句语句多用于要多用于要多用于要多用于要赋初值赋初值赋初值赋初值或或或或循环次数固定循环次数固定循环次数固定循环次数固定的情况的情况的情况的情况Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/2024255.4用用goto语句实现循环语句实现循环l有兴趣的同学自学有兴趣的同学自学l不提倡使用不提倡使用goto语句语句注意注意:goto语句能实现程序无
27、条件转移,为编程语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会破坏提供了便利。但是无限制地使用,会破坏程序的结构化程度。程序的结构化程度。因此应限制使用。因此应限制使用。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/2024265.5循环结构中的跳转语句循环结构中的跳转语句l l有如下三种语句实现跳转:有如下三种语句实现跳转: continue语句语句 break语句语句 goto语句语
28、句l l在循环语句的循环体中使用,可以进行在循环语句的循环体中使用,可以进行循环的流程控制循环的流程控制Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202427后续语句后续语句语句语句Y YN N表达式表达式表达式表达式? ?后续语句后续语句语句语句表达式表达式表达式表达式? ?Y YN N5.5.1continue语句及应用语句及应用l l功能:功能: 中断循环体的中断循环体的中断循环体的中断循环体的
29、本次本次本次本次执行(即跳过循环体中尚执行(即跳过循环体中尚执行(即跳过循环体中尚执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。未执行的语句),立即开始执行下一次循环。未执行的语句),立即开始执行下一次循环。未执行的语句),立即开始执行下一次循环。continue;continue;whilewhile语句语句语句语句continue;continue;do-whiledo-while语句语句语句语句后续语句后续语句计算表达式计算表达式计算表达式计算表达式3 3计算表达式计算表达式计算表达式计算表达式1 1语句语句语句语句表达式表达式表达式表达式2?2?Y YN Ncontin
30、ue;continue;forfor语句语句语句语句Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202428例如:例如:intx,n=0,s=0;intx,n=0,s=0;while(n10)while(n10)scanf(%d,&x);scanf(%d,&x);if(x0)continue;if(x0)continue;s+=x;n+;s+=x;n+; intx,n=0,s=0;intx,n=0,s=
31、0;dodoscanf(%d,&x);scanf(%d,&x);if(x0)continue;if(x0)continue;s+=x;n+;s+=x;n+;while(n10);while(n10); for(n=0,s=0;n10;)for(n=0,s=0;n10;)scanf(%d,&x);scanf(%d,&x);if(x0)continue;if(x0)continue;s+=x;n+;s+=x;n+;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004
32、-2011 Aspose Pty Ltd.7/19/202429应用举例应用举例【例【例5.7】把】把100200之间能被之间能被7整除的数,整除的数,以十个数为一行的形式输出,最后以十个数为一行的形式输出,最后输出一共有多少个这样的数。输出一共有多少个这样的数。思路:思路:思路:思路:设变量设变量设变量设变量n n,从,从,从,从100100变化到变化到变化到变化到200200;对每个对每个对每个对每个n n进行判断,进行判断,进行判断,进行判断,当当当当n n不能被不能被不能被不能被7 7整除时,终止本次整除时,终止本次整除时,终止本次整除时,终止本次循环,循环,循环,循环,否则就输出这个
33、数;否则就输出这个数;否则就输出这个数;否则就输出这个数;设变量设变量设变量设变量j j作为输出个数的计数器,每输出一个数就作为输出个数的计数器,每输出一个数就作为输出个数的计数器,每输出一个数就作为输出个数的计数器,每输出一个数就令令令令j+j+;当输出了当输出了当输出了当输出了1010个数时(即个数时(即个数时(即个数时(即j%10j%10等于等于等于等于0 0),输出),输出),输出),输出nn退出循环后输出退出循环后输出退出循环后输出退出循环后输出j j的值。的值。的值。的值。 Evaluation only.Created with Aspose.Slides for .NET 3.
34、5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202430算法和程序算法和程序main()intn,j=0;for(n=100;n=200;n+)if(n%7!=0)if(n%7!=0)continue;continue;printf(%6d,n);j+;j+;if(j%10=0)if(j%10=0)printf(n);printf(n);printf(n);printf(j=%dn,j);for (n=100; n=200; n+) n不能被不能被7整除整除 T F 终止本次循环终止本次循环 输出输出n 输出
35、输出10个数个数 T F 换行换行运行运行jc5_7Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202431后续语句后续语句语句语句Y YN N表达式表达式表达式表达式? ?后续语句后续语句语句语句表达式表达式表达式表达式? ?Y YN N5.5.2循环中循环中break的应用的应用l l功能:功能: 利用利用break语句能够强迫终止语句能够强迫终止本层本层循环,循环,转到后续语句执行。转到后续语句执
36、行。break;break;whilewhile语句语句语句语句break;break;do-whiledo-while语句语句语句语句后续语句后续语句计算表达式计算表达式计算表达式计算表达式3 3计算表达式计算表达式计算表达式计算表达式1 1语句语句语句语句表达式表达式表达式表达式2?2?Y YN Nbreak;break;forfor语句语句语句语句Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202
37、432例如:例如:intx,n=0,s=0;intx,n=0,s=0;while(n10)while(n10)scanf(%d,&x);scanf(%d,&x);if(x0)break;if(x0)break;s+=x;n+;s+=x;n+;intx,n=0,s=0;intx,n=0,s=0;dodoscanf(%d,&x);scanf(%d,&x);if(x0)break;if(x0)break;s+=x;n+;s+=x;n+;while(n10);while(n10);for(n=0,s=0;n10;n+)for(n=0,s=0;n10;n+)scanf(%d,&x);scanf(%d,&
38、x);if(x0)break;if(x0)break;s+=x;s+=x;Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/2024335.6循环的嵌套循环的嵌套l l如果循环语句的循环体内又包含了另一条如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套循环语句,则称为循环的嵌套l l例如:例如: #includemain()inti,j;for(for(i=1;i10;i+i=1;i10;i+)
39、for(for(j=1;j=j=1;j=i i;j+;j+) )printf(j=i)?%4dn:%4d,i*j);printf(j=i)?%4dn:%4d,i*j);运行运行jc5_a外循环语句外循环语句内循环语句内循环语句外循环体外循环体外循环体外循环体内循环体内循环体内循环体内循环体Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202434注意:注意:lwhile、do-while、for循环语句可
40、以并列,循环语句可以并列,也可以相互嵌套,但也可以相互嵌套,但要层次清楚,不能出要层次清楚,不能出现交叉。现交叉。l l多多重重循循环环程程序序执执行行时时,外外层层循循环环每每执执行行一一次,内层循环都需要循环执行多次。次,内层循环都需要循环执行多次。l l例如:例如:for(a=1;a=10;a+)for(b=0;b2n2)f fn n= = l l设设设设 变变变变 量量量量 f1f1、 f2f2和和和和 f3f3, 并并并并 为为为为 f1f1和和和和 f2f2赋赋赋赋 初初初初 值值值值 1 1, 令令令令f3=f1+f2f3=f1+f2得到第得到第得到第得到第3 3项;项;项;项;
41、l l将将将将f1f2f1f2,f2f3f2f3,再求,再求,再求,再求f3=f1+f2f3=f1+f2得到第得到第得到第得到第4 4项;项;项;项;l l依此类推求第依此类推求第依此类推求第依此类推求第5 5项、第项、第项、第项、第6 6项项项项这是一种这是一种这是一种这是一种递推算法递推算法递推算法递推算法应采用循环实现应采用循环实现应采用循环实现应采用循环实现Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/
42、19/202436算法和程序算法和程序#defineN N20main()inti,f1,f2,f3;f1=f2=1;printf(n%8d%8d,f1,f2);for(i=3;i=N N;i+)f3=f1+f2;f1=f2;f2=f3;printf(%8d,f3);if(i%5=0)printf(n);if(i%5=0)printf(n);f1=1,f2=1并输出并输出for (i=3; i=20; i+) f3=f2+f1 f1=f2,f2=f3 输出输出f3 输出输出输出输出5 5个数个数个数个数 T F 换行换行运行运行jc5_5Evaluation only.Created with
43、 Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202437举例举例2【例【例5.12】判断输入的某个数】判断输入的某个数m是否为素数。是否为素数。若是素数,输出若是素数,输出“YES”,若不是,若不是,输出输出“NO”。思路:素数是指只能被思路:素数是指只能被思路:素数是指只能被思路:素数是指只能被1 1和它本身整除的数,如和它本身整除的数,如和它本身整除的数,如和它本身整除的数,如5 5、7 7、1111、1717、等。等。等。等。 l分分别别用用2 2、3
44、 3、,m-1m-1尝尝试试能能否否整整除除整整数数m m m m。如果如果如果如果mm能被某个能被某个能被某个能被某个数数数数整除,则整除,则整除,则整除,则mm就不是素数。就不是素数。就不是素数。就不是素数。l l这是一种这是一种这是一种这是一种穷举算法穷举算法穷举算法穷举算法l l设除数为设除数为设除数为设除数为j j,从,从,从,从2 2循环到循环到循环到循环到m-1m-1Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pt
45、y Ltd.7/19/202438算法和程序:算法和程序:#includemath.hmain()intj,m,k;printf(Enteranintegernumber:);scanf(%d,&m);for(j=2;j=m-1j=mj=m)printf(YESn);elseprintf(NOn); 输入一个数输入一个数mfor (j=2; j=m T F输出输出YES“ 输出输出NO运行运行jc5_12Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-20
46、11 Aspose Pty Ltd.7/19/202439程序的优化程序的优化l l对于对于穷举法穷举法来说,为了提高程序的效率,来说,为了提高程序的效率,就要减少就要减少尝试次数尝试次数。#includemath.hmain()intj,m,k;printf(Enteranintegernumber:);scanf(%d,&m);k=sqrt(m);k=sqrt(m);for(j=2;j=kj=k+1j=k+1)printf(YESn);elseprintf(NOn);设设设设m=15m=15,1515= =3 3* *5 5; ;尝试了尝试了尝试了尝试了1515%3 3 后,没有必后,没有
47、必后,没有必后,没有必要再尝试要再尝试要再尝试要再尝试1515%5 5即:即:即:即:kk是尝试的中点是尝试的中点是尝试的中点是尝试的中点作业作业作业作业(1)(1):如何输出:如何输出:如何输出:如何输出100100200200中所有的素数中所有的素数中所有的素数中所有的素数 ,4 ,4个个个个1 1行行行行Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202440举例举例3【例【例5.13】用牛顿迭代
48、法求方程】用牛顿迭代法求方程2x3+4x2-7x-6=0 在在x=1.5附近的根。附近的根。思路:思路:思路:思路:设设xn为一个接近为一个接近xa的近似根,过的近似根,过(xn,f(xn)点做切线,切线方程为:点做切线,切线方程为:即即:xnxn+1xy0f(x)(xn, f(xn)(xn+1, f(xn+1) xa 方程的根方程的根方程的根方程的根牛顿迭代公式牛顿迭代公式牛顿迭代公式牛顿迭代公式 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011
49、 Aspose Pty Ltd.7/19/202441算法基本步骤:算法基本步骤: 先先先先设设设设一一一一个个个个方方方方程程程程近近近近似似似似根根根根x0x0,求求求求出出出出方方方方程程程程f f的的的的值值值值和和和和方方方方程程程程导数导数导数导数f1f1的值的值的值的值;f=f=2 2x0x03 3+4+4x0x02 2-7-7x0x0-6-6f1=f1=6 6x0x02 2+8+8x0x0-7-7 用用用用迭迭迭迭代代代代公公公公式式式式x x=x0-f/f1=x0-f/f1进进进进行行行行迭迭迭迭代代代代,求求求求出出出出x x比比比比x0x0要要要要接接接接近方程真实的根;
50、近方程真实的根;近方程真实的根;近方程真实的根; 当当当当| |x x- -x0x0| |大大大大于于于于某某某某个个个个很很很很小小小小的的的的数数数数时时时时( (如如如如1010-6)-6),认认认认为为为为未未未未找找找找到到到到,此此此此时时时时将将将将x xx0x0,再再再再次次次次求求求求f f、f1f1,并并并并迭迭迭迭代代代代,又又又又求出一个新的更接近方程根的求出一个新的更接近方程根的求出一个新的更接近方程根的求出一个新的更接近方程根的x x; 一直到一直到一直到一直到| |x x- -x0x0| | 1010-6-6时得到方程近似根:时得到方程近似根:时得到方程近似根:时
51、得到方程近似根:x x或或或或x0x0。l l这是一种这是一种这是一种这是一种迭代算法迭代算法迭代算法迭代算法l l用循环实现用循环实现用循环实现用循环实现Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202442算法和程序:算法和程序:#includemath.hmain()floatx,x0,f,f1;x=1.5x=1.5;dox0=x;x0=x;f=2*x0*x0*x0+4*x0*x0-7*x0-6
52、;f1=6*x0*x0+8*x0-7;x=x0-f/f1;x=x0-f/f1;while(fabs(x-x0)fabs(x-x0)1e-61e-6);printf(%fn,x);x赋初值赋初值x0=x计算计算f计算计算f1 计算计算x=x0-f/f1当当 |x-x0|10-6时时输出输出x运行运行jc5_13Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202443举例举例4【例【例5.11】编程序求】编
53、程序求210000以内的完全数。以内的完全数。完全数:完全数:完全数:完全数:一个数的因子(除了这个数本身)之和一个数的因子(除了这个数本身)之和等于该数本身。等于该数本身。思路:思路:思路:思路:设定设定设定设定i i从从从从2 2变到变到变到变到1000010000,对每个,对每个,对每个,对每个i i找到其因子和找到其因子和找到其因子和找到其因子和s s;判定判定判定判定 i=s i=s?若相等,则?若相等,则?若相等,则?若相等,则i i为完全数,否则不是。为完全数,否则不是。为完全数,否则不是。为完全数,否则不是。 例如:例如:例如:例如:6 6的的因子因子是是1、2、3,因子和因子
54、和 1+2+36 6因此因此因此因此 6 6 是完全数是完全数是完全数是完全数l l使用使用使用使用穷举算法穷举算法穷举算法穷举算法l l用用用用双层循环双层循环双层循环双层循环实现实现实现实现Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202444算法和程序:算法和程序:main()inti,j,s;forfor(i=2;i=10000;i+) s=0;forfor(j=1;ji;j+)if(i%j=
55、0)s+=j;if(i=s)printf(%6dn,s); for(i=2;i=10000; i+) s = 0 for (j=1; ji; j+) i%j=0 T F s=s+j i=s T F i是完全数是完全数运行运行jc5_11Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202445举例举例5【例【例5.10】编程序,输出以下图形。】编程序,输出以下图形。* * * *一共有一共有一共有一共有4
56、 4 行,每行由空格和星号组成:空格数行,每行由空格和星号组成:空格数行,每行由空格和星号组成:空格数行,每行由空格和星号组成:空格数按行增加,星号按行减少按行增加,星号按行减少按行增加,星号按行减少按行增加,星号按行减少变量变量变量变量 i i 控制输出行数,控制输出行数,控制输出行数,控制输出行数, 从从从从1 1变化到变化到变化到变化到4 4变量变量变量变量 j j 控制输出每行的空格和星号:控制输出每行的空格和星号:控制输出每行的空格和星号:控制输出每行的空格和星号:j j 从从从从1 1变化到变化到变化到变化到 i i,每次输出一个空格,每次输出一个空格,每次输出一个空格,每次输出一
57、个空格 j j 从从从从1 1变化到变化到变化到变化到 8-28-2* *i i1 1,每次输出一个星号,每次输出一个星号,每次输出一个星号,每次输出一个星号使用使用使用使用双重循环双重循环双重循环双重循环实现实现实现实现思路:思路:思路:思路:Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7/19/202446算法和程序:算法和程序:main()inti,j;forfor(i=1;i=4i=4;i+)forfor
58、(j=1;j=ij=i;j+)printf();forfor(j=1;j=8-(2*i-1)j=8-(2*i-1);j+)printf(*);printf(n);printf(n);for (i=1; i=4; i+) for (j=1; j=i; j+) 输出一个空格输出一个空格 for (j=1; j=8- -(2*i- -1); j+) 输出一个星号输出一个星号 换行换行作业作业作业作业(2)(2):l l如何输出如何输出如何输出如何输出1010行行行行图形?图形?图形?图形? l l输出图形向右输出图形向右输出图形向右输出图形向右平移平移平移平移2020个字符个字符个字符个字符位置,应如何修改程序?位置,应如何修改程序?位置,应如何修改程序?位置,应如何修改程序? 运行运行jc5_10Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.结束语结束语谢谢大家聆听!谢谢大家聆听!47