《分支结构的C程序设计.ppt》由会员分享,可在线阅读,更多相关《分支结构的C程序设计.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第四章 分支结构的C 程序设计 4.1 分支结构中的表达式 4.2 if 语句 4.3 switch 语句 4.4 程序举例 24.1 分支结构中的表达式 C 语言的逻辑值 关系表达式(,=,=,=,!=)关系表达式 关系表达式的运算结果(1,0)逻辑表达式(&,|,!)3if(表达式)语句图 4.1 if 语句执行过程 if 语 句 if 语句的简单形式 4例 4.1 打印出不及格的成绩。5if(表达式)语句1 else 语句2 图 4.2 ifelse 语句执行过程 4.2.2 ifelse 结构6例 4.2 打印成绩60分为“Pass”,否则为“Fail”。解 我们可以使用两种方法编程
2、:方法一:用两个简单的if 语句实现:main()float score;scanf(%f,&score);if(score=60.0)printf(score=%5.1f-Passn,score);例 4.27 运行:50 score=50.0-Fail 再次运行:80 score=80.0-Pass 在 第 二 个if 语 句 中,if(score=60.0)是 不 能 缺 少 的,否则不管score 是否小于60,都将打印出第二行的结果。main()float score;scanf(%f,&score);if(score=60.0)printf(score=%5.1f-Passn,sc
3、ore);8方法二:用ifelse 语句实现:main()float score;scanf(%f,&score);if(score60.0)printf(score=%5.1f-Failn,score);else printf(score=%5.1f-Passn,score);运行:50score=50.0-Fail 再次运行:80score=80.0-Pass 92.条件运算符的使用 当ifelse 结 构 中 的 语 句 是 表 达 式 语 句 时,就 可 以 使 用 条 件 运 算 符“?:”了,即下列ifelse 语句:if(表达式1)表达式2;else 表达式3;用条件运算符写成通
4、用形式即为 表达式1?表达式2:表达式3这 是 一 个 条 件 表 达 式,其 功 能 是:当 表 达 式1的 值 为 真(非 零)时,整 个 条件 表 达 式 的 值 就 取 表 达 式2的 值;当 表 达 式1的 值 为 假(零)时,整 个 条 件表达式的值就取表达式3的值。10如下列语句段:x=10;if(x9)y=100;else y=200;可以写成:x=10;y=x9?100:200;11例 4.3 输入x的值,当x0 时调用sqrt(x),否则调用sqrt(-x)。include include main()float x,y;scanf(%f,&x);y=x0?sqrt(x):
5、sqrt(-x);printf(x=%f,y=%fn,x,y);运行:9.0 x=9.000000,y=3.000000再次运行:-9.0 x=-9.000000,y=3.000000 12例 4.4 打印a,b 两个数中大者。方法一:用ifelse 结构实现:main()int a,b;scanf(%d,%d,&a,&b);if(ab)printf(max=%dn,a);else printf(max=%dn,b);方法二:用条件运算符实现:main()int a,b;scanf(%d,%d,&a,&b);printf(max=%dn,ab?a:b);13 例 4.5 输 入 一 个 学 生
6、 成 绩,当 成 绩90时,打 印“Very Good”;当80 成 绩 90时,打 印“Good”;当60 成 绩 80时,打印“Pass”;当成绩60分,打印“Fail”。main()float score;scanf(%f,&score);if(score=80)if(score=90)printf(Very Goodn);else printf(Goodn);else if(score=60)printf(Passn);else printf(Failn);3.if 语句的嵌套14运行:85 Good 例如语句段:if(x)if(y)printf(A);else printf();其
7、中else 语 句 是 与if(y)相 匹 配。如 果 与if(x)相匹配,则if(y)子句必须加花括号写成:if(x)if(y)printf(A);else printf(B);15 else if 结构的形式如下:if(表达式1)语句1 else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式n)语句n else 语句 n+1 4.2.3 else if 结构(多个分支)16图 else if 结构执行过程4.317例 4.6 将例4.5用else if 结构来实现。main()float score;scanf(%f,&score);if(score=9
8、0)printf(Very Goodn);else if(score=80)printf(Goodn);else if(score=60)printf(Passn);else printf(Failn);运行:58 Fail 18 说明:(1)在else if 结 构 中,if 语 句else if 语 句else 语 句 属于 同 一 程 序 模 块。程 序 每 运 行 一 次,仅 有 一 个 分 支 的 语 句能得到执行。(2)各 个 表 达 式 所 表 示 的 条 件 必 须 是 互 相 排 除 的,也 就是 说,只 有 条 件1(表 达 式1)不 满 足 时 才 会 判 断 条 件2,
9、只 有条 件2也 不 满 足 时 才 会 判 断 条 件3,其 余 依 次 类 推,只 有 所有条件都不满足时才执行最后的else 语句。19例4.6 的程序也可写成:main()float score;scanf(%f,&score);if(score60)printf(Failn);else if(score80)printf(Passn);else if(score90)printf(Goodn);else printf(Very Goodn);20错误的写法:main()float score;scanf(%f,&score);if(score=60)printf(Passn);els
10、e if(score=80)printf(Goodn);*无用*/else printf(Very Goodn);/*无用*/21switch(表达式)case 常量1:语句段1 case 常量2:语句段2 default:语句段n 4.3 switch 语句22 switch 语句的执行过程:switch 语 句 先 计 算 表 达 式 的 值,然 后 同 多 个case 语 句 后的 常 量 比 较,找 到 相 等 的case 常 量 则 执 行 该 常 量 冒 号 后 的 语句 段,并 从 这 个 入 口 一 直 执 行 下 面 所 有 冒 号 后 的 语 句,直到switch 语 句
11、结 束。如 果 执 行 一 个 或 几 个 冒 号 后 的 语 句 就 要跳 出switch 语 句,则 可 以 在 跳 出 处 使 用break 语 句。如 果switch 语 句 后 表 达 式 的 值 找 不 到 匹 配 的case 常 量,就 执 行default 后 面 的 语 句 段 直 到 结 束。default 是 任 选 项,如 果 没 有该语句,则在所有配对都失败时,什么也不执行。23计算表达式的值语句段1语句段2语句段3语句段n常量1常量2常量3常量n24例4.7-1 一日三餐void main()int now;printf(现在什么时间?n,&now);printf(
12、1-早上n,&now);printf(2-中午n,&now);printf(3-下午n,&now);scanf(%d,&now);switch(now)case 1:printf(吃早饭);case 2:printf(吃午饭);case 3:printf(吃晚饭);default:printf(睡觉);现在什么时间?1-早上2-中午3-下午2吃午饭吃晚饭睡觉现在什么时间?1-早上2-中午3-下午-1213睡觉25计算表达式的值语句段1语句段2语句段3语句段n常量1常量2常量3常量nbreak;下一语句break;26例4.7-2 一日三餐void main()int now;printf(现在
13、什么时间?n,&now);printf(1-早上n,&now);printf(2-中午n,&now);printf(3-下午n,&now);scanf(%d,&now);switch(now)case 1:printf(吃早饭);case 2:printf(吃午饭);break;case 3:printf(吃晚饭);default:printf(睡觉);现在什么时间?1-早上2-中午3-下午1吃早饭吃午饭现在什么时间?1-早上2-中午3-下午-1213睡觉现在什么时间?1-早上2-中午3-下午2吃午饭27计算表达式的值语句段1语句段2语句段3语句段n常量1常量2常量3常量nbreak;下一语句
14、break;break;break;28例4.7-3 一日三餐void main()int now;printf(现在什么时间?n,&now);printf(1-早上n,&now);printf(2-中午n,&now);printf(3-下午n,&now);scanf(%d,&now);switch(now)default:printf(睡觉);break;case 1:printf(吃早饭);break;case 2:printf(吃午饭);break;case 3:printf(吃晚饭);break;现在什么时间?1-早上2-中午3-下午2吃午饭现在什么时间?1-早上2-中午3-下午3吃晚
15、饭29例 4.7 在显示器上显示一个菜单程序的模型。include void dummy();int main()char ch;printf(1-please input a recordn);printf(2-list all recordsn);printf(3-delete a recordn);printf(4-modify a recordn);printf(nPlease input your choise:n);ch=getche();printf(n);switch(ch)case 1:printf(1-Input a recordn);dummy();case 2:prin
16、tf(2-List all recordsn);dummy();case 3:printf(3-Delete a recordn);dummy();case 4:printf(4-Modify a recordn);dummy();default:printf(%c-Error input!n,ch);dummy();return 0;301-please input a record2-list all records3-delete a record4-modify a recordPlease input your choise:11-Input a record2-List all r
17、ecords3-Delete a record4-Modify a record1-Error input!314.4 程序举例 例 4.8 编 写 一 个 可 由 用 户 键 入 简 单 表 达 式 的 程 序,形式如下:number operator number 该程序要计算该表达式并以两位小数显示结果。我们要识别的运算符operator 为加、减、乘、除。32#include int main()float value1,value2;char op;printf(Input your expression:n);scanf(%f%c%f,&value1,&op,&value2);if(op=+)printf(%.2fn,value1+value2);else if(op=-)printf(%.2fn,value1-value2);else if(op=*)printf(%.2fn,value1*value2);else if(op=/)if(fabs(value2)1e-6)printf(Division by zero.n);elseprintf(%.2fn,value1/value2);else printf(Unknown operator.n);return 0;