第五章 函数

第五章   函数
第五章   函数

第五章函数

“函数”是自定义函数和子程序的统称。子程序可以用来独立出一段具有特定功能的程序代码,供其它地方调用。自定义函数可以用来扩充出fortran库函数中原来不存在的函数。

5-1 子程序(subroutine)的使用

写程序时,可以把某一段常常被使用、具有特定功能的程序代码独立出来,封装成子程序,以后只要经过调用的call命令就可以执行这一段程序代码。先来看一个使用子程序的实例。

1.program ex0501

2. implicit none

3. call message( ) !调用子程序message

4. call message( ) !再调用一次

5. stop

6.end

7.!子程序message

8.subroutine message( )

9. implicit none

10. write(*,*)"hello"

11. return

12.end

执行结果如下:

hello

hello

程序的第3、4行出现了一个新命令“call”,而call在程序中的意义就如同它的英文原意,是“调用”的意思。所以第3、4行的意思就是“调用一个名字叫做message的子程序”。

子程序和前面所提到的“主程序”(以program开头、end来结束之间的这一段程序代码)最大不同处在于:主程序的程序代码,在程序一开始就自动会被执行,而子程序则不会自动执行,它需要被别人‘调用’才会执行。这就是它之所以被称作“子”的原因。

子程序的程序代码以subroutine开头,它同样要取一个名字,以end或end subroutine 来结束。

一个包含子程序的fortran程序在结构上的模样大致如下:

program main ←----------主程序

……

……←------------------主程序代码

……

end program main ←------主程序结束

subroutine sub1( ) ←----第1个子程序

……

……←------------------子程序代码

……

end subroutine sub1←----第1个子程序结束

subroutine sub2( ) ←----第2个子程序

……

……←------------------子程序代码

……

end subroutine sub2←----第2个子程序结束

主程序并不一定要放在程序代码的最开头,它可以安排在程序中的任意位置,可以先写子程序再写主程序,这都是可以的。

子程序最后一个命令通常是“return”,表示程序要“返回”原来调用它的地方来继续执行程序。如果像主程序一样写成了stop,就会导致子程序执行完后,整个程序就跟着全部结束,这通常不是使用子程序时所想要看到的现象。return命令可以省略。

关于子程序还有一个重要的概念,就是“子程序独立地拥有属于自己的变量声明”。也就是说,在主程序和其它的子程序之间,所声明出来的变量是彼此不相干的,假使在主程序与其他的子程序中使用了同样的变量名称,它们也是彼此没有关系的不同变量。

不过严格来说,不同的程序之间所声明的变量,还是有办法让它们牵扯出关系来。在调用子程序时,可以同时传递一些变量数据过去让它处理,这个操作叫做“传递参数”,来看下面的实例:

1.program ex0502

2.implicit none

3. integer :: a=1

4. integer :: b=2

5. call add(a, b) !把变量a及b交给子程序add来处理

6. stop

7.end

8.

9. subroutine add(first, second)

10. implicit none

11. integer :: first, second !first, second的内容会从call时得到

12. write(*,*) first + second

13. return

14. end

执行后会显示主程序中a + b的结果,也就是3。程序第5行在调用子程序add时,还同时输入了变量a及b。

第9行中first和second是子程序add的两个变量,指定用来接收传递进来的参数。程序第5行进入子程序add后,由于first和second这两个变量是用来接收参数的,first 的初值等于主程序中的a,因为a是调用时所输入的第1个数值。同理second就等于主程序中的b。子程序会计算first + second的值,也就等于是计算主程序中a + b的数值。

了解子程序的使用规则后,现在来写一个比较有用的程序。

例如:在一场田径赛的标枪比赛中,5位选手投掷标枪的情况如下:

1号选手:以30度角,每秒25米的速度掷出标枪。

2号选手:以45度角,每秒20米的速度掷出标枪。

3号选手:以35度角,每秒21米的速度掷出标枪。

4号选手:以50度角,每秒27米的速度掷出标枪。

5号选手:以40度角,每秒22米的速度掷出标枪。

假如忽略空气阻力以及身高等等因素,请写一个程序来计算选手的投射距离。(也就是

计算自由投射运动的抛物线距离)

1.program ex0503

2.implicit none

3. integer, parameter :: players=5

4. real :: angle(players)=(/30.0,4

5.0,35.0,50.0,40.0,/)

5. real :: speed(players)=(/25.0,20.0,21.0,27.0,22.0/)

6. real :: distance(players)

7. integer :: I

8.

9. do I=1,players

10. call get_distance(angle(i),speed(i),distance(i))

11. write(*,"('player',I1,'=',F8.2)") I, distance(i)

12. end do

13.

14. stop

15. end

16.!把0~360的角度转换成0~2 的弧度

17. subroutine angle_to_rad(angle,rad)

18. implicit none

19. real :: angle, rad

20. real, parameter :: pi=3.14159

21.

22. rad=angle*pi/180.0

23.

24. return

25. end

26. !由角度、切线速度来计算投射距离

27. subroutine get_distance(angle, speed, distance)

28. implicit none

29. real :: angle, speed !输入参数

30. real :: distance !准备返回去的结果

31. real :: rad, vx,time !内部使用

32. real, parameter :: G = 9.81

33.

34. call angle_to_rad(angle,rad) !单位转换

35. vx = speed*cos(rad) !水平方向速度

36. time = 2.0*speed*sin(rad)/G !在空中飞行时间

37. distance = vx * time !距离=水平方向速度*飞行时间

38.

39. return

40. end

执行结果如下:

Player 1 = 55.17

Player 2 = 40.77

Player 3 = 42.24

Player 4 = 73.18

Player 5 = 48.59

这个程序稍微长了些,它用到了两个子程序。其中子程序

subroutine angle_to_rad(angle, rad)的功能是把“角度”值转换成“弧度”,它用到两个参数:一个是输入所要转换的角度值(angle),另一个是返回对应的弧度值(rad)。

还有一个子程序是subroutine get_distance(angle, speed, distance),其功能是计算投掷距离。它用到三个参数:输入投掷出去的角度(angle),输入投掷出去的速度(speed),以及返回计算得到的投掷距离(distance)。

5-2自定义函数(function)

在第二章我们列表提到的算术型标准函数都收录在fortran的库函数中,但是要是我们想使用的函数,没有收录在fortran的库函数中,该怎么办呢?

答案很简单,如果库存里面没有,那就自己来创造一个。自定义函数的运行和上面所提到的子程序大致上是相同的,它也是要经过调用才能执行,也可以独立声明变量,参数传递的方法也如同子程序一般,和子程序只有两点不同:

(1)调用自定义函数前要先声明。

(2)自定义函数执行后会返回一个数值。

先来看一个实例:

1.program ex0504

2. implicit none

3. real :: a=1

4. real :: b=2

5. real, external :: add !声明add是个函数而不是变量

6. !调用函数add,调用函数不必使用call命令

7. write(*,*) add(a, b)

8. stop

9.end

10.

11. function add(a,b)

12. implicit none

13. real :: a, b !输入参数

14. real :: add

15. !add跟函数名称一样,这里不是用来声明变量,是声明这个函数返回的数值类型

16. add = a+b

17. return

18. end

程序执行后会输出变量a+b的结果,也就是3。

第5行使用了一个新的声明方法,声明中多了external这个形容词,用来表示这里所要声明的不是一个可以使用的变量,而是一个可以调用的函数。

第14行也有一个很特别的声明,函数名称叫add,这里却又声明了一个叫add的东西。这里的add并不是变量,而是用来声明说add这个函数会返回一个浮点数。当然,函数返回值类型的声明可以写在函数的最开头,跟function写在一起。即程序的第11行可以改写如下:

11. real function add(a, b)

这样,就可以省略掉原来第14行的声明。

5-3传递函数

传递参数时,除了传递数字、字符等等数据之外,还可以把一个函数名称当成参数传递出去,来看一个实例:

1.program ex0505

2. implicit none

3. real, external :: func !声明func是个自定义函数

4. real, intrinsic :: sin !声明sin是库函数

5.

6. call execfunc (func) !输入自定义函数func

7. call execfunc (sin) !输入库函数sin

8.

9. stop

10. end program

11.

12. subroutine execfunc(f)

13. implicit none

14. real, external :: f !声明参数f是个函数

15. write(*,*) f(1.0) !执行输入的函数f

16. return

17. end

18.

19. real function func(num)

20. implicit none

21. real :: num

22. func = num*2

23. return

24. end function

执行结果会得到func(1.0)及sin(1.0)这两个数值,也就是2.0和0.841。

2.000000

0.8414710

第3行的声明中使用了external, 前面已介绍过这是用来表明所声明的是一个自定义函数的名称。第4行的声明中使用了一个新的关键字intrinsic,它用来表明所声明的sin 是fortran的库存函数,而不是一个变量。在这个程序中external和intrinsic这两个字都不能省,因为在这里要把函数名称当成参数传出去。如果纯粹把函数拿来计算使用,不把它当成参数传出去,声明func时可以省略external, 声明sin的这一整行则都可以完全省略。

第6、7这两行执行了两次调用子程序execfunc, 分别把自定义函数func和库函数sin 输入。子程序execfunc中则会执行所输入的函数。第一次输入的是自定义函数func,所以它会输出func(1.0)的值。第二次输入的是库函数sin,所以它会输出sin(1.0)的值。

5-4函数的使用接口(interface)

interface是一段程序模块,用来清楚说明所要调用函数的参数类型及返回值类型等等的“使用接口”。在一般情况下,使用函数时不需要特别说明它们的“使用接口”,不过在下面这些情况下是必要的:

(1)函数返回值是数组时。

(2)指定参数位置来传递参数时。

(3)所调用的函数参数数目不固定时。

(4)输入指标参数时。

(5)函数返回值为指针时。

这里只举例说明第1中情况。来看下面实例:

1.program ex0506

2.implicit none

3. interface !定义函数func的使用接口

4. function random10(lbound, ubound)

5. implicit none

6. real :: lbound, ubound

7. real :: random10(10) !返回值是个数组

8. end function

9. end interface

10. real :: a(10)

11. call random_seed( ) !库存子程序,使用随机数前调用

12. a = random10(1.0, 10.0) !生成10个1.0~10.0之间的随机数

13. write(*,"(10F6.2)")a !输出数组a的内容

14. end

15.

16.!random10会返回10个范围在lbound到ubound之间的随机数

17. function random10(lbound, ubound)

18. implicit none

19. real :: lbound, ubound

20. real :: len

21. real :: random10(10)

22. real :: t

23. integer :: i

24. len = ubound – lbound

25. do i = 1, 10

26. call random_number(t) !t是0~1之间的随机数

27. random10(i)= lbound + len * t !把t转换成lbound~ubound间的随机数

28. end do

29. return

30. end

程序会输出10个在1~10之间随机生成的随机数,每次执行出来的结果应该都不一样。读者所输出的结果也应该与这里输出的结果有所不同。

2.10

3.42 1.34 8.66

4.57 2.36 9.88 7.41

5.92

6.78

这里先说明随机数的使用方法,在写程序时,常常会需要使用类似丢铜板的情况,以随机的方法来决定下一步要怎么办,这时候就要使用随机数。使用随机数前要先调用random_seed这个子程序来启动随机数生成器,启动之后就可以经过调用random_number来得到一个0~1之间的随机数。

程序的3~9行显示了如何用interface来声明函数的使用接口。

interface的编写结构很简单,它一次可以放入好几个函数的使用接口声明:interface ←----- 开始写作interface

function func_name ←---- 开始定义函数func_name

implicit none

real……←---- 这里面只能说明参数或返回值类型

integer……

……

end [function[func_name]] ←---- 定义函数func_name结束

subroutine sub_name ←---- 可以再定义另一个子程序

implicit none

integer……

……

end[subroutine[sub_name]] ←---- 定义子程序sub_name结束

end interface ←---- interface结束

其中括号[ ]内的部分表示可以省略。

微观经济学高鸿业版第五章课后习题答案

第 五章 1. 下面表是一张关于短期生产函数),(K L f Q 的产量表: (1) 在表1中填空 (2) 根据(1).在一张坐标图上作出TP L 曲线,在另一张坐标图上作出AP L 曲线和MP L 曲线. (3) 根据(1),并假定劳动的价格ω=200,完成下面的相应的短期成本表2. (4) 根据表2,在一张坐标图上作出TVC 曲线,在另一张坐标图上作出AVC 曲线和MC 曲线. (5) 根据(2)和(4),说明短期生产曲线和短期成本曲线之间的关系. (3)短期生产的成本表(表2) (4)

(5)边际产量和边际成本的关系,边际MC 和边际产量MP L 两者的变动方向是相反 的. 总产量和总成本之间也存在着对应 系:当总产量TP L 下凸时,总成本TC 曲线和总可变成本TVC 是下凹的;当总产量曲线存在一个拐点时, 总成本TC 曲线和总可变成本TVC 也各存在一个拐点. 平均可变成本和平均产量两者的变动方向是相反的. MC 曲线和AVC 曲线的交点与MP L 曲线和AP L 曲线的交点是对应的. 2.下图是一张某厂商的LAC 曲线和LMC 曲线图.请分别在Q1和Q2的产量上画出 代表最优生产规模的SAC 曲线和SMC 曲线. 解:在产量Q1和Q2上,代表最优生产规模的SAC 曲线和SMC 曲线是SAC 1和SAC 2以及SMC 1和SMC 2. SAC 1和SAC 2分别相切于LAC 的A 和B SMC 1和SMC 2则分别相交于LMC 的A 1和B 1. 3.假定某企业的短期成本函数是TC(Q)=Q 3-5Q 2+15Q+66: (1) 指出该短期成本函数中的可变成本部分和不变成本部分; (2) 写出下列相应的函数:TVC(Q) AC(Q) (3) AVC(Q) AFC(Q)和MC(Q). 解(1)可变成本部分: Q 3-5Q 2+15Q 不可变成本部分:66 (2)TVC(Q)= Q 3-5Q 2+15Q AC(Q)=Q 2-5Q+15+66/Q AVC(Q)= Q 2-5Q+15 AFC(Q)=66/Q O MC Q LMC SMC 1 SAC 1 SAC 2 SMC 2 LAC A 1 B 1 Q 1 Q 2 长期边际成本曲线与短期成本曲线 A

C++程序设计基础课后答案 第五章

5.1 阅读下列程序,写出执行结果 1.#include < iostream.h > struct data { int n ; float score ; } ; void main() { data a[3] = { 1001,87,1002,72,1003,90 } , *p = a ; cout << (p++)->n << endl ; cout << (p++)->n << endl ; cout << p->n++ << endl ; cout << (*p).n++ << endl ; } 2.#include < iostream.h > struct employee { char name[ 20 ] ; char sex ; } ; void fun( employee *p ) { if( (*p).sex == 'm' ) cout << (*p).name << endl ; }

void main() { employee emp[5] = { "Liming", 'm', "Wangxiaoping", 'f', "Luwei", 'm' } ; int i ; for( i=0; i<3; i++ ) fun( emp+i ) ; } 3. #include < iostream.h > struct node { char * s ; node * q ; } ; void main() { node a[ ] = { { "Mary", a+1 }, { "Jack", a+2 }, { "Jim", a } } ; node *p = a ; cout << p->s << endl ; cout << p->q->s << endl ; cout << p->q->q->s << endl ; cout << p->q->q->q->s << endl ; } 4.#include < iostream.h > class A

第五章贝塞尔函数

n阶第一类贝塞尔函数() J x n 第二类贝塞尔函数,或称Neumann函数() Y x n 第三类贝塞尔函数汉克尔(Hankel)函数,(1)() H x n 第一类变形的贝塞尔函数() I x n 开尔文函数(或称汤姆孙函数)n阶第一类开尔文(Kelvin)第五章贝塞尔函数 在第二章中,用分离变量法求解了一些定解问题。从§2.3可以

看出,当我们采用极坐标系后,经过分离变量就会出现变系数的线性常微分方程。在那里,由于只考虑圆盘在稳恒状态下的温度分布,所以得到了欧拉方程。如果不是考虑稳恒状态而是考虑瞬时状态,就会得到一种特殊类型的常微分方程。本章将通过在柱坐标系中对定解问题进行分离变量,引出在§2.6中曾经指出过的贝塞尔方程,并讨论这个方程解的一些性质。下面将看到,在一般情况下,贝塞尔方程的解不能用初等函数表出,从而就导入一类特殊函数,称为贝塞尔函数。贝塞尔函数具有一系列性质,在求解数学物理问题时主要是引用正交完备性。 §5.1 贝塞尔方程的引出 下面以圆盘的瞬时温度分布为例推导出贝塞尔方程。设有半径为R 的薄圆盘,其侧面绝缘,若圆盘边界上的温度恒保持为零摄氏度,且初始温度为已知,求圆盘内瞬时温度分布规律。 这个问题可以归结为求解下述定解问题: 2222 22222 22222 0(),,0, (5.1)(,),, (5.2)0, t x y R u u u a x y R t t x y u x y x y R u ?=+=???=++<>???=+≤= (5.3)?????? ??? 用分离变量法解这个问题,先令 (,,)(,)()u x y t V x y T t = 代入方程(5.1)得

数据结构作业系统_第五章答案

数据结构作业系统_第五章答案 5.21④假设稀疏矩阵A和B均以三元组表作为存储结构。 试写出矩阵相加的算法,另设三元组表C存放结果矩阵。 要求实现以下函数: Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /* 三元组表示的稀疏矩阵加法: C=A+B */ 稀疏矩阵的三元组顺序表类型TSMatrix的定义: #define MAXSIZE 20 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType e; // 非零元素值 }Triple; typedef struct { Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用 int mu,nu,tu; // 矩阵的行数、列数和非零元个数 }TSMatrix; Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C) /* 三元组表示的稀疏矩阵加法: C=A+B */ { int k=1,n=1,p=1; ElemType ce; if(A.mu!=B.mu||A.nu!=B.nu)return ERROR; while(k<=A.tu&&n<=B.tu) {

if(A.data[k].i==B.data[n].i&&A.data[k].j==B.data[n].j) { ce=A.data[k].e+B.data[n].e; if(ce) { C.data[p].i=A.data[k].i; C.data[p].j=A.data[k].j; C.data[p].e=ce; p++; //printf("%d,,%d ",ce,C.data[p-1].e); } k++;n++; } else if(A.data[k].iA.tu) while(n<=B.tu)

成员函数、非成员函数和友元函数介绍

成员函数、非成员函数和友元函数介绍 一、成员函数、非成员函数和友元函数 成员函数和非成员函数最大的区别在于成员函数可以是虚拟的而非成员函数不行。 成员函数的优势是能够方便的进行动态绑定,实现多态。 说明一个函数为一个类的友元函数则该函数可以访问此类的私有数据和方法。 二、成员函数介绍 1、显式构造函数 C++中的e xplicit关键字用来修饰类的构造函数,表明该构造函数是显式的。 隐式构造函数能够实现将该构造函数对应数据类型的数据转换为该类对象。 class MyClass { public: MyClass( int num); } MyClass obj = 10; //ok,convert int to MyClass 如果在构造函数前加上关键字explicit,上述编译出错。 2、静态函数: 类中,static型的成员函数,由于是类所拥有的,而不是具体对象所有的。 静态函数屏蔽了this指针,因此,如果成员函数作为回调函数,就应该用static去修饰它。 3、虚函数: 虚函数首先是一种成员函数,它可以在该类的派生类中被重新定义并被赋予另外一种处理功能。 注意多态不是函数重载。函数重载属于静态绑定,虚函数实现多态是动态绑定。 4、纯虚函数: 在抽象类中定义纯虚函数,必须在子类实现,不过子类也可以只是声明为纯虚函数,由 子类的子类实现。 5、协变返回类型: 一般来说,一个重写的函数与被它重写的函数必须具有相同的返回类型。 这个规则对于”协变返回类型(covariant return type)”的情形来说有所放松. 也就是说,若B是一个类类型,并且一个基类虚拟函数返回B *,那么一个重写的派生类函数可以返回D *, 其中的D公有派生于B(即D是一个(is-a)B).若基类虚函数返回B &,那么一个重写的派生类函数可以返回一个D&. 考虑如下一个shape层次结构的clone操作: Class Shape { Public: //… Virtual Shape *clone () const = 0; //prototype(原型) //… }; Class Circle : public Shape {

面向对象程序设计第五章作业题

第五章作业题 一.填空题 1.面向对象程序设计有4个主要特点: ____、____ 、____和____。 2.用来派生新类的类称为_______,而派生出的新类称为它的子类或派生类。 3.“图形”类Shape中定义了纯虚函数CalArea(),“三角形”类Triangle继承了类Shape, 请将Triangle类中的CalArea函数补充完整。 class Shape{ public: virtual int CalArea()=0; } class Triangle: public Shape{ public: Triangle{int s, int h}: side(s),height(h) {} ________________ { return side*height/2 ; } private: int side; int height; }; 4.继承方式包括:____、____、____;如果省略,系统默认为____。 5.派生类中的成员包括从____和____两大部分。 二.单项选择题 1.下列关于继承方式的描述中,错误的是()。 A.如果不显式地指定继承方式,缺省的继承方式是私有(private) B.采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C.采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 D.采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 2. 下列代码声明了3个类 class Person{}; class Student:public Person{}; class Undergraduate:Student{}; 下列关于这些类之间关系的描述中,错误的是()。

几种特殊类型函数的积分

几种特殊类型函数的积分 一、有理函数的不定积分 1.化有理函数为简单函数 两个多项式的商所表示的函数)(x R 称为有理函数,即 m m m m m n n n n n b x b x b x b x b a x a x a x a x a x Q x P x R ++++++++++= =------122110122110)()()( (1) 其中n 和m 是非负整数;n a a a a ,,,,210 及m b b b b ,,,,210 都是实数,并且 0,000≠≠b a . 当(1)式的分子多项式的次数n 小于其分母多项式的次数m ,即m n <时,称为有理真分式;当m n ≥时,称为有理假分式. 对于任一假分式,我们总可以利用多项式的除法,将它化为一个多项式和一 个真分式之和的形式.例如 1 2)1(11222 4+++-=+++x x x x x x . 多项式的积分容易求得,下面只讨论真分式的积分问题. 设有理函数(1)式中m n <,如果多项式)(x Q 在实数范围内能分解成一次因式和二次质因式的乘积: μλβα)()()()()(220s rx x q px x b x a x b x Q ++++--= . 其中s r q p b a ,,,,,,, 为实数;042<-q p ,…,042<-s r ;,,,βα μλ,, 为正整数,那末根据代数理论可知,真分式) () (x Q x P 总可以分解成如下部分分式之和,即 β ααα)()()()() (1121b x B a x A a x A a x A x Q x P -++-++-+-=- λ ββ) ()(21 112q px x N x M b x B b x B ++++-++-+ - μλλλ)()(21121222s rx x S x R q px x N x M q px x N x M ++++ ++++++++++ - s rx x S x R s rx x S x R +++++++++ -2 122 2)(μμμ . (2)

第五章 函数

第五章函数 一. 单项选择题 1.假设a,b,c,e,f,g都已正确定义,则函数调用语句“f(a+b,c,(e,f,g));”中参数的个数是(B ) A.2 B.3 C.5 D.6 2.以下对C 语言函数的有关描述中,正确的是(A ) A.在C 语言中,调用函数时,只能把实参的值传递给形参,形参的值不能传递给实参 B.C 函数既可以嵌套定义,又可以递归调用 C.函数必须有返回值,否则不能定义成函数 D.C 程序中,有调用关系的所有函数必须放在同一个源程序文件中 3.以下程序的输出结果是: #include float sum(int n) { int s=0,i; for(i=1;i<=n;i++) s+=i; return s; } void main() { int n; printf("sum=%f\n",sum(10)); D } A.sum=10 B.sum=55 C.sum=10.000000 D.sum=55.000000 4.以下程序的输出结果是: #include fun(int n) { double x=3.14159; if(n>0) return x*n; else return x*n*(-1); } void main() { printf("%d\n",abs(-3)); } D A.-9.42477 B.9.42477 C.-9 D.9 二. 填空题: 1.阅读函数,写出函数的主要功能:

float av(int a[],int n) { int i; float s; for(i=0,s=0;i void main() { void swap(); extern int a,b; a=3; b=10; swap(); printf("a=%d,b=%d\n",a,b); } int a,b; void swap() { int temp; temp=a;a=b;b=temp; } 4.以下程序的输出结果是: int f(int a) { auto int b=0; static int c=3; b=b+1; c=c+1; return (a+b+c); } void main() { int a=2,i; for (i=0;i<3;i++) printf(“%d\n”,f(a)); } 5.以下程序的运行结果是: #include int func(int a,int b); void main() { int k=4,m=1,p;

第五章 成本 课后习题答案

第五章 成 本 1.下面表是一张关于短期生产函数Q ),(K L f 的产量表: (2)根据(1)在一张坐标图上做出TP L ,在另一张坐标图上作出AP L 曲线和MP L 曲线。 (3)根据(1),并假定劳动的价格w=200,完成下面的短期成本表。 短期生产的成本表 (4)根据上表,在一张坐标图上做出TVC 曲线,在另一张坐标图上作出AVC 曲线和MC 曲线。 (5)根据(2 )(4),说明短期生产曲线和短期成本曲线之间的关系。 解答: (2)如图所示:

(3) 短期生产的成本表 (4)如图所示: (5)从图形可以看出,当边际产量高于平均产量时,平均产量上升,此时边际成本和平均成本下降。当边际产量低于平均产量时,平均产量下降,此时边际成本和平均成本上升。当边际产量上升时,边际成本下降,总产量上升,总可变成本以递减速率上升。当边际产量等于平均产量时,边际成本等于平均成本,此时平均产量最大而平均可变成本最小。 2.下面是一张某厂商的LAC 曲线和LMC 曲线图。分别在Q 1和Q 2的产量上画出代表最优生产规模的SAC

解答:如图所示,SAC曲线为LAC曲线的内包络线,所以既定产量下SAC在LAC的内侧而且与其相切。短期MC曲线与长期边际成本曲线必然相交,在相应产量与SMC相交的曲线即为LMC。 3.假定某企业的短期成本函数是TC=Q3-10Q2+17Q+66,求: (1) (2)写出下列函数:TVC(Q)、AC(Q)、AVC(Q)、AFC(Q)、MC(Q)。 解:(1)已知TC=Q3-10Q2+17Q+66 TVC=Q3-10Q2+17Q TFC=66 (2)AC=TC/Q=Q2-10Q +17+(66/Q)AVC=(TVC/Q)=Q2-10Q+17AFC=(TFC/Q)=(66/Q) MC=TC′=TVC′=3Q2-20Q+17 4. 已知某企业的短期总成本函数是STC=0.04Q3-0.8Q2+10Q+5,求最小的平均可变成本值。 解:因为STC=0.04Q3-0.8Q2+10Q+5TVC=0.04Q3-0.8Q2+10Q AVC=TVC/Q=0.04Q2-0.8Q+10 AVC有最小值时,AVC′=0,即0.08Q-0.8=0,解得Q=10 把Q=10代入AVC=0.04Q2-0.8Q+10Q,得:AVC=0.04×100-0.8×10+10=6。 5.假定某厂商的边际成本函数MC=3Q2-30Q+100,且生产10单位产品时的总成本为1000。 求:(1)固定成本值。 (2)总成本函数、总可变成本函数、平均成本函数、平均可变成本函数。 解:(1)根据边际成本函数,对其进行积分,可得总成本函数为 TC=Q3-15Q2+100Q+C(常数) 又知道当Q=10时,TC=1000,代入上式可求得 C=500 即总成本函数为 TC= Q3-15Q2+100Q+500 固定成本是不随产量而变化的部分,因此固定成本为500。 (2)可变成本是随产量变化的部分,因此,总可变成本函数 TVC=Q3-15Q2+100Q。 平均成本函数 AC=TC/Q= Q2-15Q+100+500/Q 平均可变成本函数AVC=TVC/Q= Q2-15Q+100 6.假定某厂商短期生产的边际成本函数SMC(Q)=3Q2-8Q+100,且已知当产量Q=10时的总成本STC=2400,求相应的STC函数、SAC函数和AVC函数。 解:(1)根据边际成本函数,对其进行积分,可得总成本函数为 STC=Q3-4Q2+100Q+C(常数) 又知道当Q=10时,STC=2400,代入上式可求得 C=800

MFC——4个基本类中的成员函数介绍.docx

09121852杜军机械设计及理论 1. CMainFrame ActivateFrame使框架对用户可视并可用 CalcWindowRect每当主框架窗I I的客户区尺寸发生变化或控制条的位置发生变 化,需要重新排列客户区时,调用该函数 Create调用以构造和初始化一个与CFrameWnd对象有关的Windows框架窗口DefWindowProc该函数调用缺省的窗口过程来为应用程序没有处理的任何窗口消 息提供缺省的处理 DestroyWindow销毁指定的窗口 DoDataExchange UpdateData会调用这个函数,调用它来初始化对话框的控件或更新数据 GetActiveDocument得到当前文档的指针 GetActiveFrame 返回活动CFrameWnd 对象 GetScrollBarCtrl调用这个成员函数以获取指定的了滚动控件或分隔窗I I的指针LoadFrame调用以从资源信息屮动态构造一个框架窗口 OnAmbientProperty框架调用这个成员函数以从包含OLE控件的窗口获得ambient属性值。重载这个函数以改变OLE控件容器向它的控件返回的缺省ambient属性值。任何没冇被重载函数处理的ambient属性请求将被传递到慕类的实现中OnChildNotify该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建 OnCmdMsg该函数的功能首先按字节对消息进行排序,对于WM_COMMAND 消息,调用OnCommand消息响应函数,对于WM_NOTIFY消息调用OnNotify 消息响应函数。任何被遗漏的消息将是一个窗I I消息。OnWndMsg函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg函数不能找到这样的处理函数的话,则把消息返冋到WindowProc函数,由它将消息发送给DefWindowProc函数 OnCommand该函数查看这是不是一个控件通知,如果它是,OnCommand函数会试图将消息映射到制造通知的控件;如杲他不是一个控件通知,OnCommand 就会调用OnCmdMsg函数 OnCreateClient为框架构造一个用户窗口 OnFinalRelease木函数在对对象的最后一个OLE参考或对象对别人的后一个OLE 参考被释放时,由框架调用 OnNotify框架调用这个函数以通知控件的父窗I」,在控件中发生了一个事件,或者该控件需要某些类型的信息。OnNotify处理控件通知的消息映射OnSetPreviewMode 设置应用的主框架成为或退出预打印模式 PostNcDestroy在窗口被销毁以后,缺省的OnNcDestroy成员函数调用这个函数。派生类可以利用这个函数來执行自定义的清除工作,比如删除指针PreCreateWindow该函数是一个重载函数,在窗I I被创建而,可以在该重载函数屮改变创建参数 PreSubclassWindow这也是一个重载函数,允许首先子分类一个窗口PreTranslateMessage 在消息被分派至U Windows 函数TranslateMessage 和

微观经济学高鸿业版第五章课后习题答案

第五章 1. 下面表是一张关于短期生产函数),(K L f Q 的产量表: (1) 在表1中填空 (2) 根据(1).在一张坐标图上作出TP L 曲线,在另一张坐标图上作出AP L 曲 线和MP L 曲线. (3) 根据(1),并假定劳动的价格ω=200,完成下面的相应的短期成本表2. (4) 根据表2,在一张坐标图上作出TVC 曲线,在另一张坐标图上作出 AVC 曲线和MC 曲线. (5) 根据(2)和(4),说明短期生产曲线和短期成本曲线之间的关系. (4)

(5)边际产量和边际成本的关系,边际MC 和边际产量MP L 两者的变动方 向是相反的. 总产量和总成本之间也存在着对应 系:当总产量TP L 下凸时,总成本TC 曲线和总可变成本TVC 是下凹的;当总产量曲线存在一个拐点时, 总成本TC 曲线和总可变成本TVC 也各存在一个拐点. 平均可变成本和平均产量两者的变动方向是相反的. MC 曲线和AVC 曲线的交点与MP L 曲线和AP L 曲线的交点是对应的. 2.下图是一张某厂商的LAC 曲线和LMC 曲线图.请分别在Q1和Q2的 产量上画出代表最优生产规模的SAC 曲线和SMC 曲线. 解:在产量Q1和Q2上,代表最优生产规模的SAC 曲线和SMC 曲线是SAC 1和SAC 2以及SMC 1和SMC 2. SAC 1和SAC 2分别相切于LAC 的A 和B SMC 1和SMC 2则分别相交于LMC 的A 1和B 1. 3.假定某企业的短期成本函数是TC(Q)=Q 3-5Q 2+15Q+66: (1) 指出该短期成本函数中的可变成本部分和不变成本部分; (2) 写出下列相应的函数:TVC(Q) AC(Q) AVC(Q) AFC(Q)和MC(Q). 解(1)可变成本部分: Q 3-5Q 2+15Q 不可变成本部分:66 (2)TVC(Q)= Q 3-5Q 2+15Q AC(Q)=Q 2-5Q+15+66/Q AVC(Q)= Q 2-5Q+15 AFC(Q)=66/Q MC(Q)= 3Q 2-10Q+15 O MC Q LMC SMC 1 SAC 1 SAC 2 SMC 2 LAC A 1 B 1 Q 1 Q 2 长期边际成本曲线与短期成本曲线 A

大学计算机 第五章单元测验

关于计算机程序,下列叙述正确的是()。 A.只有可执行程序(.exe)才能在计算机中运行。 B.计算机程序是用自然语言书写的关于问题求解的方法和步骤的描述。 C.计算机程序编程人员利用某种计算机程设计语言,根据用户业务需求来编写完成,从概念上讲,计算机程序有数据和代码两部分。 D.用高级程序设计语言书写的程序都可以直接在计算机中运行。 E.从本质上讲,计算机程序是在计算机中运行的指令序列。 正确答案:C、E 2单选(2分) 世界上第一个计算机高级程序设计语言是()。 A.Pascal B.ALGOL C.C D.FORTRAN E.Basic 正确答案: D 你选对了 3单选(2分) 与计算机硬件系统紧密相关的程序设计语言是()。 A.符号语言 B.脚本语言 C.汇编语言 D.机器语言 E.高级语言 正确答案: D 你选对了 4单选(2分) 关于计算机软件开发,下列叙述正确的是()。 A.软件开发就是编写程序。 B.软件开发中的生命周期和原型法不能混合使用。 C.软件开发包括几个典型的阶段,包括:需求分析,系统设计,系统实施,系统测试,运行和维护等。 D.软件开发完成后就可以一劳永逸的运行。 E.软件开发需遵循相应的方法,例如生命周期法和原型法等。 正确答案:C、E 你选对了 5单选(2分) 下面是一个将十进制正整数转换为2进制数的函数定义: void tobinary(int x) { while (x>0) { printf("%1d",x%2); } } 要实现函数的功能,则在空白处应该填写的程序语句是()。 A.x=x/2;

C.x=x%2; D.x=x%10; 正确答案: A 你选对了 6单选(2分) 关于数据库管理系统(Data Base Management System,DBMS),下列说法正确的是()。 A.用户程序对数据文件直接操作和数据库管理系统对文件进行管理效果一样。 B.在数据库应用系统中,用户程序可以直接对数据库进行添加、查询、修改和删除操作。 C.用户通过DBMS创建数据库,创建完成后,程序对数据的操作与DBMS无关。 D.数据库管理系统是用户应用软件和数据库之间一种管理程序接口。 E.数据库管理系统是指负责数据库的建立、维护和管理的系统软件。 正确答案:D、E 7单选(2分) 计算机程序设计语言是用于编写计算机程序的语言,下列叙述正确的是()。 A.计算机程序设计语言是由一组基本符号和一组语法规则构成。 B.机器语言是用二进制代码表示的,不是计算机程序设计语言。 C.用计算机程序设计语言书写的程序都可以直接在计算机中运行。 D.计算机程序设计语言就是通常讲的C、Java等高级程序设计语言。 正确答案: A 你选对了 8单选(2分) 在SQL中,数据查询语句SELECT的必选子句是()。 A.FROM子句 B.WHERE子句 C.GROUP BY子句 https://www.360docs.net/doc/5817788282.html,PUTE子句 E.ORDER BY子句 正确答案: A 你选对了 9单选(2分) 从数据表student中查询张姓的所有学生,正确的SQL语句是()。 A.SELECT sno,sname FROM student WHERE sname LIKE N'张%' B. SELECT sname FROM student WHERE sname = N'%张%' C. SELECT sno,sname FROM student WHERE sname LIKE N'%张%' D. SELECT sname FROM student WHERE sname = N'张%'

CString类所有成员函数详解

CString类所有成员函数详解 2009-03-27 10:53 CString类所有成员函数详解 VC里CString是我们最常用的类之一,我们觉得对它很熟悉了,可是你知道它的所有用法吗? 还是系统的学习一下吧,认真看完本文就OK了。 下面开始: CString::Compare int Compare( LPCTSTR lpsz ) const; 返回值字符串一样返回0 小于lpsz 返回-1 大于lpsz 返回1 区分大小字符 CString s1( "abc" ); CString s2( "abd" ); ASSERT( https://www.360docs.net/doc/5817788282.html,pare( s2 ) == -1 ); ASSERT( https://www.360docs.net/doc/5817788282.html,pare( "abe" ) == -1 ); CString::CompareNoCase int CompareNoCase( LPCTSTR lpsz ) const; 返回值字符串一样返回0 小于lpsz 返回-1

大于lpsz 返回1 不区分大小字符 CString::Collate int Collate( LPCTSTR lpsz ) const; 同CString::Compare CString::CollateNoCase int CollateNocase( LPCTSTR lpsz ) const; 同CString::CompareNoCase CString::CString CString( ); CString( const CString& stringSrc ); CString( TCHAR ch, int nRepeat = 1 ); CString( LPCTSTR lpch, int nLength ); CString( const unsigned char* psz ); CString( LPCWSTR lpsz ); CString( LPCSTR lpsz ); 例子最容易说明问题 CString s1; CString s2( "cat" ); CString s3 = s2; CString s4( s2 + " " + s3 ); CString s5( 'x' ); // s5 = "x"

数据结构作业系统_第五章答案

5.21④假设稀疏矩阵A和B均以三元组表作为存储结构。 试写出矩阵相加的算法,另设三元组表C存放结果矩阵。 要求实现以下函数: Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /* 三元组表示的稀疏矩阵加法: C=A+B */ 稀疏矩阵的三元组顺序表类型TSMatrix的定义: #define MAXSIZE 20 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType e; // 非零元素值 }Triple; typedef struct { Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用 int mu,nu,tu; // 矩阵的行数、列数和非零元个数 }TSMatrix; Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C) /* 三元组表示的稀疏矩阵加法: C=A+B */ { int k=1,n=1,p=1; ElemType ce; if(A.mu!=B.mu||A.nu!=B.nu)return ERROR; while(k<=A.tu&&n<=B.tu) { if(A.data[k].i==B.data[n].i&&A.data[k].j==B.data[n].j) { ce=A.data[k].e+B.data[n].e; if(ce) { C.data[p].i=A.data[k].i; C.data[p].j=A.data[k].j; C.data[p].e=ce; p++; //printf("%d,,%d ",ce,C.data[p-1].e); } k++;n++; } else if(A.data[k].i

在名字空间中声明类和成员函数

在名字空间中声明类和成员函数 赵湘宁 虽然很多程序员都熟悉名字空间的概念,但他们常常都是被动地使用名字空间。也就是说他们使用的是第三方定义的成员(如标准库的类和函数),而不是在名字空间中声明自己的类和函数。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。 名字空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。例如: namespace proj_alpha { //下面是名字空间proj_alpha 的成员 class Spy {/*..*/}; void encrypt (char *msg); const int MAX_SPIES = 8; } 在上面的例子中,类Spy在一个单独的文件中实现。通常,你是在一个专门的头文件中声明一个类并在不同的源文件中独立地定义其成员函数。那么如何将名字空间成员类分离成多个源文件呢? 下面是名为Foo.hpp 的头文件,其中定义了一个名为NS的名字空间,它包含类Foo的声明: //Foo.hpp namespace NS { class Foo { public: void f(); void g(); }; }//close NS 另外,在一个单独的源文件Foo.cpp中,首先包含头文件Foo.hpp以便实现类Foo的成员函数f()和g(): //Foo.cpp #include "Foo.hpp" void NS::Foo::f() { /*..*/ } void NS::Foo::g()

{ /*..*/ } 为了使用名字空间成员,必须使用成员的全路径名,它由名字空间后跟::合成原名组成。因此,类Foo的全路径名是NS::Foo。这样编译器便可以知道NS是一个名字空间名,头文件Foo.hpp必须在引用NS之前被包含。 名字空间是可以扩展的。也就是说可以声明类,而且所声明的类在其它的.cpp文件中是相同的名字空间成员: //Bar.hpp namespace NS //扩展NS { class Bar { public: void a(); void b(); }; } 在Bar.cpp文件中: #include "Bar.hpp" void NS::Bar::a() {/*..*/} void NS::Bar::b() {/*..*/} 可以看出,虽然Foo和Bar这两个类在不同的头文件中声明,但它们都是名字空间NS的成员。并且编译器和链接器将这两个类看成是同一名字空间的成员。那么,如何在应用程序中使用这些类呢? 在文件main.cpp中,必须要包含声明类Foo和Bar的头文件并加上相应的名字空间引用声明-using: #include "Bar.hpp" #include "Foo.hpp" int main() { using NS::Bar; //使用名字空间 using NS::Foo; //同上 Bar b;

C++第五章_类与对象习题解答

第五章类与对象习题 一.基本概念与基础知识自测题 填空题 引入类定义的关键字是(1)。类的成员函数通常指定为(2),类的数据成员通常指定为(3)。指定为(4)的类成员可以在类对象所在域中的任何位置访问它们。通常用类的(5)成员表示类的属性,用类的(6)成员表示类的操作。 答案: (1)class (2)公有的public (3)私有的private (4)公有的public (5)数据 (6)/ (7)函数 类的访问限定符包括(1)、(2)和(3)。私有数据通常由(4)函数来访问(读和写)。这些函数统称为(5)。 答案: (1)public(公有的) (2)private(私有的) (3)protected(保护的) (4)公有的成员函数 (5)类的接口 通常在逻辑上,同一类的每个对象都有(1)代码区,用以存储成员函数。而在物理上通常只有(2)代码区。只有在(3)定义,并(4)的函数和加了关键字(5)的函数例外。 答案: (1)? (2)独立的 (3)共用的 (4)在类说明中 (5)不包括循环等复杂结构 (6)inline C++中支持三种域:(1)、(2)、(3)。函数域被包括在(4)中,全局域被包括在(5)中。using指示符以关键字using开头,后面是关键字(6),最后是(7)。这样表示以后在该名字空间中所有成员都(8)。 如不使用using指示符则在使用时要加::,称为(9)运算符。 答案: (1)局部域(local scope) (2)名字空间域(namespace scope) (3)类域(class scope) (4)? (5)局部域

(6)名字空间域 (7)namespace (8)名字空间名 (9)可以直接被使用 (10)域 引用通常用作函数的(1)和(2)。对数组只能引用(3)不能引用(4)。 答案: (1)参数 (2)返回值 (3)) (4)数组元素 (5)数组名本身 构造函数的任务是(1)和(2)。构造函数无(3),但并不表示(4)。类中可以有(5)个构造函数,它们由(6)区分。 如果类说明中没有给出构造函数,则C++编译器会(7)。拷贝构造函数的参数是(8),当程序没有给出拷贝构造函数时,系统会自动提供(9)支持,这样的拷贝构造函数中每个类成员(10)。 答案: (1)建立对象(为对象分配内存) (2)初始化数据成员 (3)函数返回类型说明 (4)没有返回值,返回的是构造函数所创建的对象 (5)多 (6)不同的参数表 (7)- (8)自动给出一个缺省的构造函数 (9)同一类对象的引用 (10)缺省的拷贝构造函,称为缺省的按成员语义支持。 (11)被依次拷贝 一个类有(1)个析构函数。(2)时,系统会自动调用析构函数。 答案: (1)一 (2)对象注销时 运算符重载时,其函数名由(1)构成。成员函数重载双目运算符时,左操作数是(2),右操作数是(3)。 答案: (1)@ (2)关键字operator和该运算符 (3)对象 (4)该函数的参数 5.2简答题(以下习题题号可能和教材不一致!) 5.2.1为什么返回值为引用的函数可以作为左值

微观经济学高鸿业版第五章课后习题答案

微观经济学高鸿业版第五章课后习题答案 公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

第五章 1. 下面表是一张关于短期生产函数),(K L f Q 的产量表: (1) 在表1中填空 (2) 根据(1).在一张坐标图上作出TP L 曲线,在另一张坐标图上作出AP L 曲线和MP L 曲线. (3) 根据(1),并假定劳动的价格ω=200,完成下面的相应的短期成本表2. (4) 根据表2,在一张坐标图上作出TVC 曲线,在另一张坐标图上作出AVC 曲 线和MC 曲线. (5) 根据(2)和(4),说明短期生产曲线和短期成本曲线之间的关系. ,相反的系:L 画出代表最优生产规模的SAC 曲线和SMC 曲线. 解:在产量Q1和Q2上,代表最优生产规模的SAC 曲线和SMC 曲线是SAC 1和SAC 2以及SMC 1和SMC 2. SAC 1和SAC 2分别相切于LAC 的A 和B SMC 1和SMC 2则分别相交于LMC 的A 1和B 1.

3.假定某企业的短期成本函数是TC(Q)=Q 3-5Q 2+15Q+66: (1) 指出该短期成本函数中的可变成本部分和不变成本部分; (2) 写出下列相应的函数:TVC(Q) AC(Q) (3) AVC(Q) AFC(Q)和MC(Q). 解(1)可变成本部分: Q 3-5Q 2+15Q 不可变成本部分:66 (2)TVC(Q)= Q 3-5Q 2+15Q AC(Q)=Q 2-5Q+15+66/Q AVC(Q)= Q 2-5Q+15 AFC(Q)=66/Q MC(Q)= 3Q 2-10Q+15 4已知某企业的短期总成本函数是STC(Q)= +10Q+5,求最小的平均可变成本值. 解: TVC(Q)= +10Q AVC(Q)= 令08.008.0=-='Q C AV 得Q=10 又因为008.0>=''C AV 所以当Q=10时,6=MIN AVC 5.假定某厂商的边际成本函数MC=3Q 2-30Q+100,且生产10单位产量时的总成本为1000. 求:(1) 固定成本的值. (2)总成本函数,总可变成本函数,以及平均成本函数,平均可变成本函数. 解:MC= 3Q 2 -30Q+100 所以TC(Q)=Q 3-15Q 2+100Q+M 当Q=10时 (1) 固定成本值:500 O MC Q LMC SMC 1 SAC 1 SAC 2 SMC 2 LAC A 1 B 1 Q 1 Q 2 长期边际成本曲线与短期成本曲线 A

相关文档
最新文档