资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
#include #include stdio.hstdio.h #include #include stdlib.hstdlib.h #define A 3#define A 3main()main() double double x,yx,y; ; scanf(%lf%lfscanf(%lf%lf, &x, &y);, &x, &y); printf(xprintf(x=%f, y=%f, x, y);=%f, y=%f, x, y); system(pausesystem(pause);); 1#include #include stdio.hstdio.h #include #include stdlib.hstdlib.h main()main() float float x,yx,y; ; scanf(%f,%fscanf(%f,%f, &, &x,&yx,&y);); printf(%fprintf(%f, , x+yx+y);); system(pausesystem(pause);); 2第五章第五章C C语言程序设计语言程序设计3本章要点:本章要点:正确使用关系表达式和逻辑表达式正确使用关系表达式和逻辑表达式掌握用掌握用ifif语句和语句和switchswitch语句实现选择结构语句实现选择结构掌握条件运算符的使用掌握条件运算符的使用4 选择语句是控制程序执行选择结构的语句选择语句是控制程序执行选择结构的语句 是程序实现逻辑判断的唯一形式是程序实现逻辑判断的唯一形式 根据学生分数判断是否及格根据学生分数判断是否及格 根据学生分数如何进行分级根据学生分数如何进行分级 一元二次方程求解一元二次方程求解自然语言:自然语言:如果如果 那么那么 否则否则C语言:语言:选择语句选择语句如何解决如何解决?为什么要用选择结构?为什么要用选择结构?55.5. 关系运算符和关系表达式关系运算符和关系表达式5.1.1 5.1.1 关系运算符关系运算符 1.1.关系运算符关系运算符 关系运算是进行比较大小的运算,并产生运算结果关系运算是进行比较大小的运算,并产生运算结果1 1(真)或(真)或 0 0(假)。(假)。语言中的关系运算符有种语言中的关系运算符有种: : 、! !优先次序:前种同级,高于后种(后种同级)优先次序:前种同级,高于后种(后种同级)关系运算符的结合性为从左到右;关系运算符的结合性为从左到右; 如:如:32 ab)(bb)(bc) 、ab ay xy 、s+fds+fd 关系表达式的值为逻辑值关系表达式的值为逻辑值“真真”或或“假假”. . 注意注意: : 语言没有逻辑型数据,语言没有逻辑型数据,关系表达式关系表达式的真、假的真、假 是以数值是以数值“”代表代表“真真”,以以“”代表代表“假假”。 例例 :设:设 a=3, b=2, c=1 a=3, b=2, c=1 ,求下列表达式的值?,求下列表达式的值? cb值为值为0(假)(假)(a-b)=1值为值为1(真)(真)(b+c)34 a的值为的值为07练练 习习1.1. 判断奇、偶数判断奇、偶数 设有变量定义设有变量定义 intint z; z; 分析分析z%2=0 z%2=0 的值?的值? 如果如果z z为偶数,则为偶数,则 z%2=0z%2=0的值为的值为1 1; 否则否则z z为奇数,则为奇数,则 z%2=0z%2=0的值为的值为0 0; 2. 2. 判断判断x x与与y y的某位数字是否相同的某位数字是否相同 x%10=y%10 x%10=y%10 判断个位数上数字相同判断个位数上数字相同x/10%10=y/10%10 x/10%10=y/10%10 判断十位数上数字相同判断十位数上数字相同85.2.1 5.2.1 逻辑运算符逻辑运算符 C C语言提供三种逻辑运算符:语言提供三种逻辑运算符: & (& (逻辑与逻辑与) ) 、 | (| (逻辑或逻辑或) ) 、! (! (逻辑非逻辑非) )说明说明: :(1 1)“&”&”和和“| ”| ”是是“双目(元)运算符双目(元)运算符”, ,它要它要求有两个操作数。求有两个操作数。(2 2)“! ”! ”是是“单目(元)运算符单目(元)运算符”,只要求有一个,只要求有一个运算量。运算量。(3 3)优先级次序:)优先级次序:! & | ! & | 5.25.2 逻辑运算符和逻辑运算符和逻辑表达式逻辑表达式 a&ba&b a a、b b均为真均为真, 则则a&ba&b为为1 1(真)。(真)。 a|ba|b a a、b b之一为真之一为真,则,则a|ba|b为为1 1(真)。(真)。 !a !a 若若a a为真为真, ,则则!a!a为假。为假。 9运算符的优先级运算符的优先级!(非)!(非) (高高)算术运算符算术运算符 关系运算符关系运算符& 和和 |赋值运算符赋值运算符 (低低)105.2.2 5.2.2 逻辑表达式逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子用逻辑运算符将关系表达式或逻辑量连接起来的式子. .规定:规定:判断一个逻辑量判断一个逻辑量( (常量或变量)为常量或变量)为“真、假真、假”的方法:的方法: “ “非非”代表代表“真真”,“”代表代表“假假” 例例 : 写出写出1x101x1&x1&x3&2|83&2|84!0!0 例例 :a+ba+b n+3n+3 例例 :(m=a(m=ab)&(nb)&(n= =c-dc-d) ) 若若a=3,b=2,c=6,d=5,n=8a=3,b=2,c=6,d=5,n=8 例例 :a|b|ca|b|c 如果如果a a为真,就不再判断为真,就不再判断b b和和c c了了 强调:在逻辑表达式的求解过程中强调:在逻辑表达式的求解过程中, ,只要能确定只要能确定表达式的值表达式的值, ,就不继续向下求解其他的值了就不继续向下求解其他的值了. .(a+b)(n+3)(53)&2|(8=0& =0& chch=9=a& =a& chch=z=A& =A& chch=Z=a& =a& chch=A& =A& chch=Z)b) x=a;if (ab) x=a;1. 单选择单选择if语句语句 语句句零零表达式表达式非零非零表达式表达式可以是关系式或逻辑式可以是关系式或逻辑式5.3 选择语句选择语句5.3.1 if 语句语句142. 双选择双选择if语句语句语句格式语句格式: :if (if (表达式表达式) ) 语句组语句组1; 1; else else 语句组语句组2;2;功能功能:计算表达式的值,当表达式值为计算表达式的值,当表达式值为非零时执行非零时执行语句组语句组1,否则执行否则执行语语句组句组2。APB非零非零零零15控制条件的几种形式:控制条件的几种形式: if(aif(a=0) k=1;=0) k=1; if(aif(a=0) k=1; =0) k=1; if(aif(a!=0) k=1;!=0) k=1; if(aif(a) k=1;) k=1; if(1) k=1; if(1) k=1;思考思考a取不同的值时,语句的执行情况?取不同的值时,语句的执行情况?提示:不要用提示:不要用“=“比较两个浮点数是否相等。比较两个浮点数是否相等。可使用如下方式:可使用如下方式:if(fabs(a-bif(fabs(a-b)1.e-6)1.e-6)fabs(xfabs(x) )是库函数(定义在是库函数(定义在math.hmath.h) ),表示求实型,表示求实型x x的的绝对值绝对值16有关有关if语句的说明语句的说明l 表达式后面不加分号表达式后面不加分号l 语句之后有分号语句之后有分号l else不是语句,不能单独使用不是语句,不能单独使用l 当当if后有多个执行语句时,必须用后有多个执行语句时,必须用 将多个语句将多个语句括起来,构成一个复合语句,括起来,构成一个复合语句, 之外不必有分号。之外不必有分号。17#include stdio.h main() int a,b,s; scanf(%d%d,&a,&b); s=a; if(ac; b=a=a; printf(a=%d,b=%d, ,a,b); if(c) printf(c=%d,c); 运行结果:运行结果:a=0,b=1,c=25例例2 219 指出下列程序的输出结果:指出下列程序的输出结果:#include stdio.hmain() int a; scanf(%d,&a); if (a50) printf(%d,a); if (a40) printf(%d,a); if (a30) printf(%d,a);程序运行程序运行: 输入输入58 输出输出? 输入输入33 输出?输出?例例3 320if(a=60) printf(“及格及格n”);else printf(“不及格不及格n”);main() int a; scanf(“%d”,&a); if (ab ) max=a; else max=b; printf(The max of a and b is : %dn, max);ab?max=bmax=a真真假假求求a a和和b b两数中较大的一个。两数中较大的一个。例例5 522#include stdio.h main( ) int a,b,t; printf(Input a and b:); scanf(%d%d,&a, &b); if ( ab ) t=a; a=b; b=t; printf(%d,%dn, a,b);按由小到大的顺序输出两个数。按由小到大的顺序输出两个数。例例6 6235.3.2 if语句的嵌套语句的嵌套格式:格式:if(表达式)表达式) if( 表达式表达式1) 语句语句11; else 语句语句12; else if (表达式表达式2) 语句语句21; else 语句语句22;在在ifif语句的语句的“语句语句1 1”或或“语句语句2 2”中又包含着中又包含着ifif语句语句判断表达式的值,若为非判断表达式的值,若为非0,再判断,再判断表达式表达式1的的值,非值,非0执行语句执行语句11,否则执行语句,否则执行语句12若表达式的值为若表达式的值为0,再判断,再判断表达式表达式2的值,非的值,非0执行语句执行语句21,否则执行语句,否则执行语句22功能功能:外if内嵌if24下列程序段表示的数学式下列程序段表示的数学式子子? ? y y=-1;=-1; if (x!=0) if (x!=0) if (x0) y=2* if (x0) y=2*sin(xsin(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=2*if (x0) y=2*sin(xsin(x);); else y=0; else y=0; 思考强调强调:ifif和和elseelse可成对出现,也可成对出现,也可不成对出现,每个可不成对出现,每个elseelse都与距都与距其最近的没有配对的其最近的没有配对的ifif配对。配对。25 if 语句的常用格式:语句的常用格式: if(表达式表达式1) 语句语句 1 else if(表达式表达式2) 语句语句 2 else if(表达式表达式3) 语句语句 3 else if(表达式表达式m) 语句语句 m else 语句语句 n仅仅执行表达式为真的执行表达式为真的else if后的内嵌语句后的内嵌语句,若所有的若所有的表达式值都为表达式值都为0,则执行最后一个则执行最后一个else后的内嵌语句后的内嵌语句.26 已知已知 编写程序,输入一个编写程序,输入一个x x的值,输出的值,输出y y值。值。程序为:程序为: #include stdio.h main( ) int x, y; scanf(%d,&x); if(x0) y=-1; else if(x= 0) y=0; else y=1; printf(x=%d, y=%dn, x, y); 例例7 727switchswitch语语句句 该语句为开关语句,适合解决多分支的情况。该语句为开关语句,适合解决多分支的情况。格式:格式:switch(switch(表达式)表达式) case case 常量表达式:语句常量表达式:语句序列序列; ; case case 常量表达式:语句常量表达式:语句序列序列; ; case case 常量表达式常量表达式n n: 语句序列语句序列n;n; default default :语句序列语句序列n+1;n+1; 说明说明:执行顺序如下:执行顺序如下:5.3.3 switch 语句语句问题问题: 为什么引出为什么引出switch语句?语句?可以是一条语句,也可可以是一条语句,也可以是多条语句。多条语以是多条语句。多条语句不必用括号括起来。句不必用括号括起来。起语句标号的作用,不进行条起语句标号的作用,不进行条件判断,在执行完某个件判断,在执行完某个 case后的语句序列后,将自动转移后的语句序列后,将自动转移到下一个到下一个case继续执行。继续执行。可以是整型、可以是整型、字符型。字符型。28 a. a. 计算表达式的值;计算表达式的值; b. b. 找到与表达式的值相同的找到与表达式的值相同的casecase常量表达式,执行该常量表达式,执行该casecase后边的语句序列,之后后边的语句序列,之后依次往下执行语句块依次往下执行语句块。表达式语句序列1语句序列2语句序列n语句序列n+1 29每个语句序列的最后一条语句后增加每个语句序列的最后一条语句后增加break语句,执行流程为:语句,执行流程为:表达式语句序列1语句序列n语句序列n+1语句序列230 根据考试成绩的等级打印出百分制分数段。根据考试成绩的等级打印出百分制分数段。采用多分支情况程序段:采用多分支情况程序段: switch( grade ) case A : printf(85100n) ; break; case B : printf(7084n); break; case C: printf(6069n); break; case D :printf(60n); break; default : printf(error ); 若若 grade= A时,输出结果为时,输出结果为? 当当 grade= B时,输出结果为?时,输出结果为?例例8 831流程图为:流程图为: grade输出 “85100”输出 “b ? a : bmax=ab ? a : b 若若 a=3, b=2, a=3, b=2, 则则 max=?max=?说明说明: (1) (1) 条件运算符优于赋值运算符条件运算符优于赋值运算符。 (2) (2) 条件运算符的结合方向为条件运算符的结合方向为“自自右右向向左左”。 如:如:当当a=1,b=2,c=3, d=4 a=1,b=2,c=3, d=4 时,时,表达式表达式 ab ? a : cd ? c : d , ab ? a : cd ? c : d , 值为:值为:? ? 如:如: 若若 x=1,y=0,a=3,b=-3x=1,y=0,a=3,b=-3 表达式表达式 (yx?a:b)&a+b (yx?a:b)&a+b 值为:值为:? 405.4 条件运算符条件运算符35(3) 条件表达式中的表达式的类型可以与表达式条件表达式中的表达式的类型可以与表达式和表达式的类型不同。条件表达式值的类型和表达式的类型不同。条件表达式值的类型为二者中较高的类型为二者中较高的类型。如:如: xy ? 1.2 : 6 , 当当xy成立时成立时条件表达式条件表达式的的值为值为1.2 ,否则为实型数据,否则为实型数据6.0。 c=xy ? 1 : s , 当当xy成立时成立时c=1, 否则否则c= s。36if ( y0 ) x=-y;elsex=y;(y0)?x=-y:x=y;等价等价等等价价x = (y=A& ch=Z)? (ch+32):ch; printf(%c, ch) 输入输入 输出输出 a例例9 938 main() /* 输入今天的日期,显示明天的日期。输入今天的日期,显示明天的日期。*/ int year,month,day; scanf(%d %d %d,&year,&month,&day); switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: if(day31) day=day+1; else if (month=12) year=year+1; month=1;day=1; else month=month+1;day=1;break; case 4: case 6: case 9: case 11: if(day30) day=day+1; else month=month+1;day=1;break; case 2: if(day28) day=day+1; else if(year%4=0&year%100!=0)|(year%400=0) if(day=29)month=month+1; day=1; else day=day+1; else if(day=28) month=month+1;day=1;break; default : printf(error!n); month=-1;break; if(month!=-1) printf(tomorrow is:%d %d %dn,year,month,day);39小小 结结ifif语句实现单分支语句实现单分支if-elseif-else语句实现两个分支语句实现两个分支switch-breakswitch-break语句实现多分支语句实现多分支嵌套嵌套ifif语句可以实现复杂的分支结构语句可以实现复杂的分支结构( (注意注意elseelse与最近的与最近的ifif结合结合) ) 40
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号