资源预览内容
第1页 / 共106页
第2页 / 共106页
第3页 / 共106页
第4页 / 共106页
第5页 / 共106页
第6页 / 共106页
第7页 / 共106页
第8页 / 共106页
第9页 / 共106页
第10页 / 共106页
亲,该文档总共106页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2019/1/27,1,第3章 程序控制结构,2019/1/27,2,内容:,关系运算和逻辑运算 条件控制语句及条件表达式 多分支控制语句 循环语句while,dowhile,for 自增、自减运算 逗号运算符和逗号表达式 break和continue语句,重点:,选择结构程序设计 循环结构程序设计,2019/1/27,3,解决步骤图示:,需要选择结构描述,示例1:A,B两个整数,如果A大于B,则输出A,否则输出B。,2019/1/27,4,选择结构需要解决的两个问题,控制选择结构执行方向的条件表示 一般用关系表达式,逻辑表达式来描述条件 控制结构的结构描述,N,Y,2019/1/27,5,关系运算符 优先级,用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式,其值为0或1。,关系运算符和关系表达式,从左向右,结合性:,2019/1/27,6,示例: 8=4 其值为“假”,表达式的值为0。 50 其值为“真”,表达式的值为1。 思考:x=1与x=1意义相同吗?,注意:关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。,2019/1/27,7,逻辑运算符和逻辑表达式,逻辑运算符 优先级,2019/1/27,8,真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假,a b ! a ! b a&b a|b,逻辑运算符和逻辑表达式(续),2019/1/27,9,逻辑表达式的值是一个逻辑量“真”或“假”。C语言编译系统在给出逻辑结果时,以数值1代表“真”,以0代表“假” 在判断一个量是否为“真”时,以非0代表“真”,以0代表“假”。 例如: 若x = 10, 则 !x的值为0。 若a = 3, b = 2, 则a&b的值为1。 5 & 0 |8的值为1。,逻辑运算符和逻辑表达式(续),2019/1/27,10,结合性,从左向右,例如: 5 3 & 4 | 8 4 的结果为 1,2019/1/27,11,特点 在逻辑表达式的求解中并不是所有的运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行下一个运算符。 例如:已知a=3,b=0,c=2,则执行下列表达式后a,b,c分别是多少? a & b & (c=4),2019/1/27,12,!(非) 算术运算符 关系运算符 & | 赋值运算符,各种运算符优先级,例如: xc 等效于(!a) & (bc),2019/1/27,13,练习1:,能正确表示x大于等于10或x小于等于0的逻辑表达式是: 能正确表示x大于等于0且小于等于10的逻辑表达式是:,X=10 | X=0,X=0 & X=10,2019/1/27,14,能正确判断变量x中的字符是英文字母的表达式是:,(X=a & X=A & X=Z),?,2019/1/27,15,if 选择结构,必要时,注意 使用复合语句。,2019/1/27,16,#include int main(void) int a,b,max; scanf(“%d,%d“, ,示例: 求两个整数中较大的数,int a , b , max,键盘输入a,b值,amax,maxb,1,0,bmax,输出max值,if (表达式) 语句,2019/1/27,17,#include int main(void) int a,b,max; scanf(“%d,%d“, ,示例: 求两个整数中较大的数,int a , b , max,键盘输入a,b值,ab,1,0,amax,输出max值,if (表达式) 语句1 else 语句2,bmax,2019/1/27,18,if-else形式的执行流程,if-else 形式结构:if (表达式) 语句1; else 语句2;,2019/1/27,19,#include int main(void) int a,b,max; scanf(“%d,%d“, ,示例: 求两个整数中较大的数,可以通过条件表达式来完成赋值,max=ab?a:b;,2019/1/27,20,条件运算符 ?: 条件表达式的形式: 表达式1?表达式2:表达式3 计算过程:先计算表达式1,若其值为非零,则结果为表达式2的值,否则就是表达式3的值。,条件运算符和条件表达式,2019/1/27,21,示例2:根据如下描述的算法,编程。,#include int main(void) float a,b ; scanf(“%f,%f“, ,必须用复合语句,定义变量,键盘输入两个实数,ab,1,0,a,b互换,依次输出a,b的值,t,2019/1/27,22,练习:阅读下列源程序,写出运行结果,#include int main(void) int a=4,b=3,c=3,t=0; if(a=c) t=a;a=c;c=t; printf(“%d %d %dn”,a,b,c); return 0; ,结果: 3 0 3,2019/1/27,23,示例3:求ax2+bx+c=0的实根(要求:a,b,c的值从键盘输入,a不等于0),#include #include void main( ) int a,b,c; float d,x1,x2; scanf(“%d%d%d”, ,思考:若改为求两个根,应如何修改源程序?,2019/1/27,24,-1 (x0) 请编写程序,输入一个x值,输出对应的y值。,if (x0) y=-1; else if (x=0) y=0; else y=1;,变量定义,由键盘输入x值,X0,1,0,y=-1,X=0,1,0,y=0,y=1,输出x,y值,2019/1/27,25,else-if形式结构 : if (表达式1) 语句1; else if (表达式2) 语句2; else 语句n+1;,else-if形式的执行流程,2019/1/27,26,p63 3.1 输入三角形的三边a,b,c,判断a,b,c,能否构成三角形,何种类型的三角形:等腰、等边、直角、等腰直角、一般。,#include #include void main() float a,b,c; printf(“请输入三角形边长:n“); scanf(“%f%f%f“,if(a-b=c)|(b-c=a)|(c-a=b) printf(“不能够成三角形n“); else if (a*a+b*b=c*c)|(b*b+c*c=a*a)|(c*c+a*a=b*b) if (a=b)|(b=c)|(c=a) printf(“等腰直角三角形n“); else printf(“直角三角形n“); else if (a=b) ,2019/1/27,27,示例5:请仔细检查下列程序:,#include void main( ) intx,y; scanf(“%d”,x); if x1 y=x; else (1=x10) y=2x-1; y=3x-11; printf(“%d”,y); ,2019/1/27,28,在一个if语句中又包含了另 一个if语句,称为if语句的 嵌套。,一般形式为: if ( ) if ( ) 语句1; else 语句2; else if ( ) 语句3; else 语句4;,C语言规定, else总是和它 上面离它最近 的if配对。,if 语句的嵌套,2019/1/27,29,程序段1,程序段2,在if子句中嵌套,在else子句中嵌套,if (x=0) if (x0) y=-1; else y=0; else y=1;,if (x0) y=-1; else if (x=0) y=0; else y=1;,-1 (x0) 请编写程序,输入一个x值,输出对应的y值。,2019/1/27,30,#include #include void main() /*已知三角形的三边,计算其面积*/ int a,b,c; float s; double re; scanf(“%d,%d,%d“, ,示例7,2019/1/27,31,复习小结:,关系运算符和关系表达式、逻辑运算符和逻辑表达式; 条件表达式; if语句,if-else形式: if (表达式) 语句1; else 语句2;,if形式: if (表达式) 语句;,else-if形式 if (表达式1) 语句1; else if (表达式2) 语句2; else 语句n;,2019/1/27,32,示例8:从键盘输入一个整数放在a中,当输入的值为1时,显示A,输入2时显示B,输入3时显示C,当输入其他整数时显示D。,2019/1/27,33,多分支控制语句(switch语句),switch语句是实现多分支 选择结构的另一个语句。,switch (表达式) case 常量表达式1:语句1;break; case 常量表达式n:语句n;break; default :语句n+1; ,switch语句的 基本格式,各常量表达式的值必须互不相同,且必须是整型或字符型。,2019/1/27,34,示例:阅读下列源程序,请写出运行结果,#include void main() int j; scanf ( “%d ” , ,输入1 结果 111 输入2 结果 ? 输入3 结果 ?,2019/1/27,35,示例:源程序:,#include void main( ) int a; scanf(“%d”, ,2019/1/27,36,示例: 将1至7中的任意一个数字转化成对应的英文星期几的前三个字母,如1转化为Mon,7转化为Sun等。,#include void main() int a; printf(“请输入整数: “); scanf(“%d“,/*输入的不是0至7的整数时执行*/ ,2019/1/27,37,示例7:用公式f=p*w*s*(1-d) 计算运输费。,吨公里运价,运输距离,折扣,货重,s250(公里) d=0 250s500 d=0.02 500s1000 d=0.05 1000s2000 d=0.08 2000s3000 d=0.10 3000s d=0.15,switch (表达式) case 常量表达式1:语句1;break; case 常量表达式n:语句n;break; default :语句n+1; ,示例,2019/1/27,38,用if语句、else-if语句完成上述例题, 并做对比。,?,要根据运输距离计算折扣d,关键 是要构造switch后的表达式,根据 题目,选择 c=s/250 来求c的值。 if (s=3000) c=12; else c=s/250;,程序中当c的值为2,3时, d的值都是0.05,则这两 个case语句可以共同使用 一个语句。,分析,说明,2019/1/27,39,源程序:,#include void main() int c,s; float f,p,w,d; scanf(“%f,%f,%d”, case 4:,case 5: case 6: case 7: d=0.08; break; case 8: cas
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号