《第3章基本程序设计1》由会员分享,可在线阅读,更多相关《第3章基本程序设计1(36页珍藏版)》请在金锄头文库上搜索。
1、第三章第三章模式模式1模式模式2模式模式3备注备注ifif(exprexpr) 语语句句S1 S1 ifif(exprexpr) 语语句句S1S1elseelse 语语句句S2S2ifif(expr1expr1) 语语句句S1S1else ifelse if (expr2expr2) 语语句句S2S2else ifelse if (expr3expr3) 语语句句S3S3 elseelse 语语句句SnSn 语句语句S1,S2,S3Sn可以是简单语可以是简单语句,也可以是句,也可以是复合语句。复合语句。如如果是复合语句果是复合语句语句,必须用语句,必须用一对花括号一对花括号“ ”括起来括起来3
2、.1 3.1 选择结构程序设计选择结构程序设计if if语句的三种基本形式语句的三种基本形式模式模式1: 单选择单选择if语句语句语句格式语句格式: if (条件条件) 语句组语句组; 语句句N条件条件Y功能:判断条件为真时执功能:判断条件为真时执行语句行语句,否则否则跳过跳过语句语句表达式表达式表达式表达式非非非非0 0为真为真为真为真模式模式2: 2: 双选择双选择if if语句语句5.1 if语句语句语句格式语句格式: if (条件条件) 语句组语句组1; else 语句组语句组2;功能:判断条件为真时执行语句组功能:判断条件为真时执行语句组1,否则否则执行语句组执行语句组2 条件条件
3、语句句1 语句句2YN模式模式3: 3: 多条件的多条件的if if语句语句语句格式语句格式: if (条件条件1) 语句语句1; else if (条件条件2) 语句语句2; else if (条件条件3) 语句语句3; else if (条件条件m) 语句语句m; else 语句语句n; 语句句1N条件条件1Y条件条件2条件条件nYY语句句2 语句句3语句句nNN功能:功能:从多组语句中选择满足条从多组语句中选择满足条件的语句组执行。件的语句组执行。6(1)三三种种形形式式的的if语语句句中中,if关关键键词词后后面面均均为为表表达达式式。通通常常为为关关系系表表达达式式或或逻逻辑辑表表达
4、达式式。也也可可以以是是其其它它表表达达式式,如如赋赋值值表表达达式式,甚甚至至也也可可以以是是一个变量一个变量。例如:例如:if (a=5) 语句;或语句;或 if (b) 语句;均为合法语句;均为合法用法用法(2)if 后的条件判断表达式一定用圆括号括起后的条件判断表达式一定用圆括号括起来,语句之后一定来,语句之后一定 要用分号。要用分号。 使用使用if语句时注意:语句时注意:7(3)三种形式中)三种形式中,若为一组语句一定用若为一组语句一定用 括括起来,组成起来,组成复合语句复合语句。但需注意。但需注意 后不可用后不可用 “;”号。号。例如:例如:if (ab) a+; b+; else
5、 a=0;b=10;9if 语句的嵌套:语句的嵌套:一般形式:一般形式: if (表达式表达式1) if (表达式表达式2) 语句语句1 内嵌内嵌 else 语句语句 2 if 语句语句 else if (表达式表达式3) 语句语句3 内嵌内嵌 else 语句语句4 if 语句语句if 语句中又含有语句中又含有if 语句的形式称为语句的形式称为 if 语句的语句的嵌套。嵌套。10说明:说明:每一个每一个 if 与与 else 相匹配,也可能不与相匹配,也可能不与 else 相相匹配;但是匹配;但是每一个每一个else 必须与一个必须与一个 if 相匹配相匹配。 else与与if 匹配的原则是匹
6、配的原则是: 最后的最后的else总是与它上总是与它上面面最近的最近的if 配对。配对。多分支及分支嵌套应采用缩排方式,以增加多分支及分支嵌套应采用缩排方式,以增加程序的可读性。程序的可读性。11例:例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);修改:修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);实现实现if else 正确配对方法:加正确配对方法:加 12例例 考虑下面程序输出结果考虑下面程序输出结果: main() int x=100,a=10,b=20
7、; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; /*x=-1;*/ printf(“%d”,x); 结果:结果:100结果:结果:-1x=-1;例:体型判断例:体型判断按按“体指数体指数”对肥胖程度进行划分:对肥胖程度进行划分: 体指数体指数t = w / h2 (体重体重w单位为公斤,身高单位为公斤,身高h单位为米)单位为米)当当t 18时,为低体重;时,为低体重;当当18 t 25时,为正常体重;时,为正常体重;当当25 t 27时,为超重体重;时,为超重体重;当当t 27时,为肥胖。时,为肥胖。编程从键盘输
8、入你的身高编程从键盘输入你的身高h和体重和体重w,判断你的体重属判断你的体重属于何种类型。于何种类型。例例#include main()float h, w, t;printf(Please enter h,w:);scanf(%f%f, &h, &w);t = w / (h * h);if (t = 18 & t = 25 & t = 27) printf(t=%ftToo fat!n, t);当当t 18时,为低体重;时,为低体重;当当18 t 25时,为正常体重;时,为正常体重;当当25 t 27时,为超重体重;时,为超重体重;当当t 27时,为肥胖。时,为肥胖。#include mai
9、n() float h, w, t;printf(Please enter h,w:);scanf(%f%f, &h, &w);t = w / (h * h);if (t 18)printf(t=%ftLower weight!n, t);else if (t 25)printf(t=%ftStandard weight!n, t);else if (t 27)printf(t=%ftHigher weight!n, t);elseprintf(t=%ftToo fat!n, t);18 25 2718 25 27例例例例当当t 18时,为低体重;时,为低体重;当当18 t 25时,为正常体重
10、;时,为正常体重;当当25 t 27时,为超重体重;时,为超重体重;当当t 27时,为肥胖。时,为肥胖。【例例3-63-6】程序举例程序举例运输公司对用户计算运费。运输公司对用户计算运费。路程()越远,每公里运费越低。标准如下:路程()越远,每公里运费越低。标准如下: 没有折扣没有折扣 折扣折扣 折扣折扣 折扣折扣 折扣折扣 折扣折扣设每公里每吨货物的基本运费为,货物重为,设每公里每吨货物的基本运费为,货物重为,距离为,折扣为,则总运费的计算公式为:距离为,折扣为,则总运费的计算公式为:* * * *()() ifif(s(s250) d=0;250) d=0; elseelse ifif(s
11、(s500) d=2;500) d=2; else else ifif(s(s1000) d=5;1000) d=5; elseelse ifif(s(s2000) d=8;2000) d=8; elseelse ifif(s(s3000) d=10;3000) d=10; elseelse d=15; d=15;1.1.嵌套条件语句实现嵌套条件语句实现分析折扣变化的规律性:分析折扣变化的规律性:折扣的折扣的“变化点变化点”都是都是250250的倍数的倍数 在横轴上加一种坐标,在横轴上加一种坐标,c c的值为的值为s/250s/250。c c代表代表250250的倍数。的倍数。 , 无折扣;无
12、折扣;, ;, ;, ;, ; , 。 考虑用考虑用switchswitchcase case 结构结构switch(c) case 0:d=0;break; case 1:d=2;break; case 2:case 3:d=5;break; case 4:case 5:case 6:case 7:d=8;break; case 8:case 9:case 10:case 11:d=10;break; default:d=15;break; 2.switch2.switch语句实现语句实现20switchswitch和和和和elseelse- -ifif的比较的比较的比较的比较 else-i
13、felse-if比比比比switchswitch的条件控制更强大一些的条件控制更强大一些的条件控制更强大一些的条件控制更强大一些elseelse- -ifif可以依照各种逻辑运算的结果进行流程控制可以依照各种逻辑运算的结果进行流程控制可以依照各种逻辑运算的结果进行流程控制可以依照各种逻辑运算的结果进行流程控制switchswitch只能进行只能进行只能进行只能进行=判断,并且只能是整数判断判断,并且只能是整数判断判断,并且只能是整数判断判断,并且只能是整数判断 switchswitch比比比比else-ifelse-if更清晰更清晰更清晰更清晰 两者都要尽量避免用得过多、过长,尤其不要嵌两者都
14、要尽量避免用得过多、过长,尤其不要嵌两者都要尽量避免用得过多、过长,尤其不要嵌两者都要尽量避免用得过多、过长,尤其不要嵌套得太多套得太多套得太多套得太多它们大大增加程序的分支,使逻辑关它们大大增加程序的分支,使逻辑关系显得混乱,不易维护,易出错系显得混乱,不易维护,易出错21for 循循环while循循环do while循循环3.2 3.2 循环结构设计循环结构设计循环结构设计循环结构设计22for循环说明:循环说明:(1 1)最简单的应用形式:)最简单的应用形式:)最简单的应用形式:)最简单的应用形式: forfor(循环变量赋初值;循环条件;循环变量增值)语句循环变量赋初值;循环条件;循环
15、变量增值)语句循环变量赋初值;循环条件;循环变量增值)语句循环变量赋初值;循环条件;循环变量增值)语句 例如:例如:例如:例如:for(i=1;i=10;i+) s=s*i;for(i=1;i=10;i+) s=s*i;(2 2)三个表达式均可缺省,但起分割作用的两个分号三个表达式均可缺省,但起分割作用的两个分号三个表达式均可缺省,但起分割作用的两个分号三个表达式均可缺省,但起分割作用的两个分号不可省不可省不可省不可省。 例如:例如:例如:例如:for( ; ; ) for( ; ; ) 等效于等效于等效于等效于 while(1)while(1) 表达式表达式表达式表达式1 1省略,应在省略,
16、应在省略,应在省略,应在forfor之前对循环变量赋初值之前对循环变量赋初值之前对循环变量赋初值之前对循环变量赋初值i=1; for(;i=5;i+) printf(“%dn”,i);for(i=1;i=5;i+)printf(“%dn”,i);23表达式表达式2省略,则不判断条件,循环无终止进行下去省略,则不判断条件,循环无终止进行下去表达式表达式3省略,则应另设法保证循环的结束省略,则应另设法保证循环的结束 此功能一定在循环体中完成此功能一定在循环体中完成 例:例:for(i=1;i=5;) printf(“%dn”,i); i+; (3)表达式表达式1和表达式和表达式3可为逗号表达式可为
17、逗号表达式,因此可以对因此可以对 多个变量赋初值及修改多个变量赋初值及修改 例如:例如:for(i=1,j=10;i=j;i+,j-) k=i+j;原原则则上上表表达达式式2不不可可省省略略,若若省省略略需需要要在在循循环环体体中中用用其它手段(其它手段(break、goto等)结束循环等)结束循环 。24(4 4)for for 语句的循环体还可为另一个循环语句语句的循环体还可为另一个循环语句for(i=1;i=2;i+) for(j=1;j=2;j+) printf(“%3d”,i+j); printf(“n”); output: 2 3 3 4例如:例如:do-whiledo-while
18、语语句句 dodo 语句语句; while( while(表达式表达式) ); 功能:先执行循环体,然后计算表达式值,功能:先执行循环体,然后计算表达式值,其值若为真(非其值若为真(非0)则继续执行循环体,直)则继续执行循环体,直到表达式为假时为止。到表达式为假时为止。 【例例】whilewhile和和do-whiledo-while循环的比较循环的比较 (1) void main() int i,sum=0; scanf(%d,&i); while(i=10) sum=sum+i; i+; printf(“sum=%dn”,sum); (2) void main()int i,sum=0;s
19、canf(%d,&i); do sum=sum+i; i+; while(i=10); printf(sum=%dn,sum); 循环至少循环至少执行一次执行一次循环没有循环没有被执行被执行输入:输入:12输出:输出:sum=12输入:输入:12输出:输出:sum=0三种循环语句的比较三种循环语句的比较1 1for for 语句与语句与whilewhile语句执行过程相同,但语句执行过程相同,但forfor语句语句简洁、清晰,它将初始条件、判断条件和循环变简洁、清晰,它将初始条件、判断条件和循环变量的在一行书写,显得直观、明了。量的在一行书写,显得直观、明了。2 2while while 和和
20、do-whiledo-while语句的循环控制变量初始化是语句的循环控制变量初始化是在循环语句之前完成,而在循环语句之前完成,而forfor语句循环变量的初始语句循环变量的初始化是在化是在forfor中(表达式中(表达式1 1)中,也可以在)中,也可以在forfor语句前语句前实现。实现。3 3forfor语句和语句和whilewhile语句是判断条件后执行循环体;语句是判断条件后执行循环体;而而do-whiledo-while是先执行循环体后判断条件,无论条是先执行循环体后判断条件,无论条件是否满足都要执行一次循环体。件是否满足都要执行一次循环体。 选择三种循环的一般原则选择三种循环的一般原
21、则如果循环次数已知,用如果循环次数已知,用for如果循环次数未知,用如果循环次数未知,用while如果循环体至少要执行一次,用如果循环体至少要执行一次,用do-while这只是这只是“一般一般”原则,不是原则,不是“原则原则”注意注意在在for和和while语句之后一般没有分号语句之后一般没有分号有分号表示循环体就是分号之前的内容(空循环体)有分号表示循环体就是分号之前的内容(空循环体) while (i 100); i+; for (i = 0; i 100; i+); printf(%d, i);for通常有一个循环变量控制循环的次数,不要在循通常有一个循环变量控制循环的次数,不要在循环体
22、内改变这个变量环体内改变这个变量循环循环嵌套嵌套结构规划结构规划外循外循环内循环内循环交叉循环交叉循环外循环外循环入口入口内循环出口内循环出口内循环出口内循环出口外循环出口外循环出口循环嵌套循环嵌套在循环体中,又包在循环体中,又包含有循环结构即构含有循环结构即构成循环嵌套成循环嵌套1 2 3 4 5 6 7 8 9-12 43 6 94 8 12 165 10 15 20 256 12 18 24 30 367 14 21 28 35 42 498 16 24 32 40 48 56 649 18 27 36 45 54 63 72 81行循环中行循环中包含列循包含列循环环5.2.1 5.2.
23、1 switchswitch语句格式语句格式输出下三角形乘法九九表输出下三角形乘法九九表例例1 2 3 4 5 6 7 8 9-12 43 6 94 8 12 165 10 15 20 256 12 18 24 30 367 14 21 28 35 42 498 16 24 32 40 48 56 649 18 27 36 45 54 63 72 81思路:行号为思路:行号为i,列号为列号为j(1=i=9)(1=j=i) 则:第则:第 i 行中一共要行中一共要输出输出 i 个乘积个乘积i=7j=5i*j#include main ( ) int i=1, j; /* i:行计数器行计数器 j:
24、列计数器列计数器 */ while (i = 9 ) /* 控制打印表头控制打印表头 */ printf (%4d,i+); printf (n-n); for (i=1;i=9;i+) /* 行循环入口行循环入口 */ j=1; /* 列计数器置列计数器置1 */ while (j=i ) /*嵌套的内循环。输出第嵌套的内循环。输出第i行行 */ printf (“%4d”, i*j); /*输出乘积输出乘积 */ j +; /* 列计数器列计数器+1 */ printf (n); /* 一行输出结束后,输出一行输出结束后,输出n */ 打印九九乘法表打印九九乘法表( (三角形三角形) )内
25、循环终内循环终值与外循值与外循环变量有环变量有关关用用forfor语句实现打印乘法九九表语句实现打印乘法九九表( (三角形三角形) )#include main ( ) int i, j; for ( i=1; i10; i+ ) printf (“%4d”,i); /* 打印表头打印表头 */ printf (n-n); for ( i=1; i10; i+ ) /* 控制打印表体控制打印表体 */ for ( j=1; j=i; j+ ) printf ( (j=i) ? %4dn:%4d,i*j);若要打印完整的九九乘法表,若要打印完整的九九乘法表,则哪里需要修改?则哪里需要修改?穷举法
26、程序设计穷举法程序设计从搜索技术角度讲,穷举法可视为最简单的搜索:从搜索技术角度讲,穷举法可视为最简单的搜索:即是在一个可行状态集合中即是在一个可行状态集合中依次遍历所有的元素依次遍历所有的元素,并判断该元素是否为所需要的状态。并判断该元素是否为所需要的状态。使用穷举法时,要恰当地设计变量,并且使用穷举法时,要恰当地设计变量,并且决定用哪决定用哪些变量作为搜索的主线些变量作为搜索的主线,以便穷举出所有可能情,以便穷举出所有可能情况。况。一般使用一般使用循环结构循环结构,要注意循环的起点和终点,对,要注意循环的起点和终点,对可能的情况不能遗漏,一般也不应重复。可能的情况不能遗漏,一般也不应重复。
27、穷举算法基本思想穷举算法基本思想(1) 明确问题要求,确定枚举对象,用合适类型的明确问题要求,确定枚举对象,用合适类型的变量变量表示枚举对象表示枚举对象。(2) 明确枚举明确枚举对象的取值范围对象的取值范围。(3) 根据题目要求,写出根据题目要求,写出有关的条件表达式有关的条件表达式。这里。这里条件表达式可以是数学表达式、关系表达式或逻辑条件表达式可以是数学表达式、关系表达式或逻辑表达式;表达式;(4) 使用使用循环语句枚举循环语句枚举出可能的解,在循环体内验出可能的解,在循环体内验证各种条表达式是否满足;证各种条表达式是否满足;(5) 根据问题背景,根据问题背景,优化程序优化程序,以便缩小搜索范围,以便缩小搜索范围,减少程序运行时间。减少程序运行时间。