程序控制结构-选择结构.ppt

上传人:牧羊曲112 文档编号:6481986 上传时间:2023-11-04 格式:PPT 页数:83 大小:790KB
返回 下载 相关 举报
程序控制结构-选择结构.ppt_第1页
第1页 / 共83页
程序控制结构-选择结构.ppt_第2页
第2页 / 共83页
程序控制结构-选择结构.ppt_第3页
第3页 / 共83页
程序控制结构-选择结构.ppt_第4页
第4页 / 共83页
程序控制结构-选择结构.ppt_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《程序控制结构-选择结构.ppt》由会员分享,可在线阅读,更多相关《程序控制结构-选择结构.ppt(83页珍藏版)》请在三一办公上搜索。

1、1,回顾,在计算机中对数据进行描述:数据的基本类型:整型、字符型、浮点类型;数据在在内存中的存储形式、取值范围和能够对它进行的操作;扩展基本类型:short、long、unsigned 常量:各种整型常量的形式、字符常量、转义字符、符号常量;变量:定义格式;运算符:算术运算符:/、%、+、-;优先级;赋值运算符:=,与数学中的等号相区别;,2,要求:,深刻理解在计算机中各类型数据在内存中的存储形式、取值范围和能够对它进行的操作;深刻理解各基本类型作了 short、long、unsigned 扩展之后与原类型之间的区别;深刻理解各种整型常量的形式,字符常量、转义字符和符号常量的意义和作用。熟练掌

2、握每一种变量的定义格式;深刻理解每一个算术运算符的功能、使用格式、计算结果,尤其是/、%、+、-;深刻理解赋值运算符(=)的意义、注意与数学中的等号相区别;复合赋值运算符的执行过程和执行结果。,练 习,3,4,一、选择题:,以下叙述中正确的是:(a)C 程序由主函数组成(b)C 程序由函数组成(c)C 程序由函数和过程组成(d)C 程序由子函数组成,5,2.以下不能正确表示算式 的是:(a)(a*b)/c*d(b)a*b/(c*d)(c)a/c*b/d(d)a*b/c/d,解答:c 语言中表达式的计算是按算符的优先级来进行的。,6,3.以下的变量定义中合法 的是:(a)float 3_four

3、=3.4;(b)int _abc_=22;(c)double a=1+4e2.0;(d)short do=15;,7,4.C 语言中运算对象必须是整型的运算符是:(a)%=(b)/(c)=(d)*,“必须是整型”:确切地说应该是不能是float型,8,5.若有 int k=11;则表达式(k+*1/3)的值是:(a)0(b)3(c)11(d)12,执行过表达式后k的值是:12,二、填空:,9,10,1.一个 C 程序必须有一个_函数一个C 程序必定从_函数开始执行。,主,主,11,2.C 语言中的标识符可分为_、_和预定义标识符三类。,关键字,用户标识符,预定义标识符:系统定义的、用于贬义预处

4、理命令中的标识符。如:include、define等,12,3.C 语言程序中的数据,在计算机内存储器中最小的存储单位称为_,其中只能存放_进制数。,位,二,13,2.5 数据的输出和输入,14,输出和输入,输出计算机向外部输出设备(显示器,打印机等)输出数据输入从输入设备(键盘,鼠标,扫描仪等)向计算机输入数据C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的在使用系统库函数时,要用预编译命令“#include”包含有关的头文件#include/标准输入输出库函数,15,格式输出函数printf,printf函数一般格式:printf(格式控制,输出表列)格式控制是由双

5、引号括起来的字符串,它包含三种信息:格式说明:由“%”和格式字符组成,如%d,%f等。它的作用是将输出的数据按照指定的格式输出。普通字符:需要原样输出的字符。转义字符:用于控制输出。输出表列是一些要输出的数据。,printf(%d,%dn,a,b);,16,格式说明项:由“%”与格式字符组成,其作用是将数据转换为指定的格式输出,按不同类型的数据有以下不同的格式字符:%d、%ld,按整型数据的实际长度输出。%md、%mld,m为指定的输出字段的宽度,如数据的位数小于m,则左端补空;若数据位数大于m,则按实际长度输出。%c:用于输出一个字符。%f:用于以小数形式输出实数(包括单、双精度);%m.n

6、f、%m.nlf,指定输出的数据共占 m 位,其中包括 n 位小数,如数据的位数小于m,则左端补空;若数据位数大于m,按实际长度输出。小数位数被截断时按四舍五入输出。,格式输出函数printf,17,int a=-1,b=25,c=125;long x=356142;printf(%d,%5dn,a,b);printf(%5d,%2dn,c,c);printf(%ld,%dn,x,x);输出结果为:,例:,18,格式输入函数scanf,scanf函数一般格式:scanf(格式控制,地址表列)scanf函数的功能是按照指定的格式输入数据,可以输入任意类型的多个数据。格式控制与printf函数含义

7、相同,它由若干个格式说明构成,其作用是控制转换输入数据的类型。地址表列由若干个地址构成,它们可以是变量的地址,也可以是字符串的首地址。,19,标准格式输入函数的功能:,scanf 函数可以从标准输入设备输入任意类型的多个数据(一般为键盘),存入指定的变量单元中。例:scanf(“%d,%f”,&a,&b);意味着从键盘读入两个数据,分别存入变量a和b中。%d:按十进制整数格式读入;%f:按十进制整数格式读入;,20,格式输入函数,scanf 中格式控制串的格式应与地址表列中变量的顺序相一致;scanf 中格式控制串的格式应与输入数据的格式相一致;当语句格式如下时:scanf(“%d,%f”,&

8、a,&b);输入数据的格式应为:12,3.14如果语句写成:scanf(“%d%f”,&a,&b);输入数据的格式应为:12 3.14,思考:如何分隔数据?,用隐含的分隔符:在输入数据中用空格或换行符分隔数据。scanf(%d%d%d,输入数据 3,4,5 则 a=3,b=4,c=5,21,22,2.6 数学函数,23,数学函数,使用数学库中的函数时,应该首先用预处理命令#include 指明要用到的数学函数的描述所在的头文件。调用数学函数时,要给出函数名,后面是一对圆括号,括号内是使用函数所需的参数,参数可以是常量、变量或表达式。例:计算并打印2的3次方的语句可以写成::printf(“%7

9、.2f”,pow(2.0,3.0);调用的数学函数pow需要两个参数,这两个参数都是 double型的,返回值也是double型的 语句执行结果为:打印 8.00。,24,常用数学函数,25,第3章 程序控制结构,26,教学目标,学习三种结构的程序设计方法顺序结构程序设计选择结构程序设计循环结构程序设计掌握每一种语句的格式、功能、执行过程和执行结果,并学习如何将这些语句组织成程序学习逻辑问题的解题思路,及递推、迭代的方法,27,三种控制结构,顺序结构,选择结构,循环结构,28,顺序结构程序设计,实现顺序结构的语句,顺序结构的程序中的语句是按照从上到下的顺序逐行排列的;程序的执行顺序是按语句的排

10、列顺序进行的。完成顺序程序设计的语句包括:赋值语句复合语句函数调用语句,29,30,由一组语句组成,并放在一对花括号“”中间,语句格式:第1条语句;第n条语句;,复合语句,整个 main 程序就是一个大的复合语句。复合语句是一个整体,在语法结构上与一个单一语句相同。,函数调用语句,C 程序中,需要使用很多复杂的功能,例如:输入数据、输出数据、数学公式的使用(sin(x)、cos(x)、ex 等)。这些功能的使用是通过函数调用来实现的。系统把一些独立的功能编制成标准函数,提供给使用者调用的格式。两个最常用的标准函数:格式输出函数格式输入函数,31,32,例:设1990年我国工业产值是100,如果

11、每年以7.4%的速度增长,求20年后我国的工业产值是多少?,分析:计算产值的公式是:,安排计算步骤写出完整的程序,p1=p0(1+r)n其中:p1为n年后的产值,p0为初始值,r为增长率,n 为年数。,33,解决问题的步骤:,定义变量:,输入:p0,n,r;计算 p1;输出 p1;,float,p1,p0,r;,p1=p0(1+r)n其中:p1为n年后的产值,p0为初始值,r为增长率,n 为年数。,int,n;,34,写出完整程序:,/*功能:计算工业产值*/#include#include void main()int n;float p0,p1,r;scanf(%d,%f,%f,35,选择

12、结构程序设计,36,如果小明一分钟跳绳多于60,那么他的体育成绩为A,否则为B,引例:,步骤图解:,需要选择结构描述,37,选择结构需要解决的两个问题,2.控制结构的结构描述,条件表示描述方法,逻辑表达式,关系表达式,1.控制选择结构执行方向的条件表示,if 语句,switch语句,实现选择结构的语句,38,关系表达式概念:用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式。关系运算符:,一、关系运算符和关系表达式,=,=!=,优先级,39,关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。例:关系表达式“8=4”

13、的值为“假”,表达式的 值为0。关系表达式“50”的值为“真”,表达式的 值为1。,关系表达式,40,例3.1:ab!=c 等价于(ab)!=c ca-b 等价于 c(a-b)a=bc 等价于 a=(bc)例3.2:int a=0,b=1,c=2;a=c 值为?a=c=b 值为?,结合性:,从左向右,1,1,41,注意:1.编程过程中要区分单个等号(=)与双等号(=)进行比较时一定要用关系运算符(=)(=)是赋值运算符2.避免将浮点变量用=或者!=与任何数字比较,例3.3:float x=3.26;If(x=0.0),不要混淆!,42,逻辑表达式概念:由逻辑运算符和运算量所构成的式子,其中运算

14、量主要有关系表达式和逻辑量两种,也可以是C中任意合法表达式。逻辑运算符,二、逻辑运算符和逻辑表达式,|(逻辑或),&(逻辑与),!(逻辑非),优先级,结合性,从左向右,43,真 真 假 假 真 真真 假 假 真 假 真假 真 真 假 假 真假 假 真 真 假 假,a b!a!b a&ba|b,逻辑运算的真值表,44,注:1、C语言编译系统以数值1代表“真”,以0 代表“假”;2、若逻辑运算符左右连接的不是逻辑量或 关系表达式时,C语言编译系统以其值非 0代表“真”,以0代表“假”。例3.4:若x=-10,则!x的值为0。若a=3,b=2,则a&b的值为1。5&0|8的值为1。,45,逻辑运算符

15、的特点,特点:在逻辑表达式的求解中并不是所有的运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行下一个运算符。例3.5:a&b&c 只有a的值为逻辑真时,才计算b的值;也只有a与b的值都为逻辑真时,才计算c的值;例3.6:a|b|c 只有a的值为逻辑假时,才计算b的值;也只有a与b的值都为逻辑假时,才计算c的值;,46,例3.7:#include void main()int x,a=0,b=1,c=2;x=a,二、逻辑运算符和逻辑表达式,x=0,a=0,b=1,c=2,等效于(a+)&(b+)&(c+),思考:x=a+,x=0,a=1,b=1,c=2,47,!(非)算

16、术运算符关系运算符&|赋值运算符,各种运算符优先级:,例3.8:1.xc 等效于(!a)&(bc)4.5 3&4|8 3)&4)|(8 4),48,分析:ab的值为0(m=ab)值为0 表达式(m=ab)&(n=cd)的值为0 运算就此结束,不再进行(n=cd)的运算结果:m为0,n为1例3.10:假设a=5、b=10、c=15、d=20,求逻辑表达式的结果!a|(ab)+1&cb)+1&cb)+1&c10)+1&cd 0|0+1&cd 0|1&cd 0|1&1520 0|1&1 0|1 1,例3.9:假设a=1,b=2,c=3,d=4,m=1,n=1,执行表达式(m=ab)&(n=cd)后m

17、和n的值各为多少?,!(非)算术运算符关系运算符&|赋值运算符,49,选择结构,if 语句 if语句、if-else语句、elseif语句 switch语句(多分支语句),选择结构通过条件控制语句来实现,选择结构包括:if-else结构和switch-case结构,50,ifelse,if(表达式1)语句1;else if(表达式2)语句2;else if(表达式m)语句m;else 语句 n;,if(表达式)语句1;else 语句2;,elseif,if,if(表达式)语句;,if 语句,51,if 语句:,if(表达式)语句;,根据给定的条件进行判断,以决定执行某个分支程序段。表达式一般为

18、逻辑表达式或关系表达式;也可以为其它表达式或变量,这时表达式值为非0值时表示“真”。语句可以是单条语句,也可以是复合语句(语句块)组成;还可以是if语句,称if语句嵌套,复合语句,52,if 形式:,if(表达式)语句;,计算表达式的值;如果表达式的值非零,则执行语句;如果表达式的值为零,则执行if语句后的一条语句。,执行流程:,53,例3.11:输出成绩高于 90 分的学生成绩和学号,格式:if(score 90)printf(“%s%dn”,No,score);执行过程:计算表达式 score 90的值;如果表达式的值非零,即:score 90成立;则输出该学生的学号和成绩;如果表达式 s

19、core 90的值为零,即:score 90不成立;则什么也不做。,54,#include void main()int n,rem;printf(enter a number:);scanf(%d,例3.12:判断一个数是偶数还是奇数。,55,例3.13:输入两个数,按从大到 小的顺序将它们输出。,#include void main()float a,b,t;/定义三个变量a、b、t scanf(“%f,%f”,&a,&b);/输入两个数到a、b中 if(ab)/如果a小于b,则将a的值与b的值交换 t=a;a=b;b=t;printf(“a=%5.2f,b=%5.2n”,a,b);,复合

20、语句,56,if else 形式:,if(表达式)语句1;else 语句2;,执行流程:,计算表达式的值;如果表达式的值非零,则执行语句1;如果表达式的值为零,则执行语句2。,57,例3.14:如果成绩高于 90 分则输出“A”;否则输出“B”,格式:if(score90)printf(“A”);else printf(“B”);,执行过程:计算表达式 score 90的值;如果表达式的值非零,即:score 90成立;则输出“A”;如果表达式 score 90的值为零,即:score 90不成立;则输出“B”。,58,#include void main()int n,rem;printf(

21、enter a number:);scanf(%d,例3.12可以改写成:,else,59,例3.15:求两个数中较大的数,#include void main()int a,b,max;printf(“input two numbers:”);scanf(“%d%d”,&a,&b);if(ab)max=a;else max=b;printf(“max=%dn”,max);,条件表达式可完成同样的功能,60,条件运算符和条件表达式,条件运算符:?:条件表达式的形式为:表达式1?表达式2:表达式3条件表达式的执行过程:先计算表达式1,若其值为非零(为真),则结果为表达式2的值,否则就是表达式3的

22、值。条件表达式可以看作一个简写的if-else语句。,61,例3.15可以改写成:,#include void main()int a,b,max;printf(“input two numbers:”);scanf(“%d%d”,&a,&b);if(ab)max=a;else max=b;printf(“max=%dn”,max);,62,else if 形式,格式:,if(表达式1)语句1;else if(表达式2)语句2;else if(表达式m)语句m;else 语句 n;,63,else if 执行流程,计算“表达式1”的值如果“表达式1”的值非零,则执行语句1;该 if 语句执行完

23、毕。如果“表达式1”的值为零则计算“表达式2”的值;如果“表达式2”的值非零,则执行语句2;该 if 语句执行完毕。以此类推,直到最后一个 else 语句,64,例3.16:已知函数,程序段:if(x10)y=-1;else if(x=1 0)y=0;else y=1;,编写程序,输入一个x值,输出对应的y值。,-1(x10);,y=,65,if 语句的嵌套,if语句的嵌套:在一个 if语句中又包含了另一个 if 语句一般形式:if(表达式1)if(表达式1-1)语句1-1;else 语句1-2;else if(表达式2)语句2;else 语句3;,C语言规定,else 总是和它上面离它最近的

24、未曾匹配的 if 匹配。,66,例3.17:,1.在if子句中嵌套,2.在else子句中嵌套,if(x=0)if(x0)y=-1;else y=0;else y=1;,if(x0)y=-1;else if(x=0)y=0;else y=1;,67,if语句只能处理从两者间选择之一,当要实现从多种可能中选择之一时,就要用到ifelse if甚至多重嵌套的if语句。当分支较多时,程序变得复杂冗长,可读性降低,如:,if(x=90)printf(“优秀”);else if(x=80)printf(“良好”);else if(x=60)printf(“通过”);else printf(“不及格”);其

25、它语句;,如何解决这一问题?,68,switch语句,switch 语句是实现多分支选择结构的一个语句格式,switch(算术表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n+1;,表达式值必须为整型、字符型或枚举类型,每个case 表达式的值必须互不相同,69,例3.18 将1至7中的任意一个数字转化成对应的英文星期几的前三个字母,如1转化为Mon,7转化为Sun等。,#include void main()int a;printf(input integer number:);

26、scanf(%d,/*输入的不是0至7的整数时执行*/,70,例5 根据分数评定等级#include void main()int score,grade;printf(Input a score(0100):);scanf(%d,/成绩超出范围时,提示出错,注意:switch后面圆括号中的表达式的类型,ANSI标准允许为任何类型,但 Visual C+6.0只允许为整型、字符型或枚举类型。case后面常量表达式的值必须互不相等,否则会出现互相矛盾的现 象。其类型应该与switch后面表达式的类型相容。case和常量表达式之间要有空格 例如:case 10。case和default出现可以在任

27、何位置,其先后次序不影响执行结果,但 习惯上将default放在switch-case结构的底部。case提供了执行某一语句序列的入口,起着标号的作用;多个case可 以执行同一语句序列。每个case语句的结尾不要忘了加break,否则将导致多个分支重叠。default子句虽然可以省略不用,但最好保留:即使程序真的不需要default处理,也应该保留语句:default:break;,72,选择结构程序设计举例,73,写程序,判断某一年是否闰年,分析:做什么?判断某一年号是否为闰年;什么是闰年?年号能被4整除,但不能被100整除或年号能被400整除时,该年为闰年。设计解题步骤:定义相关变量:年

28、号year输入原始数据:输入年号(scanf)判断该年是否为闰年:if(year%4=0写出完整程序;,74,程序,#includevoid main()int year;printf(“请输入年号:n”);scanf(“%d”,75,求方程 ax2+bx+c=0 的解,分析:方程 ax2+bx+c=0 的解的情况:a=0:b!=0:唯一根,c/b;b=0:c=0:无穷多个根;c!=0:无解;a!=0:b2-4ac=0:两个相同的实根,-b/(2*a)b2-4ac0:两个不同的实根,(-b+sqrt(b2-4ac)/(2*a)、(-b-sqrt(b2-4ac)/(2*a)b2-4ac0:两个不

29、同的虚根,-b/(2*a)+i*sqrt(b2-4ac)/(2*a)、-b/(2*a)-i*sqrt(b2-4ac)/(2*a),void main()float a,b,c,k,delta;scanf(“%f,%f,%f”,76,77,输入 4 个整数,按由小到大的顺序输出,分析排序的方法:初始状态:任意四个整数分别存放于 a,b,c,d中;最后结果:按从小到大的顺序分别放于 a,b,c,d中;过程:如果ab 则:将a,b 的值交换;否则,执行步骤2 结果:a 中的值必小于b 的值;将c 与b 比较,如果 cb 则:将a,b 的值交换;结果:a 中的值必小于b 的值;b 中的值必小于c 的值

30、;最后,先将d 与c 比较,如果,d=c 则:输出顺序为:a,b,c,d否则,如果,d=b 则:输出顺序为:a,b,d,c否则,如果,d=a 则:输出顺序为:a,d,b,c否则:输出顺序为:d,a,b,c,78,程序,#includemain()int a,b,c,d,t;scanf(“%d,%d,%d,%d”,79,输入两个运算量和一个运算符,完成加、减、乘、除运算,输出运算结果。,int op1,op2,result;char operator;scanf(“%d%d%c”,else result=op1%op2;break;default:printf(“operator error”)

31、;.,80,练 习,81,1.若s=F,执行语句s=(s=A 后,字符变量s的值为。,f,2.判断变量a、b中至少有一个为0的逻辑表 达式为。,a=0|b=0或a*b=0,一、填空,82,1#include void main()int a,b,c;a=b=c=10;a*=20-5;b+=b+2;c%=(c/3);printf(“%d,%d,%d”,a,b,c);,150,22,1,二、写出程序的运行结果,83,2#include void main()int i=3;if(+i%2!=0)printf(“%3d”,-i);else printf(“%3d”,i);,4,二、写出程序的运行结果,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号