任务四简单数学计算程序的编写.docx
- 文档编号:7819537
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:14
- 大小:57.28KB
任务四简单数学计算程序的编写.docx
《任务四简单数学计算程序的编写.docx》由会员分享,可在线阅读,更多相关《任务四简单数学计算程序的编写.docx(14页珍藏版)》请在冰豆网上搜索。
任务四简单数学计算程序的编写
任务四简单数学计算程序的编写
任务单
任务序号
1-4
任务名称
简单数学计算程序的编写
任务内容
通过对C语言整型数据的学习,编程计算任意两个整数的和、差、积、商
任务目标
知识目标
●掌握常用的数学运行符;
●熟悉应用程序的开发步骤;
●掌握结构化程序设计的三步曲;
●理解程序调试与测试中的全覆盖概念;
●熟悉算法的概念;
●了解数据结构的概念;
●理解对于任何一个程序都不能断言其完全正确,只能说到目前为止没有发现错误的概念。
专业能力目标
●会编写顺序结构程序;
●会用单步运行方法调试程序。
方法和社会
能力目标
●能在老师指导下完成相关内容的学习;
●能与同学讨论解决程序设计中的问题。
任务完
成时间
4(课内)+4(课外)
任务完成形式
学习记录、程序及程序调试记录
学习计算机语言,就是为了用计算机语言编写程序,指挥计算机有条不紊地按要求进行工作,本任务起我们将逐步介绍结构化程序自顶向下、逐步细化的程序设计方法以及模块化的程序设计理念。
一、任务准备(引导文)
(一)一个简单的整型数据加法程序分析
(1)整数加法程序
程序说明部分
/*求两个整数的和*/
/*程序名:
add.c*/
/*编程者:
丁丁*/
/*日期:
2009-11-12*/
编译预处理部分
#include
#include
main()
{
/* 定义变量*/
intiNum_1,iNum_2,iSum;
数据输入部分
/*变量赋初值*/
iSum=0;
/*输入求和的数*/
iNum_1=16;
iNum_2=23;
处理部分
/*求和*/
iSum=iNum_1+iNum_2;
/*输出和值*/
处理结果输出部分
system(“cls”);
printf(“SUM=%d\n”,iSum);
}
(2)程序结构分析
●程序说明部分。
这部分是用来对程序的基本信息进行说明的,便于阅读程序,主要包含程序功能描述、源程序名称、作者以及修改日期等,这部分的内容基本类似。
●
编译预处理部分。
ANSIC标准规定可以在C源程序中加入一些预处理命令,以改进程序设计环境,提高编程效率,放在程序说明之后。
如本例中的“#include
一般以.h为后缀的文件,通常是系统自带,常常包含一些常用函数、符号常量、结构体等的定义。
以.C为后缀的文件通常是用户源程序文件。
编译预处理是指在编译前进行的预处理,#include命令是将某个文件包含进来。
C语言还有其它两类编译预处理命令,即符号常量定义和条件编译预处理命令。
图4-1表示了#include命令的处理过程,(a)图是源程序文件f.c,其中用#include命令把stdio.h头文件包含进来;(b)图表示头文件stdio.h文件的语句序列;(c)图是经过编译预处理后得到的源程序文件f.c。
系统真正编译时,是对(c)图源程序文件进行编译的。
●数据输入部分。
这部分是给接下来的处理程序提供处理数据的,就是把要计算机进行处理的对象(信息),采用某种形式输入给计算机。
如本例中“iNum_1=16;”表示其中的一个加数是16。
●处理部分。
处理部分是整个程序中最核心的内容,要对输入的数据,根据要求编程指挥计算机进行工作,完成相应的功能。
处理部分,在计算机中有一个专门的术语叫算法,就是用计算机解决问题的过程或者步骤。
这个过程(步骤)非重要,不能出现逻辑错误,出现逻辑错误,计算机是无法判别的,最终导致计算结果出现错误。
●处理结果输出部分。
这部分负责将计算机处理的结果用用户所期望的形式进行输出。
●变量定义部分。
程序需要对输入数据进行处理,并且处理后会获得处理结果,以及处理的中间结果,对于这些数据,需要进行保存,将它们保存在计算机的存储器中。
为了使用方便,C语言中用变量来对存储单元进行标识,C语言还规定,所有的变量需要先定义后使用,因此通常在程序的开头部分是变量的定义。
如本例中“intiNum_1,iNum_2,iSum;”语句,表示定义了三个整型变量,分别叫iNum_1、iNum_2、iSum,计算机在编译时,会在内存中给这三个变量各分配2个字节的存储空间,用于存放整型数据。
变量的定义要根据需要,预先进行规划,如需要的变量个数以及变量的类型等。
一般的程序还包含全局变量定义部分(后续内容)和函数说明部分。
●函数说明部分。
由于实现所需要功能的程序往往比较长,语句比较多,为了方便程序的设计,往往将一个程序分解成若干个功能模块,然后根据需要对这些功能模块进行组合。
C语言中用函数来表示功能模块,这些函数除了系统定义的之外,往往还需要设计人员根据需要定义自己所需的功能模块,通常情况下将这些函数的定义放在main函数之后,但C语言又规定必须先定义后使用,所以需要在程序的开头部分增加对自定义的函数进行说明的语句,如任务二中的程序,在main函数之前,都有函数的说明语句。
综上所述,一个C语言程序通常由7部分组成,每一部分都分别表示不同的功能,一个规范的程序,这些部分是不可少的,并且通常的编排顺序也基本相同。
(3)程序语句分析
程序说明部分不再分析了。
编译预处理部分
#include
#include
表示将系统的两个头文件包含进来,以便其后的程序对其所定义函数的调用,如printf和system函数的调用。
主函数main,是整个程序逻辑的具体体现,是程序执行的入口,可以理解为程序的主模块。
通常一个程序模块包含变量的定义、变量赋初值、数据的输入、处理和输出部分。
其中变量的定义、赋初值和数据的输入可合并成输入部分,因此通常将一个模块分成三部分,即输入、处理和输出部分,我们在进行程序设计时,从这三分部入手规划整个程序,这三部分也称为程序设计的三步曲。
●输入部分
针对本例求两个整数和的程序,输入部分需要考虑定义变量的个数和类型(即数据输入需要考虑输入对象的具体表示形式,在计算机中有一个专有名词数据结构来进行描述。
见拓展阅读),一共有三个整型数据需要保存,因此我们定义了三个整型变量,分别是iNum_1、iNum_2、iSum,其中iNum_1、iNum_2用于存放需要求和的两个整数,iSum用于存放所求的和。
整型变量的定义语句如下:
intiNum_1,iNum_2,iSum;
此语句同时定义了三个整型变量,各变量之间用“;”隔开,如果一次定义一个变量,则可用如下形式:
intiNum_1;
intiNum_2;
intiSum;
一般系统对于int整型变量,通常每个变量分配两个字节的存储空间,因此这样的变量,其能存放的数值范围是-32768~32767,如果超过这个范围,则所存放的值可能不正确。
定义变量时,注意变量的取名规则,本书约定采用匈牙利式命名规则,“i”前缀表示是int型变量,其后为变量名(标识符),C语言规定标识符由字母或下划线开头,后跟字母、数字、下划线,总长度小于等于8(VC++6.0允许的变量名不受此限制)。
变量定义好了之后,需要根据实际情况,给变量赋相应的初值。
如“iSum=0;”语句,就是根据程序的实际需要,用于存放和的变量,初值一般为0。
变量赋值就是用赋值运算符“=”进行赋值,其格式如下:
变量名=<表达式>(见拓展阅读)
程序执行时,先计算右边表达式的值,然后再把计算的结果赋给左边的变量。
iNum_1=16;
iNum_2=23;
表示要求的是16和23的和。
●处理(算法)部分
数据输入之后,需要进行处理,也就是求和。
本例的求和非常简单,就是用加法运算符“+”构成一个加法表达式,再把加的结果赋给变量iSum,即可,语句如下:
iSum=iNum_1+iNum_2;
当执行到上述语句时,先计算iNum_1+iNum_2,再把计算的结果赋给变量iSum,这样就把和存放在变量iSum中。
●输出部分
处理结束后,需要将计算结果进行输出。
本例需要输出的就是计算的和,也就是将变量iSum的值进行输出,一般用printf函数将需要输出的内容显示到屏幕上,语句如下:
printf(“SUM=%d\n”,iSum);
printf函数是一个系统函数,包含在stdio.h文件中。
printf函数的调用格式如下:
printf(“字符串”,输出项列表);
其中“字符串”可包含原样输出的普通字符串和格式字符串,本例中“SUM=%d\n”字符串,“SUM=”是原样显示的普通字符串,以“%d”开头的是格式字符串,“%”是格式串的标记,“d”表示输出项输出的是一个整型值,“\n”是转义字符,表示换行的意思。
printf函数可同时输出多个输出项,如下所示:
printf(“Number_1=%d,Number_2=%\n”,iNum_1,iNum_2);
该语句执行后的输出结果为:
Number_1=16,Number_2=23
输出部分,我们还调用了system函数,用于在输出前把屏幕擦除干净,便于用户查看输出结果。
(二)应用举例
【例4-1】请编程求两个整数的积。
/*求将华氏温度转换为摄氏温度*/
/*程序名:
product.c*/
/*编程者:
周朋诚*/
/*日期:
2010-11-11*/
#include
#include
main()
{
/* 定义变量*/
intiNum_1,iNum_2,iSum;
/*变量赋初值*/
iSum=0;
/*输入求差的数*/
iNum_1=97;
iNum_2=32;
/*求摄氏温度*/
iSum=iNum_1-iNum_2*5/9;
/*输出所求摄氏温度的值*/
system(“cls”);
printf(“SUM=%d\n”,iSum);
}
本例和求和程序的不同之处是把“+”运算符改成了乘法运算符“*”,其余没有改变,因此我们同样可以编写出求差和求商的程序。
其中减法运算符为“-”,除法运算符是“/”,和数学中一样,除数不能为0,并且注意,如果是两个整数相除,则商也是整数。
(C语言中的运算符见附录2)
【例4-2】已知园的半径为5,请编程求园的面积和周长。
(π取3)
针对题目要求,根据程序设计的三步曲进行如下分析:
输入部分:
根据题目要求,需要输入的数据只有一个半径。
处理部分:
●计算周长,利用公式:
周长=2×半径×π
●计算面积,利用公式:
面积=半径×半径×π
输出部分:
输出部分是所求园的周长和面积。
根据输入和输出分析,需要存储三个值,分别是半径、周长和面积,因此我们需要定义三个变量,iRadiu,iPerimeter,iArea。
程序如下:
/*求园的体积和表面积*/
/*程序名:
circle.c*/
/*编程者:
周朋诚*/
/*日期:
2010-11-11*/
#include
#include
#definePI3
main()
{
/* 定义变量*/
intiRadiu,iPerimeter,iArea;
/*变量赋初值*/
iArea=0;
iArea=0;
/*输入半径数*/
iRadiu=6;
/*输入高*/
iHigh=12
/*求体积和表面积*/
iArea=1/3*iRadiu*iRadiu*iHigh*PI
iArea=2*iRadiu*iRadiu*PI+2*iRadiu*PI*iHigh
/*输出体积和表面积*/
system(“cls”);
printf(“Aera=%d\n”,iAera);
printf(“Aera=%d\n”,iAera);
}
此程序中我们又使用了一条编译预处理命令“#definePI3”,其作用是定义一个符号常PI。
符号常量通常用大写字符串表示,当程序中经常要使用到某些特殊的常量时,为了编程方便,通常将这些常量定义为一个符号来表示,在程序中需要用到这些常量的地方,就用定义的符号来代替。
这样做的好处是,当需要修改这些常量时,只需要在定义的地方修改常量即可,节省了修改时间,减少了出错的可能性。
#define编译预处理命令,在编译前,系统会自动将出现符号常量的地方用常量本身去替换。
对上述程序,系统编译前会将出现PI的地方,自动用“3”去替换。
二、任务实现
1.调试add.c程序,并将调试过程记录于表1中,如果要求-45和78的和,应该如何修改程序,并进行调试。
2.调试【例4-1】的程序,并用分别用356,678和32767,4两组数据进行调试,分析这两组数据计算的结果是否正确,为什么?
3.编程计算两个整数的商,并用45,15和56,34两组数据进行调试,分析运算结果是否正确,为什么?
4.调试【例4-2】的程序,自己再用其它的半径值进行调试,分析结果是否正确,为什么?
5.用单步运行方法执行程序,观察指令的执行顺序。
三、想一想
1.【例4-2】的程序中,π取的是整数,这样计算就不精确,误差很大,如果取小数,C语言能不能实现呢?
请阅读拓展部分关于实型数据类型。
2.为什么对一个调试通过的程序只能说到目前为止还未发现错误,而不能说这个程序完全正确?
3.语法错误和逻辑错误有什么区别?
四、用一用(作业)
1.编程将华氏温度转换为摄氏温度,如华氏温度为97。
转换公式为:
摄氏温度=(华氏温度-32)*5/9。
(注意该题如果将5/9移到前面,会是什么结果?
为什么?
)
2.已知圆柱体的半径为6,高为12,请编程求其体积和表面积。
(π取3)
五、学习小结
姓名
班级
任务名称
日期
序号
问题/要求
解答
解决问题的途径
1
常用的数学运行符有哪些?
2
结构化程序设计的三步曲是什么?
3
程序调试与测试中的全覆盖概念是什么?
4
什么是算法?
5
符号常量有什么用处?
6
本次课的总结
我的问题
体会
六、拓展阅读
(一)结构化程序设计方法
从上面这样一个简单的加法程序我们可以看到,除了基本的说明部分外,此程序由三部分组成,分别是数据输入部分、中间处理部分和处理结果输出部分。
其实任何一个程序(包括函数)都是由这样三部分组成,因此我们在进行程序设计时,只要按这三部分对程序进行分析,采用自顶向下、逐步细化的方法来设计程序。
结构化程序设计由迪克斯特拉(E.W.dijkstra)在1969年提出,是以模块化设计为中心,采用自顶向下、逐步求精的方法和"单入口单出口"的控制结构。
,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。
每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序或者是函数。
结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。
模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。
(二)数据结构
数据结构描述的是数据之间的相互关系,也即是数据的组织形式,以便计算机进行处理。
一般包含三方面的内容:
①数据元素之间的逻辑关系,也称数据的逻辑结构;②数据元素及其关系在计算机存储器内的表示,称为数据的存储结构;③数据的运算,即对数据施加的操作。
可将通过键盘输入的不同字符组织为层次结构,从简单的数据字段到复杂的集成数据库网络,皆是如此。
(字段1)
(字段2)
(字段3)
(字段4)
(字段5)
(记录1)
姓名
学号
英语
数学
总分
(记录2)
张霞
20100900213
67
73
(记录3)
陈玉萍
20100500785
83
102
(记录4)
李娟
20100854323
79
104
图4-1学生成绩表
如图4-1所示,多个字段可组合为一个记录,多个记录可组合为一个文件。
另外还可以看到,每个字段仅仅是一个字符集。
下面列出一些数据结构术语及其定义。
字符:
字母、数字、标点符号,或者特殊符号,如%、@和&等。
字段:
字符集,是由字符组合成的单个数据单元。
如图4-1中,姓名字段一般的长度8,即最多一个人的姓名允许由8个字符组成,一个汉字算2个字符。
而学号字段则由11个字符。
记录:
逻辑上相关的字段的结合。
如图4-1中,一个记录由姓名、学号、英语、数学和总分五个字段组成。
文件:
逻辑上相关记录的集合。
针对特定应用程序组合在一起的记录称为文件。
如图4-1就可保存成一个数据文件。
数据库:
集成的记录或文件的集合。
数据库由多个文件组成,并且这些文件可由多个应用程序文件进行访问和处理。
(三)语法错误和逻辑错误
逻辑错误可能是程序设计过程中的错误,也可能是设计实现方案中出现的错误。
逻辑错误与语法错误不同,计算机没有与之相应的检测方法,所以有时难于查找。
逻辑错误通常是由程序规划不当或推理错误而导致的。
虽然从语法上讲,语句编码是正确的,但程序仍生成错误的输出。
语法错误是指违反语言编写规则的错误,换而言之,所编写的语句是错误的,在执行过程中被驳回。
语法错误通常是因为拼写错误或输入错误而造成的。
无论什么原因,要使程序成功运行,就必须改正语法错误,并重新编译源程序。
(四)算术及括号运算符
表4-1算术运算符
运算符
运算
举例
+
加
3+5
-
减
12-7
*
乘
8*12
/
除
9/3
%
取模
9/4
算术运算符表示加、减、乘、除和取模等标准数学运算。
表4-1列出了各种算术运算符。
对于运算符,我们需要注意其功能、需要运算对象的个数、运算符的优先级及运算的结合性四个内容。
运算对象的个数分为单目、又目和三目三种。
优先级表示在一个表达式中有多个运算符时,优先级高的先进行运算,当出现同级运算符时,运算次序由结合方向决定,如果都是左结合,则从左到右运算,反之则从右到左运算。
C语言运算符共分15个优先级。
取模运算是唯一要求运算对象必须是两个整型值,其功能是求两个整数相除的余数。
如9%4的结果是1,9%3的结果是0。
注意:
两个整数相除时,其结果还是整数。
如5/3结果为1。
括号运算符—():
表示括号内的运算要先进行,并且左右括号要成对使用。
如(9-12)*4,则先计算括号内的表达式9-12,然后再用计算的结果乘以4。
C语言中各类运算符见附录2。
(五)表达式
表达式就是用运算符将常量、变量和函数连接起来的有意义的式子。
表达式可分为算术表达式、关系表达式、逻辑表达式、赋值表达式、逗号表达式等。
算术表达式就是用算术运算符连接起来的有意义的式子。
如30*12+56,sqrt(b*b-4*a*c)。
注意:
C语言的运算不可以省略,并且没有上下角的表示,所有的符号都是同高的。
(六)整型数据类型
1.整型数据
整型数据,就是指所处理的对象都是整数,如29,-12等称为整型常量。
C语言为了方便使用,允许用十进制、八进制和十六进制表示整型常量。
十进制整型常量:
456,-3,29;
八进制整型常量:
以“0”开头的整数,表示八进制,如036,-0145,056;
十六进制整型常量:
以“0X”开头的整数,表示十六进制,如0X36,0X5F,-0X23B6。
2.整型变量的定义
计算机所存储的信息都是以二进制的形式进行存储的,因此,一个整型数据,在计算机中也是以二进制形式进行存储的。
根据所定义的整型变量的不同,其采用的二进制存储位数也不相同。
(1)基本整型
其定义符为int,前缀标识符为i,定义格式为:
int变量列表;
如:
intiSum;
intiNum_1,iNum_2;
int型变量在内存中一般是分配2个字节的存储空间,即16个二进制位,最高位表示符号位,0表示是正数,1表示为负数。
其可表示数的范围是-215~215-1,即-32768~32767。
如给iSum赋值为17,则其存储形式如下图:
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
如果是一个负数,则在计算机中是用负数的补码进行存储的。
如-17,在计算机中存储的是-17的补码,其存储形式如下图:
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
(2)长整型
由于基本整型可表示数的范围比较小,不能满足实际应用,C语言又定义了长整型变量,其定义符为long[int],前缀标识符是l。
如:
longlBalance;
long型变量在内存中一般是分配4个字节的存储空间,即32个二进制位,最高位表示符号位,0表示是正数,1表示为负数。
其可表示数的范围是-231~231-1,即-2147483648~2147483647。
(3)其它整型
实际使用中,有时候所要表示的数据是没有符号的。
C语言中可以定义无符号整型变量来存放这些数据。
只需要在前面两种整型变量的前面加上unsigned符号即可。
如:
unsignedintuiYear;
表示定义了一个无符号的基本整型变量uiYear,这样,内存分配的16位全部用来表示数据的大小,因此其表示数据的范围是0~65535,即0~216-1。
上课安排
1.用5分钟编写一个对转义字符进行功能验证的程序;
2.演示加法程序的单步执行过程,体会顺序结构;
3.通过上机练一练要求学生自己自学其它类型变量的定义;
4.通过上机练一练要求学生明白两个整数相除运算的意义。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任务四 简单数学计算程序的编写 任务 简单 数学 计算 程序 编写