参数的使用及查询函数

参数的使用及查询函数
参数的使用及查询函数

定义参数(Parameters)

除非特别申明,否则下面这些说明将同时适用于标量参数和数组参数。如果是仅仅对数组有效的,将特别说明。

你可以给参数赋一个值或者将ANSYS中的一些数据代回赋给参数。如何从ANSYS中获得数据请看关于*GET及一些“在线获取函数(in-line get functions)”。下面我们将详细地讲解这些相关信息。

你可以使用*SET命令来定义参数并给参数赋值。下面我们举个简单的例子来说明:

*SET,ABC,-24

*SET,QR,2.07E11

*SET,XORY,ABC

*SET,CPARM,'CASE1'

当然,你也可以使用“=”,就象C语言、FORTURN语言那样直接给参数赋值,这使用起来更加方便。使用的格式是:参数名=值。这里的参数名就是你将要给他赋值的参数,值就是数值或者字符或者字符串。对于字符参数而言,字符或者字符串必须加上单引号‘’(在英文输入状态下,译者注),同时不超过8个字母(包括下划线在内)。下面举个例子:

ABC=-24

QR=2.07E11

XORY=ABC

CPARM='CASE1'

在用户图形界面UGI下,你也可以直接在对话框的输入窗口键入上面所说的命令,或者在菜单工具栏:Utility Menu> Parameters> Scalar Parameters产生的对话框中"Selection"的位置键入上述命令。

下面我们再来重点讲解ANSYS中如何从程序中获得数据并赋值给参数。在ANSYS中,有两个强大的方法来完成这样的功能,其一是*GET函数,另外一个就是所谓的“在线查询函数”。*GET命令获得一个指定的数据并把它保存到一个指定的参数中去,而在线查询函数则可以直接在表达式中使用。每个查询函数都可以从某一个特定的项目中返回一个指定的数据。

*GET命令(Utility Menu> Parameters> Get Scalar Data)从程序中返回一个项目(例如节点、线、面、关键点)的指定数据(例如节点编号、实常数、坐标等信息)。例如:*GET,A,ELEM,5,CENT,X 就是返回5号单元的质心X坐标并把它赋给参数A保存下来。

*GET命令的格式如下:

*GET,Par,Entity,ENTNUM,Item1,IT1NUM,Item2,IT2NUM

其中:

Par:准备用来存储返回数据的参数名。

Entity:要查询的项目的关键词。有效的有例如NODE, ELEM, KP, LINE, AREA, VOLU等等。完整的项目列表我们将在后面给出。

ENTNUM:实体的编号,如果是0,则表示所有的实体。

Item1:某个特定的实体的项目名。例如如果实体是ELEM,Item1可以是NUM(已经选定的最大或者最小单元号)或者是COUNT(已经选定的单元号码)。Item1的全部可用值将在后面列表详细说明。

你可以认为*GET命令后面的申明就是个逐层展开的树状结构。从一般到具体。

下面的一些例子示例了*GET命令的用法:

*GET,BCD,ELEM,97,ATTR,MAT ! BCD = Material number of element 97

*GET,V37,ELEM,37,VOLU ! V37 = volume of element 37

*GET,EL52,ELEM,52,HGEN ! EL52 = value of heat generation in element 52 *GET,OPER,ELEM,102,HCOE,2 ! OPER = heat coefficient of element 102,face2

*GET,TMP,ELEM,16,TBULK,3 ! TMP = bulk temperature of element 16,face3

*GET,NMAX,NODE,,NUM,MAX ! NMAX = maximum active node number

*GET,HNOD,NODE,12,HGEN ! HNOD = value of heat generation at node 12

*GET,COORD,ACTIVE,,CSYS ! COORD = active coordinate system number 以上是介绍*GET函数。下面我们再来详细介绍所谓的“在线查询函数。

对于一些项目,你可以用在线查询函数来代替*GET命令。它可以直接将查询得到的值返回到参数表达式中。允这就使得你免去了先用*GET命令获得数据再将数据代入表达式这样的麻烦了。例如,假设你想计算两个节点的X坐标的平均值。你可以用如下的*GET来实现:

1、先把节点1的X坐标赋给L1:*GET,L1,NODE,1,LOC,X

2、再把节点2的X坐标赋给L2:*GET,L2,NODE,2,LOC,X

3、再计算:MID=(L1+L2)/2.

而使用在线查询函数则就可以可以直接用NX(N)来获得第N号节点的X坐标。所以MID=(NX(1)+NX(2))/2就实现了上面三条语句才可以实现的功能。

值得说明的是,*GET命令的声明(arguments,也就是后面的那些需要你指定的参数)同时也可以是一个参数或者是一个其他的查询函数。例如查询函数NELEM(ENUM,NPOS)返回ENUM号单元NPOS 位置的节点编号。嵌套起来的综合函数NX(NELEM(ENUM,NPOS))就返回了那个节点的X坐标。明白了没有?

附录:查询函数

Table B.1 *GET - Get Function Summary

(Entity Status Get Function)实体状态查询函数

(Description)详细说明

NSEL(N) Status of node N: -1=unselected,

0=undefined, 1=selected.

ESEL(E) Status of element E: -1=unselected,

0=undefined, 1=selected.

KSEL(K) Status of keypoint K: -1=unselected,

0=undefined, 1=selected.

LSEL(L) Status of line L: -1=unselected,

0=undefined, 1=selected.

ASEL(A) Status of area A: -1=unselected,

0=undefined, 1=selected.

VSEL(V) Status of volume V: -1=unselected,

0=undefined, 1=selected.

译者注:这里的“状态”指的是其是否被选择或者是否存在。返回的是-1、0、1三个数值。分别表示没有被选择、没有被定义(不存在)以及被选择。值得一提的是,在ANSYS中,被选择的项目(面、线、关键点、节点等)将被做个标记(flag)。所有标记的项目形成一个集合。这个集合的成员直到你用命令LSEL、ESEL、ASEL、KSEL、NSEL 等去改变他们的时候才会改变。特别需要注意的是,ANSYS默认经过刚定义的实体(线、面、关键点等)都是经过标志的。例如使用命令:LDELE, N L1, NL2, NINC, KSWP时,按照《ANSYS Commands Reference》上的说明:If NL1 = ALL, NL2 and NINC are ignored and

all selected lines [LSEL] are deleted。可是,即使你没有使用LSEL命令,依旧将你所有的线全部删除了。于是我使用LSEL(L)函数来测试,发现所有刚刚定义的线全部都是1——也就是说全部是被选定的。当你使用其他类似命令中参数ALL也都类似这样的情况!

Next Selected Entity

NDNEXT(N) Next selected node having a node number

greater than N.

ELNEXT(E) Next selected element having an element

number greater than E.

KPNEXT(K) Next selected keypoint having a

keypoint number greater than K. LSNEXT(L) Next selected line having a line number

greater than L.

ARNEXT(A) Next selected area having an area number

greater than A.

VLNEXT(V) Next selected volume having a volume

number greater than V.

译者注:上面这些函数是用来选择实体的。例如:L, KPNEXT(3), KPNEXT(1)就实现了在关键点2与关键点4之间划了一条线。不过笔者实验的时候发现还有很多问题。

Locations

CENTRX(E) Centroid X-coordinate of element E in

global Cartesian coordinate system.

Centroid is determined from the

selected nodes on the element. CENTRY(E) Centroid Y-coordinate of element E in

global Cartesian coordinate system.

Centroid is determined from the

selected nodes on the element. CENTRZ(E) Centroid Z-coordinate of element E in

global Cartesian coordinate system.

Centroid is determined from the

selected nodes on the element.

译者注:返回指定单元号的质心坐标。坐标系采用整体笛卡儿直角坐标系。质心是通过单元的节点来计算确定的。

NX(N) X-coordinate of node N in the active

coordinate system.

NY(N)Y-coordinate of node N in the active

coordinate system.

NZ(N)Z-coordinate of node N in the active

coordinate system.

KX(K) X-coordinate of keypoint K in the active

coordinate system

KY(K)Y-coordinate of keypoint K in the active

coordinate system

KZ(K)Z-coordinate of keypoint K in the active

coordinate system

译者注:返回节点、关键点K的坐标。坐标系采用当前活动坐标系。

Degree of Freedom Results

UX(N) UX structural displacement at node N. UY(N) UY structural displacement at node N. UZ(N) UZ structural displacement at node N. ROTX(N) ROTX structural rotation at node N. ROTY(N) ROTY structural rotation at node N. ROTZ(N) ROTZ structural rotation at node N. 查询节点的位移。这个很有用的。

TEMP(N) Temperature at node N. For SHELL131

and SHELL132 elements with KEYOPT(3)

= 0 or 1, use TBOT(N), TE2(N),

TE3(N), . . ., TTOP(N) instead of

TEMP(N).

节点温度。对于SHELL131、132单元,如果KEYOPT(3)是0或者1,请用上述查询函数代替这个函数。

PRES(N) Pressure at node N.

节点N的压力

VX(N) VX fluid velocity at node N.

VY(N) VY fluid velocity at node N.

VZ(N) VZ fluid velocity at node N.

节点N处的流体X、Y、Z向速度

LX(L,LFRAC) X-coordinate of line L at length

fraction LFRAC (0.0 to 1.0).

LY(L,LFRAC) Y-coordinate of line L at length

fraction LFRAC (0.0 to 1.0).

LZ(L,LFRAC) Z-coordinate of line L at length

fraction LFRAC (0.0 to 1.0).

LSX(L,LFRAC) X slope of line L at length fraction

LFRAC (0.0 to 1.0).

LSY(L,LFRAC) Y slope of line L at length fraction

LFRAC (0.0 to 1.0).

LSZ(L,LFRAC) Z slope of line L at length fraction

LFRAC (0.0 to 1.0).

译者注:返回某个线指定比例处的坐标。是什么坐标系请自己做个例子来确定。

Nearest to Location

NODE(X,Y,Z) Number of the selected node nearest the

X,Y,Z point (in the active coordinate

system, lowest number for coincident

nodes).

KP(X,Y,Z) Number of the selected keypoint nearest

the X,Y,Z point (in the active

coordinate system, lowest number for

coincident nodes).

译者注:从选择集(什么是选择集见我前面的注释)中返回距离某坐标点(X,Y,Z)最近的节点、关键点。坐标系采用当前活动坐标系。如果几个点是一样的话,则返回编号小的那个一个点的数据。

Distances

DISTND(N1,N2) Distance between nodes N1 and N2. DISTKP(K1,K2) Distance between keypoints K1 and K2. DISTEN(E,N) Distance between the centroid of

element E and node N. Centroid is

determined from the selected nodes on

the element.

译者注:返回节点之间、关键点之间以及单元质心与节点之间的距离。其他风复杂的距离关系计算,请自己用*GET命令来获得。

Angles (in radians by default -- see the *AFUN command)

ANGLEN(N1,N2,N3) Subtended angle between two lines

(defined by three nodes where N1is the

vertex node). Default is in radians. ANGLEK(K1,K2,K3) Subtended angle between two lines

(defined by three keypoints where K1

is the vertex keypoint). Default is in

radians.

译者注:返回以N1为顶点,以N1-N2,N1-N3连线为边的角的角度。默认采用弧度,如果想改成角度,请使用*AFUN。同理,对于关键点也一样。

Nearest to Entity

NNEAR(N) Selected node nearest node N. KNEAR(K) Selected keypoint nearest keypoint K. ENEARN(N) Selected element nearest node N. The

element position is calculated from

the selected nodes.

译者注:从选择集中选择一个距离某节点、关键点最近的节点、关键点;从选定的单元集合中选择一个距离某节点最近的单元。这个距离通过单元的质心来确定。

Areas

AREAND(N1,N2,N3) Area of the triangle with vertices at

nodes N1, N2, and N3.

AREAKP(K1,K2,K3) Area of the triangle with vertices at

keypoints K1, K2, and K3.

ARNODE(N) Area at node N apportioned from

selected elements attached to node N.

For 2-D planar solids, returns edge

area associated with the node. For

axisymmetric solids, returns edge

surface area associated with the node.

For 3-D volumetric solids, returns

face area associated with the node.

For 3–D, select all the nodes of the

surface of interest before using

ARNODE.

译者注:返回N1,N2,N3或者K1,K2,K3形成的三角形的面积;返回节点的面积——意思是说该节点从单元中分配到的“面积”。对于二维是面积,对于三维,说的准确是什么意思我还没有仔细研究,好在不是做太理论研究的人估计一辈子也用不到这个函数。

Normals

NORMNX(N1,N2,N3) X-direction cosine of the normal to

the plane containing nodes N1, N2, and

N3.

NORMNY(N1,N2,N3) Y-direction cosine of the normal to

the plane containing nodes N1, N2, and

N3.

NORMNZ(N1,N2,N3) Z-direction cosine of the normal to

the plane containing nodes N1, N2, and

N3.

NORMKX(K1,K2,K3) X-direction cosine of the normal to

the plane containing keypoints K1, K2,

and K3.

NORMKY(K1,K2,K3) Y-direction cosine of the normal to

the plane containing keypoints K1, K2,

and K3.

NORMKZ(K1,K2,K3) Z-direction cosine of the normal to

the plane containing keypoints K1, K2,

and K3.

译者注:返回由K1,K2,K3构成的平面的法线的X、Y、Z方向余弦。

Connectivity

ENEXTN(N,LOC) Element connected to node N. LOC is the

position in the resulting list when

many elements share the node. A zero

is returned at the end of the list. 译者注:返回与节点N连通的单元,LOC确定了在表单中的位置如果有很多个单元同享那个节点。具体表单按照什么顺序列出来,我没有实验过,还不清楚。

NELEM(E,NPOS) Node number in position NPOS (1--20)

of element E.

译者注:返回某单元中NPOS位置的节点的节点编号。这个位置的编号最大不得超过20,因为ANSYS的单元中没有超过20个节点的???

NODEDOF(N) Returns the bit pattern for the active

DOFs at the specified node.

bit 0 is UX, bit 1 is UY,... bit 5 is

ROTZ

bits 6,7,8 are AX,AY,AZ

bits 9,10,11 are VX,VY,VZ

bit 18 is PRES, bit 19 is TEMP, bit 20

is VOLT, bit 21 is MAG

bit 24 is EMF, bit 25 is CURR

For a node with UX,UY,UZ the return

value will be 7 (bits 0,1,2)

For a node with

UX,UY,UZ,ROTX,ROTY,ROTZ the return

value will be 63 (bits 0,1,2,3,4,5)

这个是有关节点自由度的问题的。不是很懂,不过一般不做理论研究也用不到。想了解的,恐怕要看看ANSYS的理论手册了和详细了解ANSYS单元的一些细节问题了。Faces

ELADJ(E,FACE) For 2-D planar solids and 3-D

volumetric solids, element adjacent

to a face (FACE) of element E. The face

number is the same as the surface load

key number. Only elements of the same

dimensionality and shape are

considered. A -1 is returned if more

than one is adjacent.

NDFACE(E,FACE,LOC) Node in position LOC of a face number

FACE of element E. The face number is

the same as the surface load key

number. LOC is the nodal position on

the face (for an IJLK face, LOC=1 is

at node I, 2 is at node J, etc.) NMFACE(E) Face number of element E containing

the selected nodes. The face number

output is the surface load key. If

multiple load keys occur on a face

(such as for line and area elements)

the lowest load key for that face is

output.

ARFACE(E) For 2-D planar solids and 3-D

volumetric solids, returns the area of

the face of element E containing the

selected nodes. For axisymmetric

elements, the area is the full (360

degree) area.

以上这些东东一般用不到,又没有完全搞清楚准确意思,大家想了解的自己去钻吧。ENKE(N) Turbulent kinetic energy (FLOTRAN) at

node N.

节点N处的动力学能量。搞湍流的人应该知道是什么意思。

ENDS(N) Turbulent energy dissipation

(FLOTRAN) at node N.

VOLT(N) Electric potential at node N.

MAG(N) Magnetic scalar potential at node N. AX(N) AX magnetic vector potential at node

N.

AY(N) AY magnetic vector potential at node

N.

AZ(N) AZ magnetic vector potential at node

N.

Returns information about the data base manager

VIRTINQR(1) Number of pages in core.

VIRTINQR(4) Page size in integer words. VIRTINQR(7) Maximum number of pages allowed on

disk.

VIRTINQR(8) Number of read/write operations on

page.

VIRTINQR(9) Maximum record number on page. VIRTINQR(11) Maximum pages touched.

这些东东一般人也用不到。

Returns the current value of ANSYS filtering keywords.

KWGET(KEYWORD) Returns the current value the keyword

specified by KEYWORD . See the ANSYS UIDL Programmer's Guide for a list of keywords and values.

Character String Functions Strings must be dimensioned (see *DIM ) as a character parameter or enclosed in single apostrophes ('char').

下面是一些字符串与标量(双精度数值)之间的转换。有些地方要用到。譬如一些显示操作有关的地方。

Functions which return a double precision value of a numeric character string. VALCHR(a8) a8 is a decimal value expressed in a

string.

VALOCT (a8) a8 is an octal value expressed in a string.

VALHEX(a8)

a8 is a hex value expressed in a string.

Functions which return an 8 character string of a numeric value. CHRVAL (dp ) dp is a double precision variable. CHROCT (dp ) dp is an integer value. CHRHEX(dp ) dp is an integer value. 以下是一些字符串操作函数。感兴趣的自己研究。

Functions which manipulate strings: StrOut is the output string (or character parameter) Str1 and Str2 are input strings. Strings are a maximum of 128 characters. (see *DIM )

StrOut = STRSUB(Str1, nLoc,nChar) Get the nChar substring starting at character nLoc in Str1. StrOut = STRCAT(Str1,Str2) Add Str2 at the end of Str1. StrOut = STRFILL(Str1,Str2,nLoc) Add Str2 to Str1 starting at character nLoc.

StrOut = STRCOMP(Str1) Remove all blanks from Str1 StrOut = STRLEFT(Str1) Left-justify Str1

nLoc = STRPOS(Str1,Str2) Get starting location of Str2 in Str1. nLoc = STRLENG(Str1) Location of last nonblank character StrOut = UPCASE(Str1) Upper case of Str1 StrOut = LWCASE(Str1)

Lower case of Str1

The following functions manipulate file names.

Path String = JOIN ('directory','filename','extension') Produces a contiguous pathstring. e.g. directory/filename.ext Path String = JOIN

('directory','filename') Produces a contiguous pathstring. e.g. directory/filename

SPLIT('PathString', 'DIR')

Produces a separate output of the

directory from the pathstring. SPLIT('PathString', 'FILE') Produces a separate output of the

complete filename (with extension)

from the pathstring.

SPLIT('PathString', 'NAME') Produces a separate output of the

filename from the pathstring. SPLIT('PathString', 'EXT') Produces a separate output of the file

extension from the pathstring.

含参不等式恒成立问题中求参数取值范围一般方法(教师版)

恒成立问题是数学中常见问题,也是历年高考的一个热点。大多是在不等式中,已知一个变量的取值范围,求另一个变量的取值范围的形式出现。下面介绍几种常用的处理方法。 一、分离参数 在给出的不等式中,如果能通过恒等变形分离出参数,即:若()a f x ≥恒成立,只须求出()max f x ,则()m ax a f x ≥;若()a f x ≤恒成立,只须求出()min f x ,则()m in a f x ≤,转化为函数求最值。 例1、已知函数()lg 2a f x x x ??=+ - ???,若对任意[)2,x ∈+∞恒有()0f x >,试确定a 的取值范围。 解:根据题意得:21a x x + ->在[)2,x ∈+∞上恒成立, 即:23a x x >-+在[)2,x ∈+∞上恒成立, 设()23f x x x =-+,则()2 3924f x x ??=--+ ??? 当2x =时,()max 2f x = 所以2a > 例2、已知(],1x ∈-∞时,不等式() 21240x x a a ++-?>恒成立,求a 的取值范围。 解:令2x t =,(],1x ∈-∞ (]0,2t ∴∈ 所以原不等式可化为:22 1t a a t +-<, 要使上式在(]0,2t ∈上恒成立,只须求出()2 1t f t t +=在(]0,2t ∈上的最小值即可。 ()22211111124t f t t t t t +????==+=+- ? ? ???? 11,2t ??∈+∞???? ()()min 324f t f ∴== 234a a ∴-< 1322 a ∴-<< 二、分类讨论 在给出的不等式中,如果两变量不能通过恒等变形分别置于不等式的两边,则可利用分类讨论的思想来解决。 例3、若[]2,2x ∈-时,不等式2 3x ax a ++≥恒成立,求a 的取值范围。 解:设()2 3f x x ax a =++-,则问题转化为当[]2,2x ∈-时,()f x 的最小值非负。 (1) 当22a -<-即:4a >时,()()min 2730f x f a =-=-≥ 73 a ∴≤又4a >所以a 不存在;

C++中函数调用时的三种参数传递方式

在C++中,参数传递的方式是“实虚结合”。 ?按值传递(pass by value) ?地址传递(pass by pointer) ?引用传递(pass by reference) 按值传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的,然后把以求出的实参表达式的值一一存入到形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“按值传递”。 使用这种方式,调用函数本省不对实参进行操作,也就是说,即使形参的值在函数中发生了变化,实参的值也完全不会受到影响,仍为调用前的值。 [cpp]view plaincopy 1./* 2. pass By value 3.*/ 4.#include https://www.360docs.net/doc/4b15340676.html,ing namespace std; 6.void swap(int,int); 7.int main() 8.{ 9.int a = 3, b = 4; 10. cout << "a = " << a << ", b = " 11. << b << endl; 12. swap(a,b); 13. cout << "a = " << a << ", b = " 14. << b << endl; 15.return 0; 16.} 17.void swap(int x, int y) 18.{ 19.int t = x; 20. x = y; 21. y = t; 22.}

如果在函数定义时将形参说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式就是地址传递方式。 地址传递与按值传递的不同在于,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。 [cpp]view plaincopy 1.#include https://www.360docs.net/doc/4b15340676.html,ing namespace std; 3.void swap(int*,int*); 4.int main() 5.{ 6.int a = 3, b = 4; 7. cout << "a = " << a << ", b = " 8. << b << endl; 9. swap(&a,&b); 10. cout << "a = " << a << ", b = " 11. << b << endl; 12. system("pause"); 13.return 0; 14.} 15.void swap(int *x,int *y) 16.{ 17.int t = *x; 18. *x = *y; 19. *y = t; 20.} 按值传递方式容易理解,但形参值的改变不能对实参产生影响。 地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。

函数参数传递的原理

函数参数传递的原理 参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,方法有按值传递参数,按地址传递参数和按数组传递参数。 形参:指出现在Sub 和Function过程形参表中的变量名、数组名,该过程在被调用前,没有为它们分配内存,其作用是说明自变量的类型和形态以及在过程中的作用。形参可以是除定长字符串变量之外的合法变量名,也可以带括号的数组名。 实参:实参就是在调用Sub 和Function过程时,从主调过程传递给被调用过程的参数值。实参可以是变量名、数组名、常数或表达式。在过程调用传递参数时,形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但它们的数据类型、参数个数及位置必须一一对应。 等号、函数名称、括弧和参数,是函数的四个组成部分。 函数“=SUM(1,2,3)”,1、2和3就是SUM函数的参数,没有参数1、2、3,函数SUM 则无从求值。 函数“=VLOOKUP(2,A:C,3,)”,没有参数2、A:C和3,函数VLOOKUP如何在A:C 区域查找A列中是2那一行第3列的数值? 当然,也有不需要参数的函数,如“=PI()”、“=NOW()”、“TODAY()”等。 函数参数传递的原理C语言中参数的传递方式一般存在两种方式:一种是通过栈的形式传递,另一种是通过寄存器的方式传递的。这次,我们只是详细描述一下第一种参数传递方式,另外一种方式在这里不做详细介绍。 首先,我们看一下,下面一个简单的调用例程: int Add (int a,int b,int c) { return a+b+c; }

指针与参数传递

指针与参数传递 C语言规定所有参数均以“传值”的方式进行传递,被调函数获得的仅是实际参数的拷贝(这个拷贝值赋给形式参数)。因为这个特性, 函数可以放心使用这个拷贝值, 而不必担心修改了实际参数的值。 如果我们需要通过函数调用来改变程序中某些变量(本文只涉及自动型变量)的值, 通常有2个方法: 一是将函数的返回值赋给该变量;二是利用函数参数, 用该变量的地址(即指针)作为实际参数, 通过指针来间接访问该变量。本文讨论的是第二种方法。 程序1、2是在很多C教材中会见到的经典的例子,程序试图交换a、b 两个变量的值。 程序1 中的swap1 函数并不能交换实际参数a、b 的值。函数调用仅仅将a、b的值传递给了形式参数x、y。形参与实参占用的是不同的内存空间,swap1只是交换了形式参数x、y的值,对a、b 没有任何影响。 程序2中,函数swap2的两个形参是整型指针,函数调用时实际参数为a、b的地址,这两个地址将拷贝给形参x、y,这意味着x、y 是分别指向变量a、b的指针,对*x、*y的引用就是对a、b的引用,因此,函数swap2能成功交换主调函数中变量a、b的值。 很多初学者认为只要将参数改为指针就可以解决一切类似问题,其实不然。注意下面2个程序区别:

程序的意图是:在主函数中定义整型指针mp,通过调用fun 函数使mp指向malloc函数申请的能存储一个整型数据的空间,最后利用mp间接访问该空间,将整型数据1存入。 程序3是错误的,如图1所示,mp和形式参数fp都是指针变量,会分配到内存空间,mp定义了却没有初始化,它的存储内容是随机的(图中用“?”表示),调用fun函数仅仅将mp的值(即这个随机值)赋给fp, 但fp 的值立刻被malloc 函数修改为208(假设malloc 函数申请空间成功且对应内存首地址为208)。可见fun 函数并未对mp产生影响,mp仍然是随机值,它指向的是一块未知空间或者非法地址。若将程序在windows环境下的PC上运行, 通过指针mp对未知空间的间接访问操作(语句“ *mp=1”)会导致程序异常。 程序4 则能成功达到目的。注意,fun 函数的形参fp 不再是指向整型数据的指针而是指向整型指针的指针, 实际参数则是mp 的内存地址。从main函数第一句开始分析,如图2所示,mp被定义,为它分配空间(假设这个空间地址是100), 因未被初始化,这个空间的里的内容是随机的;接着,调用fun函数,fp分配到空间,生命期开始,通过参数值传递它的值为mp的地址100,fp就是指向mp的指针。fun函数调用后的结果如图3所示,malloc函数申请到的空间地址(假设为208)被赋给了*fp,即赋给了mp,mp的值变为208,此时mp就指向了能存储一个整型数据的空间。接下来 的语句“ *mp=1”则将整型数据1存入这个空间,如图4所示。

函数调用参数传递类型(java)的用法介绍.

函数调用参数传递类型(java)的用法介绍. java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清。 (一)基本数据类型:传值,方法不会改变实参的值。 public class TestFun { public static void testInt(int i){ i=5; } public static void main(String[] args) { int a=0 ; TestFun.testInt(a); System.out.println("a="+a); } } 程序执行结果:a=0 。 (二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。 举两个例子: (1)方法体内改变形参引用,但不会改变实参引用,实参值不变。 public class TestFun2 { public static void testStr(String str){ str="hello";//型参指向字符串“hello” } public static void main(String[] args) { String s="1" ;

TestFun2.testStr(s); System.out.println("s="+s); //实参s引用没变,值也不变 } } 执行结果打印:s=1 (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。 import java.util.HashMap; import java.util.Map; public class TestFun3 { public static void testMap(Map map){ map.put("key2","value2");//通过引用,改变了实参的内容 } public static void main(String[] args) { Map map = new HashMap(); map.put("key1", "value1"); new TestFun3().testMap(map); System.out.println("map size:"+map.size()); //map内容变化了 } } 执行结果,打印:map size:2 。可见在方法testMap()内改变了实参的内容。 (3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer : public class TestFun4 {

含参数二次函数分类讨论的办法总结

二次函数求最值参数分类讨论的方法 分类讨论是数学中重要的思想方法和解题策略,它是根据研究对象的本质属性 的相同点和不同点,将对象分为不同种类然后逐类解决问题. 一般地,对于二次函数y=a (x m )2+n ,x ∈[t ,s ]求最值的问题;解决此类问题的基本思路为:根据对称轴相对定义域区间的位置,利用分类讨论思想方法。为做到 分类时不重不漏,可画对称轴相对于定义域区间的简图分类。 ①表示对称轴在区间[t ,s ]的左侧,②表示对称轴在区间[t ,s ]内且靠近区 间的左端点,③表示对称轴在区间内且靠近区间的右端点,④表示对称轴在区间[t ,s ]的右侧。然后,再根据口诀“开口向上,近则小、远则大”;“开口向下,近则大、 远则小”即可快速求出最值。 含参数的二次函数求最值的问题大致分为三种题型,无论哪种题型都围绕着对称 轴与定义域区间的位置关系进行分类讨论 题型一:“动轴定区间”型的二次函数最值 例1、求函数2()23f x x ax =-+在[0,4]x ∈上的最值。 分析:先配方,再根据对称轴相对于区间的位置讨论,然后根据口诀写出最值。 解:222()23()3f x x ax x a a =-+=-+- ∴此函数图像开口向上,对称轴x=a ①、当a <0时,0距对称轴x=a 最近,4距对称轴x=a 最远, ∴x=0时,min y =3,x=4时,max y =19-8a ②、当0≤a<2时,a 距对称轴x=a 最近,4距对称轴x=a 最远, ∴x=a 时,min y =3-a2,x=4时,max y =19-8a ③、当2≤a<4时,a 距对称轴x=a 最近,0距对称轴x=a 最远, ① ② ③ ④ t t +s 2s

二次函数求最值参数分类讨论的方法(可编辑修改word版)

t t + s 2 s ① ② ③ ④ 二次函数求最值参数分类讨论的方法 分类讨论是数学中重要的思想方法和解题策略,它是根据研究对象的本质属性的相同点和不同点,将对象分为不同种类然后逐类解决问题. 一般地,对于二次函数 y=a (x m )2+n ,x ∈[t ,s ]求最值的问题;解决此类问题的基本思路为:根据对称轴相对定义域区间的位置,利用分类讨论思想方法。为做到分类时不重不漏, 可画对称轴相对于定义域区间的简图分类。 ①表示对称轴在区间[t ,s ]的左侧,②表示对称轴在区间[t ,s ]内且靠近区间的左端点,③表示对称轴在区间内且靠近区间的右端点,④表示对称轴在区间[t ,s ]的右侧。然后,再根据口诀“开口向上,近则小、远则大”;“开口向下,近则大、远则小”即可快速求出最值。 含参数的二次函数求最值的问题大致分为三种题型,无论哪种题型都围绕着对称轴与定义域区间的位置关系进行分类讨论 题型一:“动轴定区间”型的二次函数最值 例1、求函数 f (x ) = x 2 - 2ax + 3 在 x ∈[0, 4] 上的最值。 分析:先配方,再根据对称轴相对于区间的位置讨论,然后根据口诀写出最值。 解: f (x ) = x 2 - 2ax + 3 = (x - a )2 + 3 - a 2 ∴此函数图像开口向上,对称轴 x=a ①、当 a <0 时,0 距对称轴 x=a 最近,4 距对称轴 x=a 最远, ∴x=0 时, y min =3,x=4 时, y max =19-8a ②、当 0≤a<2 时,a 距对称轴 x=a 最近,4 距对称轴 x=a 最远, ∴x=a 时, y min =3-a2,x=4 时, y max =19-8a ③、当 2≤a<4 时,a 距对称轴 x=a 最近,0 距对称轴 x=a 最远, ∴x=a 时, y min =3-a2,x=0 时, y max =3 ④、当 4≤a 时,4 距对称轴 x=a 最近,0 距对称轴 x=a 最远, ∴x=4 时, y min =19-8a ,x=0 时, y max =3 例 2、已知函数 f (x ) = ax 2 + (2a -1)x - 3 在区间[- 3 , 2] 上最大值为 1,求实数 a 的值 2 分析:取 a=0,a≠0,分别化为一次函数与二次函数,根据一次函数、二次函数的性质分

导数求最值(含参)

含参导数求最值问题(1—2) 编制人:闵小梅审核人:王志刚 【使用说明及学法指导】 1.完成预习案中的相关问题; 2.尝试完成探究案中合作探究部分,注意书写规范; 3.找出自己的疑惑和需要讨论的问题准备课堂讨论质疑。 【学习目标】 1.掌握利用导数求函数最值的方法 2.会用导数解决含参函数的综合问题 【预习案】 一、知识梳理 函数的最值与导数 (1)函数f(x)在[a,b]上有最值的条件 如果在区间[a,b]上函数y=f(x)的图象是一条连续不断的曲线,那么它必有最大值和最小值. (2)求y=f(x)在[a,b]上的最大(小)值的步骤 ①求函数y=f(x)在(a,b)内的极值. ②将函数y=f(x)的各极值与端点处的函数值f(a),f(b)比较,其中最大的一个是最大值,最小的一个是最小值. 二、尝试练习 1.设函数f(x)=x3-x2 2 -2x+5,若对任意的x∈[-1,2],都有f(x)>a,则实 数a的取值范围是________ (-∞,7 2 ) 2.已知函数f(x)=ax3-3x+1对x∈(0,1]总有f(x)≥0成立,则实数a的取值范围是________ [4,+∞)

【探究案】 一、合作探究: 例1. 设函数f (x )=ln x +ln(2-x )+ax (a >0). (1)当a =1时,求f (x )的单调区间; 增(0,2),减(2,2) (2)若f (x )在(0,1]上的最大值为12,求a 的值. a =12 二、拓展探究: 例2. 已知函数f(x)=lg(x +a x -2),其中a >0且为常数. (1)当a∈(1,4)时,求函数f(x)在[2,+∞)上的最小值;ln a 2 (2)若对任意x∈[2,+∞)恒有f(x)>0,试确定实数a 的取值范围.(2,+∞) 三、深层探究:单调性的应用 例3.求f (x )=ax x e -? (a >0)在x ∈[1,2]上的最大值

总结Java方法(函数)传值和传引用的问题

总结Java方法(函数)传值和传引用的问题 java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清。 (一)基本数据类型:传值,方法不会改变实参的值。 public class TestFun { public static void testInt(int i){ i=5; } public static void main(String[] args) { int a=0 ; TestFun.testInt(a); System.out.println("a="+a); } } 程序执行结果:a=0 。 (二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。 举两个例子: (1)方法体内改变形参引用,但不会改变实参引用,实参值不变。 public class TestFun2 { public static void testStr(String str){ str="hello";//型参指向字符串“hello” } public static void main(String[] args) { String s="1" ;

TestFun2.testStr(s); System.out.println("s="+s); //实参s引用没变,值也不变 } } 执行结果打印:s=1 (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。 import java.util.HashMap; import java.util.Map; public class TestFun3 { public static void testMap(Map map){ map.put("key2","value2");//通过引用,改变了实参的内容 } public static void main(String[] args) { Map map = new HashMap(); map.put("key1", "value1"); new TestFun3().testMap(map); System.out.println("map size:"+map.size()); //map内容变化了 } } 执行结果,打印:map size:2 。可见在方法testMap()内改变了实参的内容。 (3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer : public class TestFun4 {

C语言函数参数传递(非常重要)

一、三道考题 开讲之前,我先请你做三道题目。(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?) 考题一,程序代码如下: void Exchg1(int x, int y) { int tmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d\n", x, y); } main() { int a = 4,b = 6; Exchg1(a, b); printf("a = %d, b = %d\n", a, b); return(0); } 输出的结果为: x = ____, y=____. a = ____, b=____. 问下划线的部分应是什么,请完成。 考题二,程序代码如下: void Exchg2(int *px, int *py) { int tmp = *px; *px = *py; *py = tmp; printf("*px = %d, *py = %d.\n", *px, *py); } main() { int a = 4; int b = 6; Exchg2(&a, &b); printf("a = %d, b = %d.\n", a, b); return(0); } 输出的结果为为: *px=____, *py=____.

a=____, b=____. 问下划线的部分应是什么,请完成。 考题三,程序代码如下: void Exchg3(int &x, int &y) { int tmp = x; x = y; y = tmp; printf("x = %d,y = %d\n", x, y); } main() { int a = 4; int b = 6; Exchg3(a, b); printf("a = %d, b = %d\n", a, b); return(0); } 输出的结果为: x=____, y=____. a=____, b=____. 问下划线的部分应是什么,请完成。你不在机子上试,能作出来吗?你对你写出的答案有多大的把握?正确的答案,想知道吗?(呵呵,让我慢慢地告诉你吧!) 好,废话少说,继续我们的探索之旅了。 我们都知道:C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。题一为值传递,题二为地址传递,题三为引用传递。不过,正是这几种参数传递的形式,曾把我给搞得晕头转向。我相信也有很多人与我有同感吧? 下面请让我逐个地谈谈这三种传递形式。 二、函数参数传递方式之一:值传递 (1)值传递的一个错误认识 先看考题一中Exchg1函数的定义: void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1函数的形式参数*/ { int tmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d.\n", x, y); }

含有参数的函数最值问题导学案(1218)

五环学习法高中数学学科导学稿 编写人:许鲔潮 审稿人:郭沂 编写时间:2015-12-11 课题:含有参数的函数最值问题 (人教A 版数学新课标教材必修1水平考试综合题复习) 学习目标 1.理解含参数的函数最值问题特征; 2.通过含参数的函数最值问题的求解探究解题策略; 3.培养学生分析解决水平考试综合问题的能力。 4.培养学生利用分类讨论、化归、数形结合、分离变量等数学思想与方法进行解题的意 识。 一.回忆旧知(本节课学习你可能要用到下面的知识) (1)函数零点概念:对于函数))((D x x f y ∈=,把使得_________成立的实数x 叫做函数))((D x x f y ∈=的零点。 (2)函数零点的意义:函数)(x f y =的零点就是方程 的________,亦即函数)(x f y =的图象与x 轴交点的______。即:方程0)(=x f 有实数根?函数)(x f y =的图象与x 轴有交点?函数)(x f y =有零点。 (3)二次函数)0(2 ≠++=a c bx ax y 的零点: 1)△>0,方程02=++c bx ax 有两不等实根,二次函数的图象与x 轴有___个交点,二次函数有______个零点; 2)△=0,方程02=++c bx ax 有两相等实根,二次函数的图象与x 轴有一个交点,二次函数有______个零点; 3)△<0,方程02=++c bx ax 无实根,二次函数的图象与x 轴有______交点,二次函数有______零点。 (4)零点存在性定理:如果函数)(x f y =在区间],[b a 上的图象是连续不断的一条曲线,并且有________,那么函数)(x f y =在区间),(b a 内有零点。即存在),(b a c ∈,使得______,这个c 也就是方程的根。 二.自主学习(自学复习下面内容,并完成下列问题) 1.复习《高中数学必修课程综合测评2015》,P4知识点23: 二次方程()()2 00f x ax bx c a =++=>实根分布及条件; 2.复习《高中数学必修课程综合测评2015》,P7 ,练习15. 编号 Sxbx1 0)(=x f

c语言值传递的3种形式

//全部摘自别的博客,以前对值传递很迷糊,看完豁然开朗,整理下,来百度文库赚点分。 一、三道考题 开讲之前,我先请你做三道题目。(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?) 考题一,程序代码如下: void Exchg1(int x, int y) { inttmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d\n", x, y); } main() { int a = 4,b = 6; Exchg1(a, b); printf("a = %d, b = %d\n", a, b); return(0); } 输出的结果为: x = ____, y=____. a = ____, b=____. 问下划线的部分应是什么,请完成。 考题二,程序代码如下: void Exchg2(int *px, int *py) { inttmp = *px; *px = *py; *py = tmp; printf("*px = %d, *py = %d.\n", *px, *py); } main() { int a = 4; int b = 6; Exchg2(&a, &b);

printf("a = %d, b = %d.\n", a, b); return(0); } 输出的结果为为: *px=____, *py=____. a=____, b=____. 问下划线的部分应是什么,请完成。 考题三,程序代码如下: void Exchg3(int&x, int&y) { inttmp = x; x = y; y = tmp; printf("x = %d,y = %d\n", x, y); } main() { int a = 4; int b = 6; Exchg3(a, b); printf("a = %d, b = %d\n", a, b); return(0); } 输出的结果为: x=____, y=____. a=____, b=____. 问下划线的部分应是什么,请完成。你不在机子上试,能作出来吗?你对你写出的答案有多大的把握?正确的答案,想知道吗?(呵呵,让我慢慢地告诉你吧!) 好,废话少说,继续我们的探索之旅了。 我们都知道:C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。题一为值传递,题二为地址传递,题三为引用传递。不过,正是这几种参数传递的形式,曾把我给搞得晕头转向。我相信也有很多人与我有同感吧? 下面请让我逐个地谈谈这三种传递形式。 二、函数参数传递方式之一:值传递 (1)值传递的一个错误认识 先看考题一中Exchg1函数的定义: void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1函数的形式参数*/ {

把求参数取值范围转化为两个函数最值问题时几个易错点

把求参数取值范围转化为两个函数最值问题时几个易错点 ——有关用量词叙述的几类问题 易错点1:对()()恒成立,使得2121,,x g x f B x A x >∈?∈?求参数m 的取值范围。 最值满足条件: 思路分析:由于21,x x 取值的任意性,所以要使()()21x g x f >恒成立,只需所有的()1x f 值大于所有 的()2x g 值,故只须()()max min x g x f > 易错点2:对()()恒成立,使得2121,,x g x f B x A x >∈?∈?求参数m 的取值范围。 最值满足条件: 思路分析:由于1x 在区间A 上的取值具有任意性,2x 在区间B 上的取值只要求存在性,所以要使 ()()21x g x f >恒成立,只需所有的()1x f 值大于某一个()2x g 值,或说存在一个()2x g 值小于所有的 ()1x f 值,故只须()()min min x g x f >(或()()min min x f x g <) 易错点3:对()()恒成立,使得2121,,x g x f B x A x >∈?∈?求参数m 的取值范围。 最值满足条件: 思路分析:由于1x 在区间A 取值只要求存在性,2x 在区间B 上的取值具有任意性,所以要使 ()()21x g x f >恒成立,只需存在一个()1x f 值大于所有的()2x g 值,故只须()()max max x g x f >(或()()max max x f x g <) 易错点4:对()()成立,使得2121,,x g x f B x A x >∈?∈?求参数m 的取值范围。 最值满足条件: 思路分析:由于1x 在区间A 取值只要求存在性,2x 在区间B 上的取值也只要求存在性,所以要使 ()()21x g x f >恒成立,只需存在一个()1x f 值大于某一个()2x g 值,故只须()()min max x g x f > 易错点5:对()()成立,使得2121,,x g x f B x A x =∈?∈?求参数m 的取值范围。 最值满足条件: 思路分析:对于区间A 上的任意1x 或说每一个1x ,都会得到一个确定的函数值()1x f ,要保证总存在 ()2x g 与()1x f 相等,只须()x g y =的值域包含()x f y =的值域,即

C语言中参数传递

二.参数传递 函数的形参的初始化和变量的初始化一样,如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它是实参的别名。 1.非引用实参 普通的非引用类型的函数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有调用所传递的实参本身,因此不会修改实参的值。 注解:非引用形参表示对应实参的局部副本,对这类行参的修改仅仅改变了局部副本的值,一旦函数执行结束,这些局部变量的值也就没有了。 a. 指针形参 指针形参与其他非引用类型的行参一样,如果将新指针赋给行参,主调函数使用的实参指针的值没有改变。事实上被复制的指针只影响对指针的赋值。指针形参是const类型还是非const类型,将影响函数调用所使用的实参。 b. const行参 在调用函数时,如果该函数使用非引用的非const形参,则既给该函数传递const实参也可传递非const的实参(因为改变形参不影响const的实参,所以const实参不会被改变)。如果将形参定义为非引用的const类型,则在函数中,不可以改变实参的局部副本,由于实参是以副本的形式传递,因此传递给函数形参既可是const也可是非const对象。 注意:尽管函数的形参是const,但是编译器却将该行参声明视为普通的int型。 void fcn(const int i); void fcn(int i); 为了兼顾C语言,认为这两种定义并不区别。 c. 复制实参的局限性 不适合复制实参的情况包括: 当需要在函数中修改实参的值时 当需要以大型对象作为实参传递时,对实际的应用而言,复制对象所付出的时间和存储空间代价往往很大。 但没有办法实习对象的复制时 对于以上几种情况,有效的办法是将形参定义为引用或指针。 2.引用实参 与所有引用一样,引用形参直接关联到其所绑定的对象,而并非这些对象的副本。定义引

有限区间上含参数的二次函数的最值问题

有限区间上含参数的二次函数的最值问题 执教:吴雄华 时间:2006-9 班级:高三(1) 班 教学目标: 知识与技能: 1.掌握定义在变化区间上的一元二次函数最值的求解方法; 2.掌握系数含参数的一元二次函数在定区间上最值的求解方法; 过程与方法: 3.加深学生运用分类讨论和数形结合数学思想方法的体验; 情感、态度与价值观:4.通过学生自己的探索解决问题,增强其学习数学的兴趣和信心; 5.培养学生严密的分析和解决问题的能力。 教学重点:含参数的一元二次函数的最值问题的求解。 教学难点:分类讨论与数形结合数学思想方法的运用。 教学内容 教师活动 学生活动 一.复习一元二次函数最值的求 法。 1. 没有限定区间的情况。 2. 有限定区间的情况。 提问一:我们已学习了哪些一元二次函数求最值问题?请同学指出类型和求解方法。 回答一:两种情况,分别为没有限定区间的情况和有限定区间的情况。 前者用配方法即可,后者先配方,再借助图像来观察函数在给定区间上的单调性,从而得出函数的最值。 二.研究定义在变化区间上的一 元二次函数最值问题的求解。 例1已知函数()222++=x x x f , (1)若R x ∈,求函数的最值; (2)若[]1,3x ∈,求函数的最值; (3)若]3,2[-∈x ,求函数的最值; (4)若[]R a a a x ∈+∈,2,,求函数的最小值; (5)[]R a a a x ∈+∈,2,,求函数的最大值。 ?? ? ??-<++-<≤--≥++=.3,106;13,1; 1,2222min a a a a a a a y ?????-<++-≥++=. 2,22;2,1062 2max a a a a a a y 给出例1。 借助(1)(2)(3)复习,请同学口头回答解法。 提问二:(4)题与(1)(2)(3)题有什么联系和区别? 提示后请同学们完成(4)题。 允许讨论。 其中请两位同学在黑板上分别完成(4)(5)题。 教师巡视,若多数同学感到困难,则再提示要不要通过图像来解答。 学生完成后讲评。 提问三:请同学指出分类讨论的依据,并对问题类型归纳。 读题后思考(1)(2)(3)题,口头回答解法。 回答二:都是一元二次函数求最值的问题,但(4)题中函数的定义域(区间)是变化的。 区间变化,函数的最值相应变化。故要进行分类讨论。 先独立思考,有困难再讨论,最后完成解答。 回答三: 最小值:对此区间是否有函数的对称轴穿过进行讨论; 最大值对此区间的两个端点离对称轴的远近讨论。

C语言入门教程10(函数参数的传递和值的返回)

前面我们说的都是无参数无返回值的函数,实际程序中,我们经常使用到带参数有返回值的函数。 一、函数参数传递 1.形式参数和实际参数 函数的调用值把一些表达式作为参数传递给函数。函数定义中的参数是形式参数,函数的调用者提供给函数的参数叫实际参数。在函数调用之前,实际参数的值将被拷贝到这些形式参数中。 2.参数传递 先看一个例子: void a(int); /*注意函数声明的形式*/ main() { int num; scanf(%d,&num); a(num); /*注意调用形式*/ } void a(int num_back) /*注意定义形式*/ { printf(%d\n,num_back); } 在主函数中,先定义一个变量,然后输入一个值,在a()这个函数中输出。当程序运行a(num);这一步时,把num的值赋值给num_back,在运行程序过程中,把实际参数的值传给形式参数,这就是函数参数的传递。 形参和实参可能不只一个,如果多于一个时,函数声明、调用、定义的形式都要一一对应,不仅个数要对应,参数的数据类型也要对应。 void a(int,float); main() { int num1; float num2; scanf(%d,&num1); scanf(%f,&num2); a(num1,num2); } void a(int num1_back,float num2_back) { printf(%d,%f\n,num1_back,num2_back);

} 上面的例子中,函数有两个参数,一个是整型,一个是浮点型,那么在声明、调用、定义的时候,不仅个数要一样,类型也要对应。如果不对应,有可能使的编译错误,即使没错误,也有可能让数据传递过程中出现错误。 再看一个例子: void a(int); main() { int num; scanf(%d,&num); a(num); } void a(int num) { printf(%d\n,num); } 看上面的例子,形式参数和实际参数的标识符都是num,程序把实际参数num的值传递给形式参数num。有些人可能就不明白了,既然两个都是num,为什么还要传递呢?干脆这样不就行了吗: void a(); main() { int num; scanf(%d,&num); a(); } void a() { printf(%d\n,num); } 其实不然,这就要涉及到标识符作用域的问题。作用域的意思就是说,哪些变量在哪些范围内有效。一个标识符在一个语句块中声明,那么这个标识符仅在当前和更低的语句块中可见,在函数外部的其实地方不可见,其他地方同名的标识符不受影响,后面我们会系统讲解作用域的问题。在这儿你就要知道两个同名的变量在不同的函数中是互不干扰的。

c语言函数调用三种方式传值调用,引用调用和传地址调

C语言函数调用三种方式传值调用,引用调用和传地址调 我想,你只要看了C语言上关于传值函数调用的测试题,一切都会了然于胸:1. 考题一:程序代码如下: void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d\n”,x,y) } void main() { int a=4,b=6; Exchg1 (a,b) ; printf(“a=%d,b=%d\n”,a,b) } 输出的结果: x=____, y=____ a=____, b=____ 问下划线的部分应是什么,请完成。 2. 考题二:代码如下。 Exchg2(int *px, int *py) { int tmp=*px; *px=*py; *py=tmp; print(“*px=%d,*py=%d\n”,*px,*py); } main() { int a=4; int b=6; Exchg2(&a,&b); Print(“a=%d,b=%d\n”, a, b); }

输出的结果为: *px=____, *py=____ a=____, b=____ 问下划线的部分应是什么,请完成。 3. 考题三: Exchg2(int &x, int &y) { int tmp=x; x=y; y=tmp; print(“x=%d,y=%d\n”,x,y); } main() { int a=4; int b=6; Exchg2(a,b); Print(“a=%d,b=%d\n”, a, b); } 二.函数参数传递方式之一:值传递 1.值传递的一个错误认识 先看题一中Exchg1函数的定义: void Exchg1(int x, int y) //定义中的x,y变量被称为Exchg1函数的形式参数{ int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d\n”,x,y) } 问:你认为这个函数是在做什么呀 答:好像是对参数x,y的值对调吧 请往下看,我想利用这个函数来完成对a,b两个变量值的对调,程序如下:void main() {

《含参数的函数的极值》专题

《含参数的函数的极值》专题 2019年( )月( )日 班级 姓名 1.函数f (x )=3x 2-ln x -x 的极值点的个数是( ) A .0 B .1 C .2 D .3 答案 B 2.若a >0,b >0,且函数f (x )=4x 3-ax 2-2bx +2在x =1处有极值,则ab 的最大值等于( ) A .2 B .3 C .6 D .9 答案 D 3.若函数f (x )=2x 3-9x 2+12x -a 恰好有两个不同的零点,则a 的值可能为( ) A .4 B .6 C .7 D .8 答案 A 4.函数f (x )=x 2-a ln x (a ∈R )不存在极值点,则a 的取值范围是( ) A .(-∞,0) B .(0,+∞) C .[0,+∞) D .(-∞,0] 答案 D 5.若函数f (x )=x 2e x -a 恰有三个零点,则实数a 的取值范围是( ) A.????4e 2,+∞ B.??? ?0,4 e 2 C .(0,4e 2) D .(0,+∞) 答案 B 6.已知函数f (x )=ln x +1 2ax 2-(a +1)x +1在x =1处取得极小值,则实数a 的取值范围是 ( ) A .(-∞,1] B .(-∞,1) C .(1,+∞) D .(0,+∞) 答案 C 7.已知函数f (x )=ax 3+bx 2+cx 的图象如图所示,且f (x )在x =x 0与x =2处取得极值,则f (1)+f (-1)的值一定( ) A .等于0 B .大于0 C .小于0 D .小于或等于0 答案 B 8.函数f (x )=ax 2+bx 在x =1 a 处有极值,则 b 的值为________. 答案 -2 9.函数f (x )=ax 3+x +1有极值的充要条件是________. 答案 a <0 10.若函数f (x )=x 3+x 2-ax -4在区间(-1,1)上恰有一个极值点,则实数a 的取值范围为

相关文档
最新文档