您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言教程第5章_循环结构程序设计
第5章循环结构程序设计概述计算机解题过程中,经常遇到要编制循环结构的情况,大量问题均离不开循环结构如求:1+2+3+….+100sinx=x-x3x5x73!5!7!+…准备部分工作部分控制部分准备部分控制部分工作部分修改部分出循环出循环NYN修改部分Y两种循环结构:左边是先执行后判断右边是先判断后执行组成作用准备部分完成赋初值,(如累加变量清零,累乘变量置1等),设置循环次数工作部分反复多次被执行的操作修改部分保证循环做有规律的变化控制部分可按已设置的循环次数或控制循环条件结束循环循环语句while语句格式:while(表达式)语句功能:当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。表达式值非0语句编程:求1+2+3+…+100的值main(){inti=1,sum=0;/*准备部分*/while(i=100)/*控制部分*/{sum=sum+i;/*工作部分*/i=i+1;/*修改部分*/}printf(sum=%d\n,sum);printf(i=%d\n,i);}说明:1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。2)在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。即形成了死循环。dowhile语句格式:do语句while(表达式);功能:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。表达式值不为0语句main(){inti=1,sum=0;do{sum=sum+i;i=i+1;}while(i=100);printf(sum=%d\n,sum);printf(i=%d\n,i);}while语句和do-while语句的比较:在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。while与dowhile区别i=10时相同,i10时不同main(){intsum=0,i;scanf(%d,&i);while(i=10){sum+=i;i++;}printf(%d\n,sum);}main(){intsum=0,i;scanf(%d,&i);do{sum+=i;i++;}while(i=10);printf(%d\n,sum);}main(){intc;while((c=getchar())!='\n')putchar(c);}将输入的字符原样输出main(){intc;c=getchar();while(c!='\n'){putchar(c);c=getchar();}}例:用0.1mm厚纸对折,对折多少次后其厚度超过地球直径(12742公里)main(){intn=1;floatans;ans=2*1e-7;while(ans=12742){n=n+1;ans=ans*2;}printf(n=%d,ans=%f\n,n,ans);getch();}运行结果:n=37,ans=13743.895347求:框里数字(1~9):111111=111*11*1运行结果:i=9main(){longinti=1,ans;ans=111*11*(i*10+1);while(111111!=ans){i++;ans=111*11*(i*10+1);}printf(i=%d\n,i);}main(){longinti=1,ans;do{ans=111*11*(i*10+1);i++;}while(111111!=ans);printf(i=%d\n,i-1);}运行结果:i=9设有一阶梯,每步2阶,最后余1阶;每步3阶,最后余2阶;每步5阶,最后余4阶;每步6阶,最后余5阶;每步7阶,正好到楼顶。问共有多少阶梯。main(){intladders=7;while(ladders%3!=2||ladders%5!=4||ladders%6!=5)ladders+=14;printf(%d\n,ladders);}求两个非负整数u和v的最大公因子(即最大公约数)。main(){inta,b,i;printf(pleaseenter2integers:);scanf(%d,%d,&a,&b);i=ab?b:a;while(1){if(a%i==0&&b%i==0)break;i--;}printf(%d,i);}for语句格式:for(表达式1;表达式2;表达式3)语句C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。表达式1表达式2值非0?语句表达式3Y下一语句N等价于:表达式1;while(表达式2){语句;表达式3;}for语句最简单最常用的应用形式:for(循环变量赋初值;循环条件;循环变量增值)如:for(i=1;i=100;i++)sum=sum+i;相当于:i=1;while(i=100){sum=sum+i;i++;}for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如:for(;i=100;i++)sum=sum+i;执行时,跳过“表达式1”,其他不变。若省略表达式2,即不判断循环条件,即认为表达式2始终为真。如:for(i=1;;i++)sum=sum+i;相当于:i=1;while(1){sum=sum+1;i++;}为避免死循环,应加上if(i100)break;表达式3也可以省略,但此时应保证循环能正常结束。如:for(i=1;i=100;){sum=sum+i;i++;}此时由于省略表达式3,而将语句i++;作为循环体的一部分,效果是一样的,都能使循环正常结束。可以同时省略表达式1和表达式3,只有表达式2,即只给循环条件。如:for(;i=100;)while(i=100){sum=sum+i;{sum=sum+i;i++;}i++;}在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。也可以将3个表达式都省略,如:for(;;)语句相当于while(1)语句即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。此时应在循环体中设置退出循环的语句。表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:for(sum=0;i=100;i++)sum=sum+i;表达式3也可以是与循环控制无关的任意表达式。如:for(sum=0;i=100;sum++)i++;表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:for(sum=0,i=1;i=100;i++)sum=sum+i;或for(i=0,j=100;i=j;i++,j--)k=i+j;表达式2一般是关系表达式(如i=100)或逻辑表达式(如ab&&xy),但也可以是其它表达式,只要其值非零,就执行循环体。如:for(i=0;(c=getchar())!=‘\n’;i+=c);在表达式2中先从终端接收一个字符赋给c,然后判断此字符是否非‘\n’,如果非‘\n’,就执行循环体。此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中。for(;(c=getchar())!=‘\n’;)printf(“%c”,c);for语句中只有表达式2,而无表达式1和表达式3。其作用是读入一个字符后即输出该字符,直到输入一个“换行”为止。运行情况:Computer↙Computer请注意,从终端键盘向计算机输入时,是在按Enter键以后才将一批输入数据一起送到内存缓冲区中去的。main(){inti=1,sum=0;for(;i=100;i++)sum+=i;printf(sum=%d\n,sum);}省略表达式1求:1+2+3+…+100的值main(){inti,sum;for(i=1,sum=0;i=100;i++)sum+=i;printf(sum=%d\n,sum);}main(){inti,sum;for(i=1,sum=0;i=100;sum+=i,i++);printf(sum=%d\n,sum);}使用逗号表达式验证素数intprime(intn){intm;for(m=2;m=n/2;m++)if(n%m==0)return(0);return(1);}main(){inti;scanf(%d,&i);if(prime(i))printf(Yes);elseprintf(No);}说明1.用计数法设置循环时,要特别留心循环变量的“边界值”。2.要使循环体最终能结束,应当在表达式3中或在循环体中存在改变条件表达式的值的操作。3.循环体内如果包含一个以上的语句,应该使用花括号,以复合语句形式出现。break和continuebreak---退出switch语句或当前循环continue---结束本次循环,接着进行下一次是否执行循环的判定.while(表达式1){…if(表达式2)continue;…if(表达式3)break;…}计算100以内的圆面积main(){intr;floatpi=3.14159,area;for(r=1;r=10;r++){area=pi*r*r;if(area100)break;printf(r=%d,area=%f\n,r,area);}}输出100~200之间不能被3整除的数。main(){intn;for(n=100;n=200;n++){if(n%3==0)continue;printf(%d,n);}}多重循环一个循环体内又包含另一个完整的循环结构称为循环的嵌套,即多重循环。三种循环结构(while循环、do-while循环和for循环)可以互相嵌套。注意:结构之间仅可嵌套,不可交叉不允许:允许:例:编程并输出乘法表main(){inti,j;for(i=0;i=9;i++)for(j=1;j=9;j++){printf(%d*%d=%2d,i,j,i*j);if(j==9)printf(\n);}}运行结果:1*1=11*2=2……1*9=99*1=92*9=18……9*9=81…打印乘法表123456789------------------------------------------------------------------12345678924681012141618369121518212427481216202428323651015202530354045612182430364248547142128354249566381624324048566472918273645546372811:打印表头2:打印隔线3:打印表体main(){inti,j;for(i=1;i=9;i++)printf(%4d,i);printf(\n);for(i=1;i=40;i++)printf(%c,'-');printf(\n);for(i=1;i=9;i++){for(j=1;j=9;j++)printf(%4d,i*j);printf(\n);}}打印隔线打印表体打印表头36块砖,36人搬;男4,女3,两个小孩抬一块。求一次搬完,需男、女、小孩个若干?main(){intmen=0,women,children;while(men=8){women=0;while(women=11){children=36-women-men;if(4.0*men+3.0*women+childr
本文标题:C语言教程第5章_循环结构程序设计
链接地址:https://www.777doc.com/doc-2907995 .html