程序设计基础A第4章基本控制结构谭晓程序对数据的处理流程:程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。数据处理数据输入数据输出C程序中如何实现数据输入?C程序中如何实现数据输出?32020/1/29第四章基本控制结构本章知识点4.1顺序结构4.2选择结构4.3循环结构4.4C语言控制结构应用举例42020/1/29第四章基本控制结构作用是,根据所指定的条件是否满足,决定从给定的两组操作选择其一52020/1/29第四章基本控制结构4.2.1关系运算和逻辑运算1.关系运算符及其表达式关系运算实际上是一种比较运算关系运算符种类:====!=结合方向:自左向右优先级别:算术运算——〉关系运算——〉赋值运算例ca+b//c(a+b)ab!=c//(ab)!=ca==bc//a==(bc)a=bc//a=(bc)4.2选择结构====!=优先级高优先级低62020/1/29第四章基本控制结构4.2.1关系运算和逻辑运算1.关系运算符及其表达式运算对象:既可以是表达式或变量,也可以是常量,只要其数据类型是可以直接进行比较的数值,例如整数、实数等即可。关系表达式的值:关系表达式的值是逻辑值“真”或“假”,c语言用1代表真,以0代表假假设int型变量a=7b=8c=94.2选择结构表达式表达式的值3303=31a==a1aa0b=b1a!=a0a!=b1a*bc1(a/b)(b/c)0b*b–4*a*c0072020/1/29第四章基本控制结构4.2.1关系运算和逻辑运算2.逻辑运算符及其表达式逻辑运算符:“逻辑与”、“逻辑或”和“逻辑非”,简称“与”、“或”和“非”。逻辑符号:!&&||逻辑非逻辑与逻辑或逻辑运算真值表4.2选择结构ab!a!ba&&ba||b真假真假假假真真真假假假假假真真假假真真真假真真82020/1/29第四章基本控制结构!&&||高低优先级结合方向!:从右向左&&:从左向右||:从左向右例a=x&&x=bab&&xya==b||x==y!a||ab//(a=x)&&(x=b)//(ab)&&(xy)//(a==b)||(x==y)//(!a)||(ab)()!(非)算术运算符关系运算符&&||赋值运算符高低92020/1/29第四章基本控制结构4.2.1关系运算和逻辑运算2.逻辑运算符及其表达式运算对象:具有表示真或假的非O值或0值的常量、变量或逻辑表达式逻辑表达式的值:逻辑表达式的值是逻辑值“真”或“假”,c语言用1代表真,以0代表假假设int型变量a=6b=7c=84.2选择结构表达式值((a+b)c)&&(c7)1(ab)&&(bc)0(ab)||(bc)1!(ab)0!a0102020/1/29第四章基本控制结构4.2.1关系运算和逻辑运算3.编程中的运用在实际解决问题时,可以把关系运算或逻辑运算的值(1或0)参与算术运算、赋值运算等,从而把复杂的条件描述巧妙的表示出来。例4.5名次预测正确性的表达式。有人在赛前预测A、B、C、D、E、F六名选手在比赛中会按顺序分获第一名到第六名,但是这一预测只猜对了三人的名次。写出这一预测正确情况的逻辑表达式。4.2选择结构112020/1/29第四章基本控制结构4.2.1关系运算和逻辑运算3.编程中的运用例4.5名次预测正确性的表达式。设使用int型变量a~f分别表示6名选手的名次,则这6个猜测可以分别写成关系表达式:a==1、b==2、c==3、d==4、e==5、f==6则猜测的正确性的逻辑表达式为:((a==1)+(b==2)+(c==3)+(d==4)+(e==5)+(f==6))==34.2选择结构122020/1/29第四章基本控制结构4.短路原则由逻辑运算符&&和||连接的表达式按照从左至右的顺序求值。在这一求值过程一旦可以确定表达式的值,求值过程就立即停止。图1多次逻辑与运算流程图图2多次逻辑或运算流程图4.2选择结构132020/1/29第四章基本控制结构例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=ab)&&(n=cd)例输入数据时:(c=getchar()!=EOF&&c=‘a’&&c=‘z’)EOF是表示输入数据结束的符号常量。//结果m=0,n=14.短路原则4.2选择结构142020/1/29第四章基本控制结构4.2.2if语句分支结构也叫选择控制结构,是根据所列条件满足与否选择执行路径。选择控制结构有三种形式:单分支结构,双分支结构,多分支结构。if语句是C语言实现选择控制结构的最基本的方式,有多种语句形式,支持嵌套使用,非常灵活。4.2选择结构152020/1/29第四章基本控制结构4.2.2if语句1.if语句的单分支形式语句格式:if(表达式)语句;功能:首先计算表达式的值,若其值非0(“真”),则执行表达式后面的语句,再执行if语句的后继语句;否则跳过该语句,直接执行if语句的后继语句。4.2选择结构162020/1/29第四章基本控制结构1.if语句的单分支形式例4.6求给定整数的绝对值#includestdio.hvoidmain(){intx,y;scanf(%d,&x);y=x;if(x0)y=-x;printf(x=%d,|x|=%d,x,y);}4.2选择结构真(非0)假(0)x0x=-x输出x值172020/1/29第四章基本控制结构1.if语句的单分支形式例4.7输入两个整数,输出其中的大数。#includestdio.hvoidmain(){inta,b,max;printf(\ninputtwonumbers:);scanf(%d%d,&a,&b);max=a;if(maxb)max=b;printf(max=%d,max);}4.2选择结构182020/1/29第四章基本控制结构例4.8输入3个浮点数x,y,z,把这三个数由小到大输出。分析:用x与y进行比较,如果xy,则将x与y的值进行交换;然后再用x与Z进行比较,如果xz,则将x与z的值进行交换,这样x中就是最小数。接着采用同样方法比较y与Z的大小,将最大数存在Z中。#includestdio.hvoidmain(){floatx,y,z,temp;printf(\ninputthreenumbers:);scanf(%f%f%f,&x,&y,&z);4.2选择结构192020/1/29第四章基本控制结构例4.8输入3个浮点数x,y,z,把这三个数由小到大输出。if(xy){temp=x;x=y;y=temp;}if(xz){temp=z;z=x;x=temp;}if(yz){temp=y;y=z;z=temp;}printf(smalltobig:%f,%f,%f\n,x,y,z);}4.2选择结构202020/1/29第四章基本控制结构4.2.2if语句2.if-else形式:双分支结构语句格式:if(表达式)语句1;else语句2;功能:①首先计算表达式的值。②若表达式的值为“真”,则执行语句1;否则,执行语句2,即在2种路径中选择其中的一种。③然后继续执行if结构的后继语句。4.2选择结构212020/1/29第四章基本控制结构例4.9输入三个数,输出它们的最大者和最小者.分析:采用打擂法解决该问题首先,设一个“擂主”max用来存储所有数中的最大者,“打擂”的数据都存储在变量中,第一个“上台”的数是初始擂主。接下来,剩余的数也依次与max作比较,最终留在max中的就是最大值4.2选择结构222020/1/29第四章基本控制结构#includestdio.hvoidmain(){inta,b,c,max,min;printf(\ninputthreenumbers:);scanf(%d%d%d,&a,&b,&c);max=a;min=a;if(ab)min=b;elsemax=b;if(cmax)max=c;elseif(cmin)min=c;printf(max=%d,min=%d,max,min);}4.2选择结构232020/1/29第四章基本控制结构例4.10输入1个正整数,判断其奇偶性。分析:对于一个正整数,要么是奇数,要么是偶数,共两种情况,则可以采用双分支选择结构实现程序功能。正整数的奇偶性可以使用求余(%)运算的结果来判断.4.2选择结构242020/1/29第四章基本控制结构#includestdio.hvoidmain(){intnumber;printf(\ninputanumberfortesting:);scanf(%d,&number);if(number%2==1)printf(\n%disanoddnumber,number);elseprintf(\n%disanevennumber,number);}4.2选择结构(number%2)252020/1/29第四章基本控制结构3.if-else-if形式:多路分支选择结构语句格式:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;……elseif(表达式n)语句n;else语句n+1;4.2选择结构262020/1/29第四章基本控制结构4.2.2if语句3.if-else-if形式:多路分支选择结构功能:依次计算表达式的值。当某个表达式的值为非0时,则执行其对应的语句,然后跳到整个if语句之外继续执行程序,即结束整个if语句。如果某个表达式的值为0时,则计算其下一个表达式的值,再进行判断。如果所有的表达式均为0,则执行语句n+1。然后继续执行后继语句。4.2选择结构272020/1/29第四章基本控制结构例4.11从键盘任意输入一个字符,判断其是数字、大写字母、小写字母或其它字符。分析:可以根据输入字符的ASCII码来判别类型。由ASCII码表可知,ASCII值小于32的为控制字符;在“0”和“9”之间的为数字;在“A”和“Z”之间的为大写字母;在“a”和“z”之间的为小写字母;其余为其它字符。4.2选择结构282020/1/29第四章基本控制结构程序:#includestdio.hvoidmain(){charc;printf(\ninputacharacter:);c=getchar();4.2选择结构if(c32)printf(\n\%c\isacontrolcharacter.\n,c);elseif(c='0'&&c='9')printf(\n\%c\isadigitcharacter.\n,c);elseif(c='A'&&c='Z')printf(\n\%c\isanupper.\n,c);elseif(c='a'&&c='z')printf(\n\%c\isalower.\n,c);elseprintf(\n\%c\isanothercharacter.\n,c);}292020/1/29第四章基本控制结构例4.12从键盘任意输入一个百分制成绩,判断其学业等级:优、良、中、及格或不及格,分别用A、B、C、D、E表示。分析:首先输入一个百分制分数,利用多分支结构判断此分数的取值范围,并根据取值范围确定该分数的等级范围:优、良、中、及格或不及格等。4.2选择结构302020/1/29第四章基本控制结构voidmain(){floatscore;printf(\nscore=?);scanf(%f,&score);if(score=90)printf(\n%4.1fisA.\n,score);elseif(score=80)printf(\n%4.1fisB.\n,score);e