第四章 选择结构
主 要 内 容1. 关系、逻辑、条件运算符和表达式
2. if语句3. 程序举例
switch 语句
第四章 选择结构
关系运算 > >= <
对两个运算量之间的大小比较 <= = = != 结合性:从左向右 假 0 z=x<y;
关系表达式: int x=2, y=3,z; 注意:
值:真 1 z=x==y;
(1)字符数据的比较按照ASCII码值进行。 z= a > A
(2)与数学上的关系式有区别:例:5>2>7>8的值为0 1<=x<=2 不表示x在[1,2]区间.
第四章 选择结构
逻辑运算优 先 级
值
真 1
假 0 假 亦真
! (逻辑非) 双 目 &&(逻辑与) ||(逻辑或)
两者全真 才为真 一个为真 就是真
例:z=5&&7;
z=9>2&&7<5- !0;
注意: (1)在逻辑运算中,非0值参加逻辑运算时被看成1处理 例: z=!5;(2) &&表达式中,一端值为0,则不用计算另一端, 表达式的值肯定为0 例:z=7<2&&8-5; (3) ||表达式中,一端为非0,则不用计算另一端,
表达式的值肯定为1 例:z=7>2||2<0;
第四章 选择结构
条件运算 e1?e2:e3
? :
结合性从右至左
若e1为真(非0),表达式的值为e2的值, 若e1为假,为e3的值
例: min=a<b?a:b
x>3?6:0.2
第四章 选择结构
if语句
形式1 P N B if(表达式) 语句A 例: if(x>y)
Y A
printf("%d", x);else printf(" %d", y);
else语句B 形式2 if(表达式)
Y
P
N
语句体Aelse 语句体B
例: if(x>y) printf("%d", x);
A
第四章 选择结构
if(表达式) 语句体A else 语句体B
if(x>y) {
x=(x+2)*6;printf("%d", x);
if(x>y) printf("%d", x); else printf("%d", y);
} else { y=y+4; printf(" %d", y); }
第四章 选择结构
if语句的嵌套 一般形式
if (表达式1)if(表达式) 语句体A if (表达式2) 语句1 内嵌if
else语句体B else
else 语句2if (表达式3) 语句3 else 语句4
内嵌if
第四章 选择结构
1. 注意: if (表达式)中,表达式可以是逻辑、关系和算术表达式。 2. 若语句不止一条,则必须用{ }括起来。在{ }外不用分号.不加{ }时, 语句体到第一个分号处结束。 3. else不能单独使用,与最近的if 配对,可加{ } 来改变配对关系。
#include<stdio.h> int main( ) { int x=2,y=1; if(x>y) x=x+2; printf("x=%d\n", x); else y=y+2; printf("y=%d\n", y); }
第四章 选择结构
程序举例 1、输入2个数a,b,要求按由小到大的顺序输出。#include<stdio.h> int main( ) #include<stdio.h>
int main( ){float a,b,t; scanf("%f,%f",&a,&b); if(a>b) printf ("%f,%f\n",b,a); else printf("%f,%f\n",a,b); }
{float a,b,t;scanf("%f,%f",&a,&b);
if(a>b) {t=a; a=b; b=t; }printf("%f,%f\n",a,b); }
第四章 选择结构
2、输入3个数a,b,c, 要求按由小到大的顺序输出。#include<stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) {t=a; a=b; b=t; } if(a>c) {t=a; a=c; c=t; } if(b>c) {t=b; b=c; c=t; } printf("%f,%f,%f\n",a,b,c); }
第四章 选择结构
3、有一函数:
–1 y= 0 1 (x<0) (x=0) (x>0) #include <stdio.h> int main ( ) { int x, y; scanf("%d", &x); if (x<0) y= –1; if (x= =0) y=0; if (x>0) y=1; printf ("y=%d\n", y); }
编一程序,
输入一个x值,输出y值。
第四章 选择结构
3、有一函数:–1 y= 0 1 (x<0) (x=0) (x>0)
#include <stdio.h> main ( ) { int x, y; scanf("%d", &x); if (x<0) y= –1; else
编一程序,
输入一个x值,输出y值。
if (x= =0) y=0; else y=1; printf ("y=%d\n", y); }
第四章 选择结构
switch语句
多路分支选择switch(表达式) { case 常量表达式1: case 常量表达式2: … case 常量表达式n: default : } 语句1; 语句2; 语句n; 语句n+1;
执行:
计算条件表达式 没有匹配的case 执行default
以条件表达式值相同的case为入口 执行后面的各语句
第四章 选择结构
在执行switch结构时,当执行完某case 后的语句后,将顺序执 行后面case 后的语句。
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”);
grade= A ;
85~100 70~84 60~69 <60 errorgrade= F ; error
default: printf(“error\n”); }
第四章 选择结构
break语句 无条件终止所在语句的执行,即跳出当前语句。switch(grade) { case A :printf(“85~100\n”); break; case B :printf(“70~84\n”); break; case C :printf(“60~69\n”); break; case D :printf(“<60\n”); break; default: printf(“error\n”); } 85~100 85~100 grade= A ;
70~84
第四章 选择结构
注意:(1)case常量表达式必须是整型或字符型。
(2)同一个switch结构中的常量表达式值必须互不相同。
(3)在switch结构中,case 与 default 的顺序可以任意, 各case之间的顺序也可以任意。
第四章 选择结构
程序举例
1、写程序,判断某一年是否是闰年。 能被4整除而不能被100整除,或者能被400整除的年份
#include <stdio.h> void main( ) { int year; scanf("%d",&year); if(year%4==0&&year%100!=0||year%400==0) printf("\n%d年是闰年",year);
elseprintf("\n%d年不是闰年",year); }
第四章 选择结构
2、运输公司对用户计算运费.路程越远,每吨每千米的运费越低。 标准如下: s<250 250≤s<500 500≤s<1000 1000≤ s<2000 2000≤ s<3000 3000≤ s 每吨每千米的基本运费p 折扣为d 没有折扣
2%折扣5%折扣
8%折扣10%折扣 15%折扣 货物重量w 总运费f 运输距离s f=p*s*w*(1-d);
第四章 选择结构
#include"stdio.h" void main( ) {float p,s,w,d,f; scanf("p=%f,s=%f,w=%f",&p,&s,&w); if(s<250) if(s>=250&&s<500) if(s>=500&&s<1000) if(s>=1000&&s<2000) if(s>=2000&&s<3000) if(s>=3000) f=p*s*w*(1-d); printf("f=%f\n",f); } d=0.0; d=0.02; d=0.05; d=0.08; d=0.10; d=0.15;
第四章 选择结构
主 要 内 容1. 关系、逻辑、条件运算符和表达式
2. if语句3. 程序举例
switch 语句
第四章
选择结构
上 机 作 业P112 4、 6、 8