模块2结构化程序设计.ppt
《模块2结构化程序设计.ppt》由会员分享,可在线阅读,更多相关《模块2结构化程序设计.ppt(233页珍藏版)》请在三一办公上搜索。
1、实用C语言程序设计教程李金祥 顾小晶 主编,Visual C+,模块2结构化程序设计,任务1 顺序结构程序设计和程序的基本结构学习目标 了解程序设计的三种基本结构,掌握流程图的绘制方法。,案例1 计算课程总评成绩1.问题描述 已知某学生课程A的平时成绩、实验成绩和期末考试成绩,求该课程的总评成绩。其中平时、实验和期末成绩分别占20、30和50。,2.1.1 案例讲解,2编写程序(1)定义整型变量score1、score2 和score3分别存放课程A的平时成绩、实验成绩和期末考试成绩;定义实型变量total存放总评成绩;(2)输入score1、score2 和score3的值;(3)根据比例计
2、算总评成绩total=score1*0.2+score2*0.3+score*0.5;(4)输出总评成绩total。,3编写源程序/*EX2_1.C*/#include stdio.h void main()int score1,score2,score3;float total;printf(请输入成绩:);scanf(%d%d%d,printf(总评成绩是%.1fn,total);4运行结果图2-1 案例1运行结果,5归纳分析 案例1程序的执行过程是按照源程序中语句的书写顺序逐条执行的,这样的程序结构称为顺序结构。模块1中的程序均属于顺序结构。顺序结构在程序自上而下执行时,程序中的每一条语
3、句都要执行一次,并且只执行一次,以这样固定的处理方式只能解决一些简单的任务。但实际应用中,往往会出现一些特别的要求,比如根据某个条件来决定下面该进行什么操作,或根据某个要求不断地重复执行若干动作,这就需要控制程序的执行顺序。,2.1.2 基础理论,1三种基本控制结构 程序中语句的执行顺序是由程序设计语言中的控制结构规定的。控制结构有顺序结构、选择结构及循环结构三种基本结构。顺序结构是最简单的结构。选择结构又称为分支结构,当程序执行时,计算机按一定的条件选择下一步要执行的操作。例如:输入三角形的三条边计算面积时,要判断三条边是否能构成三角形,若能则计算面积,否则要告诉用户输入错误。循环结构又称为
4、重复结构,它是程序中需要,按某一条件反复执行一定的操作而采用的控制结构。例如,从键盘上输入20个整数,求其累加和。三种结构之间可以是平行关系,也可以相互嵌套,结构之间通过复合可以形成复杂的结构。已经证明,由以上三种基本结构顺序组成的程序结构,可以解决任何复杂的问题。由三种基本结构构成的程序称为结构化程序。2.程序流程图,在对一个复杂问题求解时,程序的结构比较复杂,所以在程序设计阶段为了表示程序的操作顺序往往先画出程序流程图,这样有助于最终写出完整正确的程序。下面介绍流程图的有关概念。流程图是用规定的图形、连线和文字说明表示问题求解步骤(算法)的一组图形,具有直观、形象、易于理解等优点。流程图使
5、用的图形符号见表2-1。流程图中的每一个框表示一段程序(包括一个或多个语句)的功能,各框内必须写明,要做的操作,说明要简单明确,不能含糊不清。如在框内只写“计算”,但却不写出计算什么,就不容易让人明白。一般来说,用得最多的是矩形框和菱形框。矩形框表示处理,不进行比较和判断,只有一个入口和一个出口;菱形框表示进行检查判别,有一个入口,两个出口,即比较后形成两个分支,在两个出口处必须注明哪一个分支是对应满足条件的,哪个分支是对应不满足条件的。,表2-1 流程图图形符号,前面介绍的三种基本结构的流程图可分别用图2-2、图2-3和图2-4表示。其中循环结构有两种形式:当型(图2-4(a)和直到型(图2
6、-4(b)。图2-4 循环结构,3.C语句 在模块1中,我们已经了解了C语言程序的基本构成。其中C语句是程序的主要部分。C语句一般可分为:表达式语句、控制语句、复合语句和空语句。(1)表达式语句 表达式语句由一个表达式加上分号构成,一般格式为:表达式;最常用的表达式语句是赋值表达式语句,例如:total=score1*0.2+score2*0.3+score*0.5;,在C语言中,任何一个合法的C语言表达式后面加上一个分号就成了一个语句,例如:m=a+b是表达式,不是语句 i+;是语句,作用是使i加1 x+y;也是语句,作用是完成x+y的操作,它是合法的,但并不把结果赋给变量,所以没有实际意义
7、。案例1中出现的以下语句:printf(请输入成绩:);scanf(%d%d%d,称为函数调用语句,是由一次函数调用加上一个分号构成。函数调用语句也属于表达式语句。(2)控制语句 控制语句是用于控制程序执行流程的。C语言中有以下九种控制语句,它们是:(1)if()else条件语句(2)switch多分支选择语句(3)for()循环语句(4)while()循环语句,(5)dowhile()循环语句(6)continue 结束本次循环语句(7)break中止执行switch或循环语句(8)goto转向语句(9)return函数返回语句 其中语句(1)和(2)用于实现程序的选择结构,语句(3)(5)
8、用于实现程序的循环结构。(3)复合语句,复合语句是用一对花括号括起来的一组语句,又称块语言。一般格式为:语句1 语句2 语句n 在以后的案例程序中将会经常使用到复合语句。(4)空语句,空语句是仅有一个分号的语句,格式为:;空语句被执行时实际上什么也不做。但在后面的案例程序中我们将会看到它的特殊用途。,2.1.3 技能训练,【实验2.1.1】编写程序,求一个三位正整数的各位数字之和。例如756的各位数字之和为7+5+6=18.【指导】(1)问题分析 首先要正确分离出三位正整数的个位数、十位数和百位数:百位数可用对100整除的方法求得,如756/100=7;十位数用对100求余的结果再对10整除求
9、得,如756%100/10=5;个位数用对10求余求得,如756%10=6。(2)求解步骤,定义变量num存放三位正整数;变量n1、n2和n3分别存放个位数、十位数和百位数;变量sum 存放和;分离正整数num;求和;输出结果。(3)编写源程序/*EX2_2.c*/,#include stdio.h void main()int num,n1,n2,n3,sum;printf(请输入一个三位正整数:);scanf(%d,(4)运行结果图2-5实验2-1运行结果,【实验2.1.2】用流程图表示求解下述问题的程序流程。(1)问题描述 根据人体的身高和体重因素,可以按以下“体重指数”对人的肥胖程度进
10、行划分:体重指数t=体重w/(身高h)2(w单位为kg,h单位为m)当t27时,为肥胖。,(2)问题分析 该问题需要采用选择结构来实现。具体步骤如下:输入体重w和身高h;计算体指数t;根据体指数t 判断体型。(3)流程图,图2-6 实验2-2流程图,【实验2.1.3】用流程图表示输入10个整数,输出其中最大数的求解步骤。(1)问题分析 该问题采用循环结构实现反复输入数据和比较数据,数据的比较则用选择结构完成。具体步骤如下:设变量a存放输入的数据,变量max存放最大数;输入第一数a,并将它设为最大值(默认为最大),即max=a;,依次读入数据,与max比较,若比max大,则用当前数代替max中的
11、值,如此循环9次;输出最大数。(2)流程图,图2-7 实验2-3流程图,2.1.4 拓展与练习,【练习1】编写程序求解一元二次方程ax2+bx+c=0的根(假定方程有实根)。编程要求:(1)画出流程图;(2)从键盘输入系数a、b、c,输入前要有如下提示:“请输入系数”;(3)以“x1=”和“x2=”的格式输出方程的根。【练习2】用流程图表示判断一个数能否同时被3和5整除。,【练习3】从键盘输入20学生的成绩,统计合格和不合格学生的人数。成绩大于等于60为合格,否则为不合格。用流程图表示求解步骤。,2.1.5 编程规范与常见错误,1.编程规范(1)表达式比较复杂时,可以在运算符的两边各加一个空格
12、,使源程序更加清晰。例如:total=score1*0.2+score2*0.3+score3*0.5;age=20,避免这样的书写习惯:int num;scanf(%d,。,2.常见错误(1)表达式漏括号。例如计算x=,写成x=-b/2*a。源程序能通过编译,但运行结果会出错。正确的写法是x=-b/(2*a),或x=-b/2/a。(2)语句漏分号。这是初学者上机时遇到的最多问题。例如程序中有以下语句:sum=num1+num2;ave=sum/2.0;编译时会出现出错提示:syntax error:missing;before identifier ave。表示由于前一语句漏分号引起语法错误
13、。,2.1.6 贯通案例之一,1.问题描述 学生成绩管理系统可以分为八个主要的模块,包括加载文件模块、增加学生成绩模块、显示学生成绩模块、删除学生成绩模块、修改学生成绩模块、查询学生成绩模块、学生成绩排序模块和保存文件模块。2.系统模块结构,图2-8 功能模块结构图,3.编写程序实现系统主菜单的显示/*EX2_3.C*/#include stdio.h main()printf(#=#n);printf(“#学生成绩管理系统#n);printf(#-#n);printf(#copyright 2009-10-1#n);printf(#=#n);printf(“#1.加载文件#n);printf
14、(“#2.增加学生成绩#n);,printf(“#3.显示学生成绩#n);printf(“#4.删除学生成绩#n);printf(“#5.修改学生成绩#n);printf(“#6.查询学生成绩#n);printf(“#7.学生成绩排序#n);printf(“#8.保存文件#n);printf(“#0.退出系统#n);printf(#=#n);,4运行结果图2-9 系统主菜单界面,任务2 选择结构程序设计,学习目标 掌握关系运算符、逻辑运算符,熟练掌握 if else 的三种用法,领会 switch 与 break 语句的作用。,2.2.1 案例讲解,案例1 出租车计费1问题描述 某市出租车3公
15、里的起租价为10元,3公里以外,按1.8元/公里计费。现编程输入行车里程数,输出应付车费。2编程分析(1)用实型变量km存放行车里程数,实型变量fee存放车费;(2)输入行车里程数;(3)根据行车里程数作出判断,进行不同的处理;,(4)输出车费。3编写源程序/*EX2_4.C*/#include main()float km,fee;printf(输入行车里程数:);scanf(%f,if(km=3.0),fee=10.0;else fee=10.0+(km-3.0)*1.8;printf(%.2f公里,请付¥%.2fn,km,fee);,4运行结果图2-10 案例1运行结果,5归纳分析 案例
16、1需要根据行车里程数作出选择进行不同的两种计算。处理此类两个分支问题时常使用if语句。if语句是用来判断给定的条件是否满足,根据判断的结果(真或假)决定执行某个分支的操作。(1)if语句的一般形式 if()else,(2)执行过程:计算的值,若结果为“真”(非0),则执行,否则,执行。if-else构成了一个两路分支结构。流程图见图2-11。(3)注意if后面的必须用圆括号括起来;if和else同属于一个if语句,else不能作为语句单独使用,必须与if配对使用。,案例2 计算三角形的面积1问题描述 输入三角形的三个边长,判断能否构成三角形,若能则计算并输出三角形的面积,否则输出出错信息。2编
17、程分析(1)用实型变量a、b和c表示三角形的三条边,实型变量area表示三角形的面积;(2)构成三角形的条件是任意两边之和大于第三边;,(3)如满足构成三角形的条件,计算并输出三角形的面积;否则输出出错信息。计算三角形的面积使用海伦公式:其中:3编写源程序,/*EX2_5.C*/#include#include main()float a,b,c;float area,s;/*s为中间变量,存放三角形的半周长*/printf(Please input a b c:);scanf(%f%f%f,if(a+bc&a+cb&b+ca)/*判断输入的a,b,c能否构成三角形*/,s=(a+b+c)/2
18、.0;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area is%fn,area);elseprintf(input errern);,4运行结果图2-12 案例2三边符合构成三角形的运行结果,图2-13案例2三边不符合构成三角形的运行结果,5归纳分析 当输入的三条边符合构成三角形条件时,进行计算并输出三角形的面积时需要三条语句完成,此时必须用一对花括号把它们括起来,即使用复合语句的形式。案例3 数制转换1问题描述,输入一个无符号整数,然后按用户输入的进制代号,分别以十进制(代号d)、八进制(代号o)和十六进制(代号x)数的形式输出。2编程分析(1)设变量ua存储
19、无符号整数、变量code表示进制代号;(2)根据输入的进制代号输出相应的数据。流程图如图2-14所示。,图2-14 案例3的流程图,3编写源程序/*EX2_6.C*/#include main()int ua;char code;printf(请输入无符号整数和进制代号:);scanf(%d%c,switch(code)case d:printf(十进制数:%d n,ua);break;case o:printf(八进制数:%o n,ua);break;case x:printf(十六进制数:%x n,ua);break;default:printf(进制代号错误!);,4运行结果 图2-15
20、 案例3运行结果1,图2-16 案例3运行结果2,5归纳分析 案例3是一个多路分支问题,程序中使用了C语言提供的实现多路选择的语句switch语句。(1)switch语句根据一个供进行判断的表达式的结果来执行多个分支中的一个,其一般形式如下:switch()case:case::,case:default:其中,每个“case:”称为case子句,代表一个case分支的入口。因此每个case后面的值必须互不相等。(2)switch语句的执行过程 先计算的值,然后依次与每个case子句后面的的值进行比较,如果,匹配成功,则执行该case子句后面的,在执行过程中,若遇到break语句,就跳出swi
21、tch语句,否则就继续执行后面的,直到遇到break语句或执行到switch语句的末尾();若表达式的值不能与任何一个匹配,则执行default子句所对应的语句。default子句是可选项,如果没有该子句,则表示在所有匹配都失败时,switch语句什么也不执行。,案例4 字符类型判断。1问题描述 从键盘输入一个字符,判断是英文字母、数字字符还是其他字符。2编程分析(1)输入字符存放在变量ch中;(2)如果是英文字母,输出“是英文字母”,转(4);否则转(3);(3)如果是数字字符,输出“是数字字符”,否则输出“是其他字符”;,(4)结束运行。其中英文字母可以用表达式“ch=A&ch=a&ch=
22、0&ch=9。流程图见图2-16所示。,图2-17案例4流程图,3编写源程序/*EX2_7.C*/#include main()char ch;printf(请输入一个字符:);scanf(%c,else if(ch=0,4运行结果 图2-18 案例4运行结果1,图2-19 案例4运行结果2,5归纳分析 本案例中,对给定问题要分三种情况进行判断。这就需要使用嵌套形式的if语句来实现。if语句的嵌套就是在一个if语句中又包含另一个if语句。(1)if语句的一般嵌套形式 if()if()内嵌if-else语句 else else 外层if-else语句 if()内嵌if-else语句 else,上
23、面的一般形式中是在if和else 中各自内嵌一个if-else语句。(2)嵌套形式不具有固定的语句格式。本案例中使 用的在外层if语句中的else的后面内嵌一个if-else语句的形式。自上而下看流程图2-16可知,当ch是英文字母时,执行路径为;当ch是数字文字符时,执行路径为,ch是其他字符时,执行路径为。,2.2.2 基础理论,1if语句的缺省形式 如果if-else语句中else后面的是空语句时,则if语句可简化为:if()其执行过程是:计算的值,如果的值“真”(非0),执行,否则什么也不做,转去执行if语句的后继语句。流程图见图2-20。,图2-20流程图,用缺省形式的if语句重写【
24、案例1】。#include main()float km,fee;printf(输入行车里程数:);scanf(%f,程序中在if语句前加了一条语句fee=10.0;,当输入的行车里程数小于3公里时,不再需要计算车费,所以可以采用缺省的if语句。2if和else的配对规则 使用if语句的嵌套形式时,如果if的数目和else的数目相同,它们的配对关系比较清楚。但由于存在if语句的缺省形式,会出现if与else的数目不一样的情况,初学者往往会弄错它们的配对关系。因此,必须正确理解C语言中if与else的配对规则。C语言规定:else与前面最接近它而又没有和其它else配对的if配对。,下面的程序是
25、试图判断x是大于0的偶数还是小于等于零。现分析一下程序在x分别取值为8、-5和5时的输出结果。#include main()int x;printf(Enter x:);scanf(%d,if(x0),if(x%2=0)printf(x0 and x is even.n);else printf(x=0.n);,程序运行情况1:Enter x:8 x0 and x is even.,程序运行情况2:Enter x:-5,程序运行情况3:Enter x:5 x=0.,从程序运行的三种情况来看:情况2、3的结果显然是错误的。为什么呢?从书写格式上看,编程者是试图使else与第一个if组成if-el
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模块 结构 程序设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6585265.html