c语言第二章程序的流程控制_第1页
c语言第二章程序的流程控制_第2页
c语言第二章程序的流程控制_第3页
c语言第二章程序的流程控制_第4页
c语言第二章程序的流程控制_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c语言第二章程序的流程控制2.1选择(分支)结构2.1.1关系运算符与逻辑运算符C的关系运算符如下:

> 大于

>= 大于等于

< 小于

<= 小于等于

== 等于

!= 不等于关系运算符关键是真(true)和假(false)的概念。C中true可以是不为0的任何值,而false则为0。使用关系运算符时,若表达式为真(即true)则返回1,否则,表达式为假(即false),则返回0。例如:100>99返回110>(2+10)返回0

2.0算法的表示2.1算法的概念算法是对特定问题求解步骤的一种描述,也是解决问题的办法,它是指令的有限序列,其中每一条指令表示一个或多个操作。自然语言流程图N-S图伪代码PAD图2.2算法的表示2.0算法的表示起止框处理框判断框输入输出框流程线连接点注释框2.2算法的表示---流程图2.0算法的表示程序的三种基本结构1.顺序结构2.2算法的表示---流程图AB流程图2.0算法的表示程序的三种基本结构2.2算法的表示---流程图2.选择序结构PAB真假2.0算法的表示程序的三种基本结构2.2算法的表示---流程图3.循环序结构1.当型(while型)循环结构2.直到型(until型)循环结构PA假真AP真假2.0算法的表示2.1选择(分支)结构2.1.1关系运算符与逻辑运算符C的逻辑运算符如下:

! 逻辑非

&& 逻辑与 || 逻辑或例如:

!1&&0

先求!1和先求1&&0将会等于出不同的结果,那么何者优先呢?这在C中是有规定的C的部分运算符的优先级如下:━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━表达式 ┃优先级───────────────────────────╂────()(小括号)[](数组下标).(结构成员)->(指针型结构成员) ┃最高

!(逻辑非)~(位取反)-(负号)++(加1)--(减1)&(变量地址) ┃

*(指针所指内容)sizeof(长度计算) ┃

*(乘)/(除)%(取模) ┃

+(加)-(减) ┃

<<(位左移)>>(位右移) ┃

<(小于)<=(小于等于)>(大于)>=(大于等于) ┃

==(等于)!=(不等于) ┃

&(位与) ┃

^(位异或) ┃

|(位或) ┃

&&(逻辑与) ┃

||(逻辑或) ┃

?:(?表达式) ┃

=+=-=(联合操作) ┃

,(逗号运算符) ┃最低━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2.1选择(分支)结构2.1.2if()…else结构C中条件语句的一般形式为: if(表达式) 语句1; else 语句2;上述结构表示:如果表达式的值为非0(true)即真,则执行语句1,执行完语句1从语句2后开始继续向下执行;如果表达式的值为0(false)即假,则跳过语句1而执行语句2。所谓表达式是指关系表达式和逻辑表达式的结合式。注意:1.条件执行语句中“else语句2;”部分是选择项,可以缺省,此时条件语句变成:if(表达式)语句1;表示若表达式的值为非0则执行语句1,否则跳过语句1继续执行。2.如果语句1或语句2有多于一条语句要执行时,必须使用"{"和"}"把这些语句包括在其中,此时条件语句形式为:if(表达式){语句体1;}else{语句体2;}

2.1选择(分支)结构2.1.2if()…else结构注意: if(表达式) {语句体1;} else {语句体2;}3.条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪个else。例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("Bad");对于上述情况,C规定:else语句与最近的一个if语句匹配,上例中的else与if(y<=100&&y>x)相匹配。为了使else与if(x>20||x<-10)相匹配,必须用花括号。如下所示: if(x>20||x<-10) { if(y<=100&&y>x) printf("Good"); } else printf("Bad");

2.1选择(分支)结构2.1.2if()…else结构例2.1符号函数intmain(void){ floatx; inty=-1; printf(“inputx:”); scanf(“%f”,&x); if(x!=0) { if(x>0)y=1; } else printf(“\nx=%6.2f,y=%d\n”,x,y);}f(x)=1(x>0)0(x=0)-1(x<0)2.1选择(分支)结构2.1.3条件运算符与条件表达式条件表达式:e1?e2:e3例如: a=((x>0)?(x++):(x--))相当于 if(x>0) a=x++; else a=x--;2.1选择(分支)结构2.1.2if()…else结构例2.2数据分段处理,0-49为A段,50-119为B段,120-169为C段intmain(void){ inty; charresult; printf(“inputy:”); scanf(“%d”,&y); if(y>=0&&y<50) result=‘A’; elseif(y>=50&&y<120) result=‘B’; elseif(y>=120&&y<170) result=‘C’; else result=‘D’; printf(“\nresult=%c”,y);}

2.1选择(分支)结构2.1.3switch结构在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else-fi语句来实现,但if-else-if语句使用不方便,并且容易出错。对这种情况,C提供了一个开关语句。开关语句格式为:switch(变量){ case常量1: 语句1或空; case常量2: 语句2或空; ... case常量n; 语句n或空; default: 语句n+1或空;}

2.1选择(分支)结构

执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。注意: 1.switch中变量可以是数值,也可以是字符。2.可以省略一些case和default。3.每个case或default后的语句可以是语句体,但不需要使用"{"和"}"括起来。

2.1.3switch结构下例的switch中变量为整数型。例2.3intmain(void){ inttest; for(test=0;test<=10;test++) { switch(test) /*变量为整型数的开关语句*/ { case1: printf("%d\n",test); break;/*退出开关语句*/ case2: printf("%d\n",test); break; case3: printf("%d\n",test); break; default: puts("Error");break; } }}

switch中变量也可为字符2.1选择(分支)结构2.2循环结构for语句的一般形式为:for(表达式1;表达式2;表达式3) {循环体}它的执行过程如下:(1)先求解表达式1;(2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步,若为假(0),则结束循环,转到第(5)步。(3)若表达式为真,在执行指定的语句后,求解表达式3。(4)转回上面第(2)步骤继续执行。(5)执行for语句下面的一个语句。

2.2.1for结构求解表达式1语句for语句的下一语句求解表达式3求解表达式2FT2.2.1for结构2.2循环结构2.2.1for结构例如:计算1+2+3+…+100=?for(i=1;i<=100;i++)sum=sum+i;相当于以下的while语句:i=1;while(i<=100){ sum=sum+i; i++;}for语句的一般形式用while语句来表示为:表达式1while(表达式2){ 语句 表达式3;}

2.2循环结构2.2.1for结构for语句中表达式1可以省略,其后的分号不能省略介,此时应在for语句之前给循环变量赋初值。如:

for(;i<=100;i++)sum=sum+i;执行时,跳过“求解表达式1”这一步,其它不变。

2.如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。如:

for(i=1;;i++)sum=sum+i;2.2循环结构2.2.1for结构3.表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:for(sum=0,i=1;i<=100;){sum=sum十i;i++;}本例把i++的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。4.可以省略表达式1和表达式3,只有表达式2,即只给循环条件。如:for(;i<=100;){sum=sum+i;i++;}相当于:5.三个表达式都可省略,如for(;;)语句

2.2循环结构2.2.2while结构和do…while结构while语句用来实现“当型”循环结构。其一般形式如下:

whi1e(表达式E) {循环体}

;执行过程:①计算表达式E的值②若E为非0,则执行语句s,然后转①若E为0,则退出循环,执行该循环后的语句ES0非0特点:先判断表达式,后执行语句,因此,若进入while循环时E的值就是0,则语句S一次也不执行2.2循环结构2.2.2while结构和do…while结构例如:计算1+2+3+…+100=?intmain(void){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf(“sum=%d”,sum);}2.2循环结构2.2.2while结构和do…while结构do-while语句用来实现“直到型”循环结构。其一般形式为:do{循环体}while(表达式E);执行过程:①执行循环体S②计算E值若E的值为真(非0),则转①若E的值为假(0),则结束循环ES0非0特点:先执行循环体,再判断表达式,因此循环体至少执行一次。2.2循环结构例如:计算1+2+3+…+100=?main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf(“sum=%d”,sum);}2.2.2while结构和do…while结构while循环和do~while循环的区别在于:a.它们执行循环体与计算表达式的先后顺序不同,do~while先执行循环体,再计算表达式;while循环为先计算表达式,表达式的结果为非零值,则执行循环体语句。b.do~while至少要执行一次循环体。while执行循环体的次数可能为零次或若干次。2.2循环结构猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个桃子。

main()

{

intday,x1,x2;/*x1是今天,x2是昨天*/

day=9;

x2=1;

while(day>0)

{ x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/

x2=x1;

day--;

}

printf("thetotalis%d\n",x1);

}

2.2.2while结构和do…while结构2.2循环结构本节课新内容到此结束后面的内容为下一节2.2.3循环嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套.三种循环(whi1e循环、do-whi1e循环和for循环)可以互相嵌套。例如,下面几种都是合法的形式:(1)while()(3)for(;;){{…for(;;)while(){...}{...}}}(2)do(4)while(){...{...dodo{…}while();{...}}while();while();}2.2循环结构2.2.4break语句和continue语句1break语句break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。break语句还可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。如for(r=1;r<=10;r++){ area=pi*r*r; if(area>100)break; printf(”area=%f”,area); }

break语句的一般形式:break;注意:break语句只能用于循环语句和switch语句。2.2循环结构2.2.4break语句和continue语句2continue语句一般形式为continue;其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。

continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束本层循环,不再进行条件判断。如果有以下两个循环结构:(1)while(表达式1)(2)while(表达式1){…{…if(表达式2)break;if(表达式2)continue;……}}2.2循环结构例6.6把100-200之间的不能被3整除的数输出。main(){ intn; for(n=100;n<=200;n++) { if(n%3==0) continue; printf("%d",n); }}2.2.4break语句和continue语句2.2循环结构2.2.5程序举例例1用π/4=1-1/3+1/5-1/7+…求π的近似值,直到某一项的绝对值小于10-6为止。#inc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论