高级语言程序设计 课件 第4章 结构化程序设计_第1页
高级语言程序设计 课件 第4章 结构化程序设计_第2页
高级语言程序设计 课件 第4章 结构化程序设计_第3页
高级语言程序设计 课件 第4章 结构化程序设计_第4页
高级语言程序设计 课件 第4章 结构化程序设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

第4章结构化程序设计4.1结构化程序设计方法结构化程序三种基本结构4.2

顺序结构程序设计4.34.4选择结构程序设计4.5循环结构程序设计本章内容导读本章主要介绍结构化程序设计方法以及与三种基本结构相关的语句。通过学习本章,读者应掌握以下内容:了解结构化程序的三种基本结构;掌握字符和格式输入/输出函数的调用格式和功能;掌握单、双和多分支选择语句的格式和功能;掌握while语句、do-while语句、for语句、break语句和continue语句的格式和功能。结构化程序设计(StructuredProgramming)以模块功能和处理过程设计为主的详细设计的基本原则。1965年由E.W.Dijkstra

提出。基本思路把一个复杂问题的求解过程分阶段进行,每一阶段处理的问题都控制在人们容易理解和处理的范围内。具体方法自顶向下,逐步求精模块化设计结构化编码4.1结构化程序设计方法一、顺序结构二、选择结构三、

循环结构4.2结构化程序三种基本结构

顺序结构是按书写顺序依次执行语句操作。1、顺序结构4.2结构化程序三种基本结构单分支选择结构仅包含一个条件,其功能是根据条件是否成立,决定是否执行某个操作。

注:表达式可以是任意表达式,若“非0”则执行操作。

操作条件否是2、选择结构4.2结构化程序三种基本结构双分支选择结构

仅包含一个条件,其功能是根据条件是否成立,决定从两个操作中选取一个操作执行。操作1操作2条件是否2、选择结构4.2结构化程序三种基本结构多分支选择结构

包含n(n>1)个条件,其功能是根据某个条件是否成立,从n+1个操作中选取一个操作执行。表达式1否操作2是操作1表达式2否表达式n否操作n+1操作n

是是2、选择结构4.2结构化程序三种基本结构

当型循环结构直到型循环结构次数型循环结构3、循环结构4.2结构化程序三种基本结构顺序结构的程序组成(1)程序开头的编译预处理命令。

程序中要使用的库函数(又称系统函数),除了printf()和scanf()函数外,其它的都必须使用编译预处理命令将相应的头文件包含进来。(2)顺序结构的程序由完成具体功能的各个语句和运算组成。主要包括:变量类型的说明提供数据的语句运算部分输出部分4.3顺序结构程序设计格式一变量=表达式;功能:计算表达式的值,然后赋予变量。格式二变量复合赋值运算符表达式;功能:将变量和表达式进行指定的算术或位运算后,再将运算结果赋予变量。C语言中事先编好的函数(称为库函数或系统函数)或用户自定义函数(用户函数)都是通过函数调用实现其功能的,并获得函数的返回值。格式函数名(参数1,参数2,…,参数n);

功能:调用指定的库函数或用户自定义函数,对圆括号中的参数进行该函数指定的运算,运算结果作为函数的返回值返回。1、赋值语句2、函数调用语句4.3顺序结构程序设计格式表达式;功能:计算表达式的值。格式

{语句1;语句2;…语句n;

}功能:依次执行语句1,语句2,…,语句n。说明(1)复合语句可以包含多条语句,但整体上是作为一条语句看待。(2)复合语句中若有数据定义语句,则应放在复合语句中其它语句的前面。3、表达式语句4、复合语句4.3顺序结构程序设计C语言中的输入和输出操作,均是利用C语言编译系统提供的库函数实现的,C语言本身并没有提供这两类语句。

字符输出函数putchar()调用格式:putchar(ch)功能:把一个字符输出到标准输出设备(显示器)。

参数:ch可以是一个整型变量、字符型变量、整型常量或字符型常量,也可以是一个转义字符或整型表达式,但不能是字符串。

返回值:输出ch对应的单个字符。

说明:源程序(文件)开头需要加入编译预处理命令#include<stdio.h>或#include"stdio.h"。5、字符输入/输出函数4.3顺序结构程序设计

字符输入函数getchar()

调用格式:getchar()功能:从标准输入设备(键盘)上读入一个字符。

参数:无参数。

返回值:输入的单个字符。

说明(1)getchar()函数只能用于单个字符的输入,一次输入一个字符。输入的数字也是按字符处理。当输入多于一个字符时,只接收第一个字符。(2)getchar()函数输入的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,而作为表达式的一部分。(3)源程序(文件)开头需要加入编译预处理命令#include<stdio.h>或#include"stdio.h"。5、字符输入/输出函数4.3顺序结构程序设计格式输出函数printf()调用格式:printf(格式控制字符串,输出项表)功能:按照用户指定的格式把指定的数据显示到标准输出设备(显示器)。

说明(1)格式说明符与输出项一一对应,若格式说明符的个数少于输出项个数时,则多余的输出项不输出;若格式说明符的个数多于输出项个数时,则对缺少的项输出不确定值。(2)不需要编译预处理命令。格式输入函数scanf()调用格式:scanf(格式控制字符串,输入项首地址表)功能:从键盘按照“格式控制字符串”中规定的格式读取若干个数据,然后按照“输入项首地址表”中的顺序,依次将数据存入相应的变量。

说明:不需要编译预处理命令。6、格式输入/输出函数4.3顺序结构程序设计printf(格式控制字符串,输出项表)普通字符(原样输出)格式说明符

%+/-0m.nl格式字符正号左对齐域宽左补0当输出实型数据时,表示输出n位小数;当输出字符串时,表示截取前n个字符输出。在格式字符d、o、x和u之前输出长整型数据;在格式字符e、f、g之前输出双精度实型数据。d:以有符号的十进制整数形式输出;o:以八进制无符号形式输出整型数;X或x:以十六进制无符号形式输出整型数;c:输出一个字符(只占一列宽度);s:输出字符串;f:以小数形式、按系统默认的宽度,输出单精度和双精度实数。

scanf(格式控制字符串,输入项首地址表)普通字符(原样输入)格式说明符

%mhl*格式字符域宽输入短整型数据,可用在格式字符d、i、o、x之前。表示本输入项在读入后不赋予相应的变量。在格式字符d、o、x和u之前输入长整型数据;在格式字符e、f、g之前输入双精度实型数据。d:以十进制有符号形式输入整型数据;o:以八进制无符号形式输入整型数据;X或x:以十六进制无符号形式输入整型数据;c:输入一个字符;s:将一个字符串输入到字符数组;f、e:输入实型数据。注意①如果相邻两个格式字符之间,没有指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入一个数据后按回车,然后再输入下一个数据。例如int

num1,num2;

scanf("%d%d",&num1,&num2);若num1输入12,num2输入36,则正确的输入操作如下:12□36←┘或者12←┘36←┘②输入实数时不能规定精度。例如,floatx;

scanf("%7.2f",&x);是错误的。

注意③格式控制字符串”中出现的普通字符(包括转义字符),务必原样输入。例如int

num1,num2;scanf("%d,%d",&num1,&num2);若num1输入12,num2输入36,则正确的输入操作如下:12,36←┘

&变量名④在以%d、%f、%lf、%e输入数值型数据时,遇到以下情况,系统认为数据输入结束。遇到空格或回车键或者Tab键输入结束,可用它们作为数据之间的分隔符。遇到宽度结束。例如“%3d”,只取3列,即系统自动按域宽截取所需数据。遇到输入数据与格式说明符类型不一致,则输入结束。遇到非法输入结束。例如在输入数值型数据时,遇到字母等非数值符号(数值符号仅由数字字符0~9、小数点和正、负号构成)。注意⑤在“格式控制字符串”中除了格式字符外还有其它字符,则在输入数据时应输入与这些字符相同的字符。例如int

x,y;scanf("%d,%d",&x,&y);则正确的输入操作如下:1,2←┘⑥以“%c”输入单个字符时,空格、回车键和转义字符均作为有效字符输入,因此输入的数据之间不需要分隔符。例如charch1,ch2,ch3;

scanf("%c%c%c",&ch1,&ch2,&ch3);若从键盘输入A□B□C←┘则将'A'赋值给ch1,空格'□'赋值给ch2,'B'赋值给ch3。正确的输入是连续输入3个字符,中间不加空格,即:xyz←┘单分支选择语句格式if(表达式)语句;功能:计算表达式的值,若为“真”(非0),则执行语句;否则不执行语句。

注:表达式可以是任意表达式,语句可以是任何语句(除了数据定义语句),也可以是另一个if语句(称为嵌套的if语句,后面将介绍)。语句表达式0非04.4选择结构程序设计if-else语句(双分支选择语句)格式if(表达式)语句1;

else语句2;功能:计算表达式的值,若为“真”(非0),则执行语句1;否则执行语句2。语句1语句2表达式非004.4选择结构程序设计【例4-1】输入一个整数,判断奇偶。#include<stdio.h>int

main(void){

int

n;

printf("Inputanumber\n");

scanf("%d",&n);

if(n%2==0)

printf("Thenumberiseven\n");

else

printf("Thenumberisodd\n");

return0;}

Inputanumber

100ThenumberisevenInputanumber25Thenumberisodd例

if

(n>0)

if(a>b)c=a;

elsec=b;if语句允许嵌套,在if语句中包括一个或多个if语句。if语句的嵌套(分支嵌套的一般形式)这种嵌套是在if-else语句的任一分支上嵌套单分支的if选择结构或双分支的if选择结构。注:else总是与前面最近的并且没有与其他else匹配的if相匹配。例

if(n>0){if(a>b)c=a;}

elsec=b;

4.4选择结构程序设计【例4-2】求一个点所在的象限。#include<stdio.h>intmain(void){ floatx,y;

printf("Inputthecoordinateofapoint\n");

printf("x=");

scanf("%f",&x);

printf("y=");

scanf("%f",&y);

if(x>0)

if(y>0)printf("Thepointisin1stquadrant.\n");

elseprintf("Thepointisin4thquadrant.\n");

else

if(y>0)printf("Thepointisin2ndquadrant.\n");

elseprintf("Thepointisin3rdquadrant.\n");

return0;}

Inputthecoordinateofapointx=5y=3Thepointisin1stquadrant.Inputthecoordinateofapointx=-2y=-7Thepointisin3rdquadrant.

if-else-if语句的嵌套(分支嵌套的特殊形式)这种嵌套是在每一层else分支下嵌套一个if-else语句。if(表达式1)语句1Elseif(表达式2)语句2

elseif(表达式3)语句3

……

elseif(表达式n)语句n

else语句n+1表达式1假(0)语句2真(非0)语句1表达式2假(0)表达式n假(0)语句n+1语句n真(非0)真(非0)4.4选择结构程序设计switch-case语句(多分支选择语句)格式switch(表达式){case常量表达式1:

语句组1

break;

case常量表达式2:

语句组2

break;

……case常量表达式n:

语句组nbreak;

default:

语句组n+1}表达式语句组1语句组2语句组n语句组n+1=常量表达式1=常量表达式2=常量表达式n=default…………breakbreakbreak说明(1)每个case后面的“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的操作)。(2)case后面的“常量表达式”仅起到语句标号的作用,并不进行条件判断。系统一旦找到入口标号,即从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。(3)程序的执行结果与各case和default子句的先后次序无关。(4)多个case子句,可共用同一个语句(组)。(5)switch语句实现的多分支选择结构,完全可以用if语句或if语句的嵌套来实现。(6)break语句是C语言的一种语句,其功能是中断正在执行的语句,将在本章第五节介绍。在switch语句中它的作用是执行完某一语句(组)后,退出该switch语句,无条件转至switch语句的下一条语句。若省略break语句,则执行完某一语句(组)后,将继续执行switch语句中其后的所有语句(组)。(7)default及其后面的语句(组)可以省略。省略时,若表达式的值和n个常量表达式的值均不同,则不执行任何操作就退出该switch语句。(8)语句组不需要用一对花括号{}括起来。(9)switch语句允许嵌套。【例4-3】switch语句嵌套的实例。#include<stdio.h>intmain(void){

intx=1,y=0,a=0,b=0;

switch(x)

{case1:switch(y){case0:a++;break;

case1:b++;break;

}

case2:a++;b++;break;

case3:a++;b++;}

printf("a=%d,b=%d\n",a,b);return0;}

a=2,b=1例如,计算1-100的累计和。根据已有的知识,可以用1+2+……+100求解,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器sum,其初值为0,利用sum+=n计算(n依次取1、2、……、100),只要解决以下3个问题即可:将n的初值置为1;每执行1次sum+=n后,n增1;

当n增到101时,停止计算。此时,sum的值就是1至100的累计和。

根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了当型循环结构、直到型循环结构和次数型循环三种循环结构实现。提供了while、do-while和for三种循环语句实现上述三种循环结构。4.5循环结构程序设计格式

while(表达式)

语句;功能:计算表达式的值,当其值为“真”(非0),则执行语句;重复执行上述操作,直至表达式的值为“假”(0)时为止。说明(1)语句又称为“循环体”,可以是任何语句(除了数据定义语句外),通常是复合语句。(2)表达式称为“循环控制条件”,可以是任何类型的表达式,常用关系型或逻辑型表达式。(3)先判断,后执行循环体,即表达式不成立时,循环体最少执行0次;(4)当循环体内无改变表达式的语句(如

i++)时,while(1)是死循环。(5)若循环体中又含有“循环语句”,则称为循环的嵌套,即多重循环。while表达式语句0非01、while语句4.5循环结构程序设计格式

do语句;

while(表达式);功能(1)执行语句;(2)计算表达式,如果其值为“真”(非0),则转至(1)继续循环;否则,转至(3);(3)执行do-while语句的下一条语句。说明(1)先执行循环体,后判断。无论表达式成立不成立,循环体最少执行1次。(2)

do-while语句能够实现的功能for语句也能实现,而且更简洁。do表达式语句0非02、do-while语句4.5循环结构程序设计格式for(表达式1;表达式2;表达式3)语句;说明①表达式1的作用变量赋初值;表达式2的作用是控制循环的条件;表达式3的作用是循环后修正变量,使循环趋向结束。②表达式1可以是任何类型,其后面有一个分号,表达式1可以省略。③表达式2可以是任何类型,其后面有一个分号,表达式2可以省略。省略时相当于表达式2的值永远为“真”(非0),所以循环将一直执行,这种情况称为“死循环”,一般应避免。

表达式2语句0非0表达式1表达式3变量赋初值循环条件修正变量循环体While循环3、for语句4.5循环结构程序设计说明④表达式3可以是任何类型,其后面没有分号,表达式3可以省略。⑤表达式1、表达式2和表达式3均可以缺省,甚至三者全部缺省,但它们之间的分号不能省略。表达式1和3省略时,相当于while循环,即先判断,后执行;循环体最少执行0次。当环:表达式3省略时,则循环体内应有改变表达式2的语句。当表达式2省略时,无终止条件,则循环体内应有跳出该循环的语句,如break、exit()、return等。注意:在三种循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。

3、for语句4.5循环结构程序设计

为了使循环控制更加灵活,C语言提供了break语句和continue语句。在循环体内使用break语句和continue语句可以改变循环状态。break语句的作用是强制结束循环,即提前结束循环。表达式2……break;…...假(0)真(非0)for表达式1表达式3switch表达式语句组1break;语句组2break;语句组nbreak;语句组[break;]…...常量1常量2常量ndefaultcase表达式……break;……假(0)真(非0)whiledo……break;…...表达式假(0)真(非0)while4、break和continue语句4.5循环结构程序设计4、break和continue语句

continue语句的作用是强制结束本次循环。表达式2……continue;…...假(0)真(非0)for表达式1表达式3真(非0)do……continue;…...表达式假(0)while表达式……continue;……假(0)真(非0)while4.5循环结构程序设计功能(1)break:强行结束循环,不再执行循环体中break语句后面语句。(2)continue:立即结束本次循环,转去判断循环控制条件是否成立,即跳过continue之后的语句,重新判断循环控制条件,决定是否继续执行循环。说明(1)break语句能用于三种循环语句和switch语句,continue语句只能用于三种循环语句。(2)continue语句的作用是强制结束本次循环,而不是终止整个循环过程;break语句的作用是终止整个循环过程,不再判断循环控制条件是否成立。注意:循环嵌套时break语句和continue语句均只影响

温馨提示

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

评论

0/150

提交评论