您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言程序设计_2 第7章 程序设计基础
第7章程序设计基础7.1语句与流程7.2if语句7.3switch--case语句7.4循环结构程序退出7.1语句与流程一个C语言程序的执行部分由语句组成。程序的各种功能(如输入、输出、计算、打印等)也由语句实现的。C语言的语句可分为表达式语句、函数调用语句、控制语句、复合语句以及不执行任何操作的空语句。7.1.1表达式语句表达式语句由表达式加上分号(;)组成。其一般形式为:表达式;例如以下都是表达式语句:a=b+c;y++;x*y;执行表达式语句就是计算表达式的值。7.1.2函数调用语句函数调用语句由函数名、实际参数加上分号组成。其一般形式为:函数名(实际参数表);执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,可以返回也可以不返回函数值。它相当于其他语言中的调用子程序。7.1.3控制语句控制语句用于控制程序的流程,以实现程序的顺序、分支、循环等各种结构方式。有以下三类共九种:1条件判断语句主要有if语句及switch语句。关于其用法我们后面还要详细讲解。2循环执行语句主要有do—while语句、while语句和for语句。关于其用法我们后面还要详细讲解。3转向语句主要有break语句、goto语句、continue语句和return语句。关于其用法我们后面还要详细讲解。7.1.4复合语句把多个语句用大括号“{}”括起来组成的一个语句称复合语句。C语言的编译系统把复合语句作为是单条语句对待。如下所示就是一个复合语句:{b=c+d;a=e-f;printf(%d%d,x,a);}复合语句中的各条语句都以分号“;”结尾。注意,在大括号“{}”之后不要加分号。7.1.5空语句空语句就是什么也没有的语句,也就是只有分号的语句。空语句不执行任何操作,但仍然有一定的用途。比如,预留位置或用来作空循环体。请看以下例子:while(getchar()!='\n');这段程序的作用是:等待键盘输入,若输入回车则继续等待重新输入,只有输入回车才结束。循环体只有一个空语句。如果没有这一个空语句,则会出现错误。7.1.6程序的流程C语言程序的流程与其它语言相似,也是有以下三种基本结构:顺序结构、分支结构、循环结构。“顺序结构”由一系列语句组成,在执行时依次逐一执行每一条语句。从该结构的开头到结尾;“分支”就是在执行到某一语句后,根据某种条件,决定其后执行哪些语句;所谓循环就是当在某种条件满足时(或不满足时),一直执行某些语句。分支结构往往依赖于条件语句。7.2if语句用if语句可以构成分支结构。它可以通过对给定条件的判断,决定执行那个分支程序段。7.2.1基本形式if(表达式)语句;其意义为:若表达式的值为真,则执行其后的语句,否则不执行该语句。if结构是一个典型的分支结构。【例7-1】(见课本)【例7-2】(见课本)7.2.2if-else形式if(表达式){语句序列1;}else{语句序列2;}其意义为:若表达式的值为真,则执行“语句序列1”,否则执行“语句序列2”。若“语句序列1”或“语句序列2”为一条时,则可以去掉相应的{}。7.2.3if-else-if形式前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(表达式1)语句序列1;elseif(表达式2)语句序列2;elseif(表达式3)语句序列3;…elseif(表达式m)语句序列m;else语句序列n;其意义是:先判断“表达式1”的值,若其值为真,则执行“语句序列1”;否则判断“表达式2”的值,若为真,则执行“语句序列2”;若为假,则继续判断“表达式3”,依次类推。当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行“语句序列n”。然后继续执行后续程序。【例7-4】(见课本)7.2.4if语句中应注意的问题分支语句的复杂性关键在于表达式,表达式通常是逻辑表达式或关系表达式,但是也可以是其它表达式,甚至也可以是一个变量。例如:if(a=8);if(c);只要表达式的值为非0,即为“真”,就执行其后的语句。【例7-5】(见课本)在if语句中的表达式必须用括号括起来;如果要想在if语句中满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。注意复合语句的}之后不能加分号;7.2.5if语句的嵌套当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。其一般形式可表示如下:if(表达式)if语句;或者if(表达式)if语句;elseif语句;在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。特别应该注意的是,else总是与它前面最接近的if配对。【例7-6】(见课本)【例7-7】(见课本)【例7-8】(见课本)7.3switch--case语句判断语句可以实现两个分支的程序流程。但编程中往往要求实现多个分支的程序流程,这就要使用开关语句,也叫做多分支语句。其一般形式为:switch(表达式){case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;......case常量表达式n:语句组n;break;default:语句组n+1;break;}其执行过程是:首先计算表达式的值,然后把表达式的值与其后的常量表达式值逐个相比较。当表达式的值与某个常量表达式的值相等时,即执行相应的case后的语句。执行完毕后不再执行其它语句,退出开关语句。若如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。若没有default语句,则退出此开关语句。以上格式中的break语句是必不可少的。若缺少了这个语句,则程序在执行完毕相应的case语句后不能退出,而是继续执行其后的其它语句。这是不规范的,但不是错误的。有些编写程序的高手会巧妙地利用这一点,实现一种顺序与梯度相结合的流程。格式中的表达式为控制表达式,其作用为控制程序的流程。它的数值类型必须与case语句中常量表达式的类型一致。所有常量表达式的类型必须相同,而它们的值必须不同。【例7-12】(见课本)【例7-13】(见课本)7.4循环结构程序循环结构在程序设计中十分重要。所谓循环结构就是当给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。7.4.1while语句while语句最简单的情况为循环体只有一个语句,其形式如下所示:while(表达式)语句;但是,while语句通常使用更复杂的形式,也就是其一般形式,如下所示:while(表达式){语句序列;}其中表达式是循环条件,语句序列为循环体。while语句的意义为:计算表达式的值,若表达式的值为真(非0)时,则执行循环体语句;不断反复,直到表达式的值为假(0),则不执行循环体语句,而直接转向循环体外的第一条语句。注意,whlie语句后没有分号(;)。若表达式的值永远为真,则循环体被不断地执行,也就是说,永远不能从循环中退出,我们通常称这种循环为“死循环”。在绝大多数情况下,都不允许死循环。为了保证循环体可以结束,通常采用每循环一次向某种方向改变表达式的值,使得表达式的值最终可以为假。还有一种方法是在某种条件下,强行从循环体中跳出(如使用break语句)。循环体中也可以包含循环,这样就构成了循环的嵌套。【例7-14】(见课本)【例7-15】(见课本)7.4.2do-while语句do-while语句也是一种循环语句,它的一般形式为:do{语句序列;}while(表达式);其中语句序列是循环体,表达式是循环条件。do-while语句的语义是:先执行循环体语句一次,再判别表达式的值,若表达式的值为真(非0)则继续循环,否则终止循环。do-while语句和while语句的区别在于:do-while是先执行后判断,因此do-while至少要执行一次循环体。而while是先判断后执行,如果条件不满足,则一次循环体语句也不执行。while语句和do-while语句一般都可以相互改写。【例7-16】(见课本)【例7-17】(见课本)对于do-while语句还应注意以下几点:在if语句、while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号;do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套;在do和while之间的循环体由多个语句组成时,必须用{}括起来;do-while和while语句相互替换时,要注意修改循环控制条件;7.4.3for语句for语句也是一种循环语句,其功能是把某些语句重复执行若干次。它的一般形式为:for(表达式1;表达式2;表达式3){语句序列;}当语句序列中只有一个语句时,{}可以省略。“表达式1”通常用来给循环变量赋初值。当然,也允许在for语句外给循环变量赋初值,此时可以省略该表达式。“表达式2”通常是循环条件,以便决定是否继续执行循环体。一般为关系表达式或逻辑表达式。“表达式3”通常可用来修改循环变量的值,一般是赋值语句。三个表达式都是可选项,都可以省略,此时就相对简单了。也可以是逗号运算符,此时的情况就更复杂一些。一般形式中的“语句序列”即为循环体。for语句的执行过程是:第一步,计算表达式1的值。第二步,计算表达式2的值。若值为真(非0)则执行循环体一次,否则跳出循环。第三步,计算表达式3的值,转回第二步重复执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。循环体可能多次执行,也可能一次都不执行。【例7-18】(见课本)【例7-19】(见课本)在使用for语句中要注意以下几点:for语句中的各表达式都可省略,但分号间隔符不能少。在循环变量已赋初值时,可省去表达式1。省去“表达式2”或“表达式3”则可能造成无限循环,这时应在循环体内设法结束循环。否则就会“死循环”。这通常时不允许的;循环体可以是空语句。空语句可以用来实现延时,也就是在程序执行中等待一定的时间。应注意,延时程序会因计算机速度的不同而执行的时间不同。如下为延时程序:for(i=1;i1000,i++);注意以上语句末尾的逗号(;)不能省略,它代表了一个空语句。for语句也可与while语句、do-while语句相互嵌套,构成多重循环。此时程序变得比较复杂,必须认真对待,尤其是要深刻理解循环开始、结束的条件;【例7-20】(见课本)【例7-21】(见课本)7.4.4break语句break语句只用在switch语句或循环语句中,其作用是无条件跳出switch语句或跳出本层循环,转去执行后面的程序。break语句不需要语句标号与之配合。break语句的一般形式为:break;使用break语句可以使循环语句有多个出口,使程序避免了一些不必要重复,提高了程序效率。7.4.5continue语句continue语句只能用在循环体中,其一般格式是:continue;其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,而是立即转入对循环条件的判断与执行。应特别注意的是,continue语句只结束本层本次的循环,并不跳出循环。具体说:对whlie和do--whlie语句,continue语句立即执行对whlie的括号中()的条件表达式的判断;对for语句,continue语句在不执行其后的语句后,先求解“表达式3”,再求解“表达式2”。【例7-22】(见课本)7.4.6goto语句在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱。能避免使用goto则应避免使用,确实不得不用时,才使用goto。goto语句也称为无条件转移语句,其一般格式如下:goto语句标号;goto语句的语义是改变程序流向,立即跳转到标号所标识的语句。语句标号是按标识符规定书写的符号,放在某一语句行
本文标题:C语言程序设计_2 第7章 程序设计基础
链接地址:https://www.777doc.com/doc-3969009 .html