《高级语言程序设计教学》第3章 选择结构_第1页
《高级语言程序设计教学》第3章 选择结构_第2页
《高级语言程序设计教学》第3章 选择结构_第3页
《高级语言程序设计教学》第3章 选择结构_第4页
《高级语言程序设计教学》第3章 选择结构_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章选择结构

C语言程序设计学习目标if语句switch语句关系运算与逻辑运算2编辑ppt3.1选择结构概述【例3-1】输入x的值,求分段函数y=f(x)的值,函数表示如下:

if(x>0) y=x*x;else

y=0; 3编辑ppt#include<stdio.h>voidmain(void){

intx,y;

printf("请输入x的值:");

scanf("%d",&x);

if(x>0) y=x*x;

else

y=0;

printf("y=%d\n",y); }请输入x的值:0y=0Pressanykeytocontinue选择结构4编辑ppt3.2关系运算与逻辑运算学习运算符应注意的问题功能运算量要求运算量个数(单目运算符?双目运算符?)要求运算量类型(整型?实型?其它类型?)优先级别(优先级高?优先级低?)结合方向(从左向右?从右向左?)结果的类型5编辑ppt3.2.1关系运算种类:<<===>=>!=结合方向——自左向右优先级别关系表达式的值是逻辑值"真"或"假",用1和0表示<<=>>===!=优先级7(高)优先级8(低)例

c>a+b a>b!=c a==b<c a=b>c例

inta=3,b=2,c=1,d,f; a>b (a>b)==c b+c<a d=a>b

f=a>b>c/*3>2,结果为1*//*1==1,结果为1*//*b+c=3,a=3,结果为0*//*a>b结果为1;d=1*//*f=0*/c>(a+b)(a>b)!=ca==(b<c)a=(b>c)6编辑ppt注意应避免对实数作相等或不等的判断注意区分"="与"=="inta=0,b=1;if(a=b) printf("aequaltob");elseprintf("anotequaltob");1.0/3.0*3.0==1.0结果为将x==a的判断修改为:|x-a|≤可改写为:fabs(1.0/3.0*3.0-1.0)<=1e-6//应该为a==b假7编辑ppt【例3-3】x是float型变量,判断x是否等于

1/3#include<stdio.h>#include<math.h>voidmain(void){ floatx; x=1/3.0; if(x==1/3.0) printf("x等于1/3\n"); else printf("x不等于1/3\n");}x不等于1/3x等于1/3(fabs(x-1/3.0)<=1e-6)?应避免对实数作相等或不等的判断8编辑ppt3.2.3逻辑运算种类:!&&||逻辑运算真值表C语言中,运算量:0

表示"假",非0

表示"真",

运算结果:0

表示"假",1

表示"真",aB!a!ba&&ba||b000非0非00非0非011001010100100119编辑ppt优先级

!→算术运算→关系运算→&&→||→赋值运算结合性!(1)&&(10)||(11)高低!:从右向左&&:从左向右||:从左向右例

a<=x&&x<=ba>b&&x>ya==b||x==y!a||a>b(a<=x)&&(x<=b)(a>b)&&(x>y)(a==b)||(x==y)(!a)||(a>b)例

a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0'c'&&'d'//值为0

//值为1//值为1//值为1//值为1//值为1//值为110编辑ppt问题在C语言中,能正确地表示数学关系0≤x≤5的表达式是:(A)x>=0&&x<=5(B)x>=0ANDx<=5(C)0<=x<=5(D)x>=0&x<=511编辑ppt短路特性逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例

a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例

a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例

a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=112编辑ppt【例3-2】逻辑运算举例#include<stdio.h>voidmain(void){

intc,x=0,y=-5; printf("%d,%d\n",!x*y,x&&y); x=1; y=1; c=x++||y++; printf("%d,%d,%d\n",x,y,c); x=0; y=0; c=x++&&y++; printf("%d,%d,%d\n",x,y,c);}-5,02,1,11,0,0如果表达式x++的逻辑值为1则不用再计算y++因此 c=1 x=x+1++x:先执行x=x+1,

再将x的值作为表达式++x的值。x++:先将x的值作为表达式x++的值,

再执行x=x+1。如果表达式x++的逻辑值为0则不用再计算y++因此 c=0 x=x+113编辑ppt【常用的条件判断表达式】(1)intx;判断x是偶数:

x%2==0;(2)charc;判断c是否为数字:

c>='0'&&c<='9'(3)charc;判断c是否为英文字母:

c>='A'&&c<='Z'||c>='a'&&c<='z'(4)floatx,y;或double

x,y;判断x==y:

fabs(x-y)<=1e-6;(5)floatx,y;或double

x,y;判断x!=y:

fabs(x-y)>1e-6;14编辑ppt3.3两个分支的if语句if~else~语句的基本形式格式

if(表达式)

语句1

else

语句2执行过程表达式语句1语句2TF15编辑ppt

说明:if后面的表达式类型任意语句可以是任意类型的语句,最好使用复合语句考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;scanf("%d,%d",&x,&y);if(x>y)x=y;y=x;elsex=x+1;y=y+1;printf("%d,%d\n",x,y);}CompileError!if(a==b&&x==y) printf("a=b,x=y");if(3) printf("OK");if(a=2) printf("%d",'a');errorC2181:illegalelsewithoutmatchingif16编辑ppt【例3-4】随机输入两个数,输出其中的大数#include<stdio.h>voidmain(void){inta,b;printf("inputtwonumbers:");scanf("%d%d",&a,&b);if(a>b)printf("%d

是最大数\n",a);elseprintf("%d

是最大数\n",b);}inputtwonumbers:033是最大数Pressanykeytocontinue17编辑ppt【例3-5】输入三角形的三边的边长,输出三角形的面积三角形面积公式18编辑ppt#include<stdio.h>#include<math.h>voidmain(void){

floata,b,c,p,s; printf("请输入三角形的三边:\n"); scanf("%f%f%f",&a,&b,&c); p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("area=%f\n",s);}三角形三边定理及推论:

三角形任意两边之和大于第三边,任意两边之差小于第三边。顺序结构19编辑ppt【例3-5】输入三角形的三边的边长,输出三角形的面积#include<stdio.h>#include<math.h>voidmain(void){

floata,b,c,p,s;printf("请输入三角形的三边:\n");scanf("%f%f%f",&a,&b,&c);if(a+b>c&&abs(a-b)<c){ p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("area=%f\n",s);}else printf("输入数据错误!\n");}请输入三角形的三边:345area=6.000000Pressanykeytocontinue请输入三角形的三边:123输入数据错误!Pressanykeytocontinue20编辑ppt3.4一个分支的语句if语句格式

if(表达式)

语句执行过程表达式语句TF21编辑ppt【例3-6】从键盘上随机的输入三个数,输出最大数10,62,313456722,23445676,323238

maxabcmaxmax22编辑ppt【例3-6】从键盘上随机的输入三个数,输出最大数#include<stdio.h>voidmain(void){inta,b,c,max;printf("输入三个数:");

scanf("%d%d%d",&a,&b,&c);

max=a;if(b>max)max=b;if(c>max)max=c;printf("%d是最大数\n",max);}输入三个数:3588是最大数Pressanykeytocontinue23编辑ppt【例3-7】从键盘上随机的输入三个数,从大到小输出三个数abcifa<babifa<cacifb<cbcabt=a;a=b;b=t;ABT24编辑ppt【例3-7】从键盘上随机的输入三个数,从大到小输出三个数#include<stdio.h>voidmain(void){inta,b,c,t;printf("输入三个数:");scanf("%d%d%d",&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("%d,%d,%d\n",a,b,c);}输入三个数:3577,5,3Pressanykeytocontinue25编辑ppt3.5多个分支的if语句if~elseif语句的形式

if(表达式1) 语句1

else

if(表达式2)

语句2

else

if(表达式3)

语句3

……

else

语句n执行过程表达式1语句1TF表达式2表达式3语句2语句3语句n……TFTF26编辑ppt【例3-8】从键盘上输入一个字符,判断该字符是数字、大写字母、小写字母或其它字符。ASCII码表

‘0’~‘9’为数字

‘A’~‘Z’为大写字母

‘a’~‘z’为小写字母‘0’≤c≤’9’48≤c≤57‘A’≤c≤’Z’65≤c≤90‘a’≤c≤’z’97≤c≤122c>='0'&&c<='9'c>='A'&&c<='Z'c>='a'&&c<='z'27编辑ppt【例3-8】从键盘上输入一个字符,判断该字符是数字、大写字母、小写字母或其它字符。#include<stdio.h>voidmain(void){charc;printf("请输入一个字符:");c=getchar();if(c>='0'&&c<='9')printf("%c是数字\n",c);elseif(c>='A'&&c<='Z')printf("%c是大写字母\n",c);elseif(c>='a'&&c<='z')printf("%c是小写字母\n",c);elseprintf("%c是其他字符\n",c);}请输入一个字符:bb是小写字母Pressanykeytocontinuescanf(“%c”,&c);28编辑ppt【例3-9】从键盘上输入学生的成绩,输出学生成绩的等级#include"stdio.h"voidmain(void){intscore;printf("请输入学生的成绩:");scanf("%d",&score);if(score>=90)printf("优秀\n");elseif(score>=80)printf("良好\n");elseif(score>=70)printf("中等\n");elseif(score>=60)printf("及格\n");elseprintf("不及格\n");}请输入学生的成绩:88良好Pressanykeytocontinueelseif(score<90&&score>=80)思考对于score>100和score<0的情况,可以认为是输入数据错误。那么程序将如何改写?29编辑ppt3.6if语句的嵌套在if语句中又包含一个或多个if语句,称为if语句嵌套一般形式if(表达式1)

if(表达式2)

语句1

else语句2else

if

(表达式3)语句3

else语句430编辑pptif..else配对原则当缺省{}时,else总是与

前面最近的未配对的

if配对if(exp1)if(exp2)statement1elsestatement2if(exp1)if(exp2)statement1elsestatement2if(exp1){if(exp2)statement1}elsestatement2

31编辑ppty=0;if(b!=0)if(a!=0)y=a/b;elseprintf("数据错误b=0!");y=0;if(b!=0){if(a!=0) y=a/b;}elseprintf("数据错误b=0!");y=0;if(b!=0)if(a!=0)y=a/b;elseprintf("数据错误b=0!");计算机理解为改写为【例】计算y=a/b的值32编辑ppt书写程序的缩进规则同一级别的语句要对齐else语句应与其配对的if语句垂直对齐。大括号放在单独的一行中,以表明其包含的语句是一个语句块。每行只放一条语句。33编辑ppt总结if语句的语法规则表达式必须用括号括起来通常是逻辑表达式或关系表达式,但也可以是其它任意表达式。非0即为真,0则为假else子句,必须与if配对使用语句可以为五种语句中的任何一种if(表达式)语句1

else语句234编辑pptIf语句常见的编程错误在不该出现分号的地方加了分号复合语句的花括号后不应再加分号,否则将会画蛇添足对于复合语句,忘记加花括号。if(x>y);

printf(xislargerthany.\n);if(b>a){

t=a;a=b;b=t;};推荐都使用复合语句{}35编辑ppt36if(表达式)语句1

else语句2if(表达式)语句if(表达式1) 语句1

else

if(表达式2)语句2

else

if(表达式3)语句3

……

else

语句nif语句格式小结两个分支一个分支多分支编辑ppt格式执行过程switch(表达式){caseE1:

语句组1;

caseE2:

语句组2;…….

caseEn:

语句组n;[default:

语句组n+1;]

}

3.7switch语句default子句可以省略不用switch表达式语句组1语句组2语句组n语句组n+1...E1E2Switch之后的语句defaultcaseEn37编辑ppt要每次只执行一个分支使用break语句switch(表达式){caseE1:

语句组1;[break;]

caseE2:

语句组2;[break;]…….

caseEn:

语句组n;[break;][default:

语句组n+1;[break;]]}

switch表达式语句组1语句组2语句组n语句组...E1E2Endefaultcase38编辑ppt注意switch语句的使用规则E1,E2,…En是整型或字符型的常量表达式,且值必须互不相同case语句起到标号的作用,必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句switch(score){case5:printf("Verygood!");case4:printf("Good!");case3:printf("Pass!");case2:printf("Fail!");default:printf("dataerror!");}score为5时,输出:Verygood!Good!Pass!Fail!dataerror!switch(score){case5:printf("Verygood!");break;case4:printf("Good!");break;case3:printf("Pass!");break;case2:printf("Fail!");break;default:printf("dataerror!");break;}score为5时,输出:Verygood!……case'A':case'B':case'C':printf("score>=60\n");break;……..39编辑ppt【例3-10】输入数字(1-7),输出对应的英文单词Monday…Sunday#include<stdio.h>voidmain(void){inta;printf("inputintegernumber(1-7):");scanf("%d",&a);

40编辑ppt

switch(a)

{

case

1:printf("Monday\n");

case

2:printf("Tuesday\n");

case

3:printf("Wednesday\n");

case

4:printf("Thursday\n");

case

5:printf("Friday\n");

case

6:printf("Saturday\n");

case

7:printf("Sunday\n"); default:printf("Error\n");}}inputintegernumber:5FridaySaturdaySundayErrorbreak;break;break;break;break;break;break;break;inputintegernumber:5Friday41编辑ppt【例3-11】计算器程序。用户输入两个运算数和一个四则运算符,输出计算结果#include<stdio.h>#include<math.h>voidmain(void){floata,b;charc;printf("输入表达式:运算数<运算符>运算数\n");scanf("%f%c%f",&a,&c,&b);

42编辑pptswitch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':if(fabs(b)<=1e-6) printf("数据错误,除数不能为0!\n");else printf("%f\n",a/b);

break;default:printf("运算符只能是+,-,*,/!\n");}}输入表达式:运算数<运算符>运算数3.5+5.69.100000输入表达式:运算数<运算符>运算数10%3运算符只能是+,-,*,/!输入表达式:运算数<运算符>运算数2.5/0数据错误,除数不能为0!输入表达式:运算数<运算符>运算数5/2.52.00000043编辑ppt【例3-12】从键盘上输入百分制的学生成绩,输出学生成绩的等级(优秀、良好、中等、及格、不及格)#include<stdio.h>voidmain(void){intscore;printf("请输入学生的成绩:");scanf("%d",&score);

/*利用switch语句判断并输出成绩的等级*/44编辑pptif(score>=0&&score<=100){switch(score){ casescore>=90:printf("优秀\n");break;casescore>=80:printf("良好\n");break;casescore>=70:printf("中等\n");break;casescore>=60:printf("及格\n");break;default:printf("不及格\n");break;}}elseprintf("数据错误!\n");}方案一:switch(表达式){caseE1:

语句组1;

caseE2:

语句组2;…….

caseEn:

语句组n;[default:

语句组n+1;]

}

45编辑pptswitch(score){ case100:

case99: case98: case97: case96: case95: case

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论