c语言程序设计第四章.ppt

上传人:max****ui 文档编号:6333978 上传时间:2020-02-23 格式:PPT 页数:49 大小:549.81KB
返回 下载 相关 举报
c语言程序设计第四章.ppt_第1页
第1页 / 共49页
c语言程序设计第四章.ppt_第2页
第2页 / 共49页
c语言程序设计第四章.ppt_第3页
第3页 / 共49页
点击查看更多>>
资源描述
第四章选择结构 4 1关系运算和逻辑运算 选择结构是程序基本控制结构之一 C语言中的选择结构包括三种条件语句 if语句switch语句条件表达式语句4 1 1C语言中的逻辑值判断逻辑值 非0值为真 0值为假 表达逻辑值 1 为真 0 为假 1 2关系运算符和关系表达式 六个关系运算符 算术运算关系运算赋值运算 2 关系表达式关系表达式的值只有两个 为真时值为1 为假值为0 例 4 1 3逻辑运算符和逻辑表达式 三种 与 或 非 其意义见真值表 4 1 3 1C语言中的逻辑运算符 a b当a b均为1时 才为1 a b当a b中有一个为1时 才为1 a当a为1 a为0 反之为1 由此看到 和 为双目运算符 为单目运算符 逻辑运算符运算规则 对象值为0 结果为1 优先级定义 2 和 低于关系运算符 高于算术运算符 1 非 优先于 与 优先于 即 例 a b x y c a b x y c 1 逻辑表达式的值与关系表达式值一样 真为1 假为0 例 a 4则 a值为0 此处只要a 0 为真 则 a值为0 a 4 b 5a b为1 前面已定义了逻辑表达式 以下看一看逻辑表达式的值及具体的运算 4 0 2为1 总之 在逻辑运算中 非0值参加逻辑运算时被看成1处理 a 4 b 5a b为1 a 4 b 5 a b为1 系统优化 exp1 exp2中 若exp1为1 不再计算exp2 直接得1 exp1 exp2中 若exp1为0 不再计算exp2 直接得0 2 一个逻辑表达式中的逻辑运算符并不是一定全部执行 如 a b c 则当a 0 假 时 b c不需判断 当a 1 b 0 则不需判c 又如 a b c 当a 1时 b c均不必判别 逻辑表达式举例 11 2 1if语句if语句的两种形式 形式一 if 表达式e 语句S1 功能 当表达式值非0时 执行语句A 否则不执行语句A 例如 if x y printf d x 形式1if 表达式 语句A 其流程图 形式2if 表达式e 语句Aelse语句B 功能 表达式为非0 执行语句A 表达式为0 执行语句B 例 if x y printf d x elseprintf d y 注 1 表达式e 可以是关系表达式 逻辑表达式 或任何类型表达式 其作用是控制整个语句的执行路线 语句S1和语句S2可以是任何类型的单个语句 包括空语句和复合语句 单个语句必须加 复合语句 外面不用加 例如 以下语句是允许的 if x 0 y x s x y else y x s 0 复合语句 复合语句 3 整个if语句 在语法上是一个语句 一个语句 例4 1分别用双目if语句和单目if语句求两个变量的最小值 解1 用双目if语句 程序如下 includevoidmain intx y min printf nInputxy scanf d d 如从键盘上输入 3489则输出结果 min 34 89 34 解2 用单目if语句 程序如下 includevoidmain intx y min printf nInputxy scanf d d 解3 进行变量交换 includevoidmain intx y t printf nInputxy scanf d d 例4 2 从键盘上输入一字符 判断它是否是英文字母 若是输出Y 否则输出N 解 include includevoidmain charc printf nInputachar c getch putchar n if A c 括号内不能写成 A c Z a c z 例4 3输入三个数 按大小顺序输出 main floata b c t scanf f f f if b c t b b c c t printf 5 2f 5 2f 5 2f a b c 运行情况如下 3 7 1 1 00 3 00 7 00 if语句的S1和S2可以是任何类型的语句 特别地 也可以是if语句 单目的或双目的 当语句S1和 或 语句S2又是if语句时 就构成了if语句的嵌套 注 嵌套式if语句中 每个else通常是同它前边最近的那个if相匹配 程序书写时注意层次关系 养成良好的习惯 if e1 if e2 else else 两层if语句的嵌套 4 2 2 if语句的嵌套 例4 4有一函数 y 1 x0 编一程序 输入一个x值 输出y值 有以下几种写法 请判断哪些是正确的 程序1 main intx y scanf d if x 0 y 1 elseif x 0 y 0 elsey 1 printf x d y d n x y 程序2 将上面程序的if语句改为 if x 0 if x 0 y 1 elsey 0 elsey 1 程序3 将上述if语句改为 y 0 if x 0 if x 0 y 1 elsey 1 程序4 y 0 if x 0 if x 0 y 1 elsey 1 例4 5对于已知的int型变量x值 计算并输出函数f x 值 f x 定义为 程序如下 main floatx f printf nInputfloatx x 0 例4 6 对已知int型的百分制成绩score 按以下算法计算并输出其相应的等级 score 90等级为A90 score 80等级为B80 score 60等级为Cscore 60等级为D 程序如下 includevoidmain intscore printf ninputscore scanf d if score 90 printf nA else if score 80 printf nB else if score 60 printf nC elseprintf nD 条件表达式语句等价于以下的if语句 if e1 e2 elsee3 4 3条件表达式构成的选择结构 C语言提供了一个简单的条件赋值语句或条件表达式 条件运算符为 三目运算符 功能 先判表达式1 若非0 则值为表达式2的值 否则为表达式3的值 一般形式 表达式1 表达式2 表达式3 max a b a b 当a b max a 否则max b 例4 7判断一个int型变量的值是否奇数 是则输出Odd 否则输出Even 程序如下 main intn printf nInputintn n scanf d 程序最后一个语句中printf的参数是条件表达式 其中n 2 1为表达式e1 nOdd 为表达式e2 nEven 为表达式e3 即 printf的参数为 nOdd 或 nEven 注 1 条件运算符优先于赋值运算符 例 max a b a b 可去掉 2 条件运算符低于关系运算符和算术运算符 例 max a b a b 1 max a b a b 1 并不是max a b a b 1 3 条件运算符结合性为从右至左 如 a b a c d c d相当于a b a c d c d 4 条件表达式不能取代一般的if语句 只有当if的两个分支为给同一变量赋值时才可替代if if a b printf d a elseprintf d b 由于printf 不是表达式 故不可用条件表达式 但可为 printf d a b a b 5 表达式1 表达式2 表达式3可类型不同 main charch scanf c ch ch A ch Z ch 32 ch printf c ch 例4 8输入一个字符 判别它是否大写字母 如果是 将它转换成小写字母 如果不是 不转换 然后输出最后得到的字符 运行结果如下 A a 4 4switch语句具有多目分支的switch语句又称为开关语句 其一般形式为 switch 表达式e case常量表达式1 语句段1break case常量表达式n 语句段nbreak default 语句段n 1 例4 9 根据成绩等级打印百分数段 switch grade case A printf 85 100 n case B printf 70 84 n case C printf 60 69 n case D printf 60 n default printf error n 根据表达式的取值 判断其与哪一个常量表达式相等 如 表达式i 则自语句i开始执行 直到语句n 1止 若与所有常量表达式值不相等 则从default后的语句开始执行 功能 switch 表达式 case常表1 语句1 break 一般形式改为 以上存在一个问题 没有完全起到分支作用 解决办法 增加break语句 使之跳出switch结构 case常表2 语句2 break case常表n 语句n break default 语句n 1 请大家修改以上例子 使之正确 注 1 常表值必须互不相等 否则二异性 2 case顺序无关紧要 3 不一定非用break不可 有时几种情况合并执行一组语句 例4 10switch grade case A case B case C printf 60 n break case D printf 60 n break 关于switch语句还有几点说明 1 switch case default是系统的关键字 它们仅出现在switch结构中 default及其后的语句段可以缺省 2 switch后的一对圆括号不能省 后面的一对大括号不能省 3 switch语句中的各常量表达式其值均为整型或字符型 这些表达式中不能含有变量或函数调用 如 不允许有score 80 score 90 switch后面圆括号中的表达式e其值通常为整型或字符型 4 系统执行switch结构中的某个语句段时 仅当遇到break语句时才结束并跳出switch语句 否则将顺序执行 4 5语句标号和goto语句 4 5 1语句标号语句标号不必特意定义 可以是任意合法的标识符 在标识符的后面加一个冒号就构成了标号 注 标号必须是标识符 可以和变量同名 通常用作goto语句的转向目标 在C语言中 可以在任何语句前加上语句标号 4 5 2goto语句称为无条件转向语句 格式 goto语句标号 功能 把程序的执行转向语句标号所在的位置 标号必须和goto语句在同一个函数内 4 5程序举例 例1写一程序 输入年号 判断是否为闰年 1 算法 根据闰年的判断条件 当年号能被4整除但不能被100整除时 它为闰年 当年号能被100整除又能被400整除时 它为闰年 设用变量year表示年号 leap为待置值变量 当year为闰年 leap 1 否则leap 0 2 流程图 leap 400 0 leap 1 leap 0 打印非闰年 打印是闰年 结束 leap 1 yes No yes No A 3 程序 main intyear leap scanf d elseleap 0 elseleap 1 elseleap 0 if leap printf dis year elseprintf disnot year printf aleapyear n 运行情况如下 2000 2000isaleapyear 1989 1989isnotaleapyear 上述条件也可用一个逻辑表达式表示 if year 4 0 例2 求ax2 bx c 0方程的解
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!