您好,欢迎访问三七文档
第三章C语言程序的基本控制结构本章目录4.1程序的三种基本控制结构4.2顺序结构4.3选择结构4.4循环结构4.1程序的三种基本控制结构程序的三种基本结构是:顺序结构、选择(分支)结构、循环结构。任何一个结构化程序都可以由三种基本控制结构来表示,下面是这三种结构的流程图,见图4.1到4.3。AB入口出口表达式语句1语句2入口出口真假图4.1顺序结构图4.2选择(分支)结构条件循环体入口出口图4.3循环结构上述三种基本控制结构的共同特定是具有单入口和单出口。还有一种goto语句,又叫转向语句,在本章的4.4.5小节中将会讲解到。我们在编写程序时,力求使用前三种基本结构语句。4.2顺序结构顺序结构是最简单的一种程序结构,它通常由说明语句、表达式语句、函数调用语句和输入输出语句组成,是一种按程序的书写顺序依次执行的结构。一般也出现在选择结构或循环结构的语句体内,总之整个程序都存在顺序结构。1.表达式语句空和语句任何一个表达式,后面加一个分号就够成表达式语句,是C语言程序中最常用的语句。例如:x=a+b;(赋值表达式语句)++i;(算术表达式语句)printf(“%d”,a);(函数调用语句)等等,都是表达式语句。特别是在表达式语句中,如果没有表达式只有分号,即;则是一个空语句。空语句在语法上是一个语句,但不执行任何操作。4.2顺序结构2.复合语句在顺序结构中,语句常常以复合语句的形式出现在程序中。复合语句是指由两条或两条以上的语句用花括号{}括起来的语句序列。如果该语句序列中含有说明语句,这样的复合语句又称为分程序。复合语句在语法上作为一条语句,可以出现在任何单一语句可以出现的地方。复合语句的形式如下:{[说明语句部分]执行语句部分}其中,说明语句可以没有,如果有则放在执行语句的前面。例如,下面的复合语句实现交换两个变量的值:{inttemp;temp=a;a=b;b=temp;}该语句中定义的变量temp,只在本复合语句内有效。4.2顺序结构3.顺序结构程序设计顺序结构程序通常是由说明语句、表达式语句、函数语句和输入输出语句组成的一种顺序执行的程序结构。以前所举的程序例子都是顺序结构的程序。例4.1从键盘输入一个字符,求它的前一字符和后一字符,并输出它们的ASCII码。分析求输入字符的前导和后续字符,只需将输入字符的ASCII码值减1或加1,分别按照字符和整数格式输出即可。程序如下:#includestdio.hmain(){intc1,c2;scanf(%c,&c);c1=c-1;c2=c+1;printf(%c%4c%4c\n,c1,c,c2);printf(%d%4d%4d\n,c1,c,c2);}4.2顺序结构运行结果:4.3选择结构选择结构又称为分支结构,它根据对给定条件的判断,来选择某一个分支执行。C语言提供了解决这类问题的两个基本语句:if语句(条件语句)和switch语句(开关语句)。因为在进入程序分支结构前需要进行条件判断,所以我们需要先学习关系运算和逻辑运算的有关内容。4.3选择结构1.关系运算和关系表达式1.关系运算符C语言提供了一组关系运算符,如表4.1所示。它们用来比较两个运算对象之间的大小关系。运算符名称运算功能大于A大于B小于A小于B==等于A等于B=大于等于A大于等于B=小于等于A小于等于B!=不等于A不等于B关系运算符都是二元(双目)运算符,它们的优先级比算术运算符低,高于赋值运算符。在关系运算符中,、=、、=同级,它们高于==和!=。关系运算符的结合规则都有是自左至右。4.3选择结构2.关系表达式用关系运算符将两个表达式连接起来就构成了关系表达式。如:ab,x==y,a+b=c+b都是合法的关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。C语言没有专门的逻辑型数据,而是用1(或非0)表示真,用0表示假。因此表达式32的值为假,即为0。而表达式ab的值则取决于a,b的值,但只可能是真或假(非0或0)两种情况之一。下面我们来看一个例子:(设a=3,b=5):c=5-3a+1=b+2这个表达式中含有赋值、算术和关系三种运算。其中算术运算优先级最高,关系运算次之,赋值运算最低,所以先进行算术运算后得到:c=2=4=7然后进行关系运算,关系运算符的结合性为自左至右,先计算2=4,关系不成立,其值为0,即c=0=7再进行关系运算0=7,其值为1,所以c的值为1。对于字符型数据的比较,可按其ASCII码值进行。例如:‘a’’b’a的ASCII码值为97,b为98,关系不成立,值为0。‘a’50关系不成立,值为04.3选择结构2.逻辑运算和逻辑表达式1.逻辑运算符逻辑运算符是用来对运算对象进行逻辑运算的。C语言提供了三种逻辑运算符,如表4.2所示。运算符名称例子运算功能!逻辑反!aa反&&逻辑与a&&ba与b||逻辑或a||ba或b表4.2逻辑运算符4.3选择结构!逻辑非,单目运算符,自右至左结合。其运算规则是:当运算量为0,运算结果为1;反之,当运算量为1,运算结果为0。&&逻辑与,双目运算符,自左至右结合。其运算规则是:只有当运算符两边的运算量都是非0时,运算结果才为1,否则为0。||逻辑或,双目运算符,自左至右结合。其运算规则是:只要运算符两边的运算量有一个为为非0,运算结果就为1。只有两个运算量都为0,结果才是0。这三个运算符的优先级,逻辑非!最高,逻辑与&&次之,逻辑或||最低。!(逻辑非)的优先级高于算术运算符和关系运算符,而&&(逻辑与)和||(逻辑或)的优先级低于算术运算符和关系运算符。由此可见:ab&&cd相当于(ab)&&(cd)a==0||b==0相当于(a==0)||(b==0)!a&&b==c相当于(!a)&&(b==c)4.3选择结构2.逻辑表达式用逻辑运算符将逻辑量(逻辑的常量、变量、函数、关系表达式等)连接起来的式子称为逻辑表达式。逻辑表达式的值是一个逻辑值,用1表示真,用0表示假,而在判断一个量的真或假时,以非0表示真,以0表示假。例如a=3,b=2,,则:!a相当于!3为假,值为0a&&b相当于3&&2为真,值为1a&&!b相当于3&&0,值为0!a||b相当于0||2,值为1注意:逻辑“与”和逻辑“或”运算分别具有如下性质:1)a&&b,当a为0时,不管b为何值,结果为0。对b不作运算2)a||b,当a为1时,不管b为何值,结果为1。对b不作运算利用上述性质,在计算连续的逻辑与运算时,只要有一个运算对象的值为0,则整个表达式的结果为0,不再计算后继的运算对象;在计算连续的逻辑或运算时,只要有一个运算对象为1,则整个表达式的值为1,不再计算其它的运算对象。4.3选择结构例4.2main(){inta=1,b=1,x=1,y=0,z=3,p=4,c,d;c=(a=xy)&&(b=zp);printf(“a=%db=%dc=%d\n”,a,b,c);}运算结果:程序中变量a的值经过运算后为0,对于&&运算符来讲,有一个运算对象为0,就不计算另外的运算对象(b),所以b的值保持不变为1。请读者注意。关系运算和逻辑运算经常用于流程控制,如选择语句或循环语句的条件表达式中。4.3选择结构3.if语句if语句是条件选择语句,它通过判断是否满足给定的条件来决定所要执行的操作。1if语句的三种形式1.if(表达式){语句}例如:if(x==y)printf(“ok”);这种if语句的的执行过程见图4.4。表达式语句假(0)真(非0)图4.44.3选择结构2.if(表达式){语句1}else{语句2}例如:if(x==y)printf(“ok”);elseprintf(“no”);见图4.5表达式语句1语句1图4.5真假4.3选择结构3if(表达式1){语句1}elseif(表达式2){语句2}elseif(表达式3){语句3}……elseif(表达式m){语句m}else{语句n}流程图见图4.6。表达式1表达式2表达式3表达式4语句5语句4语句3语句2语句1真真真真假假假假图4.64.3选择结构例如:if(score=85)p=’A’;elseif(score=70)p=’B’;elseif(score=60)p=’C’;elsep=’D’;说明:1)三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表达式。也可以是其它类型的表达式,只要能够判断最后确定的值为真或假就行了。2)else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。else语句只能和它最近的上面的if进行配对结合。3)在if和else后面可以只含一个内嵌的操作语句,这时可以不用花括号“{}”括起来,也可以有多个操作语句,此时必须用花括号“{}”将几个语句括起来成为一个复合语句。4.3选择结构例4.3幼儿园里三个小朋友站队要求小个站在前面,高个站在后面。分析:我们可以把个子最小的小朋友放在a位置上,较高的小朋友放在b位置上,个子最高的小朋友放在c位置上。输入三个数,a,b,c,要求按由小到大的顺序输出。先比较a和b,若a大于b,则a与b对换,再比较a和c,若a大于c,则a与c对换,这时a的值是最小的,最后比较b和c,若b大于c,则b与c对换。这样操作之后就使abc的关系成立。然后顺序输出a,b,c既可。4.3选择结构程序如下:main(){floata,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%4.2f,%4.2f,%4.2f,a,b,c);}运行结果:4.3选择结构2if语句的嵌套在if语句中又可包含一个或多个if语句,这种形式称为if语句的嵌套。一般形式如下:if()if(){语句1}else{语句2}elseif(){语句1}else{语句2}应当注意if与else的配对关系。else总是与它上面的最近的if配对。如果if与else的数目不一样,为实现程序设计者的企图,可以加花括弧来确定配对关系。例如:if(){if()语句1}else语句2这时花括号“{}”限定了内嵌if语句的范围,因此else与第一个if配对。4.3选择结构例4.4有一函数-1(x60)Y=0(x=60)1(x60)编写程序,输入一个x值,输出y值。程序如下:#includestdio.hmain(){intx,y;printf(Pleaseinputamumber:\n);scanf(%d,&x);if(x60)y=-1;elseif(x==60)y=0;else/*else总是与它上面的最近的if配对*/y=1;printf(TheYis%d.\n,y);}4.3选择结构运行结果:本题还有其它方法,请读者试着编一下。4.3选择结构4.switch语句上节介绍的if语句,一般适用于有两个的选择的情况,尽管也可以通过if嵌套形式实现多多个的选择。但这种方式由于嵌套层次过多,影响了程序的可读性。C语言提供了一种更方便于多分支选择的switch语句,称开关语句。它的一般形式如下:switch(表达式){case常量表达式1:语句1[break;]case常量表达式2:语句2[break;]……case常量表达式n:语句n[break;]default:语句n+1}其中,switch、case、default和break均为C语言的保留字,[]内的break可以不写。switch后面的表达式通常为整型、字符型或枚举型。常量表达式又称开关常数或分支标号,必须是与表达式类型对应一致的整数、字符或枚举常数。语句1~n+1,可以是单个语句,也可以是多个语句,如果是多个语句也不必用{}括起来。default和语句组n+1部分可以省略。4.3选择结构switch语句的执行过程是:1.首先计算switch后面圆括号内表达式的值,然后依次与
本文标题:计算机c语言
链接地址:https://www.777doc.com/doc-6983044 .html