c第4讲选择结构_第1页
c第4讲选择结构_第2页
c第4讲选择结构_第3页
c第4讲选择结构_第4页
c第4讲选择结构_第5页
已阅读5页,还剩32页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第四讲

第四章选择结构程序设计

选择结构

选择结构实现一——

if语句

选择结构实现二——

elseif语句

选择结构实现三——

if语句的嵌套

关系表达式和逻辑表达式x>0?YESNO真假if-else选择结构#include”stdio.h”voidmain(){intx;

scanf(“%d”,&x);if(x>0)printf(“x=%d,YES”,x);elseprintf(“x=%d,NO”,x);}

选择结构

算法图示流程图N-S图x>0真YES假NO条件根据条件是否为真而选择执行不同的程序块x>0?程序块(1)程序块(2)真假If-else选择结构main(){intx;

scanf(“%d”,&x);if(x>0){真---执行的程序块(1)}else{假---执行的程序块(2)}}

选择结构

算法图示流程图N-S图x>0真YES假NO条件根据条件是否为真而选择执行不同的程序块复合语句关系表达式

关系运算符及其优先级<<=(小于)>(小于等于)>=

(大于)==(大于等于)!=(等于)(不等于)同级同级高低

关系表达式a>b-1!=c+3

各种运算符的优先级

关系表达式的结果(t=5)==3算术关系赋值是整数值:0或10:假1:真例若a=5,b=7,计算表达式的值b>(a=4)+1451c=a<b(c实型)11.0c1.0(1)(2)(2)(1)逻辑表达式

逻辑运算符||&&(逻辑与)!(逻辑或)

(逻辑非)

逻辑表达式

各种运算符的优先级

逻辑表达式的值是整数值:0或10:假1:真条件表达式的值非0:真0:假例若a=3,b=4,c=5,计算表达式的值!a||b+c&&b–c9-111a+b>c&&b==c!(x=a)&&(y=b)低高非关系与算术赋值或0运算符优先级与结合性优先级运算符名称要求运算对象的个数结合方向1::作用域解析符从左至右2[]()点运算符下标运算符圆括号从左至右3!~++---(类型)*&sizeofnew逻辑非运算符按位取反运算符自增运算符自减运算符负号运算符类型转换运算符地址运算符地址与运算符sizeof运算符动态分配内存运算符1(单目运算符)从左至右4*/%乘法运算符除法运算符求模运算符2(双目运算符)从左至右5+-加法运算符减法运算符2(双目运算符)从左至右运算符优先级与结合性优先级运算符名称要求运算对象的个数结合方向6>><<左移运算符右移运算符2(双目运算符)从左至右7<、<=、>、>=关系运算符2(双目运算符)从左至右8==!=等于运算符不等于运算符2(双目运算符)从左至右9&按位与运算符2(双目运算符)从左至右10^按位异或运算符2(双目运算符)从左至右11|按位或运算符2(双目运算符)从左至右12&&逻辑与运算符2(双目运算符)从左至右13||逻辑或运算符2(双目运算符)从左至右14?:条件运算符3(三目运算符)从右至左运算符优先级与结合性优先级运算符名称要求运算对象的个数结合方向6>><<左移运算符右移运算符2(双目运算符)从左至右7<、<=、>、>=关系运算符2(双目运算符)从左至右8==!=等于运算符不等于运算符2(双目运算符)从左至右9&按位与运算符2(双目运算符)从左至右10^按位异或运算符2(双目运算符)从左至右11|按位或运算符2(双目运算符)从左至右12&&逻辑与运算符2(双目运算符)从左至右13||逻辑或运算符2(双目运算符)从左至右14?:条件运算符3(三目运算符)从右至左15=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=赋值运算符2(双目运算符)从右至左16,逗号运算符从左至右if语句if语句的格式if(表达式)if子句elseelse子句

执行过程表达式为真?if子句真假else子句if(x>0)printf(“\nx=%d,YES”,x);elseprintf(“\nx=%d,NO”,x);if(x>0){printf(“\nx=%d”,x);else{printf(“\nx=%d”,x);printf(“YES”);}printf(“NO”);}非0:真

0:假退出if子句或else子句包含多个语句,就要用{、}括起来表达式为真?真if子句假else子句例1判断一个数能否被3整除,若能被3整除,计算该数的立方,并打印yes,否则,计算该数的平方,并打印no。main(){intx,pf,lf;printf(“\nPleaseinputx:”);scanf(“%d”,&x);if(x%3==0){lf=x*x*x;printf(“x=%d,yes\nlf=%d”,x,lf);}else{pf=x*x;printf(“x=%d,no\npf=%d”,x,pf);}}x%3==0真计算x3假计算x2输入x输出输出结束举例if语句

省略else的选择结构if(表达式)if子句

执行过程表达式为真?if子句真假退出例2写出程序的运行结果main(){inta,b,s;if(a<b)s=b;s*=s;printf(“%d\n”,s);s=a;}abs343416

scanf(“%d,%d”,&a,&b);3,4

169,3

8139981表达式为真?真if子句假例3比较a、b、c三个数的大小,将最大的数放在a中。main(){inta,b,c,d;if(a<b)printf(“Theresultis:”);printf(“a,b,c=%d,%d,%d\n”,a,b,c);scanf(“%d,%d,%d”,&a,&b,&c);}

printf(“\nPleaseinputa,b,c:”);{d=a;a=b;b=d;}a<b?真a、b交换假输入a、b、c输出aa<c?真a、c交换假结束举例if(a<c){d=a;a=c;c=d;}elseif语句elseif语句if(e1)If块1elseif(e2)

if块2elseif(e3)If块3elseelse

块4

执行过程e1为真?A真假退出e2为真?e3为真?真真B假C假DABCDe1为真?真A假e2为真?真B假e3真?真C假D例4读程序写运行结果main(){floata;intm;scanf(“%f”,&a);if(a<30)m=1;elseif(a<40)m=2;elseif(a<50)m=3;elsem=4;printf(“a=%4.1f,m=%d\n”,a,m);}36.3

a=36.3,m=290

a=90.0,m=440

a=40.0,m=316.7

a=16.7,m=1举例main(){floatx,y;printf(“\nInputx:”);scanf(“%f”,&x);if(x<0)elseif(x<10)elseprintf(“x=%5.2f,y=%5.2f”,x,y);}x<0真y=x假x<10真y=x-1假y=x+1y=x;y=x-1;y=x+1;举例例5编写程序计算表达式的值:If语句的嵌套if语句嵌套的格式if(e1)else

块2

块4内嵌if

执行过程e1为真?e2为真?真真

块1假块2假内嵌if退出退出分清if的层次

if子句else子句if(e2)else

块1if(e3)

块3else内嵌ifelse总是与上面最近的if配对例6下面的程序要计算函数的值,判断哪个程序正确.if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;x100-9-1在if子句中嵌套具有else子句的if语句,不会发生语法错误y=-1;if(x!=0)if(x>0)y=1;elsey=0;x10-1-90y=-1;if(x!=0)if(x>0)y=1;elsey=0;{}x100-9-1在if子句中嵌套没有else子句的if语句,内嵌的if语句要用{、}括起来.y40y40y40举例ADECBe12345Switch-case多分支选择结构多出口控制:Switch-case多分支选择结构switch语句switch(表达式){case常量表达式1:语句1case常量表达式2:语句2……case常量表达式n:语句ndefault:语句n+1}语句体整型类型相同零个或一个以上的语句

执行过程计算表达式的值

该值等于某常量表达式的值?执行该常量表达式后各语句是执行default后各语句不是退出例8写出下面程序的运行结果。main(){intg;scanf(“%d”,&g);switch(g/10){case10:case9:printf(“A\n”);case8:printf(“B\n”);case7:printf(“C\n”);case6:printf(“D\n”);default:printf(“E\n”);}}main(){intg;scanf(“%d”,&g);printf(“g=%d”,g);switch(g/10){case10:case9:printf(“A\n”);break;case8:printf(“B\n”);break;case7:printf(“C\n”);break;default:printf(“E\n”);}}100

g=100BCDE45

100

g=45g=10078

g=7845

g=45AEA跳出switch语句体CE举例printf(“g=%d”,g);case6:printf(“D\n”);break;第一次实验作业(6周周四提交)

顺序结构作业:P43:3,4顺序结构实验:p43:5,7,8选择结构作业:P62:2,3,4选择结构实验:p64:5,6,7,8源程序文件命名方式:例:3-7.c表示第三章第七题打包文件方式:例:程玉明-工程0901(一).rar例9有以下程序:main(){inta=15,b=21,m=0;switch(a%3){case0:++m;break;case1:++m;switch(b%2){default:++m;case0:++m;break;}printf(“%d\n”,m);}}举例程序运行后的输出结果是:A)1B)2C)3D)4正确答案是:A若a=14,答案是:0若a=13答案是:3例:学生的考试成绩,90分以上为“A”,80~89分为“B”,70~79分为“C”,60~69分为“D”,60分以下为“E”。输入学生的考试成绩,打印出对应的等级。分析:设学生成绩G,对应的等级用djGdj=‘A’dj=‘B’dj=‘C’dj=‘D’dj=‘E’

dj=‘E’90~10080~8970~7960~6960以下输出djmain(){intk;intG;chardj;scanf(“%d”,&G);if(G==100)k=9;elsek=G/10;swicth(k){case9:dj=‘A’;break;case8:dj=‘B’;break;case7:dj=‘C’;break;case6:dj=‘D’;break;case5:case4:case3:case2:case1:case0:dj=‘E’;}printf(“%c”,dj);}运行举例习题作业#include<iostream.h>#include<stdio.h>voidmain(){longn; cout<<"请输入值"<<endl;inta,b,c,d,e;ints,p; cin>>n;a=n/10000;s=n%10000; b=s/1000;s=s%1000; c=s/100;s=s%100; d=s/10;s=s%10; e=s; if(n>9999){p=5;cout<<e<<d<<c<<b<<a<<endl;} elseif(n>999){p=4;cout<<e<<d<<c<<b<<endl;} elseif(n>99){p=3;cout<<e<<d<<c<<endl;} elseif(n>9){p=2;cout<<e<<d<<endl;} else{p=1;cout<<e<<endl;} cout<<"输入值的位数"<<endl; cout<<p<<endl;}P65习题:4-7举例例3输入字符,若该字符是大写字符,就变成相应的小写字符;若该字符是小写字符,就变成相应的大写字符,其余字符保持不变输入tt‘A’&&t

‘Z’t+=32真假t

‘a’&&t

‘z’真假t-=32输出t#include<stdio.h>main(){chart;t=getchar();If(t>=‘A’&&t<=‘Z’)t+=32;elseif(t>=‘a’&&t<=‘z’)t-=32;putchar(t);}举例例7编写程序计算表达式的值:x<0真y=x假x<=-5||x>=20假输出x和y真main(){floatx,y;scanf(“%f”,&x);if(x<=-5||x>=20){

if(x<0)y=x;elseif(x<10)y=x-1;elsey=x+1;}printf(“x=%5.2f,y=%5.2f”,x,y);

}x<10真y=x-1y=x+1假打出错误信息printf(“\ndataerror”);else举例例1编写程序计算表达式的值:x<0真y=x假x<10真y=x-1假y=x+1当x<=-5||x>=20输入xmain(){floatx,y;printf(“\nInputx:”);scanf(“%f”,&x);k0:if(x<=-5||x>=20){printf(“Error,again”);gotok0;}if(x<0)y=x;elseif(x<10)y=x-1;elsey=x+1;printf(“x=%5.2f,y=%5.2f”,x,y);}scanf(“%f”,&x);循环结构的概念goto语句的格式goto语句标号

应用示例语句标号的命名规则与变量名相同gotok0;……k0:s+=x;

带标号的语句的格式语句标号:语句

执行过程s+=x……

循环结构的概念

某段程序被有限次地执行被反复执行没有出口If语句和goto语句构成循环

形式标号:if(表达式){……goto标号}循环体

执行过程……表达式为真?真假退出当表达式为真循环体结束习题P65习题:4-9分析:根据函数区间构造switch的表达式:要求:1.在同一区间,表达式取有限个相同的值2.在不同区间,表达式的值相异表达式(int)sr/10取值012,34,56,7,8,910以上其中:据题意变换区间sr<1010<=sr<2020<=sr<4040<=sr<6060<=sr<100sr>=100字符型数据

字符型常量‘8’‘Y’‘’‘\特定字符’‘\n’换行‘’一个字符

P48

字符数据的表示

用ASCII

温馨提示

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

最新文档

评论

0/150

提交评论