《程序基本结构》PPT课件.ppt
《《程序基本结构》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《程序基本结构》PPT课件.ppt(93页珍藏版)》请在三一办公上搜索。
1、2023/7/28,1,第二章 程序基本结构,2.1 关系运算和逻辑运算2.2 分支结构2.3 循环结构2.4 break和continue语句2.5 goto 语句2.6 指针程序设计2.7 经典算法举例,2023/7/28,2,引言,第一章中我们学习了顺序结构的C程序设计方法,但是实际应用中,很多问题仅有顺序结构的方法是无法解决的。,算法,算法,2023/7/28,3,问题1的算法:,S1:输入3个整数,分别赋值给a,b,cS2:如果ab,则a bS3:如果ac,则acS4:如果bc,则bcS5:输出a,b,c的值,分支结构,输入a,b,c的值,a b,输出a,b,c的值,a c,bc,2
2、023/7/28,4,2.1关系运算和逻辑运算2.1.1 关系运算符和关系表达式,一、关系运算符种:、=、=、!=说明:1、优先级:前4种相同,后2种也相同,但前4种高于后两种;所有关系运算符的优先级都低于算术运算符而高于赋值运算符。2、结合性:自左至右,ab-c,a(b-c),a=b=c,a=(b=c),a=b!=c,a=(b!=c),2023/7/28,5,二、关系表达式用关系运算符将两个表达式连接起来的式子。其中被连接的表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式或字符表达式。如:a+bc+d、xy=c+d、aA,关系表达式的值只能是1或0,当表达式成立即为“真”时,值为整
3、数1;否则为“假”,值为整数0。因此可看作整型表达式。,假设a=3,b=2,c=1,求以下关系表达式的值:ab(ab)=cabc f=ab=c,1,1,0,1,2023/7/28,6,2.1.2 逻辑运算符和逻辑表达式,一、逻辑运算符种:&|!,、优先级:!(非)&(与)|(或),、结合性:!是右结合性,&和|是左结合性,、逻辑运算真值表:,例:,ab&x/y,(ab)&(x/y),a=b|b!=c,(a=b)|(b!=c),a=1|!b,(a=1)|(!b),二、逻辑表达式逻辑表达式的值应该是“逻辑真”或“逻辑假”。语言以数值代表“真”,以数值代表“假”;但参加运算的运算量可以是任何数值,进
4、行判断时,非零值代表“真”,零值代表“假”。,若a=100,b=5,则!a=?a&b=?a|b=?!a&b=?4&0|2=?,a+b|ca&038&2|54-!0,0,1,1,0,1,1,0,0,表示x-1,1区间,应写为:x=-1&x=1不能写为:-1=x=1,规律:在逻辑表达式的求解过程中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,、在&表达式中,若左端为,则不必再计算右端,表达式值为0;即:0&a=0、类似有:1|a=1(假设a、b取值为1或者0),0|a=a 0&a=01|a=1 1&a=aa|a=a a&a=aa|!a=1
5、a&!a=0!(a|b)=!a&!b!(a&b)=!a|!b,例:a=1,b=2,c=3,d=4,m=n=1(m=ab)&(n=cd)m=?n=?,0,1,注意:,2023/7/28,9,C语言运算符的“优先级口决”1,小括中括指向点,(),-,.)非反后来自加减;(!+-)负类指针有地址,(-,类型转换,*,(从右至左)逗号不是停顿符,(,)顺序求值得结果.(顺序求值运算符),2023/7/28,10,C语言运算符的“优先级口决”2,括号成员第一;/括号运算符()成员运算符.-全体单目第二;/所有的单目运算符比如+-+(正)-(负)指针运算*/注意顺序:优先级(|)底于 优先级(&)条件高于
6、赋值,/三目运算符优先级排到 13 位只比赋值运算符和“,”高/需要注意的是赋值运算符很多!逗号运算级最低!/逗号运算符优先级最低,2023/7/28,11,2.2分支结构2.2.1 单分支结构,例2.1:输入两个整数,按从小到大的顺序输出这两个数。,算法:S1:输入两个整数a,bS2:如果ab,则a bS3:输出a,b,C语言单分支结构:if(表达式)语句;,2023/7/28,12,if(表达式)语句,一般形式:,流程图:,注意:此位置不使用分号“;”!,#include void main()int a,b,temp;printf(Input a,b:);scanf(%d%d,/*按从小
7、到大顺序输出*/,例2.1的C语言程序如下:,复合语句:在同一个条件下作为一个整体执行的多条语句,例2.2输入三个数x1,x2,x3,按从小到大的顺序输出这三个数。,#include void main()int x1,x2,x3,temp;scanf(“%d%d%d”,输入:3 5 1输出:1,3,5,2023/7/28,15,2.2.2 双分支结构,例2.3:输入两个整数,输出其中较大的一个。,算法:S1:输入两个整数a,bS2:如果ab,则输出a,否则输出b,C语言单分支结构:if(表达式)语句1;else 语句2;,2023/7/28,16,一般形式:,if(表达式)语句1else 语
8、句2,流程图:,2023/7/28,17,例2.3 输入两个整数,输出其中较大的一个。,N-S流程图,#includevoid main()int x1,x2;scanf(“%d%d”,2023/7/28,18,判断某年是否闰年?若是,输出XXXX年是闰年,若不是,输出XXXX年不是闰年。,提示:闰年的判断,能被4整除不能被100整除,或者能被400整除的都是闰年。,2023/7/28,19,2.2.3 多分支结构一、if语句嵌套,一般形式:,流程图:,if(表达式1)语句1else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式n)语句n else 语句n+
9、1,关于if语句的说明:,1、表达式一般为关系表达式或逻辑表达式。但在C语言中它也可以是任意的数值表达式。,if(3)n=1;,if(a)printf(%d,a);,if(n=3-3)x=1;else x=-1;,2、表达式后面不能有任何标点符号!,3、else只能与if配对使用。仅else本身不能单独作为一个语句使用。,if(x5);y=x;else y=2*x-1;,if(x5);y=x;else y=2*x-1;,将出现语法错误,2023/7/28,21,4、每个语句序列可以是一个语句也可以是若干个语句,但要用花括号括起来构成复合语句。,if(ab)t=a;a=b;b=t;,if(a+b
10、c,复合语句的花括号后不能再写分号。复合语句在语法上是一个整体,相当于一个语句。,2023/7/28,22,5、if语句的嵌套,在if语句的原“语句”中又包含一个或多个if语句,1.if(表达式1)if(表达式2)语句,2.if(表达式1)语句1 else if(表达式2)语句2,3.if(表达式件1)语句1 else if(表达式2)语句2 else 语句3,4.if(表达式1)if(表达式2)语句1 else 语句2,二义性?,语言规定:else总是与它前面最近的且未曾配对的if配对。,if(表达式1)if(表达式2)语句1 else 语句2,if(表达式1)if(表达式2)语句1 els
11、e 语句2,2023/7/28,23,例2.4 输入3个数,判断组成什么类型三角形,if(a+b)c,2023/7/28,24,例2.5 编程求解函数:,程序1:if(x0)y=-1;else if(x=0)y=0;else y=1;,程序2:if(x=0)if(x0)y=1;else y=0;else y=-1;,eg502.c,程序3:y=0;if(x!=0)if(x0)y=1;else y=-1;,2023/7/28,26,例:求一元二次方程ax2+bx+c=0的根,a,b,c由键盘输入。,分析:对于一元二次方程有以下几种可能:a=0,不是二次方程;b2-4ac=0,有两个相等的实根;b
12、2-4ac0,有两个不等的实根;b2-4ac0,有两个共轭复数根。,例2.6 求一元二次方程ax2+bx+c=0的根,a,b,c用键盘输入。,#includevoid main()float a,b,c,d,x1,x2,realpart,imagpart;scanf(“%f%f%f”,a,b,c);if(fabs(a)1e-6),x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(“has distinct real roots:%f,%fn”,x1,x2);else realpart=-b/(2*a);imagepart=sqrt(-
13、disc)/(2*a);printf(“%f+%fin”,realpart,imagpart);pritnf(“%f-%fin”,realpart,imagpart);,2023/7/28,28,1、条件运算符:?:(C中唯一的三目运算符)优先级仅高于赋值类,右结合性,2、条件表达式的一般形式:表达式1?表达式2:表达式3,运算过程:首先求表达式1的值,若为真(非0),则求表达式2的值,且整个表达式的值为表达式2的值;若表达式1为假(0),则求表达式3的值,且整个表达式的值为表达式3的值。,二、条件运算符,2023/7/28,29,(2)右结合性:,(3)“表达式1?表达式2:表达式”中,表达
14、式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式例如:ab?(a=100):(b=100)ab?printf(“”%dn”,a):printf(“%dn”,b),(4)表达式1、表达式2和表达式3的类型都可以不同。表达式值的类型是表达式2、3中类型较高的类型。例如:xy?1:1.5 表达式值是double类型,(1)优先级高于赋值,低于关系运算符和算数运算符,例:x=ab?a:b+1;,x=(ab)?a:(b+1);,ab?a:cd?c:d,ab?a:(cd?c:d),if(ab)x=a;else x=b+1;,2023/7/28,30,例2.7:输入一个字符,如果是大写字母
15、,转换为小写,如果不是不转换。最后输出。,#includevoid main()char ch;scanf(“%c”,*/,2023/7/28,31,三、switch(多分支)语句,switch结构与else if结构是多分支选择的两种形式。else if:多条件并列测试,从中选一switch:单条件测试,从多种结果中选取一种执行,2023/7/28,32,1、格式:,switch(表达式)case 常量表达式1:语句组1;break;case 常量表达式2:语句组2;break;case 常量表达式n:语句组n;break;default:语句 组n+1,2、功能:先计算表达式的值,测试该值
16、是否与某常量表达式的值相同、若有相同者,流程转向其后面的语句执行、若无,再看有没有default部分:若有default,则执行其后面的语句;若无default,则switch语句什么也不做,流程转向其后继语句。,说明:,1、switch后面括号内的表达式可以是整型,也可以是字符型2、各个case后常量表达式的值必须互不相同;3、各个case和default的出现次序不影响执行结果;4、case后的语句为复合语句时可省略花括号;,例:#include void main()int x,y;scanf(“%d”,5、case后常量表达式只起语句标号的作用,每个case之后通常都有一个break,
17、使流程跳出switch语句,否则流程转到下一个case(default)中继续执行;,2023/7/28,34,6、多个case可以共用一组执行语句;,case 6:case 7:printf(Resetn);break;,但不能写成:case 6,7:printf(Resetn);break;,7、switch语句可以嵌套;但有多层switch语句时,break只能退出本层的switch语句体;,2023/7/28,35,举例:在学生成绩管理中,成绩经常要在百分制与等级制之间进行转换。90分以上为A等,80-89为B等,70-79为C等,60-69分为D等,其余为E等。编制程序,根据输入的百
18、分制,输出对应的等级。,void main()int score;printf(Input score of student:);scanf(%d,2023/7/28,36,void main()int score,temp;printf(Input score of student:);scanf(%d,break;,2023/7/28,37,简单选择界面的编程。从键盘输入整数,输出不同的字符串:输入1,输出Good morning;输入2,输出Good afternoon;输入3,输出Good evening;输入4,输出Good night;输入其它数字,输出Bye-bye。,2023/
19、7/28,38,算法,2.3 循环结构,2.3.1 循环结构的引出,2023/7/28,39,问题2的算法:,算法1:直接写出算式 S1:result=1+2+3+4+5+100,容易实现吗?,算法2:考虑到1+2+3+100可以改写为:(1+2)+3)+100)S1:p1=1+2 S2:p2=p1+3 S3:p3=p2+4 S99:p99=p98+100,结果在p99里。,定义99个变量,容易实现吗?,注意观察:每一步都类似,2023/7/28,40,算法3:S0:p=0,i=1 S1:p=p+i,i=i+1 S2:p=p+i,i=i+1 S3:p=p+i,i=i+1 S99:p=p+i,i
20、=i+1 S100:p=p+i,i=i+1,完全一样的99步,算法4:S0:p=0,i=1(循环初值)S1:p=p+i,i=i+1(循环体)S2:i=100,则返回重新执行步骤S1及S2;否则,算法结束(循环控制)。,循环结构,2023/7/28,41,循环控制结构一般由四部分组成:、进入条件、退出条件、循环体:循环体需要完成的功能(需要重复执行的语句)、循环变量的修正,根据进入条件和退出条件,循环控制结构可以分为三种形式:、while结构:退出条件是进入条件的反条件。即满足 条件时进入,重复执行循环体直到进入的条件不再满足为止。、do-while结构:无条件进入,执行一次循环体后再判断是否满
21、足再进入循环的条件。、for结构:与while结构类似,但结构更紧凑。适用于循环之前循环次数就已经确定的情况。,2023/7/28,42,使用形式:while(表达式)语句;,特点:先判断表达式,后执行语句,while 语句,2023/7/28,43,例:求1+2+3+100,i=1,sum=0,i=100,sum=sum+ii=i+1,假,真,2023/7/28,44,void main(),int i,sum;,i=1;sum=0;,while(i=100)sum=sum+i;i+;,printf(“sum=%dn”,sum);,注意:while起作用的范围,注意:要有改变循环结束条件的语
22、句,2023/7/28,45,void main(),int i,n,sum;,i=1;sum=0;,while(i=n)sum=sum+i;i+;,printf(“sum=%dn”,sum);,计算 1+2+3+n(n为任意正整数),scanf(%d,思考问题:循环结束后循环变量的值是多少?,2023/7/28,46,void main(),int i,n,sum;,i=1;sum=0;,while(i=n)sum=sum+i;i=i+2;,printf(“sum=%dn”,sum);,scanf(%d,计算 1+3+5+7+n(n为奇数),2023/7/28,47,例:输入一个字符,如果是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序基本结构 程序 基本 结构 PPT 课件
链接地址:https://www.31ppt.com/p-5564348.html