版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第 3 3 章章 控制结构控制结构选择结构的程序设计选择结构的程序设计3面向过程程序设计的任务:面向过程程序设计的任务:数据描述第二章第二章第第3章章解决的问题:当过程中出现选择结构问题时,针对问题的类型,可有三种不同的条件判定方法来描述过程。过程描述 顺序结构:各语句是按自上而下的顺序执行的,执行完上一条语句就自动执行下一条语句,是无条件的,不必作任何判断。 选择结构:根据某个条件是否满足来决定是否执行指定的操作任务,或者从给定的两种或多种操作选择其一。提提 纲纲3.2.1 用用if语句设计选择结构程序语句设计选择结构程序3.2.2 用用switch语句设计多分支结构程语句设计多分支结构程
2、序序3.2.3 goto语句语句3.2.4 应用应用举例举例分支语句分支语句 是控制程序执行选择结构的语句是控制程序执行选择结构的语句 是程序实现逻辑判断的一种形式是程序实现逻辑判断的一种形式根据学生分数判断是否及格?根据学生分数判断是否及格?根据学生分数如何进行分级?根据学生分数如何进行分级?自然语言:自然语言:如果如果 那么那么 否则否则C语言:语言: 分支语句分支语句如何解决如何解决? 为什么要用?提提 纲纲3.2.1 用用if语句设计选择结构程序语句设计选择结构程序3.2.2 用用switch语句设计多分支结构程语句设计多分支结构程序序3.2.3 goto语句语句3.2.4 应用应用举
3、例举例一、一、if语句的三种基本形式语句的三种基本形式功能功能:判断条件为真时执行语句判断条件为真时执行语句否则否则跳过跳过语句语句语句格式语句格式: :ifif ( (条件条件) ) 语句组语句组; ; 例例: : if (ab) x=a;if (ab) x=a;1. 单选择单选择if语句语句 语句语句N条件条件Y条件条件可以是关系式或逻辑式可以是关系式或逻辑式2. 双选择双选择if语句语句语句格式语句格式: :if (if (条件条件) ) 语句组语句组1; 1; else else 语句组语句组2;2; 条件条件 语句语句1 语句语句2YN功能功能:判断条件为真时执行语句组判断条件为真时
4、执行语句组1否则执行语句组否则执行语句组2if printf(“及格及格n”););else printf(“不及格不及格n”);main() int a; scanf(“%d”,&a); if (a60) printf(“%dn”,a); 输出不及格的成绩输出不及格的成绩求求a a和和b b两数中较大的一个两数中较大的一个#include main( ) int a, b, max; printf(Input a and b=); scanf(%d%d,&a, &b); max=a; if ( maxb ) max=b; printf(The max of a and b: %dn,max)
5、;maxbmax=bYNmax=a#include main( ) int a,b,max; printf(Input a and b=); scanf(%d%d,&a, &b); if ( ab ) max=a; /*如果如果ab,则将,则将a=max*/ else max=b; /*否则,否则, b=max*/ printf(The max of a and b : %dn, max);ab?max=bmax=aYN求求a a和和b b两数中较大的一个两数中较大的一个 if (ab) x=a; else x=b; 必须有分号必须有分号复合语句的表示复合语句的表示: if (ab) x=a;
6、 printf(“a=%3dn”,x); else x=b; printf(“b=%3dn”,x); 不能有分号不能有分号 main( ) int a,b; printf(Enter two numbers: ); scanf(%d%d, &a, &b); if (b!=0) printf(%dn, a/b); else printf(cannot divide by zero.n);b?printf .printf.非非 00if (b) printf(%dn, a/b);else printf(error.n);等价!等价!测试用例测试用例:输入输入: 0,0 显示提示显示提示 5,0 显
7、示提示显示提示 0,5 0 5,5 1从键盘输入被除数从键盘输入被除数a和除数和除数b求商。求商。有关有关if语句的说明语句的说明l 条件后面不加分号条件后面不加分号l 语句之后有分号语句之后有分号l else不是语句,不能单独使用不是语句,不能单独使用l 当当if后有多个执行语句时,必须用后有多个执行语句时,必须用 将多将多 个语句括起来,构成一个复合语句,而个语句括起来,构成一个复合语句,而 之外不必有分号。之外不必有分号。功能:功能:从多组语句中选择满足条件的语句组执行。从多组语句中选择满足条件的语句组执行。用用else if 实现多选择。实现多选择。3. 多选择的多选择的if结构结构语
8、句格式语句格式:if (条件条件1) 语句语句1;else if (条件条件2) 语句语句2;else if (条件条件3) 语句语句3;else if (条件条件m) 语句语句m;else 语句语句n; 语句语句1N条件条件1Y条件条件2条件条件mYY语句语句2语句语句3语句语句nNNelse if按分数统计学分,将分数分为五个分数段,按分数统计学分,将分数分为五个分数段,分别是:分别是:9090分以上、分以上、80809090、70708080、60607070、6060以下,对应的学分系数分别是:以下,对应的学分系数分别是:1.31.3、1.21.2、1.11.1、1 1、0 0。程序段
9、如下:。程序段如下:if (fs=90) xf=kcif (fs=90) xf=kc* *1.3;1.3;else if (fs=80) xf=kcelse if (fs=80) xf=kc* *1.2;1.2;else if (fs=70) xf=kcelse if (fs=70) xf=kc* *1.1;1.1;else if (fs=60) xf=kc;else if (fs=60) xf=kc;else xf=0.0;else xf=0.0;printf(printf(“xf=%fxf=%f”,xf);,xf);从键盘输入一个整数从键盘输入一个整数a a,按其值的大小分别输出,按其值的
10、大小分别输出a=a=1010;10a=10010a=100;100100a=a1000a1000main() int a; scanf(“%d”,&a); if (a10) printf(“%d=10n”,a); else if (a=100 ) printf(“10%d=100n”,a); else if( a1000) printf(“100%d1000n”,a);从四个条件从四个条件中选择一个中选择一个为真的执行为真的执行else语句组语句组测试用例测试用例? 说明:在说明:在if-elseif-else语句中,一般采用语句中,一般采用“缩缩进进”的书写形式来表示的书写形式来表示“语句语
11、句1”1”或或“语语句句2”2”所属的层次。所属的层次。 注意:缩进仅是一种注意:缩进仅是一种书写形式书写形式,不具有,不具有逻辑意义逻辑意义银行存款本金计算:银行存款本金计算:期满总金额期满总金额= 本钱本钱 +本钱本钱 月息月息 月数月数main( ) int year; float money,rate,total; /* 本金本金 月利率月利率 本利合计本利合计*/ printf(Input money and year =?); scanf(%f%d, &money, &year);/* 输入本金和年输入本金和年 */ if ( year = 1 ) rate=0.0063; /*
12、根据年限定利率根据年限定利率 */ else if ( year = 2 ) rate=0.0066; else if ( year = 3 ) rate=0.0069; else if ( year = 5 ) rate=0.0075; else if ( year = 8 ) rate=0.0084; else rate=0.0; total = money + money * rate *12 * year; printf( Total = %.2fn, total);二、二、 if语句的嵌套语句的嵌套格式:格式:if(表达式)(表达式) if( 表达式表达式1) 语句语句11; els
13、e 语句语句12; else if (表达式表达式2) 语句语句21; else 语句语句22;在在ifif语句的语句的“语句语句1”1”或或“语句语句2”2”中又包含着中又包含着ifif语句语句判断表达式的值,若为非判断表达式的值,若为非0,再判断,再判断表达式表达式1的的值,非值,非0执行语句执行语句11,否则执行语句,否则执行语句12若表达式的值为若表达式的值为0,再判断,再判断表达式表达式2的值,非的值,非0执行语句执行语句21,否则执行语句,否则执行语句22功能功能:外if内嵌内嵌if下列程序段表示的数学式下列程序段表示的数学式? ? y y=-1;=-1; if (x!=0) if
14、 (x!=0) if (x0) y=2 if (x0) y=2* *sin(x)sin(x); ; else y=0; else y=0; 程序段表示的数学式程序段表示的数学式1:1: 0 ( 0 (x0) x0) 2sinx (x0)讨论讨论: :给第一个给第一个ifif行加行加 后后 表示的数学式?表示的数学式? 程序段表示的数学式程序段表示的数学式2:2: -1 ( -1 (x0) x0) 2sinx (x0)数学式数学式1 1程序可表示为程序可表示为: :y=-1;y=-1;if (x!=0)if (x!=0) if (x0) y=2if (x0) y=2* *sin(x);sin(x
15、); else y=0; else y=0; 分层次分层次比较两个整数之间的关系(大小、相等)比较两个整数之间的关系(大小、相等)main( ) int x, y; printf (Enter integer X and Y:); scanf (%d%d, &x, &y); if ( x != y ) if ( x y ) printf (XYn); else printf (Xb)if(ab) / /* *1 1 * */ / if(ac) if(ac) / /* *2 2 * */ / if(ad) flag=1; if(ad) flag=1; / /* *3 3 * */ / else
16、flag=2; else flag=2; / /* *4 4 * */ / else flag=3; else flag=3; / /* *5 5 * */ / 匹配规则:在嵌套的if-else语句中,else子句总是与上面的、离它最近的、且在同一复合语句中还没有配对的if子语配对。1 1、ifif (ab) (ab)ifif (ac) (ac) if (ad) flag=1; if (ad) flag=1; else flag=2; else flag=2;elseelse flag=3; flag=3; 当当 c ca ab b 时,时,flag=3flag=32 2、ifif (ab)(
17、ab) ifif (ac) (ac) if (ad) flag=1; if (ad) flag=1; else else flag=2;flag=2; / /* * 以上是一个完整的复合语句以上是一个完整的复合语句 * */ /else else flag=3;flag=3; 当当 a=b ab)?a:b 当当 a=9,b=5时,时,x=9要求有三个运算分量要求有三个运算分量不论条件是否成立,为同一个变量赋值不论条件是否成立,为同一个变量赋值if ( x0 ) y=-x;elsey=x;(x0)?y=-x:y=x;等价等价等价等价y = (x0) ? -x:x;说明:if else可以完成与条
18、件运算符( ? : )完全相同 的任务,并且可以进行 相应的转换。求一个数字的绝对值求一个数字的绝对值if ( y0 ) x=-y;elsex=y;(y0)?x=-y:x=y;等价等价等价等价x = (y=80)if (fs=80) switch (int)(fs/10)switch (int)(fs/10) case 8: n8+;break;case 8: n8+;break; case 9: n9+;break; case 9: n9+;break; case 10: n0+;break; case 10: n0+;break; default :printf( default :pri
19、ntf(“ errorn errorn”);); else n1+;else n1+; printf ( printf (“%d%d%d%dn%d%d%d%dn”,n1,n8,n9,n0);,n1,n8,n9,n0); 例:编写一个程序分别完成任意两个数的加减乘除计算。即求:d1 op d2 的值。加减乘除 main ( ) float d1, d2;char op; /* 定义操作数、操作符变量 */scanf (”%f%c%f”, &d1, &op, &d2); /* 输入表达式 */switchswitch ( op ) /* 根据操作符分别进行处理 */ case case + : /
20、* 处理加法 */ printf(%.2f+%.2f=%.2fn,d1,d2,d1+d2);break; case case - : /* 处理减法 */ printf (%.2f-%.2f=%.2fn,d1,d2,d1-d2);break; case case * : /* 处理乘法 */ printf (%.2f*%.2f=%.2fn,d1,d2,d1*d2);break; case case / :/* 处理除法 */ if ( d2=0 )/* 判断除数是否为0 */ printf (“Division by zero.n”); /* 0处理 */ else printf (%.2f/
21、%.2f=%.2fn,d1,d2,d1/d2); break; default default: /* 输入其它运算符 */ printf (Unknown operater.n); 提提 纲纲3.2.1 用用if语句设计选择结构程序语句设计选择结构程序3.2.2 用用switch语句设计多分支结构程语句设计多分支结构程序序3.2.3 goto语句语句3.2.4 应用应用举例举例goto语句格式语句格式 goto 语句标号语句标号 语句标号:语句标号: 功能:转向语句标号所标识的语句执行 int a;p: scanf(“%d”,&a); if (a60) goto p; printf(“%dn
22、”,a);提提 纲纲3.2.1 用用if语句设计选择结构程序语句设计选择结构程序3.2.2 用用switch语句设计多分支结构程语句设计多分支结构程序序3.2.3 goto语句语句3.2.4 应用应用举例举例 闰年:能够被闰年:能够被4 4整除且不能被整除且不能被100100整除的年份整除的年份 或或 能够被能够被400400整除的年份整除的年份 例如:例如:19961996年是闰年年是闰年 19001900年是平年年是平年 20002000年是闰年年是闰年 判断闰年的判断闰年的C C语言公式语言公式year%4=0 & year%100!=0 | year%400=0year%4=0 & y
23、ear%100!=0 | year%400=0 当当year=1996year=1996时,结果为时,结果为1 1 当当year=1997year=1997时,结果为时,结果为0 0 当当year=1900year=1900时,结果为时,结果为0 0 当当year=2000year=2000时,结果为时,结果为1 1 若为闰年:结果为若为闰年:结果为1若为平年:结果为若为平年:结果为0如何处理大月、小月、如何处理大月、小月、平月?如何判断闰年?平月?如何判断闰年? 输入年, 月,计算该月有多少天?Main()Main() int year,month,days; int year,month,days; printf( printf(“Enter year&monthn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江宁波逸东豪生大酒店招聘1人备考题库含答案详解(基础题)
- 2026湖南娄底市冷水江市事业单位引进高层次和急需紧缺人才22人备考题库及完整答案详解1套
- 2026年江苏省丰县选聘“名校优才”招聘18人备考题库含答案详解(突破训练)
- 2026广东广州市房地产测绘院有限公司第一批次招聘4人备考题库附答案详解(满分必刷)
- 北京全路通信信号研究设计院集团有限公司2026届校园招聘备考题库及答案详解(新)
- 2026年江苏省丰县选聘“名校优才”招聘18人备考题库及参考答案详解
- 2026北京昌平区教委所属事业单位第一次招聘教师97人备考题库附答案详解(黄金题型)
- 2026福建泉州丰泽区城东街道社区卫生服务中心编外工作人员招聘备考题库及答案详解(真题汇编)
- 矿山安全生产管理实施手册
- 网络安全防护与漏洞扫描技术手册
- 国网课件培训
- 2025译林版高中英语新教材必修第一册单词表默写(汉英互译)
- SolidWorks软件介绍讲解
- 交换机的工作原理
- 2025年针灸简答题试题及答案
- 防电信诈骗家长会课件
- 以综合材料赋能小学美术课堂:创新教学与实践探索
- 2025年高考真题-化学(湖南卷) 含答案
- 社区管理常识题库及答案
- 妇科急腹症的急救与护理
- 基于异丁烯制备甲基丙烯酸甲酯【MMA】方法的五万吨年产量生产工艺设计16000字【论文】
评论
0/150
提交评论