第3章顺序和选择结构程序设计_第1页
第3章顺序和选择结构程序设计_第2页
第3章顺序和选择结构程序设计_第3页
第3章顺序和选择结构程序设计_第4页
第3章顺序和选择结构程序设计_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

1、第第 三三 章章 顺序和选择结构程序设计顺序和选择结构程序设计 n了解了解C C语言程序的特点语言程序的特点nC C程序的三种基本结构程序的三种基本结构n能编写简单的顺序结构程序。能编写简单的顺序结构程序。n熟练掌握熟练掌握ifif语句的三种形式,掌握语句的三种形式,掌握ifif语句的语句的基本结构以及基本结构以及ifif语句的嵌套,并能将条件运语句的嵌套,并能将条件运算符给出的语句转化成算符给出的语句转化成ifif语句的形式。语句的形式。n掌握掌握switchswitch语句的一般形式,并能把复杂的语句的一般形式,并能把复杂的分支选择性结构化成分支选择性结构化成switchswitch语句来

2、解决问题。语句来解决问题。本章重点本章重点3.1 3.1 程序设计概述程序设计概述n程序设计的最终目的是能在计算机上计算出正确的程序设计的最终目的是能在计算机上计算出正确的结果来。结果来。n19691969年年,Dijkstra,Dijkstra首先提出了结构程序设计的概念首先提出了结构程序设计的概念, ,强调从程序的结构和风格上来研究和设计程序。强调从程序的结构和风格上来研究和设计程序。n首先应从全局上把握系统所具备的功能是什么,并首先应从全局上把握系统所具备的功能是什么,并将系统划分成几个相对独立的子系统,而每个子系将系统划分成几个相对独立的子系统,而每个子系统只涉及局部的环境和条件。统只

3、涉及局部的环境和条件。n然后,进入第二步的实现阶段,即进行编码。在第然后,进入第二步的实现阶段,即进行编码。在第一阶段,只要知道一阶段,只要知道“做什么做什么”,而在实现阶段,才,而在实现阶段,才考虑考虑“如何做如何做”。3.3.流程控制语句流程控制语句 n结构化程序设计的基本思想是任何程序都可以用三结构化程序设计的基本思想是任何程序都可以用三种基本结构来实现种基本结构来实现, ,即顺序结构、选择结构和循环即顺序结构、选择结构和循环结构。结构。顺序结构的程序流程是按语句书写的顺序依次执行。顺序结构的程序流程是按语句书写的顺序依次执行。选择结构是根据给定条件进行判断,由判断的结果选择结构是根据给

4、定条件进行判断,由判断的结果决定执行两条或多条路径中的一条。决定执行两条或多条路径中的一条。循环结构是在给定条件成立的情况下反复执行某个循环结构是在给定条件成立的情况下反复执行某个程序段,该程序段称为程序段,该程序段称为”循环体循环体”。实现上述各种程序流程的语句称为流程控制语句。实现上述各种程序流程的语句称为流程控制语句。顺序结构顺序结构: :其按语句书写的先后顺序依次执行。例: 输入两个变量,交换两者的值后输出。#include void main( ) int x,y,z; printf(please input x and y:n); scanf(%d,%d,&x,&y

5、); printf(x=%d,y=%dn,x,y); z=x; x=y; y=z; printf(x=%d,y=%dn,x,y);n选择结构选择结构: :程序的执行流程根据给定条件进行判程序的执行流程根据给定条件进行判断,由判断的结果决定在两支或多支程序段中选断,由判断的结果决定在两支或多支程序段中选择一条分支执行,程序执行流程见图择一条分支执行,程序执行流程见图3-33-3。 图图3-3 3-3 选择结构流程图选择结构流程图 n循环结构循环结构: :在给定条件成立的情况下程序的执行流程反在给定条件成立的情况下程序的执行流程反复执行某个程序段,这种程序结构称为循环结构,其复执行某个程序段,这种

6、程序结构称为循环结构,其有两种实现形式:有两种实现形式:n“当型当型”循环结构。即当条件成立就执行循环。循环结构。即当条件成立就执行循环。n“直到型直到型”循环结构。即执行循环直到条件不成立循环结构。即执行循环直到条件不成立时才停止循环。时才停止循环。“当型当型”循环流程循环流程图图 “直到型直到型”循环流程图循环流程图C C语言有语言有9 9种控制语句种控制语句if-else (条件语句条件语句)for() (循环语句)(循环语句)while() (循环语句)(循环语句)do-while() (循环语句)(循环语句)continue (结束本次循环语句)(结束本次循环语句)break (中止

7、执行(中止执行switch或循环语句)或循环语句)switch (多分支选择语句)(多分支选择语句)goto (转向语句)(转向语句)return (从函数返回语句)(从函数返回语句)1.1.表达式语句表达式语句任何一个表达式加上一个分号就可以组成一条任何一个表达式加上一个分号就可以组成一条语句。语句。n例如例如: : 表达式表达式 表达式语句表达式语句 a=b+c*(d+3) a=b+c*(d+3); a+b+c a+b+c; i+ i+; 3.3 C3.3 C语句语句n函数调用也是表达式,在其后加一个分函数调用也是表达式,在其后加一个分号,就变成了函数调用语句。号,就变成了函数调用语句。

8、eg:eg:printfprintf函数调用语句和函数调用语句和scanfscanf函数调函数调用语句用语句n小结小结: : 在表达式之后加一个分号,从而构在表达式之后加一个分号,从而构成一个语句,这是成一个语句,这是C C语言的一个特色。它语言的一个特色。它使使C C语言的程序设计的表达能力更强。语言的程序设计的表达能力更强。 2.2.复合语句复合语句 定义定义: :将多个相关联的简单语句用一对大括号将多个相关联的简单语句用一对大括号括起来就构成了复合语句,在程序中当作一括起来就构成了复合语句,在程序中当作一个语句看待。个语句看待。例如: a=1.0; b=2.0; i+; 3.4 if3.

9、4 if条件语句条件语句 1.if1.if结构结构 2.if-else2.if-else结构结构 3.if-else-if3.if-else-if结构结构 3.4.1 if3.4.1 if结构结构nifif结构的一般格式为:结构的一般格式为: if(if(表达式表达式) ) 语句语句 n功能:首先计算表达式的值,若其值为非功能:首先计算表达式的值,若其值为非0(0(即即“真真”) ),则执行表达式后的语句;若其值为,则执行表达式后的语句;若其值为0(0(即即“假假”) ),则跳过这个语句去执行,则跳过这个语句去执行ifif语句语句的后继语句。的后继语句。n注注: : if( if(表达式表达式

10、) )后面的语句只能是一个语句或后面的语句只能是一个语句或一个复合语句。一个复合语句。流程图假(0)表达式为真吗?执行语句真(非0)入口表达式为真吗?执行语句真(非0)假(0)入口#include void main( ) float r; printf(“Input the radius:”); scanf(“%f”,&r); if(r0) printf(“area=%fn”,3.14159*r*r);例:从键盘输入圆的半径,若半径小于等于例:从键盘输入圆的半径,若半径小于等于0 0,则不,则不进行计算;否则,计算圆面积。进行计算;否则,计算圆面积。例:从键盘输入圆的半径,若为例:从

11、键盘输入圆的半径,若为1010,则计算圆的面积,则计算圆的面积,若为若为2020,则计算圆的周长。若既不等于,则计算圆的周长。若既不等于1010又不等于又不等于2020,则不进行计算。,则不进行计算。 #include void main( ) float r; printf(Input the radiut:); scanf(%f,&r); if(r=10) printf(Area=%fn,3.14159*r*r); if(r=20) printf(Cycle=%fn,2.0*3.14159*r); 例:输入两个实数,按由大到小的顺序输出这两个数。例:输入两个实数,按由大到小的顺序输

12、出这两个数。 #include void main() float a,b; scanf(%f,%f,&a,&b); if(ab) printf(%f,%f,a,b); if(ab,ab,则先则先a a后后b b;若若abab,则先,则先b b后后a a。用交换变量值的方法按顺序输出这两个数用交换变量值的方法按顺序输出这两个数n交换变量值的思想:交换变量值的思想: 不改变变量名,但变量值可改变的性质。不改变变量名,但变量值可改变的性质。 若若a a的值大于的值大于b b的值,则的值,则a a与与b b的值不交换;若的值不交换;若a a的值的值小于小于b b的值,则两者互相交换值

13、。从而使得无论何的值,则两者互相交换值。从而使得无论何时,变量时,变量a a的值始终大于变量的值始终大于变量b b的值。最后,按先的值。最后,按先a a后后b b的顺序输出,即可实现按由大到小的顺序输出的顺序输出,即可实现按由大到小的顺序输出的功能。的功能。n实现方法:实现方法: 为了能够进行相互交换,必须引进一个临时变量为了能够进行相互交换,必须引进一个临时变量t t。用以下三个赋值语句可实现交换。用以下三个赋值语句可实现交换。 t=a; a=b;b=t; /t=a; a=b;b=t; /* *t=a,a=b,b=t;t=a,a=b,b=t;* */ /程序如下:程序如下:#include

14、void main( ) float a,b,t; printf(Please input two numbers:n); scanf(%f%f,&a,&b); if(ab) t=a; a=b; /*复合语句*/ b=t; printf(%f,%f,a,b); 3.4.2 if-else3.4.2 if-else结构结构nif-elseif-else结构的一般格式为:结构的一般格式为: if(if(表达式表达式) ) 语句语句1 1 else else 语句语句2 2n功能:功能:首先计算表达式的值,若其值为非首先计算表达式的值,若其值为非0 0,则执,则执行语句行语句1 1,

15、然后跳过语句,然后跳过语句2 2,往下执行,往下执行ifif结构的后结构的后继语句;若其值为继语句;若其值为0 0,则跳过语句,则跳过语句1 1,执行语句,执行语句2 2,然后往下执行然后往下执行ifif结构的后继语句。结构的后继语句。 n注意:注意:语句语句1 1和语句和语句2 2分别都是一个语句或一个复分别都是一个语句或一个复合语句。合语句。流 程 图假(0)表达式为真吗?执行语句1真(非0)入口执行语句2例:求例:求a a、b b中的最大值。中的最大值。#include void main( ) int a,b,max; scanf(“%d%d”,&a,&b); if(a

16、b) max=a; else max=b; printf(“Maxum is %d”,max);例:输入一个正整数,判断这个数是奇数还是偶数。例:输入一个正整数,判断这个数是奇数还是偶数。#include void main( ) int number; printf(Input a number for testing:); scanf(%d,&number); if(number %2=1) printf(%d is odd.n,number); else printf(%d is even.n,number); n分析:因为对一个正整数,不是分析:因为对一个正整数,不是奇数就是偶

17、数,只有两种选择,奇数就是偶数,只有两种选择,故使用故使用if-else结构语句。结构语句。3.4.3 if-else-if3.4.3 if-else-if结构结构nif-else-ifif-else-if结构的一般格式为:结构的一般格式为: if(if(表达式表达式1) 1) 语句语句1 1 else if( else if(表达式表达式2) 2) 语句语句2 2 else if( else if(表达式表达式3) 3) 语句语句3 3 else else 语句语句n n注:注:每当选择其中一个语句执行完以每当选择其中一个语句执行完以后,整个后,整个if-else-ifif-else-if语

18、句就结束了,语句就结束了,然后执行然后执行if-else-ifelse-if语句的后继语句语句的后继语句流程图流程图例:输入一个例:输入一个x x值,求下列相应的值,求下列相应的y y值值#include void main( ) float x,y; scanf(“%f”,&x); if (x0) y=1.0; else if(x0) y=-1.0; else y=0; printf(“y=%fn”,y); -1.0 (x0)y=运行结果:运行结果:-88-88y=-1.000000y=-1.0000003.4.4 if3.4.4 if语句的嵌套语句的嵌套 条件语句的嵌套就是在条件语

19、句的嵌套就是在ifif语句中包含另一语句中包含另一个个ifif语句。语句。 从语法上讲,从语法上讲,ifif语句中所包含的语句是一语句中所包含的语句是一个语句或一个复合语句,这个语句当然也个语句或一个复合语句,这个语句当然也可以是另一个可以是另一个ifif语句,即内嵌语句,即内嵌ifif语句。语句。例:输入一个任意整数例:输入一个任意整数i i,试判断这个数是奇数还是偶数,试判断这个数是奇数还是偶数? ?分析:先判断这个数是否为正数,在正数分析:先判断这个数是否为正数,在正数(i0)(i0)的前提下,的前提下,再判断:若再判断:若i i能被能被2 2整除,则整除,则i i为偶数;若为偶数;若i

20、 i不能被不能被2 2整除,整除,则则i i为奇数。为奇数。可写出如下可写出如下ifif语句:语句:if(i0) if(i%2=0) /*i0&(i%2 = 0)*/ printf(positive and evenn); /*正数且偶数*/ else /*否则,i0&(i%2!=0)*/ printf(“postive and oddn”); /*正数且奇数*/else printf(“not positiven”); elseelse与前面最近与前面最近( (未曾配对未曾配对) )的的ifif配对。如果要改配对。如果要改变上页中所确定的配对关系,即变上页中所确定的配对关系,

21、即elseelse要与外层的要与外层的ifif配对,则第二个配对,则第二个ifif语句必须用花括号括起来。语句必须用花括号括起来。例如:例如:if(i0) if(i%2=0) printf(“positive and evenn”);else printf(“not positiven”); C C语言规定的配对关系语言规定的配对关系花括号将内嵌的花括号将内嵌的ifif语句孤立语句孤立, ,形成一形成一个独立的复合语句,个独立的复合语句,使内嵌的使内嵌的ifif不与后不与后面的面的elseelse配对,从配对,从而而elseelse必定与外一必定与外一层的层的ifif配对配对 #include

22、 void main( ) float a,b,c,max; scanf(“%f%f%f”,&a,&b,&c); if(ab) if(ac) max=a; else max=c; else if(bc) max=b; else max=c; printf(“Max=%fn”,max);说明:说明:(1)(1)程序引进了一个中间程序引进了一个中间变量变量maxmax,用以存放最大,用以存放最大数。数。(2)(2)嵌套在内层的嵌套在内层的ifif语句语句可以不用花括号括起来。可以不用花括号括起来。但为了使结构更清晰,但为了使结构更清晰,添加花括号也决不是多添加花括号也决不是

23、多余的。余的。例:从键盘输入三个实数,求其最大者。例:从键盘输入三个实数,求其最大者。修改后的程序修改后的程序: : #include void main( ) float a,b,c,max; scanf(%f%f%f,&a,&b,&c); if(ab) max=(ac)?a:c; else max=(bc)?b:c; printf(Max=%fn,max); 3.4.1 if3.4.1 if结构结构nifif结构的一般格式为:结构的一般格式为: if(if(表达式表达式) ) 语句语句 n注注: : if( if(表达式表达式) )后面的语句只能是一个语句或后面的语

24、句只能是一个语句或一个复合语句。一个复合语句。3.4.2 if-else3.4.2 if-else结构结构nif-elseif-else结构的一般格式为:结构的一般格式为: if(if(表达式表达式) ) 语句语句1 1 else else 语句语句2 2n注意:注意:语句语句1 1和语句和语句2 2分别都是一个语句或一分别都是一个语句或一个复合语句。个复合语句。3.4.3 if-else-if3.4.3 if-else-if结构结构nif-else-ifif-else-if结构的一般格式为:结构的一般格式为: if(if(表达式表达式1) 1) 语句语句1 1 else if( else i

25、f(表达式表达式2) 2) 语句语句2 2 else if( else if(表达式表达式3) 3) 语句语句3 3 else else 语句语句n n注:注:每当选择其中一个每当选择其中一个语句执行完以后,整个语句执行完以后,整个if-else-ifif-else-if语句就结束语句就结束了,然后执行了,然后执行if-else-ifelse-if语句的后继语句语句的后继语句3.5 switch3.5 switch语句语句n在在ifif语句中,用语句中,用if-else-ifif-else-if结构可结构可以解决多分支的选择问题。但是,以解决多分支的选择问题。但是,如果判断条件太多,程序冗长,

26、逻如果判断条件太多,程序冗长,逻辑关系就变得不够清晰。辑关系就变得不够清晰。C C语言中提语言中提供的供的switchswitch语句可用于解决过多分语句可用于解决过多分支的问题。支的问题。nswitch语句的一般格式为:语句的一般格式为: switch(表达式) case 常量表达式1: 语句块1 break; case 常量表达式2: 语句块2 break; case 常量表达式n: 语句块n break; default: 语句块n+1 break; 功能:功能: (1) (1) 执行执行switchswitch语句时,首先计算表达式语句时,首先计算表达式 的值,然后将此值与的值,然后将

27、此值与casecase后面的常量后面的常量 表达式的值相比较,如果某个常量表表达式的值相比较,如果某个常量表 达式的值与它相等,则执行该达式的值与它相等,则执行该casecase后后 的语句块;如果表达式的值与所有常的语句块;如果表达式的值与所有常 量表达式的值都不相等,则执行量表达式的值都不相等,则执行defaultdefault 后的语句块。当执行完某一个后的语句块。当执行完某一个casecase语语 句块后遇到句块后遇到breakbreak或执行完或执行完defaultdefault语句语句 块时,就跳出块时,就跳出switchswitch语句。语句。casecase结构与结构与else

28、-ifelse-if结构的对比结构的对比if(a=1) printf(A);else if(a=2) printf(B); else if(a=3) printf(C);else printf(D);switch(a) case 1: printf(A); break; case 2: printf(B); break; case 3: printf(C); break; default: printf(D); (2) (2) 如果执行完某一个如果执行完某一个casecase的语句块后没有遇到的语句块后没有遇到breakbreak语句,就进入到下一个语句,就进入到下一个casecase的语句块

29、或进入的语句块或进入到到defaultdefault后的语句块去执行。后的语句块去执行。switch(a) case 1:printf(“A”); case 2:printf(B); break; case 3:printf(C); break; default:printf(D); if(a=1) printf(A);printf(B);else if(a=2) printf(B);else if(a=3) printf(C);else printf(D);(3) (3) 多个多个casecase可以共用一个语句块可以共用一个语句块switch(a) case 1: case 2: case

30、 3:printf(A); break; if(a=1|a=2|a=3) printf(A) ; else if 几点说明:(1)switch后的表达式的值一般是整型或字符型(2)case后的表达式是可以求得整型量或字符型 量的常量表达式。常量表达式中不允许包含 有变量和函数调用。(3)default通常出现在switch的最后部分。但这 不是它的唯一位置。default可以出现在case 之间,甚至出现在所有的case之前,但等效 于出现在switch的最后部分。switchswitch语句语句例例:写出下面程序的输出结果写出下面程序的输出结果.#include void main() in

31、t x; scanf(“%d”,&x); switch(x) case 5:printf(“excellent”); case 4:printf(“Good”); break; case 3:printf(“Pass”); case 2:printf(“Fail”); /*break;*/ default:printf(“Poor”);若从键盘输入若从键盘输入3输出为输出为:PassFailPoor例:输入三个整数例:输入三个整数x,y,zx,y,z,请把这三个数由小到大输出,请把这三个数由小到大输出#includevoid main() int x,y,z,t; scanf(%d,%

32、d,%d,&x,&y,&z); if(xy) t=x; x=y; y=t; /*交换x,y的值*/ if(xz) t=z; z=x; x=t; /*交换x,z的值*/ if(yz) t=y; y=z; z=t; /*交换z,y的值*/ printf(small to big: %d %d %dn,x,y,z); 分析:若想办法把最小的数放到分析:若想办法把最小的数放到x上,上,先将先将x与与y进行比较,如果进行比较,如果xy则将则将x与与y的值进行交换,然后再用的值进行交换,然后再用x与与z进进行比较,如果行比较,如果xz则将则将x与与z的值进行的值进行交换,这样能使交

33、换,这样能使x最小。本题是采用最小。本题是采用依次比较的方法排出大小顺序。依次比较的方法排出大小顺序。例:例:某产品的国内销售价,某产品的国内销售价,8080箱以下,每箱箱以下,每箱350350元,元,超过超过8080箱,超过部分每箱优惠箱,超过部分每箱优惠2020元;国外销售价,元;国外销售价,10001000箱以下,每箱箱以下,每箱900900元,超过元,超过10001000箱,超过部分箱,超过部分每箱优惠每箱优惠1515元。试编写计算销售额的程序。元。试编写计算销售额的程序。分析:分析:题中产品分国内、国外两种销售价格,题中产品分国内、国外两种销售价格,适宜使用适宜使用if-elseif

34、-else结构语句处理。在每一种销结构语句处理。在每一种销售价格中,又根据销售量的不同而计算的方售价格中,又根据销售量的不同而计算的方法也不同。因此,可用嵌套法也不同。因此,可用嵌套ifif语句实现。使语句实现。使用整型标志变量用整型标志变量nationalnational表示国内、国外两表示国内、国外两种销售。种销售。#include void main( ) float money; int national, count; printf(Input national or external:); scanf(%d,&national); printf(Input count of

35、 product:); scanf(%d,&count); if (national) if(count=80) money=count*350.0; else money=count*350.0- (count-80)*20.0; else if (count=1000) money=count*900.0; else money=count*900.0-(count-1000)*15.0; printf(tatal=%f,money); u程序的清晰易读性越来越被人们所强调。程序的清晰易读性越来越被人们所强调。uscanf( )scanf( )函数、字符输入函数函数、字符输入函数g

36、etchar( )getchar( )函数,可函数,可以实现数据的输入。以实现数据的输入。putchar( )putchar( )是字符输出函数。是字符输出函数。u在任何表达式的后面加上一个分号,都可以构成一在任何表达式的后面加上一个分号,都可以构成一个表达式语句。个表达式语句。u复合语句在语法上等同于一个语句复合语句在语法上等同于一个语句,它可以出现在一个语句所允许出现的地方。uifif语句具有三种结构:语句具有三种结构:ifif结构、结构、if-elseif-else结构和结构和if-if-else-ifelse-if结构。在结构。在ifif语句中可以嵌套另一个语句中可以嵌套另一个ifif

37、语句,语句,这种形式可以使这种形式可以使ifif语句嵌套到任意深度。语句嵌套到任意深度。uswitchswitch语句用于多路分支结构语句用于多路分支结构, ,它使得程序更加简明它使得程序更加简明清晰清晰. .但是但是必须注意switch语句中,与break语句的配合使用。本本 章章 小小 结结scanf( ) scanf( ) 函数函数getchar( )getchar( )函数函数putchar( )putchar( )函数函数例:在同一行中输入三个数据例:在同一行中输入三个数据#include void main( ) int a1,a2; float a3; printf(Please enter value of a1,a2,a3:); scanf(%d%d%f,&a1,&a2,&a3); printf(a1=%d,a2=%d,a3=%fn,a1,a2,a3); 数据输入方式: (c) 123回车 (a) 123 456 7.89 456回车 (b) 123TAB456TAB7.89 7.89回车3.2 getchar()函数n字符输入函数字符输入函数getchar( )getchar( )是专门是专门用于输入一个字符常量的函数用于输入一个字符常量的函数n它没有参数,函数的值就是从键它没有参数,函数的值就是从键盘输入的一个字

温馨提示

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

评论

0/150

提交评论