310 likes | 597 Views
第5讲 选择结构. 一、关系运算符和关系表达式 二、逻辑运算符和逻辑表达式 三、 if 语句 1、 if 语句的三种形式 2、 if 语句的嵌套 四、 switch 语句 五、条件运算符. 一、关系运算符和关系表达式. 关系运算符: < (小于) <= (小于等于) >= (大于等于) > (大于) == (等于) != (不等于). 运算顺序: 在关系运算符内部: < , <= , > , >= 优先级相同(6级) == , != 优先级相同(7级) 关系运算符的优先级低于算术运算符,但高于赋值运算符。
E N D
第5讲选择结构 一、关系运算符和关系表达式 二、逻辑运算符和逻辑表达式 三、if语句 1、if语句的三种形式 2、if语句的嵌套 四、switch语句 五、条件运算符
一、关系运算符和关系表达式 关系运算符:<(小于) <=(小于等于) >=(大于等于) >(大于) == (等于) !=(不等于) 运算顺序: • 在关系运算符内部: < , <= , > , >= 优先级相同(6级)== , != 优先级相同(7级) • 关系运算符的优先级低于算术运算符,但高于赋值运算符。 • 关系运算符为双目运算符,左结合性。
关系表达式:用关系运算符将两个表达式连接起来的式子。关系表达式:用关系运算符将两个表达式连接起来的式子。 关系表达式中的表达式可以为算术表达式,关系表达式,逻辑表达式,赋值表达式,字符表达式。 格式: <表达式> <关系运算符> <表达式> 例:a>b , a+b <=(b=6), a>b == m<n 关系表达式的返回值: • 关系表达式的返回值应为逻辑值"真"或"假"。 • 若关系表达式的值为真时,则用数值型数据1表示 • 若关系表达式的值为假时,则用0表示
例:关系表达式例子 • 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
高 低 二、逻辑运算符和逻辑表达式 类型 • 逻辑非! • 逻辑与&& • 逻辑或 || 运算顺序 非(!)→ 与( && )→ 或( || )
逻辑非! • 单目运算;运算级别 2;右结合性。 • 逻辑与&& 双目运算符;运算级别:11;左结合性。
关系运算 逻辑运算 赋值运算 算术运算 非 高 低 逻辑或 || • 双目运算符;运算级别:12;左结合性。 运算顺序: 在逻辑运算内部 :由高到低进行运算 混合运算:
逻辑表达式:用逻辑运算符把表达式连接起来的式子,它常用来表示复杂的关系。逻辑表达式:用逻辑运算符把表达式连接起来的式子,它常用来表示复杂的关系。 形式: [<表达式>]<逻辑运算符> <表达式> 例:1)数学表达式 -3<x<5 应写成:-3<x && x<5 2)a、b不能同时为零 应写成: a==0&&b!=0||a!=0&&b==0||a!=0&&b!=0
例:!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
三、if语句 • 1、if语句的三种形式 格式一:单分支结构if ( < 条件 > ) 语句A ; 格式二:双分支结构if ( < 条件 > ) 语句A ; else 语句B ; 格式三:多分支结构 • if (< 条件1 >) 语句1 ;else if (< 条件2 >) 语句2 ; ··· • else if (< 条件n-1 >)语句n-1 ; else 语句n ;
说明: 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)语句可以是单语句,也可以是复合语句。 注意:在复合语句 { } 外不需再加分号 。
例:键盘输入一个整数,输出该数的绝对值。 main () { int shu; printf("请输入一个整数%%d:\n"); scanf("%d", &shu ); if ( shu < 0 ) shu = -shu; printf(“该数的绝对值为: %d。\n", shu ); }
例 : 计算 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 ); }
例: 任意输入两个不相等的数,将大数放入X, 小数放入Y中。 算法: 1.定义变量 2.给变量赋初值 3.比较x、y, 若x<y, 交换两数 4.输出x、y 分析:两数比较,要么x>y, 直接输出;要么x<y,两数交换。
程序 : • 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 ); • }
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中的正数
为避免错误可用{ }将内嵌结构括起来以确定if与else的配对关系属内嵌范围。 说明: • 嵌套不允许交叉。 • else与if必须成对出现,且else总是与最近的一个未配对的if配对。
例 :读程序。 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
例:任意输入三个整数,找出其中最大的整数。例:任意输入三个整数,找出其中最大的整数。 Y N a>=b Y N Y N a>=c b>=c max=a max=c max=b max=c
程序 : • 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 ); • }
break语句 格式: break; 功能: 强迫终止程序的执行,即提前退出程序的执行。 用法: 只能用在switch语句和循环体中。 • 四、switch语句
switch语句 格式: switch(表达式) { case <常量表达式1> :语句1;[break;] case <常量表达式2> :语句2;[break;] …… case <常用表达式n-1> :语句n-1;[break;] default :语句n ;[ break;] }
switch语句执行过程: • 计算表达式的值。 • 判断:表达式的值与常量表达式的值是否相等。 • 执行: • 若表达式 == 常量表达式, • 则执行语句; • 若表达式 != 常量表达式, • 则执行default开始的(语句); • 若程序中无default开始的语句, • 则程序语句switch相当于一个空程序(语句)。
注意: 注意break语句的正确使用。 • 表达式及常数表达式(由常数、符号常量组成的表达式)必须为整型,故它们也可用字符表达式。 • case后的常数表达式的值不允许相同。
例:输入一个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。 输入错误!
例: 编程 计算 y 的值。
#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 ); }
例:任意输入两个数,和一个运算符(加、减、乘、除),要求输出它们的运算结果。例:任意输入两个数,和一个运算符(加、减、乘、除),要求输出它们的运算结果。
#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 ); • }
五、条件运算符 说明: 左图为条件表达式的流程图。 各表达式的类型可不同。 条件运算符( ? : ) 三目运算符,运算优先级为13,右结合性。 条件表达式:由条件运算符构成的表达式。 形式:< 表达式1 >?< 表达式2 >∶< 表达式3 >
例:读下列程序,写出运行结果。 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