《选择结构程序设计7》由会员分享,可在线阅读,更多相关《选择结构程序设计7(51页珍藏版)》请在金锄头文库上搜索。
1、2024/8/201上讲内容回顾上讲内容回顾一、输入输出的复杂格式(一、输入输出的复杂格式(4.2.2)二、字符的输入和输出(二、字符的输入和输出(4.2.1)三、算法(三、算法(2.2)第五讲第五讲选择结构程序设计选择结构程序设计(1)(1)C语言程序设计语言程序设计 Programming in C2024/8/203本讲主要内容本讲主要内容一、条件的表示一、条件的表示二二、 if 语句语句1.1.单分支单分支if if 语句(语句(The if statement)The if statement)2.2.双分支双分支if-elseif-else语句(语句(The if-else sta
2、tement)The if-else statement)3.3.多分支多分支if-elseif-else语句语句4.4.选择结构的嵌套选择结构的嵌套(Nest)(Nest)2024/8/204项目分析:项目分析:安全设置:进入系统需要密码安全设置:进入系统需要密码算法分析:算法分析:如果密码正确,显示如果密码正确,显示“欢迎使用欢迎使用*系统!系统!”否则否则,显示,显示“密码错误请重新输入!密码错误请重新输入!”选择结构选择结构2024/8/205要设计选择结构程序,要考虑以下问题:要设计选择结构程序,要考虑以下问题:条件条件:密码正确密码正确1.在在C语言中如何来表示条件?语言中如何来表
3、示条件?一般用关系表达式或逻辑表达式一般用关系表达式或逻辑表达式mima=123如果如果否则否则2.在在C语言中实现选择结构用什么语句?语言中实现选择结构用什么语句?用用if语句语句或或switch语句语句2024/8/206一、条件的表示一、条件的表示(一)(一) 关系运算符与关系表达式关系运算符与关系表达式(二)(二) 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式(三)(三) 条件运算符与表达式条件运算符与表达式2024/8/207(一)(一) 关系运算符与关系表达式关系运算符与关系表达式(The Operator and Expressions of Relations)(The Ope
4、rator and Expressions of Relations) 程序中经常需要比较两个量的大小关系,程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。以决定程序下一步的工作。比较两个量的运算符称为比较两个量的运算符称为关系运算符。关系运算符。由关系运算符将操作数连起来的表达式称由关系运算符将操作数连起来的表达式称为为关系表达式。关系表达式。C语言提供了语言提供了6个关系运算符个关系运算符2024/8/208v关系运算符关系运算符(The relational operators are:) l 、 、 = , =、 !=l优先级(优先级(precedence):, =, ,
5、关系运算符关系运算符 赋值赋值(=) 逗号运算符逗号运算符(,) 关系表达式及值关系表达式及值逻辑值逻辑值也称也称布尔值布尔值。逻辑值逻辑值只有两个:只有两个:指定关系式成立时,逻辑结果为真,以指定关系式成立时,逻辑结果为真,以1表示;表示;指定关系不成立时,逻辑结果为假,以指定关系不成立时,逻辑结果为假,以0表示。表示。例:运算符优先级例:运算符优先级 ca+b /*c(a+b)*/ ab!=c /*(ab)!=c*/ a=bc /*a=(bc /*a=(bc)*/例例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/*表达式值表达式值1*/*表达式值表达
6、式值1*/*表达式值表达式值0*/*表达式值表达式值1*/*f=0*/(一)(一)关系关系运算符与关系表达式运算符与关系表达式(The Operator and Expressions of Relations)(The Operator and Expressions of Relations) 2024/8/209l关系运算注意:关系运算注意:例例: 321在在C中是允许的,中是允许的, 值为值为0例例 a100 结果为结果为10例例 int i=1, j=7,a; a=i+(j%4!=0); 则则a=2例例 : = 赋值赋值 (改变某个变量的值)(改变某个变量的值) 表达式的值是变量的值
7、表达式的值是变量的值 a=2 = 比较是否相等比较是否相等 表达式的值是表达式的值是0 或或 1 a=2例例:#include void main() float d=123.45; if(123.45=d) printf(1n); else printf(0n); (1)(1)字符变量以对应的字符变量以对应的ASCIIASCII码参与运算。码参与运算。(2)(2)对对于含多个关系运算符的表达式,根据运算符的左于含多个关系运算符的表达式,根据运算符的左结结合性合性计计算算. .(3)(3)注意注意“=”和和“= =”的区别。的区别。(4)(4)应避免对应避免对实数实数作相等或不等的判断作相等或
8、不等的判断#include #include void main() float d=123.45; if(fabs(123.45-d)1e-5) printf(1n); else printf(0n);2024/8/2010(二)(二)逻辑运算逻辑运算符与逻辑表达式符与逻辑表达式(The Operator and Expressions of Logic)C C语言中有语言中有3 3个逻辑运算符:个逻辑运算符:&(逻辑与,并且)(逻辑与,并且)|(逻辑或,或者)(逻辑或,或者)! !(逻辑非,取反)(逻辑非,取反)运算对象运算对象逻辑运算结果逻辑运算结果aba&ba | b!a真真真真真真真
9、真假假真真假假假假真真假假假假真真假假真真真真假假假假假假假假真真2024/8/2011运算对象:非非0 0( (真真) )或或0 0( (假假) )逻辑运算结果:( (真真) )( (假假) )运算对象运算对象逻辑运算结果逻辑运算结果aba&ba | b!a非非0非非0110非非000100非非001100001(二)(二) 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式(The Operator and Expressions of Logic)2024/8/2012例例 a=4,b=0; !a a&b a|b非非非非0 0 0 0值:真值:真值:真值:真0 0 0 0值:假值:假值:假值:
10、假整型整型实型实型字符型字符型0 00.00.000(二)(二)逻辑运算逻辑运算符与逻辑表达式符与逻辑表达式(The Operator and Expressions of Logic)2024/8/2013逻辑运算符的优先级逻辑运算符的优先级 和结合性:和结合性:! ! : :从右向左从右向左关系运算符关系运算符& :& :从左向右从左向右| :| :从左向右从左向右高高低低例如:运算符优先级例如:运算符优先级 a=x & x=ba=x & x ab&xb&xyy a= a=b|xb|x=y=y ! !a|aa|abb/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|
11、(ab)(二)(二) 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式(The Operator and Expressions of Logic)2024/8/2014(二)(二)逻辑运算逻辑运算符与逻辑表达式符与逻辑表达式 (The Operator and Expressions of Logic)练习练习: 4&0|2 c&d 53&2|83)&2|(8b)&(n=cd) /*结果结果m=0,n=1*/例例 a&b&c a&b&c /*/*只在只在a a为真时,才判别为真时,才判别b b的值;的值; 只在只在a a、b b都为真时,才判别都为真时,才判别 c c的值的值*/*/例例 a|b
12、|c a|b|c /*/*只在只在a a为假时,才判别为假时,才判别b b的值;的值; 只在只在a a、b b都为假时,才判别都为假时,才判别 c c的值的值*/*/2024/8/2016例:判断变量例:判断变量a的值是否在的值是否在12到到30之间。之间。数学表达式:数学表达式:12a30 (12a)&(a1&x1&x=1&x=1&x=100 /*/*判断判断x x值是否介于值是否介于1 1和和100100之间,位于数轴中间的闭区间之间,位于数轴中间的闭区间* */ /x=100 x=100 /*/*判断判断x x值是否小于值是否小于1 1或大于等于或大于等于100100,位于数轴的两端,位
13、于数轴的两端* */ /x=0&y=0 x=0&y=0 /*/*判断判断x x和和y y值是否都大于等于值是否都大于等于0 0,或位于第一象限含数轴,或位于第一象限含数轴* */ /x+yz&x+zy&y+zx x+yz&x+zy&y+zx /*/*可用于判断三个数是否满足构成三角形的条件可用于判断三个数是否满足构成三角形的条件* */ /ch= A &ch= A &chy?x:y) (三)(三) 条件运算符条件运算符与与条件表达式条件表达式求解求解求解求解表达式表达式表达式表达式2 2 2 2024/8/2020【例例】从键盘输入一个数,判断其是奇数还是偶数。从键盘输入一个数,判断其是奇数还
14、是偶数。#includevoid main(void) int x; printf(x = ? ); scanf(%d,&x); x%2? printf(%d是奇数是奇数!n,x):printf(%d是偶数是偶数!n,x); (三)(三) 条件运算符条件运算符与与条件表达式条件表达式2024/8/2021二二、 if 语句语句1.1.单分支单分支if if 语句(语句(The if statement)The if statement)2.2.双分支双分支if-elseif-else语句(语句(The if-else statement)The if-else statement)3.3.多分
15、支多分支if-elseif-else语句语句4.4.选择结构的嵌套选择结构的嵌套(Nest)(Nest)2024/8/2022if语句的三种形式:语句的三种形式:if (score= 60) print( Passn );if (score= 60) printf(Passn);else printf(Failn);1.1.单分支单分支ifif语句语句2.2.双分支双分支ifif语句语句二二、 if 语句语句2024/8/2023 if ( score60) printf(“不及格不及格” ); else if ( score 70) printf(“差差”); else if (score
16、80) printf(“中中”); else if (score = 60) print( Passn );2024/8/20252.双分支双分支if语句语句语句形式语句形式: if (表达式)表达式) 语句语句1;else 语句语句2 ; 语句执行流程:语句执行流程: 表达式表达式语句语句1真真(非非0)假假(0)语句语句2if (score= 60) printf(Passn);else printf(Failn);2024/8/20263.3.多分支多分支if-else-if if-else-if 语句语句语句形式语句形式: if (表达式表达式1) 语句语句1;else if (表达式
17、表达式2)语句)语句2; else if (表达式表达式n)语句语句n; else 语句语句n+1; if ( score60) printf(“不及格不及格” ); else if ( score 70) printf(“差差”); else if (score 80) printf(“中中”); else if (score 90) printf(“良良”); else printf(“优优”); 2024/8/2027语句执行流程:语句执行流程:3.3.多分支多分支if-else-if if-else-if 语句语句表达式表达式1 1语句语句1 1真真( (非非0 0) )假假(0(0)
18、 )语句语句2 2表达式表达式2 2真真( (非非0)0)表达式表达式n n语句语句n n语句语句n+1n+1假假(0(0) )假假(0(0) )真真( (非非0)0)2024/8/2028二二、 if 语句语句注意:注意:()() if是关键字只能小写。是关键字只能小写。 if语句中表达式形式很灵语句中表达式形式很灵活,可以是常量、变量、任何类型表达式等。只要表达活,可以是常量、变量、任何类型表达式等。只要表达式的值为非零值,条件就为真,反之条件为假。式的值为非零值,条件就为真,反之条件为假。 int a=1; if(a)if(-3)if(a=0)if(a=0)if(a%2)2024/8/2
19、029(2)当当if语语句句中中出出现现多多个个“if”与与“else”的的时时候候,要要特特别别注注意意它它们们之之间间的的匹匹配配关关系系,否否则则就就可可能能导导致程序逻辑错误。致程序逻辑错误。 “else”与与“if”的的匹匹配配原原则则是是“就就近近一一致致原原则则”,即即“else”总是与它前面最近的总是与它前面最近的“if”相匹配。相匹配。 if ( score60) printf(“不及格不及格” ); else if ( score 70) printf(“差差”); else if (score 80) printf(“中中”); else if (score 90) pr
20、intf(“良良”); else printf(“优优”); 二二、 if 语句语句2024/8/2030#include #include void main( )void main( )char char chch; ; printfprintf(请输入一个字符:请输入一个字符:n);n); chch= =getchargetchar( ); ( ); printfprintf(输入的原始字符为:输入的原始字符为: % %cn,chcn,ch);); if(chif(ch=A&chA&ch=Z) b ) c=a; a=b; b=c; if ( ab ) c=a; a=b; b=c; if
21、( ab ) c=a; a=b; b=c;二二、 if 语句语句2024/8/2032【例例】从键盘输入一个数,判断其是奇数还是偶数。从键盘输入一个数,判断其是奇数还是偶数。#includevoid main(void) int x; printf(x = ? ); scanf(%d,&x); if(x%2=0) printf(%d是偶数是偶数!n,x); else printf(%d是奇数是奇数!n,x);2.双分支双分支if语句语句2024/8/2033项目分析:项目分析:安全设置:进入系统需要密码安全设置:进入系统需要密码算法分析:算法分析:如果密码正确,如果密码正确, 显示显示“欢迎使
22、用欢迎使用*系统!系统!”否则,否则, 显示显示“密码错误请重新输入!密码错误请重新输入!”2.双分支双分支if语句语句开始开始输入密码输入密码密码正确密码正确欢迎使用欢迎使用*系统!系统!结束结束T TF F密码错误密码错误请重新输入!请重新输入!定义密码定义密码2024/8/20342.双分支双分支if语句语句程序实现:程序实现:#include void main() int a,b=333; printf(请输入密码请输入密码:); scanf(%d,&a); if (a=b) printf(欢迎使用欢迎使用*系统系统n); else printf(密码错误请重新输入!密码错误请重新输
23、入!n);开始开始输入密码输入密码密码正确密码正确欢迎使用欢迎使用*系统!系统!结束结束T TF F密码错误密码错误请重新输入!请重新输入!定义密码定义密码2024/8/2035#include void main() int a,b=333; printf(请输入密码请输入密码:); scanf(%d,&a); if (a=b) printf( nt* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n);printf( t*t * * *n);printf( t*t * 工资管理系统工资管理系统 * *n);pr
24、intf( t*t * * *n);printf( t*t * * * * * * * * * * * * * * * * * * * * * *n);printf( t*t * * * * * * * * * * * * * * * *n);printf( t*t * * *n);printf( t*t * 1.数据录入数据录入 * *n);printf( t*t * * *n);printf( t*t * 2.工资计算工资计算 * *n);printf( t*t * * *n);printf( t*t * 3.查询统计查询统计 * *n);printf( t*t * * *n);print
25、f( t*t * 4.职工基本资料查询职工基本资料查询 * *n);printf( t*t * * *n);printf( t*t * 5.查看所有记录查看所有记录 * *n);printf( t*t * * *n);printf( t*t * 6.修改数据修改数据(需要权限密码需要权限密码) * *n);printf( t*t * * *n);printf( t*t * 7.退出系统退出系统 * *n);printf( t*t * * *n);printf( t*t * * * * * * * * * * * * * * * *n);printf( t* * * * * * * * * *
26、* * * * * * * * * * * * * * * * * * * * * * * n);printf( t 【制作人制作人:李妮李妮】n);printf(tttt请输入选择请输入选择1-7/?);else printf(密码错误请重新输入!密码错误请重新输入!n);2.双分支双分支if语句语句2024/8/2036例如,有分段函数如下:例如,有分段函数如下: 分段函数图形表示:分段函数图形表示: 0 1 10以点以点1为分界点,分支嵌套程序段如下:为分界点,分支嵌套程序段如下:if(x=1) y=x+5; /*x1 */else if(x10) y=2*x; /*1x10) y=3/
27、(x-10); /*x10*/ else printf(“x无定义。无定义。n”); /*x=10无定义无定义*/ x+5 x1 y= 2x 1x10 3.多分支多分支if-else-if 语句语句2024/8/2037【例例 】从键盘任意输入一个百分制考试从键盘任意输入一个百分制考试成绩,判断该成绩的等级。成绩,判断该成绩的等级。分析:分析: 对于考试成绩等级的划分,可在数轴上分段划对于考试成绩等级的划分,可在数轴上分段划分如下:分如下: 为保证程序的为保证程序的健壮性健壮性,应进行数据的有效性,应进行数据的有效性检查。检查。 D C B A无效数据无效数据无效数据无效数据060708090
28、100E2024/8/2038编写程序代码如下:编写程序代码如下:#include void main(void) float score; printf(请输入成绩:请输入成绩:); scanf(%f,&score); /*从键盘输入考试成绩从键盘输入考试成绩 */ if(score100) printf(成绩输入错误!成绩输入错误!n); /*有效性检查有效性检查*/ else if(score=90) printf(%4.1f is An,score); else if(score=80) printf(%4.1f is Bn,score); else if (score=70) pri
29、ntf(%4.1f is Cn,score); else if(score=60) printf(%4.1f is Dn,score); else printf(%4.1f is En,score); 2024/8/2039项目分析:项目分析:选择某功能项,进入子系统模块。选择某功能项,进入子系统模块。1.数据录入数据录入 2.工资计算工资计算 3.查询统计查询统计4.职工基本资料查询职工基本资料查询5.查看所有记录查看所有记录 6.修改数据修改数据(需要权限密码)需要权限密码)7.退出系统退出系统3.多分支多分支if-else-if 语句语句2024/8/2040(1)输入选择功能项序号)输
30、入选择功能项序号(2)根据输入,执行相应的分支语句)根据输入,执行相应的分支语句# include main( )int num; printf(tttt请输入选择请输入选择1-7/?); scanf(%d,&num); if (num=1) printf(1.数据录入数据录入n); else if (num=2) printf(2.工资计算工资计算n ); else if (num=3) printf(3.查询统计查询统计n ); else if (num=7) printf(7.退出系统退出系统n);3.多分支多分支if-else-if 语句语句2024/8/2041# include m
31、ain( )int num; scanf(%d,&num); if (num=1) printf(1.数据录入数据录入n); else if (num=2) printf(2.工资计算工资计算n ); else if (num=3) printf(3.查询统计查询统计n ); else if (num=4) printf(4.职工基本资料查询职工基本资料查询n); else if (num=5) printf(5.查看所有记录查看所有记录n); else if (num=6) printf(6.修改数据修改数据(需要权限密码)需要权限密码)n); else if (num=7) printf(
32、7.退出系统退出系统n);3.多分支多分支if-else-if 语句语句2024/8/2042如果输入错误(不是如果输入错误(不是17),提醒输入有误!),提醒输入有误!# include main( )int num; scanf(%d,&num); if (num=1) printf(1.数据录入数据录入n); else if (num=2) printf(2.工资计算工资计算n ); else if (num=7) printf(7.退出系统退出系统n); else printf(输入有误!输入有误!n );3.多分支多分支if-else-if 语句语句2024/8/2043【例例 】判
33、断某数是否能被判断某数是否能被k k整除。整除。 #include stdio.hvoid main ( ) int a,k; scanf (%d%d,&a,&k); if if (a%k=0) printf(%d/%d yesn,a,k); else else printf(%d/%d non,a,k);算法分析:算法分析:(1)定义并输入定义并输入数据数据a,k;(2) 判断判断a%k的的结果。结果。2024/8/2044【例例 】判断某数是否能被判断某数是否能被k k整除。整除。 #include stdio.hvoid main ( ) int a,k; scanf (%d%d,&a,
34、&k); if (k=0) printf(error!); else if if(a%k=0) printf(%d/%d yesn,a,k); else else printf(%d/%d non,a,k);注意注意: 任何数除以零的任何数除以零的值是无穷大,计算机值是无穷大,计算机无法存储,就会产生无法存储,就会产生一个数据溢出错误并一个数据溢出错误并终止程序的执行。为终止程序的执行。为了防止程序被终止,了防止程序被终止,必须在执行除法时要必须在执行除法时要保证除数不为零。保证除数不为零。 2024/8/2045【例例】数学中有许多有趣的数,如水仙花数、完数等。数学中有许多有趣的数,如水仙花
35、数、完数等。水仙花数是一个三位数,其各位数字的立方和恰等于这水仙花数是一个三位数,其各位数字的立方和恰等于这个数。例如个数。例如153153,1 13 35 53 33 33 3153153。编写程序,从键盘。编写程序,从键盘上输入一个三位的整数,判断其是否为水仙花数上输入一个三位的整数,判断其是否为水仙花数 。分析:分析:(1)问题描述:问题描述:判断一个三位整数判断一个三位整数num是否为水仙花数是否为水仙花数(2)数学建模和流程数学建模和流程 : 分解分解num的每一位数字:的每一位数字:ge=num%10 /*个位个位*/bai=num/100 /*百位百位*/ shi=num/10%
36、10;/*十位十位*/若若num=bai*bai*bai+shi*shi*shi+ge*ge*ge,则,则num为水仙花为水仙花数,数,否则不是。否则不是。2024/8/2046#includevoid main(void) int num, bai, shi ,ge; printf(请输入一个三位的整数:请输入一个三位的整数:); scanf(%d,&num); bai=num/100; shi=num/10%10; ge=num%10; if(num=bai*bai*bai+shi*shi*shi+ge*ge*ge) printf(%d 是水仙花数。是水仙花数。, num); else p
37、rintf(%d 不是水仙花数。不是水仙花数。, num);2024/8/2047语句形式语句形式: if (if (表达式表达式1)1) if (if (表达式表达式2)2) 语句语句1; 1; if (if (表达式表达式1)1) if (if (表达式表达式2)2) 语句语句1;1; elseelse 语句语句2;2;else else 语句语句3;3;if (if (表达式表达式1)1) if (if (表达式表达式2)2) 语句语句1;1; elseelse 语句语句2;2;else else 语句语句3;3;if (if (表达式表达式1)1) if (if (表达式表达式2)2)
38、 语句语句1;1; 4. 4. 选择结构的嵌套选择结构的嵌套(Nest)(Nest)2024/8/2048语句形式语句形式: elseelse if (if (表达式表达式2)2) 语句语句1;1; elseelse 语句语句2;2;if (if (表达式表达式1)1) if (if (表达式表达式2)2) 语句语句1;1; elseelse 语句语句2;2;4. 4. 选择结构的嵌套选择结构的嵌套(Nest)(Nest)2024/8/2049if (ab)d=a;else if (cb) d=c; else d=b;if (ab)if (cb) d=c; else d=b ;if (ab)i
39、f (cb) d=c;else d=b ;if (ab) if (cb) d=c; else d=b;else d=a;d=5d=3d=0d=4思考已知思考已知a=3 b=4 c=5 d=0, d=?a=3 b=4 c=5 d=0, d=?4. 4. 选择结构的嵌套选择结构的嵌套(Nest)(Nest)2024/8/2050本讲小结本讲小结一、条件的表示一、条件的表示二二、 if 语句语句1.1.单分支单分支if if 语句(语句(The if statement)The if statement)2.2.双分支双分支if-elseif-else语句(语句(The if-else statement)The if-else statement)3.3.多分支多分支if-elseif-else语句语句4.4.选择结构的嵌套选择结构的嵌套(Nest)(Nest)2024/8/2051The Endthanks