C语言三种循环语句
- 格式:docx
- 大小:35.26 KB
- 文档页数:58
C语言是一种广泛应用的编程语言,其流程控制语句是编写程序中的重要部分。
流程控制语句用于控制程序的执行流程,包括顺序执行、条件执行和循环执行。
C语言中常用的流程控制语句主要包括顺序结构、选择结构和循环结构,下面将分别介绍它们的语法格式及使用方法。
1. 顺序结构顺序结构是程序中最简单的流程控制结构,也是最基本的结构。
顺序结构指的是按照代码的编写顺序依次执行,没有跳跃或分支。
在C语言中,顺序结构是程序的默认执行方式,没有特定的关键字或语法格式。
程序中的语句按照编写的顺序依次执行,直到程序结束。
例如:```cint m本人n() {int a = 1;int b = 2;int c = a + b;printf("The result is d\n", c);return 0;}```以上代码中的语句就是按照顺序依次执行的,没有条件判断或循环。
2. 选择结构选择结构是根据条件判断的结果决定程序执行的流程控制结构。
在C 语言中,选择结构有两种形式,分别是if语句和switch语句。
(1)if语句if语句用于根据条件判断的结果决定程序的执行流程。
其基本语法格式如下:```cif (condition) {// 当条件为真(非0)时执行此处的语句块} else {// 当条件为假(0)时执行此处的语句块}```在if语句中,condition代表一个表达式或逻辑判断,如果condition 的值为真(非0),则执行if后面的语句块;否则执行else后面的语句块。
例如:```cint score = 80;if (score >= 60) {printf("Pass\n");} else {printf("F本人l\n");}```以上代码中,根据score的值来判断是否及格,如果score大于等于60,则输出Pass,否则输出F本人l。
除了if和else关键字,还可以使用else if语句来实现多重条件判断:```cint score = 75;if (score >= 90) {printf("Excellent\n");} else if (score >= 80) {printf("Good\n");} else if (score >= 70) {printf("Average\n");} else {printf("F本人l\n");}```(2)switch语句switch语句也是一种选择结构,适用于有多个条件判断的情况。
c语言中常用的循环语句有几种,说出他们之间的异同在C语言中,常用的循环语句有三种:for循环、while循环和do-while循环。
1. for循环:for循环适用于循环次数已知的情况。
它由三个部分组成:循环变量的初始化、循环条件的判断和循环体内的语句执行。
for循环的执行流程是先执行初始化语句,然后判断循环条件,如果条件满足,则执行循环体内的语句,再执行步进语句,然后再次判断循环条件。
在执行过程中,可以通过改变循环变量的值来控制循环次数。
2. while循环:while循环适用于循环次数未知但循环条件已知的情况。
它只有一个循环条件,而没有特定的初始化和步进语句。
在执行过程中,先判断循环条件,如果条件满足,则执行循环体内的语句,再回到判断循环条件的步骤。
在循环体内需要手动改变循环条件,否则可能导致死循环。
3. do-while循环:do-while循环适用于至少执行一次循环体的情况。
它先执行循环体内的语句,然后再判断循环条件。
如果条件满足,则继续执行循环体内的语句,再次判断循环条件。
与while循环不同的是,do-while循环保证了循环体至少执行一次。
这三种循环语句之间的异同点如下:1.初始化和步进语句:for循环中有明确的初始化和步进语句,适用于循环次数已知的情况;而while循环和do-while循环没有特定的初始化和步进语句,适用于循环次数未知的情况或至少执行一次循环体的情况。
2.循环条件的位置:for循环和while循环的循环条件在循环体外进行判断,因此在初次判断循环条件时可能不会执行循环体内的语句;而do-while循环的循环条件在循环体内进行判断,因此在初次判断循环条件时一定会执行循环体内的语句至少一次。
3.使用场景:for循环适用于循环次数已知的场景;while循环和do-while循环适用于循环次数未知或至少执行一次循环体的场景。
另外,在C语言中还有一种特殊的循环语句,即无限循环语句。
C语言中do…while语句例子1. 了解do…while语句的基本概念在C语言中,do…while语句是一种循环语句,用于执行一段程序代码直到指定的条件不再满足。
与while语句不同的是,do…while语句是先执行一次循环体的代码,然后再检查循环条件是否满足。
无论条件是否成立,do…while循环中的代码至少会执行一次。
2. 示例1:计算1到10的和下面是一个使用do…while语句来计算1到10的和的示例代码:```c#include <stdio.h>int m本人n() {int sum = 0;int i = 1;do {sum += i;i++;} while (i <= 10);printf("1到10的和为:d\n", sum);return 0;}```在这个示例中,首先声明了两个变量sum和i,分别用于保存和的结果和作为计数器。
接着使用do…while语句来进行累加操作,直到i 的值大于10为止。
最后输出计算结果。
3. 示例2:输入密码进行验证下面是一个使用do…while语句来进行密码验证的示例代码:```c#include <stdio.h>int m本人n() {int password = xxx;int input;do {printf("请输入密码:");scanf("d", input);} while (input != password);printf("密码正确,欢迎进入系统!\n");return 0;}```在这个示例中,首先声明了一个变量password用于保存正确密码的值,然后使用do…while语句进行密码输入和验证的操作。
当输入的密码不等于正确密码时,会一直提示用户重新输入密码,直到输入正确为止。
4. 结论通过以上两个示例,我们可以看到do…while语句的灵活性和实用性。
c语言程序的三种基本结构C语言是一种广泛应用于软件开发和系统编程的高级编程语言。
它的设计目标是提供一种简洁、高效且可移植的编程语言,以便开发者能够通过代码实现复杂的功能。
在C语言中,有三种基本的程序结构,它们分别是顺序结构、选择结构和循环结构。
下面将对这三种结构进行详细的介绍。
一、顺序结构顺序结构是指程序按照指定的顺序逐行执行,每一行代码都会依次执行,直到程序结束。
这种结构特别适用于那些不需要有条件或循环的简单程序。
下面是一个使用顺序结构的C语言程序示例:```c#include <stdio.h>int main() {printf("Hello, World!\n"); // 第一行代码printf("This is a C program."); // 第二行代码return 0;}```在上面的示例中,程序按照从上到下的顺序依次执行两行代码,输出结果为:```Hello, World!This is a C program.```二、选择结构选择结构是根据条件的真假来决定具体执行的代码块。
在C语言中,常用的选择结构有if语句和switch语句。
1. if语句if语句根据条件的真假来判断是否执行相应的代码块。
常见的if语句有以下几种形式:- 单个if语句:```cif (条件) {// 如果条件为真,执行这里的代码}```- if-else语句:```cif (条件) {// 如果条件为真,执行这里的代码} else {// 如果条件为假,执行这里的代码}```- if-else if-else语句:```cif (条件1) {// 如果条件1为真,执行这里的代码} else if (条件2) {// 如果条件2为真,执行这里的代码} else {// 如果条件1和条件2都为假,执行这里的代码}```2. switch语句switch语句根据表达式的值来选择要执行的代码块。
c语⾔循环控制语句循环控制结构(⼜称重复结构)是程序中的另⼀个基本结构.在实际问题中,常常需要进⾏⼤量的重复处理,循环结构可以使我们只写很少的语句,⽽让计算机反复执⾏,从⽽完成⼤量类同的计算.C语⾔提供了while语句、do...while语句和for语句实现循环结构.3.4.1while语句while语句是当型循环控制语句,⼀般形式为:while<表达式>语句;语句部分称为循环体,当需要执⾏多条语句时,应使⽤复合语句.while语句的流程图见图3-8,其特点是先判断,后执⾏,若条件不成⽴,有可能⼀次也不执⾏.[例3-11]求n!分析:n!=n*(n-1)*(n-2)*..2*1,0!=1.即S0=1,Sn=Sn-1*n.可以从S0开始,依次求出S1、S2、...Sn.统⼀令S等于阶乘值,S的初值为0!=1;变量i为计数器,i从1变到n,每⼀步令S=S*i,则最终S中的值就是n!.流程图见图3-9,程序如下:考察图3-9中循环部分的流程图可以看出,在循环前各变量应有合适的值(s=1),另外,控制循环结束的变量(此处为i)必须在循环体中被改变,否则,循环将⽆限进⾏下去,成为死循环.本题中,将多项式的每⼀项⽤t表⽰,s代表符号,在每⼀次循环中,只要改变s、n的值,就可求出每⼀项t.⼀般情况下,while型循环最适合于这种情况:知道控制循环的条件为某个逻辑表达式的值,⽽且该表达式的值会在循环中被改变,如同例3-12的情况⼀样.3.4.2do...while语句在C语句中,直到型循环的语句是do...while,它的⼀般形式为:do语句while<表达式>其中语句通常为复合语句,称为循环体.do...while语句的流程图见图3-10,其基本特点是:先执⾏后判断,因此,循环体⾄少被执⾏⼀次.但需要注意的是,do...while与标准的直到型循环有⼀个极为重要的区别,直到型循环是当条件为真时结束循环,⽽do...while 语句恰恰相反,当条件为真时循环,⼀旦条件为假,⽴即结束循环,请注意do...while语句的这⼀特点.例[3-13]计算sin(x)=x-x3/3!+x5/5!-x7/7!+...直到最后⼀项的绝对值⼩于1e-7时为⽌.分析:这道题使⽤递推⽅法来做.让多项式的每⼀项与⼀个变量n对应,n的值依次为1,3,5,7,...,从多项式的前⼀项算后⼀项,只需将前⼀项乘⼀个因⼦:(-x2)/((n-1)*n)⽤s表⽰多项式的值,⽤t表⽰每⼀项的值,程序如下:#include# includem a i n ( ){double s,t,x ;int n ;printf("please input x :");scanf("%lf",&x);t=x;n=1;s=x;do{n=n+2;t=t*(-x*x)/((float)(n)-1)/(float)(n);s=s+t;}while(fabs(t)>=1e-7);printf("sin(%f)=%lf,"x,s);}运⾏结果如下:RUN?pleaseinputx:1.5753?sin(1.575300)=0.999990RUN?pleaseinputx:-0.65?sin(-0.650000)=-0.6051863.4.3for语句for语句是循环控制结构中使⽤最⼴泛的⼀种循环控制语句,特别适合已知循环次数的情况.它的⼀般形式为:for(<表达式1>;<表达式2>;<表达式3>)语句for语句很好地体现了正确表达循环结构应注意的三个问题:1)控制变量的初始化.2)循环的条件.3)循环控制变量的更新.表达式1:⼀般为赋值表达式,给控制变量赋初值;表达式2:关系表达式或逻辑表达式,循环控制条件;表达式3:⼀般为赋值表达式,给控制变量增量或减量.语句:循环体,当有多条语句时,必须使⽤复合语句.for循环的流程图如图3-11,其执⾏过程如下:⾸先计算表达式1,然后计算表达式2,若表达式2为真,则执⾏循环体;否则,退出for 循环,执⾏for循环后的语句.如果执⾏了循环体,则循环体每执⾏⼀次,都计算表达式3,然后重新计算表达式2,依此循环,直⾄表达式2的值为假,退出循环.[例3-14]计算⾃然数1到n的平⽅和.# include# includemain ( ){int i;float s;printf("please input n :");scanf("%d",&n);s=0.0;for(i=1;i<=n;i++)s=s+(float)(i)*(float)(i);printf("1*1+2*2+...+%d*%d=%f\,nn",n,s);}运⾏结果如下:RUNplease input n:51*1+2*2+...+5*5=55.000000for语句的⼏种格式for语句的三个表达式都是可以省略的,但分号“;”绝对不能省略.a.for(;;)语句;这是⼀个死循环,⼀般⽤条件表达式加break语句在循环体内适当位置,⼀旦条件满⾜时,⽤break语句跳出for循环.例如,在编制菜单控制程序时,可以如下:for(;;){printf("please input choice(Q=Exit):");显/*⽰菜单语句块:*/scanf("%c",&ch);if(ch=='Q')or(ch=='q')break;语/*句段*/}b.for(;表达式2;表达式3)使⽤条件是:循环控制变量的初值不是已知常量,⽽是在前⾯通过计算得到,例如:i=m-n;for(;ic.for(表达式1;表达式2;)语句⼀般当循环控制变量⾮规则变化,⽽且循环体中有更新控制变量的语句时使⽤.例如:for(i=1;i<=100;){i=i*2+1;}d.for(i=1,j=n;i在for语句中,表达式1、表达式3都可以有⼀项或多项,如本例中,表达式1同时为i和j 赋初值,表达式3同时改变i和j的值.当有不⽌⼀项时,各项之间⽤逗号“,”分隔.另外,C语⾔还允许在循环体内改变循环变量的值,这在某些程序的设计中是很有⽤的.到此,我们已经学习了C语⾔中三种循环控制语句while、do...while和for语句,下⾯再讨论两个问题:三种语句的选⽤同⼀个问题,往往既可以⽤while语句解决,也可以⽤do...while或者for语句来解决,但在实际应⽤中,应根据具体情况来选⽤不同的循环语句,选⽤的⼀般原则是:1)如果循环次数在执⾏循环体之前就已确定,⼀般⽤for语句;如果循环次数是由循环体的执⾏情况确定的,⼀般⽤while语句或者do...while语句.2)当循环体⾄少执⾏⼀次时,⽤do...while语句,反之,如果循环体可能⼀次也不执⾏,选⽤while语句.循环的嵌套⼀个循环的循环体中有另⼀个循环叫循环嵌套.这种嵌套过程可以有很多重.⼀个循环外⾯仅包围⼀层循环叫⼆重循环;⼀个循环外⾯包围两层循环叫三重循环;⼀个循环外⾯包围多层循环叫多重循环.三种循环语句for、while、do...while可以互相嵌套⾃由组合.但要注意的是,各循环必须完整,相互之间绝不允许交叉.如下⾯这种形式是不允许的:do{for(;;){......}while();}[例3-15]打印8⾏7列的星形矩阵.流程图见图3-12,程序如下:#includemain(){inti,j;for(i=0;i<8,i++)/*控制⾏*/{for(j=0;j<7>;j++)/*控制列*/printf("*");printf("\n");/*换⾏*/}}打印结果如下:RUN********************************************************将程序中for(j=0;j<7;j++)改为for(j=0;j打印三⾓形.3.4.4break与continue语句有时,我们需要在循环体中提前跳出循环,或者在满⾜某种条件下,不执⾏循环中剩下的语句⽽⽴即从头开始新的⼀轮循环,这时就要⽤到break和continue语句.1.break语句在前⾯学习switch语句时,我们已经接触到break语句,在case⼦句执⾏完后,通过break 语句使控制⽴即跳出switch结构.在循环语句中,break语句的作⽤是在循环体中测试到应⽴即结束循环时,使控制⽴即跳出循环结构,转⽽执⾏循环语句后的语句.[例3-16]打印半径为1到10的圆的⾯积,若⾯积超过100,则不予打印.#includemain(){intr;float area;for(r=1;r<=10;r++){area=3.141593*r*r;if(area>100.0)break;printf("square=%f\n",area);}printf("nowr=%d\n",r);}运⾏程序:RUNsquare=3.141593square=12.566373square=28.274338square=50.265488square=78.539825nowr=6当break处于嵌套结构中时,它将只跳出最内层结构,⽽对外层结构⽆影响.2.continue语句continue语句只能⽤于循环结构中,⼀旦执⾏了continue语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新⼀轮循环.[例3-17]计算半径为1到15的圆的⾯积,仅打印出超过50的圆⾯积.#includemain(){int r;float area;for(r=1;r<=5;r++){area=3.141593*r*r;if(area<50.0)continue;printf("square=%f",area);}}结果为:RUNsquare=50.265488square=78.539825同break⼀样,continue语句也仅仅影响该语句本⾝所处的循环层,⽽对外层循环没有影响.3.4.5程序应⽤举例[例3-18]验证哥德巴赫猜想:任⼀充分⼤的偶数,可以⽤两个素数之和表⽰,例如:4=2+26=3+3......98=19+79哥德巴赫猜想是世界著名的数学难题,⾄今未能在理论上得到证明,⾃从计算机出现后,⼈们就开始⽤计算机去尝试解各种各样的数学难题,包括费马⼤定理、四⾊问题、哥德巴赫猜想等,虽然计算机⽆法从理论上严密地证明它们,⽽只能在很有限的范围内对其进⾏检验,但也不失其意义.费马⼤定理已于1994年得到证明,⽽哥德巴赫猜想这枚数学王冠上的宝⽯,⾄今⽆⼈能及.分析:我们先不考虑怎样判断⼀个数是否为素数,⽽从整体上对这个问题进⾏考虑,可以这样做:读⼊⼀个偶数n,将它分成p和q,使n=p+q.怎样分呢?可以令p从2开始,每次加1,⽽令q=n-p,如果p、q均为素数,则正为所求,否则令p=p+q再试.其基本算法如下:1)读⼊⼤于3的偶数n.2)P=13)do{4)p=p+1;q=n-p;5)p是素数吗?6)q是素数吗?7)}whilep、q有⼀个不是素数.8)输出n=p+q.为了判明p、q是否是素数,我们设置两个标志量flag p和flag q,初始值为0,若p是素数,令flag p=1,若q是素数,令flagq=1,于是第7步变成:7)}while(flag p*flag q==0);再来分析第5、第6步,怎样判断⼀个数是不是素数呢?素数就是除了1和它⾃⾝外,不能被任何数整除的整数,由定义可知:2、3、5、7、11、13、17、19等是素数;1、4、6、8、9、10、12、14等不是素数;要判断i是否是素数,最简单的办法是⽤2、3、4、??i-1这些数依次去除i,看能否除尽,若被其中之⼀除尽,则i不是素数,反之,i是素数.但其实,没必要⽤那么多的数去除,实际上,⽤反证法很容易证明,如果⼩于等于i的平⽅根的数都除不尽,则i必是素数.于是,上述算法中的第5步、第6步可以细化为:第5)步p是素数吗?flag p=1;for(j=2;j<=[sqrt(p)];j++)ifp除以j的余数=0{flag p=0;break;}第6)步q是素数吗?flag q=1;for(j=2;j<=[sqrt(q)];j++)ifq除以j的余数=0{flag q=0;break;}程序如下:#include#includemain(){intj,n,p,q,flag p,flag q;printf("please input n:");scanf("%d",&n);if(((n%2)!=0)||(n<=4))printf("inputdataerror!\n");else{p=1;do{p=p+1;q=n-p;flag p=1;for(j=2;j<=(int)(floor(sqrt((double)(p))));j++) {if((p%j)==0){flag p=0;break;}}flag q=1;for(j=2;j<=(int)(floor(sqrt((double)(q))));j++) { if((q%j)==0){flag q=0;break;}}}while(flag p*flag q==0);printf("%d=%d+%d\n,"n,p,q);}}程序运⾏结果如下:RUN?please input n:88=3+5RUNplease input n:98 98=19+79RUNplease input n:9 input data error!。
c语言中continue和break的用法目前,随着计算机在人们生活和工作中的普及,其教学研究地位也在逐渐提升。
C语言是一种计算机程序设计语言,其具有高级语言和汇编语言的特点。
下面小编就跟你们详细介绍下c语言中continue和break的用法,希望对你们有用。
c语言中continue和break的用法如下:1.break语句break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句一般形式:break;注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。
比如:unsigned char i, j=50;for(i=0;i<100;i++){if(i>j) break;}j=i;当程序循环到i=51时,执行break语句,跳出for循环,开始执行j=i这条语句。
2.continue语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.一般形式:continue;比如:unsigned char i, j=50;for(i=0;i<100;i++){if(i>j) continue;j=i;}当程序循环到i=51时,执行continue语句,结束本次循环,即不执行下面的j=i语句,而是执行i++,即i=52,故i<100,循环的条件成立,循环继续执行,直到i<100的条件不成立,for循环才终止。
总之:continue语句只结束本次循环,而不是终止整个循环的执行。
break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
1.continue只结束上一级本次循环,针对只是for while两大类循环语句。
2.break结束上一级整个循环语句,可以是for while,还可以为swtich.测试代码如下:1 #i nclude <stdio.h>2 #i nclude <string.h>34 int main()5 {6 char i;7 for(i=0;i<5;i++){8 switch(i){9 case 0: printf("i=%d\n",i);break;10 case 1: printf("i=%d\n",i);break;11 case 2: printf("i=%d\n",i);break;12 case 3: printf("i=%d\n",i);continue;printf("ok\n");13 case 4: printf("i=%d\n",i);break;14 default: printf("errp\n");15 }16 printf("abanda\n");17 }18 }输出:i=0abandai=1abandai=2abandai=3i=4abanda。
dowhile的用法c语言do-while是一种循环结构,它在执行循环体之前先判断条件是否为真。
与while循环不同的是,do-while循环保证循环体至少会执行一次。
在C语言中,do-while循环的语法如下:```do//循环体语句} while (条件);```接下来,我将详细介绍do-while循环的用法,并给出一些示例。
1.基本用法:do-while循环的基本结构是先执行循环体,然后判断条件是否为真,如果为真则继续执行循环体;如果为假,则跳出循环。
因此,循环体至少会执行一次。
```c#include <stdio.h>int maiint i = 0;doprintf("%d ", i);} while (i < 5);return 0;```输出结果为:012342.多层嵌套循环:do-while循环可以与其他循环结构(如for、while)嵌套使用,实现多层循环嵌套的功能。
可以通过一个或多个条件来控制循环次数。
```c#include <stdio.h>int maiint i, j;i=0;doj=0;doprintf("%d %d\n", i, j);j++;} while (j < 3);} while (i < 2);return 0;```输出结果为:```000102101112```3. 使用break语句跳出循环:在循环体内部,可以使用break语句来跳出do-while循环,即使条件仍然为真。
```c#include <stdio.h>int maiint i = 0;doprintf("%d ", i);i++;if (i == 3)break;}} while (i < 5);return 0;```输出结果为:0124. 使用continue语句跳过本次循环:在循环体内部,可以使用continue语句来跳过本次循环,并继续执行下一次循环。
三种基本的循环语句: for语句、while语句和do-while语句。
一、循环语句(一)、for循环它的一般形式为:for(<初始化>;<条件表过式>;<增量>)语句;初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。
这三个部分之间用;分开。
例如:for(i=1;i<=10;i++)语句;上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。
再重新判断,直到条件为假,即i>10时,结束循环。
注意:(1).for循环中语句可以为语句体,但要用{和}将参加循环的语句括起来。
(2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。
省略了初始化,表示不对循环控制变量赋初值。
省略了条件表达式,则不做其它处理时便成为死循环。
省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。
(3).for循环可以有多层嵌套。
例如:for(;;) 语句;for(i=1;;i+=2) 语句;for(j=5;;) 语句;这些for循环语句都是正确的。
main(){int i,j;printf(i j\n);for(i=0;i<2;i++)for(j=0;j<3;j++)printf(%d %d\n,i,j);}输出结果为:i j0 00 10 21 01 11 2用for循环求1+2+……+100的和:main(){int sn=0,i;for(i=1;i<=100;i++)sn+=i; /*1+2+……+100*/printf(%d\n,sn);}从程序可以看出,使用循环语句可以大大简化代码。
(二)、while循环它的一般形式为:while(条件)语句;while循环表示当条件为真时,便执行语句。
直到条件为假才结束循环。
并继续执行循环程序外的后续语句。
例如:#include stdio.hmain(){char c;c='\0'; /*初始化c*/while(c!='\n') /*回车结束循环*/c=getche(); /*带回显的从键盘接收字符*/}上例中,while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c='\n',条件为假,循环便告结束。
与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。
注意:(1).在while循环体内也允许空语句。
例如:while((c=getche())!='\n');这个循环直到键入回车为止。
(2).可以有多层循环嵌套。
(3).语句可以是语句体, 此时必须用{和}括起来。
用while循环求1+2+……+100的和:main(){int sn=0,i=0;while(++i<=100)sn+=i; /*求1+2+……+100*/printf(%d\n,sn);}(三)、do--while循环它的一般格式为:do{语句块;}while(条件);这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。
因此,do-while循环至少要执行一次循环语句。
同样当有许多语句参加循环时,要用{和}把它们括起来。
用do--while循环求1+2+……+100的和:main(){int sn=0,i=1;dosn+=i; /*求1+2+……+100*/while(++i<=100);printf(%d\n,sn);}从上面三个程序看出,使用for,while和do--while求解同样的问题,基本思路都差不多,只是在第一次计算时,注意初值。
二、循环控制(一)、break语句break语句通常用在循环语句和开关语句中。
当break用于开关语句switch中时,可使程序跳出switch而执行switch 以后的语句;如果没有break语句,则将成为一个死循环而无法退出。
break在switch中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。
即满足条件时便跳出循环。
例如:main(){int sn=0,i;for(i=1;i<=100;i++){if(i==51) break; /*如果i等于51,则跳出循环*/sn+=i; /*1+2+……+50*/}printf(%d\n,sn);}可以看出,最终的结果是1+2+……+50。
因为在i等于51的时候,就跳出循环了。
自己写写怎样在while和do--while 循环中增加break语句。
注意:1. break语句对if-else的条件语句不起作用。
2. 在多层循环中,一个break语句只向外跳一层。
例如:main(){int i,j;printf(i j\n);for(i=0;i<2;i++)for(j=0;j<3;j++){if(j==2) break;printf(%d %d\n,i,j);}}输出结果为:i j0 00 11 01 1当i==0,j==2时,执行break语句,跳出到外层的循环,i 变为1。
(二)、continue语句continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用,用来加速循环。
例如:main(){int sn=0,i;for(i=1;i<=100;i++){if(i==51) continue; /*如果i等于51,则结束本次循环*/sn+=i; /*1+2+……+50+52+……+100*/}printf(%d\n,sn);}从程序中可以看出,continue语句只是当前的值没有执行,也就是说当前的值跳过去了,接着执行下次循环。
main(){int i,j;printf(i j\n);for(i=0;i<2;i++)for(j=0;j<3;j++){if(j==1) continue;printf(%d %d\n,i,j);}}输出结果为:i j0 00 21 01 2(三)、goto语句goto语句是一种无条件转移语句,与BASIC中的goto语句相似。
goto语句的使用格式为:goto 标号;其中标号是Turbo C 2.0中一个有效的标识符,这个标识符加上一个:一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。
标号既然是一个标识符,也就要满足标识符的命名规则。
另外标号必须与goto 语句同处于一个函数中,但可以不在一个循环层中。
通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。
goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。
main(){int sn=0,i;for(i=1;i<=100;i++){if(i==51) goto loop; /*如果i等于51,则跳出循环*/ sn+=i; /*1+2+……+50*/}loop: ;printf(%d\n,sn);}可以看出,这儿的goto语句和break作用很类似。
这儿的loop: ;printf(%d\n,sn);也可以写成loop: printf(%d\n,sn);main(){int sn=0,i;for(i=1;i<=100;i++){if(i==51) goto loop; /*如果i等于51,则跳出本次循环*/sn+=i; /*1+2+……+50+52+……+100*/loop: ;}printf(%d\n,sn);}可以看出这儿的loop语句和continue的作用类似。
但是某些情况下又必须使用goto语句,否则会让程序大大臃肿。
如:main(){int i,j,k;printf(i j k\n);for(i=0;i<2;i++)for(j=0;j<3;j++)for(k=0;k<3;k++){if(k==2) goto loop;printf(%d %d %d\n,i,j,k);}loop: ;}输出结果为:i j k0 0 00 0 1如果不使用goto语句,而使用break,continue语句,应该这样main(){int i,j,k;printf(i j\n);for(i=0;i<2;i++){for(j=0;j<3;j++){for(k=0;k<3;k++){if(k==2) break;printf(%d %d %d\n,i,j,k);}if(k==2) break;}if(k==2) break;}}输出结果为:i j k0 0 00 0 1所以在同时跳出多层循环时,应该使用goto语句。
记住,所有的goto语句其实都是可以用break,continue代替的。
下面举几个例子:1.求两个整数的最大公约数。
例如10和15的最大公约数是5。
分析:最大公约数一定小于等于最小的那个数一半,同时能被两数整除。
main(){int num1,num2,i,min;scanf(%d%d,&num1,&num2);min=num1for(i=min/2;i>0;i--)if(num1%i==0&&num2%i==0) break;printf(最大公约数为%d\n,i);}2.求1!+2!+……+n!(n<10)main(){int n,i;long temp=1,sn=0; /*从9!以后,所得的值就超过了int范围*/scanf(%d,&n);for(i=1;i<=n;i++){temp*=i;sn+=temp; /*如果没有这一步,求的就是n!*/}printf(%ld\n,sn);}那么想想,如果求1!+3!+5!+……+n!应该怎么办?3.判断一个整数是不是素数(素数就是只能被本身和1整除的数)。
#include math.hmain(){int num,i,flag=0;scanf(%d,&num);for(i=2;i{flag=0; /*标志变量复位*/if(num%i==0){flag=1;break;}}if(flag==0) printf(是素数\n);else printf(不是素数\n);}可以说,在所有的C语言书上,都有判断素数的例题。