选择(分支)结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014-3-10 Hongyan Nan,HPU 13
例 输入两个数并判断其相等否 #include <stdio.h> main() { int a,b; printf("Input integer a:"); scanf("%d",&a); printf("Input integer b:"); scanf("%d",&b); if(a==b) printf("a==b\n"); else printf("a!=b\n"); }
2014-3-10 Hongyan Nan,HPU 4
例4.1
#include <stdio.h> main() 运行结果: { 1,0 char c='k'; 1,1 0,0 int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5); }
2014-3-10 Hongyan Nan,HPU
expr1
0
else index=0;
12
例4.5 编写程序判别键盘输入字符的类别 #include <stdio.h> main() ASCII码表中,<32的为控制字符, { 48~57间为0~9,65~90间为A~Z, char c; 97~122间为a~z,其余为其他字符 printf("input a character:"); 用多分支选择判断 c=getchar(); if(c<32) printf("This is a control character\n"); 运行: else if(c>=48&&c<=57) input a character:g↙ printf("This is a digit\n"); This is a small letter else if(c>=65&&c<=90) printf("This is a capital letter\n"); else if(c>=97&&c<=122) printf("This is a small letter\n"); else printf("This is an other character\n"); }
2014-3-10 Hongyan Nan,HPU 6
例4.2
#include <stdio.h> main() 运行结果: { 0,0 char c='k'; 1,0 0,1 int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",!x*!y,!!!x); printf("%d,%d\n",x||(i=5)&&j-3,i<j&&x<y); printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k); }
}}
else y=2.000000 max=y;
2014-3-10
Hongyan Nan,HPU
8
例 求一个数的绝对值 #include <stdio.h> 运行: main() Input an integer:-12 { integer:-12-->absolute value:12 int x,y; printf("Input an integer:"); scanf("%d",&x); y=x; if(y<0) y=-y; printf("\ninteger:%d--->absolute value:%d\n",x,y); }
2014-3-10
Hongyan Nan,HPU
7
4.3 if语句及其构成的选择结构
0 if 语句的三种形式 例 4.3 输入一个数,如果为正数,求其平方根并输出, exp 则:例否则,输出该数。 4.3 程序可改为 形式一: if(exp) 非0 #include <stdio.h> #include <stdio.h> statement statement #include <math.h> #include <math.h> 执行过程: main() main() 注意: { float x,y; exp可为表达式、常量或变量,且须加() { 例 if(x>y) printf("input one float x,y; 形式二: if(exp) number:"); 例 %d",x); if(5) printf(" 0 非0 scanf(" % f",&x); printf("input one number:"); exp statement1 printf("%d",1); if (x>0)%f",&x); scanf(" else y=sqrt(x); 又例statement1 if(b) statement2 y=x; statement2 else if(x>0) printf("%d",!b); y=x; y=sqrt(x); 执行过程: 例 运行: if(x>y) input one number:4↙ printf("y= % f",y); max=x; printf("y= % f",y); 注意:statement1、2可为简单或复合语句
运行: Input integer a:12 Input integer b:12 a==b 再运行: Input integer a:12 Input integer b:9 a!=b
2014-3-10 Hongyan Nan,HPU
输入a b c a>b 非0 a b对换 a>c 非0 a c对换 b>c 非0 b c对换 输出a b c 结束
10
0
0
0
例
下面程序的作用是什么? main() { char c; printf("Input :"); scanf("%c",&c); if(c>='a'&&c<='z') c=c-32; else c=c; printf("%c",c); } 将小写字母转换为大写字母
序
一:用关系表达式 或逻辑表达式;二:用 if语句或switch语句
在C语言中设计选择 结构程序,必须解决的两 个问题:一是如何表示条 件;二是用什么语句实现 选择结构
C语言中用1表示逻辑“真”,用0表示逻辑“假” 所有非零值按真处理,否则按假处理
2014-3-10 Hongyan Nan,HPU 3
2014-3-10
Hongyan Nan,HPU
9
开始
例4.4 输入a、b、c,从小到大顺序输出 #include <stdio.h> main() { float a,b,c,t; scanf("%f%f%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t;} /*对换a和b的值*/ if(a>c) 运行: { t=a; a=c; c=t;} 5.34.66.5↙ if(b>c) 4.60,5.30,6.50 { t=b; b=c; c=t;} printf("%5.2f,%5.2f,%5.2f\n",a,b,c); }
例
下面程序的运行结果是什么? main() {源自文库int x=2,y=-1,z=2; if(x<y) if(y<0) z=0; else z+=1; printf("%d\n",z); }
2
2014-3-10
Hongyan Nan,HPU
11
if语句的三种形式 0 非0 expr2 形式三: 0 非 0 if(exp1) expr3 statement1 非0 else if(exp2) 例 if(exp1) statement1 statement2 statement3 statementn statement2 if(exp2) 改例 if(exp1) ……statement1 例:if(salary>1000) { index=0.4; [else statementn] else if(exp2) else if(salary>800) statement1 执行过程: statement2 index=0.3; } else if(salary>600) 注意:else与if的配对原则:else总是与它上面的最近 else index=0.2; 的未配对的if配对 statement2 else if(salary>400) index=0.1; 实现if与else正确配对方法:加{ }
第4章 选择结构 程序设计
河南理工大学 南红艳
重点、难点
本章重点:
关系运算符和关系表达式
逻辑运算符和逻辑表达式 条件运算符和条件表达式
if语句的用法
switch语句的用法
本章难点:
if语句的嵌套 switch语句的用法
2014-3-10 Hongyan Nan,HPU 2
2014-3-10
Hongyan Nan,HPU
5
4.2 逻辑运算符和逻辑表达式
逻辑运算符 种类:!单目运算,右结合性、&&、||双目运算,左结合性 优先级:!高于&&高于|| 例 a=1;b=2;c=3;d=4;m=1;n=1; ! (m=a>b)&&(n=c>d); 运算结果:逻辑值1或0 结果:m= 0 n= 1 例 exp1 a<=x&&x<=b (a<=x)&&(x<=b) 算术运算符 逻辑表达式 逻辑运算符 exp2 逻辑运算的真值表 (a==b)||(x+y) 逻辑表达式的值:逻辑值 1 或 0 关系运算符 aa==b||x+y b !a !b a&&b a||b (!a)||(a>b) && 0 0 1 1 逻辑表达式的值也可以参与其他运算 非!a||a>b 0 非0 &&(and) 串联电路 , k1andk2 开,电路通 || !(!(!a)) 0 在C0 1 0 1 非!!!a 0 a<x<b 注意:数学的 语言中不能用 a&&b&&c (a&&b)&&c 并联电路 一个开 1 0 0 ,电路通 1 0 , k1ork2 赋值运算符 ||(or) 对于0 && 和非 ||,若左边的运算量能断定表达式的结 例 0 C 语言中: 0.5<x<0.8 0 开,!k 1关 1 结果为 0 0 0 !(not) 开关 ,k 果,则右边的运算量不被执行,即: 数学上:0.5<x<0.8 表述正确 exp1&&exp2:当exp1=1时,才计算exp2 可写为:x>0.5&&x<0.8 exp1||exp2:当exp1=0时,才计算exp2
4.1 关系运算符和关系表达式
关系运算符 种类:<、<=、==、>=、>、!=,双目运算,左结合性 优先级:<、<=、>=、>高于==、!= 运算结果:逻辑值1或0 例 a>b!=c 例 5>3 1 (a>b)!=c 关系运算的值可以参与其他运算 5<=3 0 a==b<c a==(b<c) 注意:用==或!=比较两个浮点数时会出错 '5'==5 0 a=b>c a=(b>c) intb=0.5; i=1, j=7,a; 例 又例 若a=0; x=0.3; 关系表达式 exp1关系运算符exp2 例 int a=3,b=2,c=1,d,f; 10 a=i+(j%4!=0); 则a<=x<=b 值为 0 5!=3 例 C语言中: 1.0/3.0*3.0==1.0 结果为 关系表达式的值:逻辑值1或0 表达式值1 a>b 则 a= 2 例 -i-5*j==k+1 (-i-5*j)==(k+1)表述正确 数学上:1.0/3.0*3.0==1.0 关系表达式的值也可以参与其他运算(a>b)==c 表达式值1 'a'+1<c+b ('a'+1)<(c+b) 可写为:fabs(1.0/3.0*3.0-1.0)<1e-6 表达式值0 b+c<a x=a!=c==d x=((a!=c)==d) d=1 d=a>b f=0 f=a>b>c
例 输入两个数并判断其相等否 #include <stdio.h> main() { int a,b; printf("Input integer a:"); scanf("%d",&a); printf("Input integer b:"); scanf("%d",&b); if(a==b) printf("a==b\n"); else printf("a!=b\n"); }
2014-3-10 Hongyan Nan,HPU 4
例4.1
#include <stdio.h> main() 运行结果: { 1,0 char c='k'; 1,1 0,0 int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5); }
2014-3-10 Hongyan Nan,HPU
expr1
0
else index=0;
12
例4.5 编写程序判别键盘输入字符的类别 #include <stdio.h> main() ASCII码表中,<32的为控制字符, { 48~57间为0~9,65~90间为A~Z, char c; 97~122间为a~z,其余为其他字符 printf("input a character:"); 用多分支选择判断 c=getchar(); if(c<32) printf("This is a control character\n"); 运行: else if(c>=48&&c<=57) input a character:g↙ printf("This is a digit\n"); This is a small letter else if(c>=65&&c<=90) printf("This is a capital letter\n"); else if(c>=97&&c<=122) printf("This is a small letter\n"); else printf("This is an other character\n"); }
2014-3-10 Hongyan Nan,HPU 6
例4.2
#include <stdio.h> main() 运行结果: { 0,0 char c='k'; 1,0 0,1 int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",!x*!y,!!!x); printf("%d,%d\n",x||(i=5)&&j-3,i<j&&x<y); printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k); }
}}
else y=2.000000 max=y;
2014-3-10
Hongyan Nan,HPU
8
例 求一个数的绝对值 #include <stdio.h> 运行: main() Input an integer:-12 { integer:-12-->absolute value:12 int x,y; printf("Input an integer:"); scanf("%d",&x); y=x; if(y<0) y=-y; printf("\ninteger:%d--->absolute value:%d\n",x,y); }
2014-3-10
Hongyan Nan,HPU
7
4.3 if语句及其构成的选择结构
0 if 语句的三种形式 例 4.3 输入一个数,如果为正数,求其平方根并输出, exp 则:例否则,输出该数。 4.3 程序可改为 形式一: if(exp) 非0 #include <stdio.h> #include <stdio.h> statement statement #include <math.h> #include <math.h> 执行过程: main() main() 注意: { float x,y; exp可为表达式、常量或变量,且须加() { 例 if(x>y) printf("input one float x,y; 形式二: if(exp) number:"); 例 %d",x); if(5) printf(" 0 非0 scanf(" % f",&x); printf("input one number:"); exp statement1 printf("%d",1); if (x>0)%f",&x); scanf(" else y=sqrt(x); 又例statement1 if(b) statement2 y=x; statement2 else if(x>0) printf("%d",!b); y=x; y=sqrt(x); 执行过程: 例 运行: if(x>y) input one number:4↙ printf("y= % f",y); max=x; printf("y= % f",y); 注意:statement1、2可为简单或复合语句
运行: Input integer a:12 Input integer b:12 a==b 再运行: Input integer a:12 Input integer b:9 a!=b
2014-3-10 Hongyan Nan,HPU
输入a b c a>b 非0 a b对换 a>c 非0 a c对换 b>c 非0 b c对换 输出a b c 结束
10
0
0
0
例
下面程序的作用是什么? main() { char c; printf("Input :"); scanf("%c",&c); if(c>='a'&&c<='z') c=c-32; else c=c; printf("%c",c); } 将小写字母转换为大写字母
序
一:用关系表达式 或逻辑表达式;二:用 if语句或switch语句
在C语言中设计选择 结构程序,必须解决的两 个问题:一是如何表示条 件;二是用什么语句实现 选择结构
C语言中用1表示逻辑“真”,用0表示逻辑“假” 所有非零值按真处理,否则按假处理
2014-3-10 Hongyan Nan,HPU 3
2014-3-10
Hongyan Nan,HPU
9
开始
例4.4 输入a、b、c,从小到大顺序输出 #include <stdio.h> main() { float a,b,c,t; scanf("%f%f%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t;} /*对换a和b的值*/ if(a>c) 运行: { t=a; a=c; c=t;} 5.34.66.5↙ if(b>c) 4.60,5.30,6.50 { t=b; b=c; c=t;} printf("%5.2f,%5.2f,%5.2f\n",a,b,c); }
例
下面程序的运行结果是什么? main() {源自文库int x=2,y=-1,z=2; if(x<y) if(y<0) z=0; else z+=1; printf("%d\n",z); }
2
2014-3-10
Hongyan Nan,HPU
11
if语句的三种形式 0 非0 expr2 形式三: 0 非 0 if(exp1) expr3 statement1 非0 else if(exp2) 例 if(exp1) statement1 statement2 statement3 statementn statement2 if(exp2) 改例 if(exp1) ……statement1 例:if(salary>1000) { index=0.4; [else statementn] else if(exp2) else if(salary>800) statement1 执行过程: statement2 index=0.3; } else if(salary>600) 注意:else与if的配对原则:else总是与它上面的最近 else index=0.2; 的未配对的if配对 statement2 else if(salary>400) index=0.1; 实现if与else正确配对方法:加{ }
第4章 选择结构 程序设计
河南理工大学 南红艳
重点、难点
本章重点:
关系运算符和关系表达式
逻辑运算符和逻辑表达式 条件运算符和条件表达式
if语句的用法
switch语句的用法
本章难点:
if语句的嵌套 switch语句的用法
2014-3-10 Hongyan Nan,HPU 2
2014-3-10
Hongyan Nan,HPU
5
4.2 逻辑运算符和逻辑表达式
逻辑运算符 种类:!单目运算,右结合性、&&、||双目运算,左结合性 优先级:!高于&&高于|| 例 a=1;b=2;c=3;d=4;m=1;n=1; ! (m=a>b)&&(n=c>d); 运算结果:逻辑值1或0 结果:m= 0 n= 1 例 exp1 a<=x&&x<=b (a<=x)&&(x<=b) 算术运算符 逻辑表达式 逻辑运算符 exp2 逻辑运算的真值表 (a==b)||(x+y) 逻辑表达式的值:逻辑值 1 或 0 关系运算符 aa==b||x+y b !a !b a&&b a||b (!a)||(a>b) && 0 0 1 1 逻辑表达式的值也可以参与其他运算 非!a||a>b 0 非0 &&(and) 串联电路 , k1andk2 开,电路通 || !(!(!a)) 0 在C0 1 0 1 非!!!a 0 a<x<b 注意:数学的 语言中不能用 a&&b&&c (a&&b)&&c 并联电路 一个开 1 0 0 ,电路通 1 0 , k1ork2 赋值运算符 ||(or) 对于0 && 和非 ||,若左边的运算量能断定表达式的结 例 0 C 语言中: 0.5<x<0.8 0 开,!k 1关 1 结果为 0 0 0 !(not) 开关 ,k 果,则右边的运算量不被执行,即: 数学上:0.5<x<0.8 表述正确 exp1&&exp2:当exp1=1时,才计算exp2 可写为:x>0.5&&x<0.8 exp1||exp2:当exp1=0时,才计算exp2
4.1 关系运算符和关系表达式
关系运算符 种类:<、<=、==、>=、>、!=,双目运算,左结合性 优先级:<、<=、>=、>高于==、!= 运算结果:逻辑值1或0 例 a>b!=c 例 5>3 1 (a>b)!=c 关系运算的值可以参与其他运算 5<=3 0 a==b<c a==(b<c) 注意:用==或!=比较两个浮点数时会出错 '5'==5 0 a=b>c a=(b>c) intb=0.5; i=1, j=7,a; 例 又例 若a=0; x=0.3; 关系表达式 exp1关系运算符exp2 例 int a=3,b=2,c=1,d,f; 10 a=i+(j%4!=0); 则a<=x<=b 值为 0 5!=3 例 C语言中: 1.0/3.0*3.0==1.0 结果为 关系表达式的值:逻辑值1或0 表达式值1 a>b 则 a= 2 例 -i-5*j==k+1 (-i-5*j)==(k+1)表述正确 数学上:1.0/3.0*3.0==1.0 关系表达式的值也可以参与其他运算(a>b)==c 表达式值1 'a'+1<c+b ('a'+1)<(c+b) 可写为:fabs(1.0/3.0*3.0-1.0)<1e-6 表达式值0 b+c<a x=a!=c==d x=((a!=c)==d) d=1 d=a>b f=0 f=a>b>c