1 / 31

第5讲 选择结构

第5讲 选择结构. 一、关系运算符和关系表达式 二、逻辑运算符和逻辑表达式 三、 if 语句 1、 if 语句的三种形式 2、 if 语句的嵌套 四、 switch 语句 五、条件运算符. 一、关系运算符和关系表达式. 关系运算符: < (小于) <= (小于等于) >= (大于等于) > (大于) == (等于) != (不等于). 运算顺序: 在关系运算符内部: < , <= , > , >= 优先级相同(6级) == , != 优先级相同(7级) 关系运算符的优先级低于算术运算符,但高于赋值运算符。

cara
Download Presentation

第5讲 选择结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5讲选择结构 一、关系运算符和关系表达式 二、逻辑运算符和逻辑表达式 三、if语句 1、if语句的三种形式 2、if语句的嵌套 四、switch语句 五、条件运算符

  2. 一、关系运算符和关系表达式 关系运算符:<(小于) <=(小于等于) >=(大于等于) >(大于) == (等于) !=(不等于) 运算顺序: • 在关系运算符内部: < , <= , > , >= 优先级相同(6级)== , != 优先级相同(7级) • 关系运算符的优先级低于算术运算符,但高于赋值运算符。 • 关系运算符为双目运算符,左结合性。

  3. 关系表达式:用关系运算符将两个表达式连接起来的式子。关系表达式:用关系运算符将两个表达式连接起来的式子。 关系表达式中的表达式可以为算术表达式,关系表达式,逻辑表达式,赋值表达式,字符表达式。 格式: <表达式> <关系运算符> <表达式> 例:a>b , a+b <=(b=6), a>b == m<n 关系表达式的返回值: • 关系表达式的返回值应为逻辑值"真"或"假"。 • 若关系表达式的值为真时,则用数值型数据1表示 • 若关系表达式的值为假时,则用0表示

  4. 例:关系表达式例子 • a) int a,b,c; • a=5; • b=4; • c=(a>b); • printf(“%d”,c); 输出:1 • b) int a,b,c; • a=5; • b=4; • c=(a+1)==(b+3); • printf(“%d”,c); 输出:0

  5. 低 二、逻辑运算符和逻辑表达式 类型 • 逻辑非! • 逻辑与&& • 逻辑或 || 运算顺序 非(!)→ 与( && )→ 或( || )

  6. 逻辑非! • 单目运算;运算级别 2;右结合性。 • 逻辑与&& 双目运算符;运算级别:11;左结合性。

  7. 关系运算 逻辑运算 赋值运算 算术运算 非 高 低 逻辑或 || • 双目运算符;运算级别:12;左结合性。 运算顺序: 在逻辑运算内部 :由高到低进行运算 混合运算:

  8. 逻辑表达式:用逻辑运算符把表达式连接起来的式子,它常用来表示复杂的关系。逻辑表达式:用逻辑运算符把表达式连接起来的式子,它常用来表示复杂的关系。 形式: [<表达式>]<逻辑运算符> <表达式> 例:1)数学表达式 -3<x<5 应写成:-3<x && x<5 2)a、b不能同时为零 应写成: a==0&&b!=0||a!=0&&b==0||a!=0&&b!=0

  9. 例:!0; !5; 2 &&5; 0 &&5; 5 &&0; 2||5; 2||0; 0||5; 0||0; • 说明: • 逻辑表达式的值是逻辑量”真”和”假”。逻辑值“真”是用非零数值表示,“假”是用数字“0”表示的。 逻辑与(&&),a&&b只有a为真时才判断b的值。 • 逻辑或(||),a||b只有a为假时才判断b的值。 X=0&&y=1; x=1||y=2 例:判断闰年 闰年:年号能被4整除而不能被100整除;或者能被400整除; ( ) ( ) ( ) ( ) ( ) ( ) ( ) year%4 ==0 && year%100 !=0 || year%400 ==0

  10. 三、if语句 • 1、if语句的三种形式 格式一:单分支结构if ( < 条件 > ) 语句A ; 格式二:双分支结构if ( < 条件 > ) 语句A ; else 语句B ; 格式三:多分支结构 • if (< 条件1 >) 语句1 ;else if (< 条件2 >) 语句2 ; ··· • else if (< 条件n-1 >)语句n-1 ; else 语句n ;

  11. 说明: 1)条件均为逻辑表达式或关系表达式,也可以是任意的数值类型。 例:if (3) printf("O. K.\n"); if (‘q’) printf("%d\n",‘a’); if (3<x && x<=5) printf("3<x<=5\n" ); 2)else子句是if语句的一部分,它不能作为语句单独使用,必须与if配对使用。 3)语句可以是单语句,也可以是复合语句。 注意:在复合语句 { } 外不需再加分号 。

  12. 例:键盘输入一个整数,输出该数的绝对值。 main () { int shu; printf("请输入一个整数%%d:\n"); scanf("%d", &shu ); if ( shu < 0 ) shu = -shu; printf(“该数的绝对值为: %d。\n", shu ); }

  13. 例 : 计算 main ( ) { float x, y; printf("送数%%f:\ n"); scanf("%f", &x ); if ( x >= 0 ) y = 3*x+6; else y = -x*x+2*x-8; printf("y=%.2f\n", y ); }

  14. 例: 任意输入两个不相等的数,将大数放入X, 小数放入Y中。 算法: 1.定义变量 2.给变量赋初值 3.比较x、y, 若x<y, 交换两数 4.输出x、y 分析:两数比较,要么x>y, 直接输出;要么x<y,两数交换。

  15. 程序 : • main( ) • { int x, y, t; • printf("\n请输入两个整数%%d%%d:"); • scanf("%d%d", &x, &y ); • if ( x < y ) • { t=x; x=y; y=t; • } • printf(" \nx=%d, y=%d\n", x, y ); • }

  16. 2、if语句的嵌套 例2:if ( a>0 ) if ( b>0 ) printf("%d,%d\n", a, b); else printf("%d\n", a); else if ( b>0 ) printf("%d\n", b); else printf("\n"); 在if语句中又包含有一个或多个if语句称为if语句的嵌套。 例1:if ( a>0 ) if ( b>0 ) printf("%d,%d\n", a, b); 如果a,b都是正数,则输出a,b 输出a,b中的正数

  17. 为避免错误可用{ }将内嵌结构括起来以确定if与else的配对关系属内嵌范围。 说明: • 嵌套不允许交叉。 • else与if必须成对出现,且else总是与最近的一个未配对的if配对。

  18. 例 :读程序。 main( ) { int a=2, b=1, c=2; if (a) { if (b<0) c=0; } else c++ ; printf("%d\n",c); } • main( ) • { int a=2, b=1, c=2; • if (a) • if ( b<0 ) c=0; • else c++ ; • printf("%d\n",c); • } 程序运行结果: 2 程序运行结果: 3

  19. 例:任意输入三个整数,找出其中最大的整数。例:任意输入三个整数,找出其中最大的整数。 Y N a>=b Y N Y N a>=c b>=c max=a max=c max=b max=c

  20. 程序 : • main( ) • { int a, b, c, max ; • printf (”请输入三个整数:%%d%%d%%d\n”); • scanf( "%d%d%d", &a, &b, &c ); • if ( a>=b ) • if ( a>=c ) max=a; • else max=c; • else • if ( b>=c ) max=b; • else max=c; • printf (”\n最大数为:%d\n”,max ); • }

  21. break语句 格式: break; 功能: 强迫终止程序的执行,即提前退出程序的执行。 用法: 只能用在switch语句和循环体中。 • 四、switch语句

  22. switch语句 格式: switch(表达式) { case <常量表达式1> :语句1;[break;] case <常量表达式2> :语句2;[break;] …… case <常用表达式n-1> :语句n-1;[break;] default :语句n ;[ break;] }

  23. switch语句执行过程: • 计算表达式的值。 • 判断:表达式的值与常量表达式的值是否相等。 • 执行: • 若表达式 == 常量表达式, • 则执行语句; • 若表达式 != 常量表达式, • 则执行default开始的(语句); • 若程序中无default开始的语句, • 则程序语句switch相当于一个空程序(语句)。

  24. 注意: 注意break语句的正确使用。 • 表达式及常数表达式(由常数、符号常量组成的表达式)必须为整型,故它们也可用字符表达式。 • case后的常数表达式的值不允许相同。

  25. 例:输入一个0~2的数。 • main( ) • { int x; • printf("请输入一个0—2的整数:" ); • scanf("%d", &x); • switch ( x ) • { case 0 : printf("输入0。\n"); • case 1 : printf("输入1。\n"); • case 2 : printf("输入2。\n"); • default : printf("输入错误!\n" ); • } • } 程序运行结果: 请输入一个0—2的整数:1 ↙ 输入1。 输入2。 输入错误!

  26. 例: 编程 计算 y 的值。

  27. #include "math.h" main ( ) { float x , y ; int m ; printf( "请输入 0~5 之间的数%%f\n" ); scanf( "%f", &x ) ; m = floor( x ); switch ( m ) { case 0 : y = 0; break; case 1 : y = 3*x+5; break; case 2 : y = 2*sin( x )-1; break; case 3 : y = log( 1+x*x ); break; case 4 : y = log10( x*x-2*x )+5 ; break; default : printf ("数据输入错误 ! \n" ); } printf("y = %.2f\n", y ); }

  28. 例:任意输入两个数,和一个运算符(加、减、乘、除),要求输出它们的运算结果。例:任意输入两个数,和一个运算符(加、减、乘、除),要求输出它们的运算结果。

  29. #include "stdio.h" • main ( ) • { float shu1, shu2, jieg; • char yunsf; • printf(”请输入运算符 + - * /:\n”); • yunsf = getchar ( ); • printf(”请输入两个数 %%f%%f\n”); • scanf("%f%f", &shu1, &shu2 ); • switch ( yunsf ) • { case '+' : jieg = shu1 + shu2 ; break; • case '-' : jieg = shu1 - shu2 ; break; • case '*' : jieg = shu1 * shu2 ; break; • case '/' : jieg = shu1 / shu2 ; break; • default : printf( " 运算符输入错误 !\n" ); • } • printf("jieg = %.2f \n", jieg ); • }

  30. 五、条件运算符 说明: 左图为条件表达式的流程图。 各表达式的类型可不同。 条件运算符( ? : ) 三目运算符,运算优先级为13,右结合性。 条件表达式:由条件运算符构成的表达式。 形式:< 表达式1 >?< 表达式2 >∶< 表达式3 >

  31. 例:读下列程序,写出运行结果。 main ( ) { int a=1, b=1, c=1; a += b; b += c; c += a; printf("(1)%d\n", a>b?a:b ); printf("(2)%d\n", a>c?a--:c++); (a>=b>=c)? printf("a\n"):printf("b\n"); printf("(4)%d, %d, %d\n", a, b, c ); } 程序运行结果: (1)2 (2)3 b (4)2, 2, 4

More Related