C语言05循环结构.ppt

上传人:wuy****n92 文档编号:70102897 上传时间:2023-01-16 格式:PPT 页数:70 大小:1.02MB
返回 下载 相关 举报
C语言05循环结构.ppt_第1页
第1页 / 共70页
C语言05循环结构.ppt_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《C语言05循环结构.ppt》由会员分享,可在线阅读,更多相关《C语言05循环结构.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C Programming Language循环结构程序设计循环结构程序设计C C 语言程序设计语言程序设计 Lecture 5Lecture 5C Programming Language2 2循环结构循环结构 循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。在C语言中可以用以下语句来实现循环:1、用while语句;2、用do-while语句;3、用for语句;4、用goto语句和if语句构成循环。C Programming Language3 35.1 while语句语句 1、while 语句 常称为“当型”循环语句。循环体循环体循环体循环体非零非零非零非零零

2、零零零表达式表达式表达式表达式C Programming Language4 42、while 语句的形式:while(表达式)循环体;特点:先判断表达式,后执行语句。说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;C Programming Language5 5例例(ch5_01.c)求)求1+2+3+4+5+100。#include#include main()main()int i,sum=0;int i,sum=0;i=1;i=1;while(i=10

3、0)while(i=100)sum=sum+i;sum=sum+i;i+;i+;printf(%d,sum);printf(%d,sum);循环初值循环初值循环初值循环初值循环终值循环终值循环终值循环终值循环变量增值循环变量增值循环变量增值循环变量增值 循环条件循环条件循环条件循环条件循环体循环体循环体循环体求求求求1010!C Programming Language6 6例例(ch5_02.c)显示)显示110的平方的平方#include main()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运行结果:运行结果:1*1=12*2=43*

4、3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100C Programming Language7 75.2 do-while语句语句1、do-while语句 常称为“直到型”循环语句。循环体循环体循环体循环体非零非零非零非零零零零零表达式表达式表达式表达式C Programming Language8 82、do-while的形式:do 循环体;while(表达式);特点:先执行,后判断。说明:至少执行一次循环体dowhile可转化成while结构例(ch5_03.c)用dowhile求1+2+3+4+5+100。C Programming Lan

5、guage9 9main()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(“%dn”,sum);main()inti,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(“%dn”,sum);C Programming Language10105.3 for语句语句1、C语言中最灵活、最语言中最灵活、最复杂的循环语句;复杂的循环语句;表达式表达式表达式表达式1 1表达式表达式表达式表达式2 2循环体语句循环体语句循环体语句循环体语句表达式表达式表达式表达式3 34 可以用于循环次数可以用于循环次数确定的情况

6、;确定的情况;4 可以用于循环次数可以用于循环次数不确定的情况;不确定的情况;4 可实现可实现while和和do-while语句的所有语句的所有功能。功能。非零非零非零非零零零零零C Programming Language11112、for的形式:for(表达式1;表达式2;表达式3)循环体 说明:forfor语句中语句中expr1,expr2,expr3expr1,expr2,expr3类型任意,都可类型任意,都可省略,但分号;不可省省略,但分号;不可省无限循环无限循环:for(;):for(;)forfor语句可以转换成语句可以转换成whilewhile结构结构 循环变量循环变量赋初值赋

7、初值循环终止循环终止条件条件循环变量循环变量控制控制C Programming Language1212sum=0;for(i=1;i=100;i+)sum=sum+i;它相当于以下语句:sum=0;i=1;while(i=100)sum=sum+i;i+;表达式表达式1;while(表达式(表达式2)语句;语句;表达式表达式3;C Programming Language1313 3、for语句中表达式的省略语句中表达式的省略(1)for语句一般形式中的“表达式1”可以省略;如:如:sum=0;i=1;sum=0;i=1;for(;i=100;i+)for(;i100)break;C Pro

8、gramming Language1414(3)表达式3也可以省略,但此时保证循环能正常结束。如:如:for(sum=0,i=1;i=100;)for(sum=0,i=1;i=100;)sum=sum+i;sum=sum+i;i+;i+;(4)可以省略表达式1和表达式3,只有表达式2。如:如:i=1;sum=0;i=1;sum=0;i=1;sum=0;i=1;sum=0;for(;i=100;)for(;i=100;)while(i=100)while(i100)break;if(i100)break;sum=sum+i;i+;sum=sum+i;i+;C Programming Langua

9、ge1616(6)循环体为空语句对for语句,循环体为空语句的一般形式为:for(表达式1;表达式2;表达式3);如:如:for(sum=0,i=1for(sum=0,i=1;i=100ib&xy;)3.字符表达式字符表达式:for(;(c=getchar()!=n;)printf(“%c”,c);C Programming Language1818例例 输入输入30个个09的字符数字,计算数字的字符数字,计算数字串中有多少个奇数,偶数和零串中有多少个奇数,偶数和零.思路:1.输入30个字符数字charnum,而不是整数2.30个字符的输入和30个数字的输入的区别字符可以连续输入30个0097

10、64146589.数字输入必须是用空格,Tab键或回车隔开0097641465893.将字符变成数字后判断奇偶i=num-0;字符数字的ASCII码:48495051525354555657C Programming Language1919步骤:步骤:1.1.计数变量计数变量n1,n2,n3n1,n2,n3初始值初始值设为零;设为零;2.2.输入输入1 1个字符个字符numnum;3.3.循环变量初值为循环变量初值为1 1;4.4.若若i=30,i=30,重复重复字符变成数字,字符变成数字,num=num-0num=num-0判断判断numnum是否为是否为0 0判断判断numnum2 2的

11、值的值循环变量循环变量i+i+再再输入输入1 1个字符个字符numnum5.5.输出输出n1,n2,n3n1,n2,n3的值。的值。输入输入输入输入num n1=0,n2=0,n3=0i=1i=30num=num-0num%2n1+n2+n3+输出输出输出输出n1,n2,n3 的值的值的值的值num=0YNi+输入输入输入输入num YNC Programming Language2020259718528637908300264710031993 there are 9 evens,5 zeros,16 odds.main()int i,n1=0,n2=0,n3=0;char num;sca

12、nf(“%c”,&num);for(i=1;i=30;i+)num=num-0;if(num=0)n1+;else if(num%2)n2+;else n3+;scanf(“%c”,&num);printf(There are%2d evens,%2d odds,%2d zeros”,n3,n2,n1);C Programming Language2121解题思路解题思路1.每当我们读入一张选票,只有每当我们读入一张选票,只有6种种情况,将它们加到相应的人选上。情况,将它们加到相应的人选上。2.-1结束循环结束循环3.case语句作为开关。语句作为开关。例例 统计选票。现有选票如下统计选票。现

13、有选票如下3,1,2,1,1,3,3,2,1,2,3,3,2,1,1,3,2,0,1,4,-1.-1是结束标志。设是结束标志。设1选李选李,2选张,选张,3选王,选王,0和和4为废票,谁会当选?为废票,谁会当选?C Programming Language2222main()int vote,l_vote,z_vote,w_vote,invalidvote;l_vote=0;z_vote=0;w_vote=0;invalidvote=0;scanf(“%d”,&vote);while(vote!=-1)switch(vote)case 1:l_vote+;break;case 2:z_vote

14、+;break;case 3:w_vote+;break;case 0:case 4:invalidvote+;break;scanf(“%d”,&vote);printf(Li%2d,zhang%d2d,wang%2d,invalid%2d”,l_vote,z_vote,w_vote,invalidvote);C Programming Language2323 例 输入一个整数,计算它的位数.并反向输出.分析:设一个数13579,一位一位地切下末位循环结束条件:num=0;同时计数count=count+1;135 135 1357 1357 1357913579 7 7bitbitbit

15、bit 9 9 5 5bitbit1313bitbit1 1 bitbitbit=num%10 num=num/101357 1357 9 9135 135 7 713 13 5 5count=0;输入输入numnum!=0输出输出num%10count+num=num/10输出输出count 3 31 1 3 3C Programming Language2424main()main()long num;long num;int count=0;int count=0;printf(“Please enter an integer:n”);printf(“Please enter an in

16、teger:n”);scanf(“%ld”,&num);scanf(“%ld”,&num);do do printf(“%d”,num%10);printf(“%d”,num%10);num=num/10;num=num/10;count +;count +;while(num!=0);while(num!=0);printf(“%d digits.”,count);printf(“%d digits.”,count);Please enter an integer:Please enter an integer:3829 3829 9283 4 digits.9283 4 digits.C

17、Programming Language2525例例 请说明程序功能。请说明程序功能。main()inti;for(i=32;i256;i+)if(i%8=0)printf(“n”);printf(“%4d%c”,i,i);C Programming Language2626例例 求求fibonacci数列数列1,1,2,3,5,8,的前的前20项。项。fibonacci数列满足下面数列满足下面递归关系递归关系:F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n3)a=1,b=1for i=1 to 10输出输出a,ba=a+bb=b+a分析:分析:1 1 2 3 5 8

18、131 1 2 3 5 8 13 a+ba+ba a b+a b+a b b a+ba+b a a b+a b+a b b C Programming Language2727main()inti,a,b,k=0;a=b=1;for(i=1;i=10;i+)printf(%10d%10d,a,b);a=a+b;b=a+b;k+=2;if(k%4=0)printf(n);1 11 12 23 35 58 813132121343455558989144144233233377377610610987987C Programming Language28285.4 goto语句语句1、无条件转移语

19、句;形式:goto标号;2、有标号的语句称为标号语句;形式:标号:语句;3、goto语句在使用时只能转移到goto所在的函数内的标号处,不能转移到该函数外;4、可以从多重循环的内层转移到最外层,而break只能跳出一层循环。满足标识符的规定满足标识符的规定满足标识符的规定满足标识符的规定C Programming Language2929main()main()inti=1,sum=0;inti=1,sum=0;loop:if(i101)loop:if(i101)sum=sum+i;sum=sum+i;i+;i+;gotoloop;gotoloop;printf(“SUM=%fn”,sum);

20、printf(“SUM=%fn”,sum);loop:sum=sum+i;i+;if(i101)goto loop;C Programming Language30305.5 break语句和语句和continue语句语句break语句一般形式一般形式:break;break;功能功能:跳出所在的多分支跳出所在的多分支switchswitch语句语句跳出所在的跳出所在的whilewhile、do-whiledo-while、forfor循环语句(提循环语句(提前结束循环)。前结束循环)。continue语句一般形式一般形式:continue;continue;功能功能:提前结束本次循环体的执行

21、,接着进行下一次提前结束本次循环体的执行,接着进行下一次循环条件的判别。循环条件的判别。C Programming Language3131break语句语句main()main()inti;inti;for(i=1;i=5;i+)for(i=1;i=5;i+)printf(n%5d,i);printf(n%5d,i);printf(%5d,i);printf(%5d,i);main()main()inti;inti;for(i=1;i=5;i+)for(i=1;i=5;i+)printf(n%5d,i);printf(n%5d,i);if(i=3)break;if(i=3)break;pri

22、ntf(%d,i);printf(%d,i);1 11 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 1 11 1 2 2 2 2 3 3当当当当i=3i=3时时时时,结束循环结束循环结束循环结束循环C Programming Language3232continue语句语句main()main()inti;inti;for(i=1;i=5;i+)for(i=1;i=5;i+)printf(n%5d,i);printf(n%5d,i);printf(%5d,i);printf(%5d,i);main()main()inti;inti;for(i=1;i=5;i+)for(

23、i=1;i=5;i+)printf(n%5d,i);printf(n%5d,i);if(i=3)if(i=3)continue;continue;printf(%d,i);printf(%d,i);1 11 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 1 11 1 2 2 2 2 3 3 4 4 4 4 5 5 5 5当当当当i=3i=3时时时时,结束本次结束本次结束本次结束本次循环体循环体循环体循环体的执行的执行的执行的执行C Programming Language3333break与与continue的区别的区别for(e1;e2;e3)for(e1;e2;e3)

24、if(e)break;if(e)break;for(e1;e2;e3)for(e1;e2;e3)if(e)continue;if(e)continue;计算计算计算计算e1e1e2e2语句语句语句语句非00e e非0语句语句语句语句计算计算计算计算e3e30breakbreak语句语句语句语句0计算计算计算计算e1e1e2e2语句语句语句语句非00e e非0语句语句计算计算e3e3continuecontinue语句语句循循环环体体C Programming Language3434例(ch5_05.c)输出110中不是3的倍数的数。main()main()intn;intn;for(n=1;

25、n=10;n+)for(n=1;n=10;n+)if(n%3=0)if(n%3=0)breakbreak;printf(“%d,”,n);printf(“%d,”,n);输出:输出:1,2,continue;输出:输出:1,2,4,5,7,8,10,C Programming Language3535main()inti,num=0,a;floatsum=0;for(i=1;i=10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;printf(“num=%d,aver=%6.2fn,num,sum/num);例例 求输入的十个整数中正数个数及其平均值。

26、求输入的十个整数中正数个数及其平均值。num=0,sum=0num=0,sum=0输入整数输入整数输入整数输入整数a ai=10i=10a=0a=0Y YN Nnum+num+sum+=asum+=ai+i+i=1i=1C Programming Language36365.6 循环的嵌套循环的嵌套三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环嵌套循环的执行流程嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环C Programming Language3737()当当外外层层循循环环结结构构每每执执行行一一次次循循环环时时,内内层层循循环环结结构构在在一一般般情情况况下下要要从从

27、循循环环的的开开始始到到循循环环的的正正常常结结束束从从头头到尾执行一遍到尾执行一遍。例例1()在在内内层层循循环环结结构构中中使使用用break语语句句可可以以提提前前结结束束本本次次内内层层循循环环结结构构的的执执行行,而而不不影影响响外外层层循循环环结结构构的的继继续执行续执行。例例2()如如果果程程序序因因某某种种原原因因需需要要从从内内层层循循环环体体跳跳出出整整个个循环结构,此时才可考虑使用循环结构,此时才可考虑使用 goto 语句。语句。例例3()()对于并列的循环结构,控制循环执行的变量名字对于并列的循环结构,控制循环执行的变量名字可以相同。可以相同。在嵌套循环结构中,在嵌套循

28、环结构中,内、外层控制循环执行内、外层控制循环执行的变量名字不能相同。的变量名字不能相同。例例4 对于嵌套循环结构的几点说明:对于嵌套循环结构的几点说明:C Programming Language3838例例1:main()int i,j;for(i=0;i3;i+)for(j=1;j=4;j+)printf(%d,j);printf(n);运行后,运行后,输出:输出:1 2 3 4 1 2 3 4 1 2 3 4例例2:main()int i,j;for(i=0;i3;i+)for(j=1;j=4;j+)printf(%d,j);if(!(j%3)break;printf(n);运行后,运

29、行后,输出:输出:1 2 3 1 2 3 1 2 3 C Programming Language3939例例4:main()int i,j;for(i=0;i3;i+)printf(%d,i);printf(n);for(i=1;i=4;i+)printf(%d,i);运行后,运行后,输出:输出:例例3:main()int i,j;for(i=0;i3;i+)for(j=1;j=4;j+)printf(%d,j);if(!(j%3)goto l;printf(n);l:;运行后,运行后,输出:输出:1 2 3 0 1 2 1234C Programming Language4040分析分析:

30、求累加和求累加和s ss=0s=0for(k=1;k=n;k+)for(k=1;k=n;k+)求求t tk ks=s+ts=s+tk k 求累乘积求累乘积t tk k=k!=k!t tk k=1=1for(i=1;i=k;i+)for(i=1;i=k;i+)ttk k=t=tk k*i*imain()main()inti,k,n;inti,k,n;longs,t;longs,t;printf(nInputn:);printf(nInputn:);scanf(%d,&n);scanf(%d,&n);s=0;s=0;for(k=1;k=n;k+)for(k=1;k=n;k+)t=1;t=1;for

31、(i=1;i=k;i+)for(i=1;i=k;i+)t=t*i;t=t*i;s=s+t;s=s+t;printf(ns=%ld,s);printf(ns=%ld,s);例例 求求1!+2!+n!内外层循环控制变量内外层循环控制变量内外层循环控制变量内外层循环控制变量不要同名。不要同名。不要同名。不要同名。C Programming Language4141main()main()inti,k,n;inti,k,n;longs,t;longs,t;printf(nInputn:);printf(nInputn:);scanf(%d,&n);scanf(%d,&n);s=0;s=0;for(fo

32、r(k=1;k=n;k+k=1;k=n;k+)t=1;t=1;for(for(i=1;i=k;i+i=1;i=k;i+)t=t*i;t=t*i;s=s+t;s=s+t;printf(ns=%ld,s);printf(ns=%ld,s);n=3n=3skk3skk3外循外循tiiktiik内循内循 Input n:Input n:3 3 s=9s=9 1 12 20 01 1 2 21 12 21 11 11 11 1 1 12 21 12 2 2 23 30 03 3 3 31 13 31 11 11 11 1 1 12 21 12 2 2 23 31 13 3 6 64 40 09 9 4

33、40 0 0 0 1 11 11 11 11 11 11 1C Programming Language42421 12 23 34 45 56 67 78 89 91 12 24 43 36 69 99 918182727363645455454636372728181.例例 循环嵌套,输出九九表。循环嵌套,输出九九表。ijC Programming Language4343#include#include main()main()int i,j;int i,j;for(i=1;i=9;i+)for(i=1;i=9;i+)printf(%4d,i);printf(%4d,i);printf(

34、n-n);printf(n-n);for(i=1;i=9;i+)for(i=1;i=9;i+)for(j=1;j=i;j+)for(j=1;j=i;j+)printf(%4d,i*j);printf(%4d,i*j);printf(n);printf(n);C Programming Language4444*1 14 43 32 2for(i=1;i=5;i+)for(j=1;j=5;j+)printf();printf(n“);*for(i=1;i=5;i+)for(j=1;j=i;j+)printf();printf(n“);*for(i=1;i=5;i+)for(j=1;j=5-i+1

35、;j+)printf();printf(n“);*for(i=1;i=5;i+)for(j=1;ji;j+)printf();for(j=1;j=5-i+1;j+)printf();printf(n“);*for(i=1;i=5;i+)for(j=1;j5-i+1;j+)printf();for(j=1;j=i;j+)printf();printf(n);*C Programming Language4545 分析分析分析分析:uu 行的控制行的控制行的控制行的控制 i i:1919uu *的个数的个数的个数的个数j j与当前行的关系与当前行的关系与当前行的关系与当前行的关系:j=2*i-1j

36、=2*i-1uu *前面的空格前面的空格前面的空格前面的空格k k与行的关系与行的关系与行的关系与行的关系:开始时开始时开始时开始时,第一行有第一行有第一行有第一行有8 8个空格个空格个空格个空格 每多一行每多一行每多一行每多一行,少一个空格少一个空格少一个空格少一个空格k=9-ik=9-iwhile(i=9)while(i=9)for(k=1;k=9-i;k+)for(k=1;k=9-i;k+)输出空格输出空格输出空格输出空格;for(j=1;j=2*i-1;j+)for(j=1;j=2*i-1;j+)输出输出输出输出*;*C Programming Language4646main()in

37、t i,j,k;i=1;while(i=9)for(k=1;k=9-i;k+)printf(“”);for(j=1;j=2*i-1;j+)printf(“*”);printf(“n”);i+;i=1 i=9k=1k=9-i输出空格输出空格k=k+1j=1j=2*i-1输出输出*j=j+1 换行换行,i=i+1 C Programming Language4747 11 i i控制控制行行:i19i19空格数空格数:9-9-i i112 211j j控制列控制列:第第i i行行左边左边:1 1ii12123 32121右边右边:i-11:i-11.12345678123456789 987654

38、32187654321例例 编程输出下面的数字金字塔编程输出下面的数字金字塔(1到到9)。C Programming Language4848(ch5_09.cch5_09.c)main()main()inti,j,k,m;inti,j,k,m;for(i=1;i=9;i+)for(i=1;i=9;i+)for(j=1;j=9-i;j+)/*for(j=1;j=9-i;j+)/*输出输出9-i9-i个空格个空格*/*/putchar();putchar();for(j=1;j=i;j+)/*for(j=1;j0;j-)/*for(j=i-1;j0;j-)/*输出输出i-1i-1到到1*/1*/

39、printf(“%d”,j);printf(“%d”,j);printf(“n”);printf(“n”);C Programming Language4949本章重点本章重点三种循环语句三种循环语句whilewhile,do-while,do-while和和forfor建立循环通常有以下情况建立循环通常有以下情况:1.1.给定次数给定次数,for,for比较适用比较适用 for(i=1;i100;i+)for(i=1;i100;i+)2.2.给定条件给定条件,while,while比较适用比较适用 while(x+y)z)while(x+y)a&cA&ca&cA&c=1.0e-6)pi=pi

40、+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(“pi=%10.6fn”,pi);C Programming Language5151方法一:数列是正、负相间的,在这里可用一方法一:数列是正、负相间的,在这里可用一个个“开关开关”变量变量 t 来解决符号的问题。来解决符号的问题。main()float s=0;int t=1,i;for(i=1;i101;i+)s+=1.*t/i;t=-t;printf(s=%fn,s);在处理循环时应注意在处理循环时应注意初、终值初、终值的设定!的设定!例例 求求 s=1-1/2+1/3-1/4+1/99-1/100。C Program

41、ming Language5252方方法法二二:分分别别求求出出正正项项和和s1(奇奇数数倒倒数数)与与负负项项和和s2(偶数倒数偶数倒数),则,则s=s1-s2 main()float s,s1=0,s2=0;int i;for(i=1;iE,W-A.非字母字符忽略。非字母字符忽略。思路思路:1.1.建建 立立 循循 环环,循循 环环 结结 束束 以以 输输 入入 回回 车车 符符 为为 准准 while(while((c=getchar()c=getchar())!=n)!=n)2.2.判断输入是否是字符判断输入是否是字符,否则忽略否则忽略 if(c=a&c=A&c=a&c=A&c=a&c

42、=A&c=a&c=A&cZ&cz)c=c-26;if(cZ&cz)c=c-26;printf(“%c”,c);printf(“%c”,c);abdEgWefhIkAC Programming Language5555 例例 梯形法求数值积分梯形法求数值积分。0 0y yx xa a a+ha+ha+iha+ih a+(i+1)ha+(i+1)hb bf(x)f(x)=4-x2dxbaC Programming Language5656main()floata,b,h,n1,n2,s=0;inti;printf(“请输入积分限a和b:”);scanf(“%f%f”,&a,&b);h=(b-a)/

43、1000;for(i=0;i1000;i+)n1=4-(a+i*h)*(a+i*h);n2=4-(a+(i+1)*h)*(a+(i+1)*h);s+=(n1+n2)*h/2;printf(“s=%10.2fn”,s);C Programming Language5757#include#include#defineGOAL39#defineGOAL39main()main()inti;inti;printf(“Pleaseinputaintegernumber:n);printf(“Pleaseinputaintegernumber:n);dodo scanf(%d,&i);scanf(%d,

44、&i);if(iGOAL)printf(%dif(iGOAL)printf(%distoobig,inputagainistoobig,inputagain.n,i);n,i);elseelse if(iGOAL)printf(%distoosamll,inputif(iGOAL)printf(%distoosamll,inputagain.n,i);again.n,i);elseprintf(OK!n);elseprintf(OK!n);while(i!=GOAL);while(i!=GOAL);例例例例 猜数游戏的最简化版。猜数游戏的最简化版。猜数游戏的最简化版。猜数游戏的最简化版。C P

45、rogramming Language5858#include#include#include#includemain()main()inti;inti;intGOAL,num=0;intGOAL,num=0;randomize();randomize();printf(Pleaseinputanumberfrom0to99,or-1toprintf(Pleaseinputanumberfrom0to99,or-1toexit:n);exit:n);GOAL=random(100);GOAL=random(100);/*/*产产生生0 0到到9999的随机数的随机数*/dodo scanf(%

46、d,&i);scanf(%d,&i);if(i=-1)if(i=-1)printf(nExitgame!);printf(nExitgame!);break;break;C Programming Language5959num+;num+;if(iGOAL)printf(%distoobig,inputagain.n,i);if(iGOAL)printf(%distoobig,inputagain.n,i);elseelse if(iGOAL)printf(%distoosamll,inputif(iGOAL)printf(%distoosamll,inputagain.n,i);again

47、.n,i);elseelse printf(OK!n);printf(OK!n);printf(Youtake%dtimestopass!,num);printf(Youtake%dtimestopass!,num);while(i!=GOAL);while(i!=GOAL);C Programming Language6060例例 枚举问题枚举问题或称为或称为穷举法穷举法。一般用于不。一般用于不定方程求非负整数解的问题。它将方程中定方程求非负整数解的问题。它将方程中未知数可以取的到的非负整数逐个进行验未知数可以取的到的非负整数逐个进行验证找出所有满足方程的解。证找出所有满足方程的解。例如:例

48、如:一元人民币兑换成一元人民币兑换成1分、分、2分、分、5分共有分共有多少种方法?多少种方法?若若5分、分、2分、分、1分的个数分别为分的个数分别为x个、个、y个、个、z 个,则个,则x的取值为的取值为020,y的取值为的取值为050,z的取值为的取值为0100。于是有不定方程:于是有不定方程:5x+2y+z=100。C Programming Language6161main()inti,j,k,m=0;for(i=0;i21;i+)for(j=0;j51;j+)for(k=0;k101;k+)if(5*i+2*j+k=100)m+=1;printf(m=%dn,m);运行结果:运行结果:m

49、=54130考虑程序的优化问题?考虑程序的优化问题?C Programming Language6262 上面程序的循环次数超过上面程序的循环次数超过10万次,且大量的循环万次,且大量的循环都不满足方程。可对程序进行优化,由于随着都不满足方程。可对程序进行优化,由于随着5分个数分个数的增加,的增加,2分个数就会减少,因此循环变量分个数就会减少,因此循环变量j可控制在可控制在(100-5i)/2以内以内,这样使得这样使得5i+2j=100。若不足。若不足100则则补充补充1分,分,将问题转换成为求循环次数的问题了将问题转换成为求循环次数的问题了。main()int i,j,m=0;for(i=0

50、;i21;i+)for(j=0;j=(100-5*i)/2;j+)m+=1;printf(m=%dn,m);因为该不定方程中,如因为该不定方程中,如果有两个未知数确定后,果有两个未知数确定后,第三个未知数也随之确第三个未知数也随之确定。即确定了一种分法。定。即确定了一种分法。例如:例如:i=20时,时,j=0i=19时,时,j=0,1,2i=18时,时,j=0,1,2,3,4,5C Programming Language6363例汽车里程表上的读数是95859,7小时之后里程表的读数是一个对称数(最大是5位数),问汽车的速度(是一个整数)。解题思路:检查所有的在95859到99999之间的对

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁