谢丽聪老师C语言-6循环控制-2009演示课件.ppt
第六章 循环控制6.16.1 概述概述6.26.2 gotogoto语句以及用语句以及用gotogoto语句构成循环语句构成循环6.36.3 whilewhile语句和语句和do-whiledo-while语句语句6.46.4 forfor语句语句6.56.5 循环的嵌套循环的嵌套6.66.6 breakbreak和和continuecontinue语句语句1 16.1 6.1 循环控制概述循环控制概述 循循循循环环环环结结结结构构构构的的的的特特特特点点点点:在在在在给给给给定定定定条条条条件件件件成成成成立立立立时时时时,反反反反复复复复执执执执行行行行某某某某程程程程序序序序段段段段,直直直直到条件不成立为止。到条件不成立为止。到条件不成立为止。到条件不成立为止。语言提供的循环结构类型如下:语言提供的循环结构类型如下:语言提供的循环结构类型如下:语言提供的循环结构类型如下:1 1)用)用)用)用gotogoto语句和语句和语句和语句和if if语句构成循环;语句构成循环;语句构成循环;语句构成循环;2 2)用)用)用)用whilewhile语句;语句;语句;语句;3 3)用)用)用)用do-whiledo-while语句;语句;语句;语句;4 4)用)用)用)用forfor语句;语句;语句;语句;循环条件循环条件循环体循环体2 26.2 goto6.2 goto 语句以及用语句以及用goto goto 语句构成循环语句构成循环6.2.1形式:形式:gotogoto语句标号;语句标号;语句标号;语句标号;6.2.2功功能能:一一一一进进进进入入入入执执执执行行行行gotogoto语语语语句句句句、立立立立即即即即转转转转向向向向去去去去执行其后面标号所指示的语句执行其后面标号所指示的语句执行其后面标号所指示的语句执行其后面标号所指示的语句gotojump;loop:gotojump;loop:语句语句语句语句1 1语句语句语句语句11语句语句语句语句2 2语句语句语句语句22语句语句语句语句nn语句语句语句语句n njump:jump:语句语句语句语句n+1n+1gotoloop;gotoloop;用标识符表示用标识符表示用标识符表示用标识符表示分号分号分号分号冒号冒号冒号冒号冒号冒号冒号冒号3 36.2.3注注意意:结结构构化化程程序序设设计计方方法法主主张张限限制制使使用用goto语语句句,一一般般只只在在下下面面两两种种结结构构中中表示循环表示循环一、一、loop:if(表达式表达式)语句语句gotoloop;表达式值为零时,立即停止循环表达式值为零时,立即停止循环二、二、loop:语句语句if(!表达式表达式)gotoloop;表达式值非零时,立即停止循环表达式值非零时,立即停止循环 语句语句当表达式值当表达式值非零非零语句语句直到表达式值直到表达式值为零为零4 4例例:用用goto语句和语句和if语句构成循环。语句构成循环。例例用goto语句和if语句构成循环。voidmain()inti,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;gotoloop;printf(%dn,sum);运行结果:运行结果:5050i=101i=1015 5形式:形式:while(表达式表达式)语句语句表达式值为零时,立即停止循环表达式值为零时,立即停止循环 形式:形式:do语句语句while(表达式表达式);表达式值为零时,立即停止表达式值为零时,立即停止循环,循环,至少执行一次循环语句至少执行一次循环语句语句语句当表达式值当表达式值非零非零非零非零语句语句直到表达式值直到表达式值为零为零为零为零6.36.3 while while 和和do while do while 语句语句分号分号分号分号6 6while(表达式表达式)do语句语句while(表达式表达式);7 7例例1.写出下面程序的运行结果写出下面程序的运行结果(1)voidmain()(1)voidmain()inti=1;inti=1;while(i=3)while(i=3)printf(”%dn”,i);i+;printf(”%dn”,i);i+;(2)voidmain()(2)voidmain()inti=1;inti=1;while(i=3)while(i=10)k=0;if(sum=10)k=0;while(k=1)while(k=1);printf(”sum=%dn”,sum);printf(”sum=%dn”,sum);改为改为while(k=1)死循环死循环死循环死循环sumsumn n0 01 11 12 23 33 36 64 41010结果结果结果结果:sum=10sum=109 9例例2用用while语句和语句和do-while语句求语句求传统流程图表示算法传统流程图表示算法 不成立不成立不成立不成立成立成立成立成立成立成立成立成立不成立不成立不成立不成立1010N-S图表示算法1001001001001111voidmain()voidmain()inti,sum=0;inti,sum=0;i=1;i=1;运行结果:运行结果:运行结果:运行结果:50505050while(i=100)while(i=100)sum+=i;i+;sum+=i;i+;printf(%dn,sum);printf(%dn,sum);voidvoid main()main()inti,sum=0;inti,sum=0;i=1;i=1;dosum+=i;i+;dosum+=i;i+;while(i=100);while(i=100);printf(%dn,sum);printf(%dn,sum);注意:注意:i和和sum的初值的初值i的终值的终值1212例例3统计从键盘输入一行字符的个数。统计从键盘输入一行字符的个数。#includevoidmain()intn=0;printf(inputastring:n);while(getchar()!=n)n+;printf(%d,n);只要从键盘输入只要从键盘输入的字符不是回车的字符不是回车就继续循环就继续循环完成对输入字完成对输入字符个数计数。符个数计数。输入:输入:ascdf 输出:输出:51313例例4.计算计算p=123nvoidmain()inti,n;longp;scanf(”%d”,&n);i=1;p=1;while(i=n)p*=i;i+;printf(”p=%ldn”,p);不用不用不用不用longlong会溢出会溢出会溢出会溢出重复到重复到重复到重复到n n次次次次,也可以写成也可以写成也可以写成也可以写成in+1i0)voidmain()inti,n;longs,t;scanf(”%d”,&n);i=1;t=1;s=0;dot*=i;s+=t;i+;while(i=n);printf(”s=%ldn”,s);保证达保证达保证达保证达到计算到计算到计算到计算n n次次次次 t=1123t=1123S=1+12+123+S=1+12+123+1515例例6.计计算算下下面面二二十十个个数数的的和和:13.8、-65、68.9、342.987voidmain()inti=1;floatx,sum=0;while(i=20)scanf(”%f”,&x);sum+=x;i+;printf(”sum=%fn”,sum);注:注:执行程序时输入执行程序时输入执行程序时输入执行程序时输入13.86568.9342.98713.86568.9342.987 i=40i=40i+=2i+=21616whilewhile语语语语句句句句中中中中的的的的表表表表达达达达式式式式一一一一般般般般是是是是关关关关系系系系表表表表达达达达或或或或逻逻逻逻辑辑辑辑表表表表达达达达式式式式,也也也也可可可可以以以以是是是是其其其其它它它它表表表表达达达达式式式式,只只只只要要要要表表表表达达达达式式式式的的的的值值值值为为为为真真真真(非非非非0)0)即即即即可继续循环。可继续循环。可继续循环。可继续循环。例例例例7.7.voidmain()voidmain()inta=0,n;inta=0,n;printf(“ninputn:”);printf(“ninputn:”);scanf(%d,&n);scanf(%d,&n);while(n-)while(n-)printf(%d,a+*2);printf(%d,a+*2);执行执行n次,每执行次,每执行1次,次,n减减1。(a*2(a*2;a+)a+)等价于等价于等价于等价于输入输入输入输入:8:8输出输出输出输出:0 2 4 6 8 10 12 14:0 2 4 6 8 10 12 141717例例8.while和和do-while循环比较。循环比较。voidmain()intsum=0,i;scanf(“%d”,&i);while(i=10)sum=sum+i;i+;printf(“sum=%d”,sum);dodosum=sum+i;sum=sum+i;i+;i+;while(i=10);while(i=10);输入:输入:输入:输入:8 8sumsumi i0 08 88 89 91717101027271111输入:输入:输入:输入:1111sum=0sum=0sum=11sum=1118186.46.4 for for 语句语句代替代替while while 语句语句6.4.1形式:形式:for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句要正确表达循环结构应要正确表达循环结构应注意注意三方面要求:三方面要求:1、循环控制变量的初始化。、循环控制变量的初始化。2、循环的条件。、循环的条件。3、循环控制变量的值的更新、循环控制变量的值的更新for语语句句在在书书写写形形式式上上集集中中体现了这三方面要求体现了这三方面要求19196.4.2功能功能for语句语句完全可以取代完全可以取代while语句语句。for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句它的它的执行过程执行过程如下:如下:1)先求解表达式)先求解表达式1。2)求求解解表表达达式式2,若若其其值值为为真真(非非0),则则执执行行for语语句句中中指指定定的的内内嵌嵌语语句句,然然后后执执行行第第3)步步;若若其其值值为为假假(0),则则结结束束循循环环,转转到第到第5)步。)步。3)求解表达式)求解表达式3。4)转回第)转回第2)步继续执行。)步继续执行。5)循环结束,执行)循环结束,执行for语句下面的一个语句。语句下面的一个语句。2020(用用for语句改写前面的语句改写前面的例例2、例、例4、例、例5、例、例7)计算表达式计算表达式3语句语句当表达式当表达式2值非零值非零计算表达式计算表达式12121例例例例2 2、求、求、求、求voidvoidmain()main()inti,sum=0;inti,sum=0;i=1;i=1;dosum+=i;i+;dosum+=i;i+;while(i=100);while(i=100);printf(%dn,sum);printf(%dn,sum);voidmain()voidmain()inti,sum=0;inti,sum=0;forfor(i=1;i=100;i+i=1;i=100;i+)sum+=i;sum+=i;printf(%dn,sum);printf(%dn,sum);2222例例例例44.计算计算计算计算p=123np=123nvoidmain()voidmain()inti,n;longp;inti,n;longp;scanf(”%d”,&n);scanf(”%d”,&n);i=1;p=1;i=1;p=1;while(while(i=ni=n)p*=ip*=i;i+i+;printf(”p=%ldn”,p);printf(”p=%ldn”,p);for(i=1,p=1;i=n;i+)for(i=1,p=1;i=n;i+)P*=i;P*=i;中间用逗号中间用逗号中间用逗号中间用逗号for(i=1,p=1;i=n;P*=i,i+)for(i=1,p=1;i0)s=1!+2!+3!+n!(n0)voidmain()voidmain()inti,n;longs,t;inti,n;longs,t;scanf(”%d”,&n);scanf(”%d”,&n);i=1;t=1;s=0;i=1;t=1;s=0;dodot*=i;s+=t;t*=i;s+=t;i+;i+;while(while(i=ni=n););printf(”s=%ldn”,s);printf(”s=%ldn”,s);for(i=1for(i=1,t=1t=1,s=0;i=n;i+)s=0;i=n;i+)t*=i;s+=t;t*=i;s+=t;2424例例例例77.计计计计算算算算下下下下面面面面二二二二十十十十个个个个数数数数的的的的和和和和:13.813.8、-65-65、68.968.9、342.987342.987voidmain()voidmain()intint i=1i=1;floatx,sum=0;floatx,sum=0;while(i=20)while(i=20)scanf(”%f”,&x);sum+=x;scanf(”%f”,&x);sum+=x;i+;i+;printf(”sum=%fn”,sum);printf(”sum=%fn”,sum);forfor(i=1i=1;i=20i=20;i+i+)scanf(”%f”,&x);sum+=x;2525 forfor语句形式:语句形式:语句形式:语句形式:for(for(循环变量赋初值;循环条件;循环变量增量循环变量赋初值;循环条件;循环变量增量循环变量赋初值;循环条件;循环变量增量循环变量赋初值;循环条件;循环变量增量)语句语句语句语句 总是一个总是一个总是一个总是一个赋赋赋赋值语句值语句值语句值语句,它用它用它用它用来给循环控来给循环控来给循环控来给循环控制变量赋初制变量赋初制变量赋初制变量赋初值值值值总是一个总是一个总是一个总是一个表表表表达式达式达式达式,它用来它用来它用来它用来判别循环是判别循环是判别循环是判别循环是否终止否终止否终止否终止定义循环控制定义循环控制定义循环控制定义循环控制变量每循环一变量每循环一变量每循环一变量每循环一次后按什么方次后按什么方次后按什么方次后按什么方式变化式变化式变化式变化这三个部分之间用这三个部分之间用这三个部分之间用这三个部分之间用“;”分开分开分开分开2626对于对于for循环中语句的一般形式,循环中语句的一般形式,for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句就是如下的就是如下的while循环形式:循环形式:表达式表达式1;while(表达式(表达式2)语句语句表达式表达式3;2727例例例例1.1.写出下面程序的输出结果写出下面程序的输出结果写出下面程序的输出结果写出下面程序的输出结果#include#includevoidmain()voidmain()charc;charc;for(;for(;(c=getchar()-#(c=getchar()-#;)putchar(c);)putchar(c);c c为为为为#,值为,值为,值为,值为0 0,结束,结束,结束,结束可以是任意表达式可以是任意表达式可以是任意表达式可以是任意表达式输入:输入:输入:输入:a56*3h#hj$a56*3h#hj$输出:输出:输出:输出:a56*3ha56*3h2828例例2.下面程序的输出结果是下面程序的输出结果是voidmain()intx=10,y=10,i;for(i=0;x8;y=+i)printf(”%3d%3d”,x-,y);A10192B9876C101091D10990表达式表达式表达式表达式1 1只做一次只做一次只做一次只做一次x xy y101010109 91 18 8C2 22929注意注意:1 1)forfor循循循循环环环环中中中中的的的的“表表表表达达达达式式式式1 1”、“表表表表达达达达式式式式2(2(循循循循环环环环条条条条件件件件)”和和和和“表达式表达式表达式表达式3 3”可以缺省可以缺省可以缺省可以缺省,但但但但“;”不能缺省。不能缺省。不能缺省。不能缺省。2 2)省省省省略略略略了了了了“表表表表达达达达式式式式1 1”,表表表表示示示示不不不不对对对对循循循循环环环环控控控控制制制制变变变变量量量量赋赋赋赋初初初初值值值值,可在可在可在可在forfor循环里面或外面对其赋初值循环里面或外面对其赋初值循环里面或外面对其赋初值循环里面或外面对其赋初值。例如例如例如例如:i=1;i=1;forfor(;i=20;i+;i=20;i+)scanf(”%f”,&x);sum+=x;scanf(”%f”,&x);sum+=x;3 3)省略)省略)省略)省略“表达式表达式表达式表达式2 2”,则不做其它处理时成为死循环。则不做其它处理时成为死循环。则不做其它处理时成为死循环。则不做其它处理时成为死循环。例如:例如:例如:例如:for(i=1;i+)sum=sum+i;for(i=1;i+)sum=sum+i;相当于:相当于:相当于:相当于:i=1;i=1;while(1)while(1)sum=sum+i;sum=sum+i;i+;i+;30304)省省略略了了“表表达达式式3(循循环环变变量量增增量量)”,则则不不对对循循环环控控制制变变量量进进行行操操作作,这这时时可可在在语语句句体体中中加加入修改循环控制变量的语句入修改循环控制变量的语句。例如:例如:for(i=1;i=100;)sum=sum+i;i+;31315)省略了)省略了“表达式表达式1”和和“表达式表达式3”。例如:例如:for(;i=100;)sum=sum+i;i+;相当于:相当于:while(i=100)sum=sum+i;i+;32326)3个表达式都可以省略。个表达式都可以省略。例如:例如:for(;)语句语句相当于:相当于:while(1)语句语句7)表表达达式式1可可以以是是设设置置循循环环变变量量的的初初值值的的赋值表达式,也可以是其他表达式。赋值表达式,也可以是其他表达式。例如:例如:for(sum=0;i=100;i+)sum=sum+i;33338 8)表表表表达达达达式式式式1 1和和和和表表表表达达达达式式式式3 3可可可可以以以以是是是是一一一一个个个个简简简简单单单单表表表表达达达达式式式式也也也也可可可可以以以以是逗号表达式。是逗号表达式。是逗号表达式。是逗号表达式。for(sum=0,i=1;i=100;i+)sum=sum+i;for(sum=0,i=1;i=100;i+)sum=sum+i;或:或:或:或:for(i=0,j=100;i=100;i+,j-)k=i+j;for(i=0,j=100;iy+z)1.while(xy+z)for(k=1;k2;k+)for(k=1;k2;k+)if if(a5)w=1;(a5)w=1;elseelseifif(a=5)(a=5)switchswitch结构结构结构结构elseelse for(s=0,n=0;n3;n+)s+=n;for(s=0,n=0;n3;n+)s+=n;36366.6 6.6 breakbreak语句和语句和continuecontinue语句语句switch结构中的结构中的break:提前结束:提前结束该结构该结构循环结构中的循环结构中的break:提前结束:提前结束该结构该结构(while循环、循环、do-while循环、循环、for循环循环)循环结构中的循环结构中的continue:提前结束:提前结束本次循环本次循环若在多层嵌套中使用若在多层嵌套中使用若在多层嵌套中使用若在多层嵌套中使用breakbreak或或或或continue,continue,它只影响包含它它只影响包含它它只影响包含它它只影响包含它的最内层结构的最内层结构的最内层结构的最内层结构37373838例例例例1.1.写出以下程序的运行结果:写出以下程序的运行结果:写出以下程序的运行结果:写出以下程序的运行结果:voidmain()voidmain()intn;intn;for(n=1;n=10;n+)for(n=1;n=10;n+)if(n%3=0)if(n%3=0)breakbreak;printf(“%4d”,n);printf(“%4d”,n);printf(“!n”);printf(“!n”);voidmain()voidmain()intn;intn;for(n=1;n=10;n+)for(n=1;n=10;n+)if(n%3=0)if(n%3=0)cotinuecotinue;printf(“%4d”,n);printf(“%4d”,n);printf(“!n”);printf(“!n”);结果:结果:结果:结果:12!12!结果:结果:结果:结果:12457810!12457810!3939例例例例2.2.把把把把100200100200之间的不能被之间的不能被之间的不能被之间的不能被3 3整除的数输出。整除的数输出。整除的数输出。整除的数输出。#include#includevoidmain()voidmain()intint n;n;for(n=100;n=200;n+)for(n=100;n=200;n+)if(n%3=0)if(n%3=0)continue;continue;printf(”%d”,n);printf(”%d”,n);printf(”n”);printf(”n”);能被能被能被能被3 3整除,则进行整除,则进行整除,则进行整除,则进行下一次循环下一次循环下一次循环下一次循环4040例例例例3.3.计计计计算算算算下下下下面面面面若若若若干干干干个个个个数数数数的的的的和和和和:13.813.8、-65-65、68.968.9、342.987342.987,并统计个数(个数,并统计个数(个数,并统计个数(个数,并统计个数(个数100100)#include#includevoidmain()voidmain()intint i=1i=1;floatx,sum=0;floatx,sum=0;while(i=100)while(i=100)scanf(”%f”,&x);scanf(”%f”,&x);if(fabs(x-1e36)0.0001)break;if(fabs(x-1e36)0.0001)break;sum+=x;sum+=x;i+;i+;printf(”sum=%f,count=%dn”,sum,printf(”sum=%f,count=%dn”,sum,););注:执行程序时输入注:执行程序时输入注:执行程序时输入注:执行程序时输入 13.86568.9342.98713.86568.9342.987 1e361e36 求绝对值求绝对值求绝对值求绝对值,理论上相理论上相理论上相理论上相等等等等,实际上有误差实际上有误差实际上有误差实际上有误差位置位置位置位置不能不能不能不能错错错错i-14141例例例例4.voidmain()4.voidmain()intkintk,j j,x=0 x=0;for(k=1for(k=1;k=4k=4;k+)k+)x+x+;if(k%3=0)breakif(k%3=0)break;for(j=kfor(j=k;j=5j=5;j+)x+j+)x+;x+x+;printf(”%dn”printf(”%dn”,x)x);结果结果?14k kj jx x1 11 11 12 22 23 33 34 44 45 55 56 67 72 28 82 29 93 310104 411115 5121213133 31414 4242程序举例程序举例4343例例1:输出输出101000中所有十位数为中所有十位数为3的数的数 void main()inti;for(i=10;i=1000;i+)if(i/10%10=3)printf(“%5d”,i);如如如如:i=1234:i=1234i/10=123i/10=123整数整数整数整数123%10=3123%10=3if(i/10%10i/10%103)continue;printf(“%5d”,i);4444例例2:voidmain()intk;for(k=2;k=10;k+=3)printf(”%4d”,k);printf(”%4d”,k);运行结果:258114545例例3:voidmain()voidmain()intk,j=99;intk,j=99;for(k=1;k=2;k+)for(k=1;k=2;k+)printf(”(1)%d,5dn”,k,jprintf(”(1)%d,5dn”,k,j););for(j=5;j=7;j+)for(j=5;j=7;j+)printf(”(2)%d,5dn”,k,j);printf(”(2)%d,5dn”,k,j);printf(”(3)%d,5dn”,k,j);printf(”(3)%d,5dn”,k,j);printf(”(4)%d,5dn”,k,j);printf(”(4)%d,5dn”,k,j);第一遍第一遍第一遍第一遍k kj j(1)(1)1 19999(2)(2)1 15 5(2)(2)1 16 6(2)(2)1 17 7(3)(3)1 18 8第二遍第二遍第二遍第二遍k kj j(1)(1)2 28 8(2)(2)2 25 5(2)(2)2 26 6(2)(2)2 27 7(3)(3)2 28 8(4)(4)3 38 84646例例4:voidmain()voidmain()inti,j,k;inti,j,k;printf(ijkn);printf(ijkn);for(i=0;i2;i+)for(i=0;i2;i+)for(j=0;j2;j+)for(j=0;j2;j+)for(k=0;k2;k+)for(k=0;k2;k+)printf(printf(“%d%d%dn,i,j,k);%d%d%dn,i,j,k);i ij jk k0 0000 00 0001 10 0110 00 0111 11 1000 01 1001 11 1110 01 1111 11 12 21 12 21 12 24747例例5:输出:输出100200中所有素数中所有素数m是素数是素数:m不被不被2、3、4、m-1中任一个整除中任一个整除结果:结果:101 103 107 109 113 127 131 137 139 149101 103 107 109 113 127 131 137 139 149151 157 163 173 173 179 181 191 193 197151 157 163 173 173 179 181 191 193 197199199 4848执行执行m=11m=11;m=m=1515;k=m-1;k=m-1;k=m-1;k=m-1;for(i=2;i=k;i+)for(i=2;i=k;i+)for(i=2;i=k;i+)for(i=2;ikikikik结束结束结束结束forfor循环循环循环循环k ki im%im%i3 32 21 13 30 0m%i=0m%i=0breakbreak4949voidmain()voidmain()intm,i,k;intm,i,k;for(m=100;m=200;m+)for(m=100;m=200;m+)k=m-1;k=m-1;for(i=2;i=k;i+)for(i=2;i=k;i+)if(m%i=0)break;if(m%i=0)break;if(i=k)if(i=k)printf(printf(“%disnotaprimenumbern%disnotaprimenumbern”,m);,m);elseelseprintf(printf(“%disaprimenumbern%disaprimenumbern”,m);,m);只要有一个整除只要有一个整除只要有一个整除只要有一个整除,后面无需判断后面无需判断后面无需判断后面无需判断,强强强强迫循环结束迫循环结束迫循环结束迫循环结束此时此时此时此时i=kik,ik说明都不能整除说明都不能整除说明都不能整除说明都不能整除5050改为输入一个数改为输入一个数,判断是否为素数判断是否为素数.m-1m-15151#include#includevoidmain()voidmain()intm,i,k;intm,i,k;scanf(scanf(“%d%d”,&m);,&m);k=m-1;k=m-1;for(i=2;i=k;i+)for(i=2;i=k)if(i=k)printf(printf(“%disaprimenumbern%disaprimenumbern”,m);,m);elseelseprintf(printf(“%disnotaprimenumbern%disnotaprimenumbern”,m);,m);输入输入输入输入:3:3输入输入输入输入:6:65252例例6:输出所有由输出所有由1、2、3组成的三位数组成的三位数1112113111122123121132133131212213211222223221232233231312313311322313321332333335353voidmain()inti,j,k;for(i=1;i=3;i+)for(j=1;j=3;j+)for(k=1;k=3;k+)printf(“%d%d%d,”,i,j,k);%d%d%d没有空格和逗号没有空格和逗号起分隔符起分隔符起分隔符起分隔符作用作用作用作用i ij jk k1 11 11 11 11 12 21 11 13 31 12 21 11 1222 21 1223 31 13 31 11 13 32 21 13 33 32 21 11 11 12 25454上面改为不出现重复数字的三位数上面改为不出现重复数字的三位数 voidmain()inti,j,k;for(i=1;i=3;i+)for(j=1;j=3;j+)for(k=1;k=3;k+)if(i!=j&j!=k&k!=i)print(“%d%d%d”,i,j,k);5555上面改为不出现重复字母上面改为不出现重复字母的由的由X、Y、Z组成组成的三个子符的字符串的三个子符的字符串 voidmain()inti,j,k;for(i=X;i=Z;i+)for(j=X;j=Z;j+)for(k=X;k=Z;k+)if(i!=j&j!=k&k!=i)print(“%c%c%c”,i,j,k);与与与与intint一样一样一样一样5656例例例例7:7:P1216.15voidmain()voidmain()甲队甲队甲队甲队乙队乙队乙队乙队inti,j,k;inti,j,k;XAXA for(i=X;i=Z;i+)for(i=X;i=Z;i+)YBYBfor(j=X;j=Z;j+)for(j=X;j=Z;j+)ZCZC for(k=X;k=Z;k+)for(k=X;k=Z;k+)if(i!=j&j!=k&k!=iif(i!=j&j!=k&k!=i&i!=x&k!=x&k!=z&i!=x&k!=x&k!=z)print(“print(“%cA,%cB,%c-C%cA,%cB,%c-C”,i,j,k);”,i,j,k);输出输出输出输出:ZA,XB,YC:ZA,XB,YC5757例例例例8:8:用公式求用公式求。#include#includevoidmain()voidmain()ints;ints;floatn,t,pi;floatn,t,pi;t=1;pi=0;n=1.0;s=1;t=1;pi=0;n=1.0;s=1;while(fabs(t)1e-6)while(fabs(t)1e-6)pi=pi+t;pi=pi+t;n=n+2;n=n+2;s=-s;s=-s;t=s/n;t=s/n;pi=pi*4;pi=pi*4;printf(pi=%10.6fn,pi);printf(pi=%10.6fn,pi);5858例例9“斐波那契数列斐波那契数列”是意大利中世纪数学家列是意大利中世纪数学家列昂纳多昂纳多斐波那契以兔子繁殖为例子而引入的:斐波那契以兔子繁殖为例子而引入的:兔子在出生两个月后,一对兔子每个月能生兔子在出生两个月后,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?经过分析:么一年以后可以繁殖多少对兔子?经过分析:经过月数:经过月数:经过月数:经过月数:-0-1-2-3-4-5-6-7-0-1-2-3-4-5-6-7-兔子对数:兔子对数:兔子对数:兔子对数:-1-1-2-3-5-8-13-21-1-1-2-3-5-8-13-21-数字数字1,1,2,3,5,8,13,构成了一个构成了一个数列。数列。5959数字数字数字数字1 1,1 1,2 2,3 3,5 5,8 8,1313,有明显的特点:有明显的特点:有明显的特点:有明显的特点:前面相邻两项之和,构成了后一项。前面相邻两项之和,构成了后一项。前面相邻两项之和,构成了后一项。前面相邻两项之和,构成了后一项。我们可以得到递推公式如下:我们可以得到递推公式如下:我们可以得到递推公式如下:我们可以得到递推公式如下:程序运行结果为:程序运行结果为:程序运行结果为:程序运行结果为:11231123581321581321345589144345589144233377610987233377610987159725844181676515972584418167656060voidmain()voidmain()inti,x1=1,x2=1;inti,x1=1,x2=1;for(i=1;i=10;i+)for(i=1;i=10;i+)/*/*每次生成并输出两项,所以循环每次生成并输出两项,所以循环每次生成并输出两项,所以循环每次生成并输出两项,所以循环1010次次次次*/*/printf(”%10d%10d”,x1,x2);printf(”%10d%10d”,x1,x2);if(i%2=0)printf(”n”);if(i%2=0)printf(”n”);/*/*当当当当i i为偶数时换行,即每四个数换行为偶数时换行,即每四个数换行为偶数时换行,即每四个数换行为偶数时换行,即每四个数换行*/*/x1=x1+x2;x1=x1+x2;x2=x2+x1;x2=x2+x1;6161