18143-00 c程序设计教程_第1页
18143-00 c程序设计教程_第2页
18143-00 c程序设计教程_第3页
18143-00 c程序设计教程_第4页
18143-00 c程序设计教程_第5页
已阅读5页,还剩18页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2 第4章 语句结构顺序结构和选择结构本章要点: 掌握顺序语句结构的组成、特点和应用。 掌握选择语句结构的三种形式及其嵌套使用。 掌握switch结构的使用。4.1 概述 语句结构对提高程序质量至关重要。在第1章中我们已经知道组成C程序的主要成分是函数,而函数主要由语句组成。C语言中有各种各样的语句,从结构化程序设计的角度,主要可分顺序语句结构(简称顺序结构)、选择语句结构(简称选择结构)和循环语句结构(简称循环结构)。本章先讲顺序结构和选择结构。34.2 顺序语句结构 C语言中的顺序语句结构主要由表达式语句、说明语句、输入输出语句、空语句和复合语句组成。C语言中语句以分号“;”为结束标志。因

2、此只要有分号的地方就有一个语句,不管它前面是否有内容。1.表达式语句 任何表达式后面加分号就成为表达式语句。如 y=a+b*c/d; /* 赋值表达式语句 */ x*=668+p; /* 复合赋值表达式语句 */ a=15,b=64,c=46; /* 逗号表达式语句 */ i+; /* 算术表达式语句 */42.说明语句 变量的定义和函数的说明后面也加分号,统称说明语句(C语言中的说明语句只可出现在程序可操作语句的前面)。如 double x,y8,*p; /* 变量和指针说明语句 */ int add(int ,int ); /* 函数(第7章)说明语句 */ 3.输入输出语句 常用的有 格

3、式输入/出语句: scanf(“%d”,&a); printf(“%15.3fn”,b); 输入/出一个字符串语句: gets(p); puts(p); 输入/出一个字符语句: getchar(); putchar(ch); 程序暂仃语句: getch();54. 空语句 空语句是一种不执行任何操作的语句,它的特点是分号前没有内容,只有一个分号本身。如 ;/* 空语句 */ 5.复合语句 用一对大括号将两条或两条以上语句括起来组成一个复合语句,在C语言中相当于一条语句。如利用中间变量t交换两变量x和y的值,可写成复合语句: t=x;x=y; y=t; 复合语句又称块语句。复合语句可以嵌套使用。

4、若复合语句中包含一条或多条说明语句,那么这个复合语句又称分程序,或称块结构。 讲解例4.1和例4.2,其中例4.2是使用分程序的例子。6 设计者经常用图示的方法来表达程序设计中的语句结构,目前流行的有“常用流程图”和由美国学者I.Nassi和B.Shneiderman提出的“N-S流程图”。用这两种方法表达顺序语句结构如图4.1所示,其中(a)为常用流程图,(b)为N-S流程图。 (a) (b) 图4.1 顺序语句结构流程图 图中的“块”,可代表一条语句或几条语句,也可代表复杂的分程序(块结构),块结构里面还可包含C语言中的其它语句结构。图中只画了2块,根据实际需要可以按顺序画上更多模块。 a

5、块 b块 a块 b块74.3 选择语句结构4.3.1 概述 C语言提供的选择语句结构是实现结构化程序设计的基本成分之一,它是根据“条件”判断的结果决定程序执行的流向,因此该结构也称判断结构。其中“条件” 是一个表达式。程序执行的流向是根据表达式值是“非0”还是“0”来决定的。非0代表条件为“真”(成立);0代表条件“假”(不成立)。因为条件只有两个状态,程序执行的流向也只可能有两个选择,所以这种结构也称二分支结构。该结构是以关键字if开头,因此也简称它为“if结构”。if结构有三种形式:简单的if结构;if_else结构;if_else_if结构。 此外,本节还讲述一个由选择结构派生出来的多分

6、支结构(switch结构)。 84.3.2简单的if结构 这种结构可以写成:if(表达式)语句 这里的“表达式”就是决定程序流向的“条件”,当表达式的值为非0(逻辑“真”) 时执行“语句”,否则(表达式的值为0,即逻辑“假”)不执行“语句”,而程序直接进入该结构的下一句继续执行。这里的“语句”可以是简单语句,也可以是复合语句。此结构的执行过程如图4.3所示。9 (a)常用流程图 (b) N-S流程图图4.3 简单if结构流程图 (讲解例4.3)表达式 语句 真 假 表达式真假语句104.3.3 if_else语句结构 if_else语句结构是if结构的第二种形式,这种形式可以写成:if(表达式

7、)语句1else语句2 当表达式的值为非0(逻辑“真”)时,执行语句1,否则(逻辑“假”)执行语句2。这里的语句1和语句2可以是简单句,也可以是复合句。该语句的执行过程如图4.4所示。11表达式 语句2 语句1非0 0表达式真 假 语句 1语句 2 (a)常用流程图 (b) N-S流程图 图4.4 if_else语句结构流程图 (讲解例4.4、例4.5和例4.6)12 If_else结构中语句不多时,用一个条件表达式语句来替代,形式也很简洁,如要求a,b两整数比较大的那个数,用if_else结构可写成:if(ab) printf(“%d”,a);else printf(“%d”,b); 用条件

8、表达式语句就可写成:(ab)? printf(“%d”,a): printf(“%d”,b); 可见C语言中,语句和表达式之间的差异就看是否有分号,语句后的分号去掉了就是表达式。如printf(“%d”,a)是函数调用表达式,若后面加分号就成为输出语句了。13 不过当if_else结构中是复合语句,且包含很多语句时(如例4.5),不提倡用一个条件表达式语句代替,因为此时程序可读性变差,也有可能带来调试上的困难,因为编译系统指出程序的错误,最小单位是某一行的语句。 对于简单的二分支操作(如例4.6),为减少程序行,用条件表达式语句代替if_else结构也比较简洁。14 4.3.4 if_else

9、_if语句结构 if_else_if语句结构用于有多个条件选择的程序设计,该结构也是if开头,后面可以跟很多else_if,因此很多教科书中称其为else_if语句。这种形式可以写成:if(条件1)语句1else if(条件2)语句2 else if(条件n)语句nelse语句n+1 执行过程如图4.5,表示在n个条件中,满足某一个条件执行某一个语句,这n个条件一个也不满足时,执行语句n+1。如果没有语句n+1,那么最后一个else可以省略,此时这个if结构将不执行任何操作。同样这里的语句可以是复合语句。15 注意:if_else_if结构虽提供了多种选择,但对每种选择来说,只有二个可能,要么

10、成立,要么不成立,程序执行的流向对于每个条件来说也只有二个,所以仍属选择结构(二分支结构),跟下面将要讲的多分支结构要加以区别。 (讲解例4.7和例4.8) 条件1 条件2条件n语句n+1语句1语句2语句 n语句n+1条件1条件2条件nTTT .非0非0非000FFF语句n语句2语句1 图4.5 if_else_if结构流程图 (a)(b)164.3.4 if结构的嵌套 if结构可以嵌套使用。简单if结构中可以包含简单if结构;if_else结构中可以包含if_else结构;if_else_if结构中可以包含if_else_if结构。当然,它们还可以相互嵌套使用。1.简单if结构的嵌套 简单i

11、f结构的嵌套是在简单if结构中的“语句”中包含另外一个简单if结构,如例4.9的N_S流程图如下: 定义a,b,c,area输入a,b,ca+bcTb+caTc+abT计算三角形面积 FFF172. if_else结构的嵌套 if_else结构的嵌套指的是在if_else结构中的“语句”中包含另外一个if_else结构,如例4.10的N_S流程图如下: 定义a,b,c,area输入a,b,ca+bcb+cac+ab计算三角形面积打印出错打印出错打印出错 TT TFFF183. if_else_if结构的嵌套 if_else_if结构嵌套用得很多,例4.11用if_else_ if结构的嵌套求解

12、一元二次方程的根。 N_S流程图如下: 定义a,b,c,p,x1,x2,real,image输入a,b,ca=0&b!=0 输出单根a!=0 计算p,real,image输出单根输出复根p=0 p0 打印非法的或无意义的TTTTFFFF输出两个实根194. if结构的相互嵌套 if结构的三种形式,可以自身嵌套,也可以相互嵌套。if结构的嵌套要注意内嵌if结构的形式要完整,就是说要属于三种形式中的某一种,不要跟外层if结构相混,否则会引起致命的逻辑错误。特别是关键字else,它属于哪一个if结构,跟哪一个if相配对,这一点必须搞清楚。一般来说else总是跟离它最近的、且未配过对的那个if配对。

13、若每一层内嵌的if语句都包含else子句,这样if数目和else的数目相同,从内层到外层一一对应,清晰而不容易搞错。如果if和else的数目不一样,为实现程序设计者的企图,可以加花括号来确定配对关系。 20如有如下形式:if(表达式) if(表达式) 语句1 elseif(表达式) 语句2else 语句3 这时 限定了内嵌if语句的范围, 外的else不会与 内的if配对,这样做关系清楚,程序也不容易出错。 214.3.6 switch结构 switch结构只有一个“条件”,但根据表达式值的不同,程序可以转入不同的模块执行,因此称switch结构是多分支结构,一般形式是:switch(表达式)

14、case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1 22这种结构在其它高级语言中也称case语句。它的执行流程是:当表达式的值和某一个case后面的常量表达式的值相同时,程序执行这个case后面的语句(并接着执行下面全部case后面的语句)。N-S流程图如下图所示: (讲解例4.12) 表 达 式 常量表达式1 常量表达式2 常量表达式n default 语句1 语句2 语句2 语句n 语句n 语句n语句n1 语句n1 语句n1 语句n123 常用的switch形式是每个case分支语句后面都有一个break语句(除语句n+1外)。break语句的作用是跳出switch结构,去执行该结构下面的语句。如switch(表达式) case 常量表达式1 :语句1; break; case 常量表达式2 :语句2; break; case 常量表达式n :语句n; bre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论