函数调用有哪几种方式

函数调用有哪几种方式
函数调用有哪几种方式

函数调用有哪几种方式

我们知道在进行函数调用时,有几种调用方法,主要分为C式,Pascal式.在C和C++中

C式调用是缺省的,类的成员函数缺省调用为_stdcall。二者是有区别的,下面我们用

实例说明一下:(还有thiscall和fastcall)

1. __cdecl :C和C++缺省调用方式

C 调用约定(即用__cdecl 关键字说明)按从右至左的顺序压参数入栈,由调用者把

参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数

的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。

_cdecl 是C 和C++ 程序缺省的调用方式。每一个调用它的函数都包含清空堆栈的

代码,所以产生的可执行文件大小会比调用_stdcall 函数的大。函数采用从右到左的

压栈方式。VC 将函数编译后会在函数名前面加上下划线前缀。它是MFC 缺省调用约

定。

例子:

void Input( int &m,int &n);

以下是相应的汇编代码:

00401068 lea eax,[ebp-8] ;取[ebp-8]地址(ebp-8),存到eax

0040106B push eax ;然后压栈

0040106C lea ecx,[ebp-4] ;取[ebp-4]地址(ebp-4),存到ecx

0040106F push ecx ;然后压栈

00401070 call @ILT+5(Input) (0040100a);然后调用Input函数

00401075 add esp,8 ;恢复栈

从以上调用Input函数的过程可以看出:在调用此函数之前,首先压栈ebp-8,然后压栈ebp-4,然后调用函数Input,最后Input函数调用结束后,利用esp+8恢复栈。由

此可见,在C语言调用中默认的函数修饰_cdecl,由主调用函数进行参数压栈并且恢复

堆栈。

下面看一下:地址ebp-8和ebp-4是什么?

在VC的VIEW下选debug windows,然后选Registers,显示寄存器变量值,然后在选debug windows下面的Memory,输入ebp-8的值和ebp-4的值(或直接输入ebp-8和-4),

看一下这两个地址实际存储的是什么值,实际上是变量n 的地址(ebp-8),m的地址(ebp-4),由此可以看出:在主调用函数中进行实参的压栈并且顺序是从右到左。另外,

由于实参是相应的变量的引用,也证明实际上引用传递的是变量的地址(类似指针)。

总结:在C或C++语言调用中默认的函数修饰_cdecl,由主调用函数进行参数压栈并且

恢复堆栈,实参的压栈顺序是从右到左,最后由主调函数进行堆栈恢复。由于主调用

函数管理堆栈,所以可以实现变参函数。另外,命名修饰方法是在函数前加一个下划

线(_).

2. WINAPI (实际上就是PASCAL,CALLBACK,_stdcall)

__stdcall 调用约定相当于16位动态库中经常使用的PASCAL 调用约定。在32位的

VC++5.0 中PASCAL 调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal 外,__fortran 和__syscall也不被支持),取而代之的是__stdcall 调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前

清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面

将详细说明)。

_stdcall 是Pascal 程序的缺省调用方式,通常用于Win32 API 中,函数采用从

右到左的压栈方式,自己在退出时清空堆栈。VC 将函数编译后会在函数名前面加上下划

线前缀,在函数名后加上"@" 和参数的字节数。

例子:

void WINAPI Input( int &m,int &n);

看一下相应调用的汇编代码:

00401068 lea eax,[ebp-8]

0040106B push eax

0040106C lea ecx,[ebp-4]

0040106F push ecx

00401070 call @ILT+5(Input) (0040100a)

从以上调用Input函数的过程可以看出:在调用此函数之前,首先压栈ebp-8,然后压栈ebp-4,然后调用函数Input,在调用函数Input之后,没有相应的堆栈恢复工作(为其它的函数调用,所以我没有列出)

下面再列出Input函数本身的汇编代码:(实际此函数不大,但做汇编例子还是大了些,

大家可以只看前和后,中间代码与此例子无关)

39: void WINAPI Input( int &m,int &n)

40: {

00401110 push ebp

00401111 mov ebp,esp

00401113 sub esp,48h

00401116 push ebx

00401117 push esi

00401118 push edi

00401119 lea edi,[ebp-48h]

0040111C mov ecx,12h

00401121 mov eax,0CCCCCCCCh

00401126 rep stos dword ptr [edi]

41: int s,i;

42:

43: while(1)

00401128 mov eax,1

0040112D test eax,eax

0040112F je Input+0C1h (004011d1)

44: {

45: printf("\\nPlease input the first number m:");

00401135 push offset string "\\nPlease input the first number m"... (004260b8)

0040113A call printf (00401530)

0040113F add esp,4

46: scanf("%d",&m);

00401142 mov ecx,dword ptr [ebp+8]

00401145 push ecx

00401146 push offset string "%d" (004260b4)

0040114B call scanf (004015f0)

00401150 add esp,8

47:

48: if ( m= s )

004011B3 mov eax,dword ptr [ebp+8]

004011B6 mov ecx,dword ptr [eax]

004011B8 cmp ecx,dword ptr [ebp-4]

004011BB jl Input+0AFh (004011bf)

57: break;

004011BD jmp Input+0C1h (004011d1)

58: else

59: printf(" m < n*(n+1)/2,Please input again!\\n");

004011BF push offset string " m < n*(n+1)/2,Please input agai" (00426060)

004011C4 call printf (00401530)

004011C9 add esp,4

60: }

004011CC jmp Input+18h (00401128)

61:

62: }

004011D1 pop edi

004011D2 pop esi

004011D3 pop ebx

004011D4 add esp,48h

004011D7 cmp ebp,esp

004011D9 call __chkesp (004015b0)

004011DE mov esp,ebp

004011E0 pop ebp

004011E1 ret 8

最后,我们看到在函数末尾部分,有ret 8,明显是恢复堆栈,由于在32位C++中,

变量地址为4个字节(int也为4个字节),所以弹栈两个地址即8个字节。

由此可以看出:在主调用函数中负责压栈,在被调用函数中负责恢复堆栈。因此不能

实现变参函数,因为被调函数不能事先知道弹栈数量,但在主调函数中是可以做到的,

因为参数数量由主调函数确定。

下面再看一下,ebp-8和ebp-4这两个地址实际存储的是什么值,ebp-8地址存储的是n

的值,ebp -4存储的是m的值。说明也是从右到左压栈,进行参数传递。

总结:在主调用函数中负责压栈,在被调用函数中负责弹出堆栈中的参数,并且负责恢复堆栈。因此不能实现变参函数,参数传递是从右到左。另外,命名修饰方法

是在函数前加一个下划线(_),在函数名后有符号(@),在@后面紧跟参数列表中的参数

所占字节数(10进制),如:void Input(int &m,int &n),被修饰成:_Input@8

对于大多数api函数以及窗口消息处理函数皆用CALLBACK ,所以调用前,主调函数会

先压栈,然后api函数自己恢复堆栈。

如:

push edx

push edi

push eax

push ebx

call getdlgitemtexta

3、__fastcall 调用约定是"人" 如其名,它的主要特点就是快,因为它是通过寄存器

来传送参数的(实际上,它用ECX 和EDX 传送前两个双字(DWORD)或更小的参数,剩

下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在

函数名修饰约定方面,它和前两者均不同。

_fastcall方式的函数采用寄存器传递参数,VC 将函数编译后会在函数名前面加

上"@"前缀,在函数名后加上"@"和参数的字节数。

fastcall是C++Builder默认的调用方式

)__fastcall(寄存器调用方式) -----------------------

调用者代码>>>:

; // put the arguments in the registers EDX and ECX

mov edx,3

mov ecx,2

; // call the function

call @fastcallSum@8

; // copy the return value from EAX to a local variable (int c)

mov dword ptr [c],eax

函数体代码>>>:

; // function prolog

push ebp

mov ebp,esp

sub esp,0D8h

push ebx

push esi

push edi

push ecx

lea edi,[ebp-0D8h]

mov ecx,36h

mov eax,0CCCCCCCCh

rep stos dword ptr [edi]

pop ecx

mov dword ptr [ebp-14h],edx

mov dword ptr [ebp-8],ecx

; // return a + b;

mov eax,dword ptr [a]

add eax,dword ptr [b]

;// function epilog

pop edi

pop esi

pop ebx

mov esp,ebp

pop ebp

ret

4.thiscall 仅仅应用于"C++" 成员函数。this 指针存放于CX 寄存器,参数从右到左

压。thiscall 不是关键词,因此不能被程序员指定

thiscall(C++类成员函数调用方式) -----------------------

这个比较特殊,函数是某个类的成员,所以我们这样定义:

class CSum //类定义

{

int sum ( int a, int b) {return a+b;}

};

调用者代码>>>:

push 3

push 2

lea ecx,[sumObj]

call ?sum@CSum@@QAEHHH@Z; CSum::sum

mov dword ptr [s4],eax

函数体代码>>>:

push ebp

mov ebp,esp

sub esp,0CCh

push ebx

push esi

push edi

push ecx

lea edi,[ebp-0CCh]

mov ecx,33h

mov eax,0CCCCCCCCh

rep stos dword ptr [edi]

pop ecx

mov dword ptr [ebp-8],ecx

mov eax,dword ptr [a]

add eax,dword ptr [b]

pop edi

pop esi

pop ebx

mov esp,ebp

pop ebp

ret 8

一些常用函数的曲线图及应用简说

1:正弦余弦曲线:更一般应用的正弦曲线公式为: A 为波幅(纵轴),ω 为(相位矢量)角频率=2PI/T,T为周期,t 为时间(横轴),θ 为相位(横轴左右)。 周期函数:正余弦函数可用来表达周期函数。 例如,正弦和余弦函数被用来描述简谐运动,还可描述很多自然现象,比如附着在弹簧上的物体的振动,挂在绳子上物体的小角度摆动。正弦和余弦函数是圆周运动一维投影。 三角函数在一般周期函数的研究中极为有用。这些函数有作为图像的特征波模式,在描述循环现象比如声波或光波的时候很有用。每一个信号都可以记为不同频率的正弦和。 谐波数目递增的方波的加法合成的动画。 余弦函数的(通常是无限的)和;这是傅立叶分析的基础想法。例如,方波可以写为傅立叶级数: 在动画中,可以看到只用少数的项就已经形成了非常准确的估计。 如果明白了上书基本原理,也就不难理解我所用的浮动频率合成曲线的道理。

2:指数函数:形如y=ka x的函数,k为常系数,这里的a叫做“底数”,是不等于1 的任何正实数。指数函数按恒定速率翻倍,可以用来表达形象与刻画发展型的体系,比如金价2001年以来的牛市轨迹基本就是指数方程曲线。 特例:应用到值x上的这个函数可写为exp(x)。还可以等价的写为e x,这里的e是数学常数,就是自然对数的底数,近似等于 2.718281828,还叫做欧拉数。 即函数: 定义于所有的a > 0,和所有的实数x。它叫做底数为a的指数函数。注意这 个的定义依赖于先前确立的定义于所有实数上的函数的存在。注意上述等式对于a = e成立,因为 指数函数可“在加法和乘法之间转换”,在下列“指数定律”的前三个和第五个中表述: 它们对所有正实数a与b和所有实数x与y都是有效的。

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/8217294600.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/8217294600.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.} 按值传递方式容易理解,但形参值的改变不能对实参产生影响。 地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。

各种函数图象

各种函数图象 底数与指数函数图像: (1)由指数函数y=a^x与直线x=1相交于点(1,a)可知:在y轴右侧,图像从下到上相应的底数由小变大。 (2)由指数函数y=a^x与直线x=-1相交于点(-1,1/a)可知:在y轴左侧,图像从下到上相应的底数由大变小。 (3)指数函数的底数与图像间的关系可概括的记忆为:在y轴右边“底大图高”;在y轴左边“底大图低”。(如右图)》。 右图给出对于不同大小a所表示的函数图形: 可以看到对数函数的图形只不过的指数函数的图形的关于直线y=x的对称图形,因为它们互为反函数。 (1) 对数函数的定义域为大于0的实数集合。 (2) 对数函数的值域为全部实数集合。 (3) 函数图像总是通过(1,0)点。 (4) a大于1时,为单调增函数,并且上凸;a大于0小于1时,函数为单调减函数,并且下凹。 (5) 显然对数函数无界。

形如y=x^a(a为常数)的函数,即以底数为自变量幂为因变量,指数为常量的 函数称为幂函数。当a取非零的有理数时是比较容易理解的,而对于a取无理数时,初学者则不大容易理解了。因此,在初等函数里,我们不要求掌握指数为无理数的问题,只需接受它作为一个已知事实即可,因为这涉及到实数连续统的极为深刻的知识。特性 对于a的取值为非零有理数,有必要分成几种情况来讨论各自的特性: 首先我 们知道如果a=p/q,且p/q为既约分数(即p、q互质),q和p都是整数,则 x^(p/q)=q次根号下(x的p次方),如果q是奇数,函数的定义域是R,如果q是 偶数,函数的定义域是[0,,?)。当指数a是负整数时,设a=-k,则y=1/(x^k), 显然x?0,函数的定义域是(,?,0)?(0,,?)。因此可以看到x所受到的限制来源 于两点,一是有可能作为分母而不能是0,一是有可能在偶数次的根号下而不能为 负数,那么我们就可以知道: 排除了为0与负数两种可能,即对于x>0,则a可以 是任意实数; 排除了为0这种可能,即对于x<0或x>0的所有实数,q不能是偶数; 排除了为负数这种可能,即对于x为大于或等于0的所有实数,a就不能是负数。 定义域与值域

函数参数传递的原理

函数参数传递的原理 参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,方法有按值传递参数,按地址传递参数和按数组传递参数。 形参:指出现在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; }

EXCEL表画曲线图方法

函数画曲线的方法用Excel引用1.用Excel 函数画曲线图的一般方法 因为Excel有强大的计算功能,而且有数据填充柄这个有力的工具,所以,绘制曲线还是十分方便的。用Excel画曲线的最大优点是不失真。大体步骤是这样的:⑴用“开始”→“程序”→“Microsoft office”→”Excel”,以进入Excel窗口。再考虑画曲线,为此: ⑵在A1 和A2单元格输入自变量的两个最低取值,并用填充柄把其它取值自动填入; ⑶在B列输入与A列自变量对应的数据或计算结果。有三种方法输入: 第一种方法是手工逐项输入的方法,这种方法适合无确定数字规律的数据:例如日产量或月销售量等; 第二种方法是手工输入计算公式法:这种方法适合在Excel的函数中没有列入粘贴函数的情况,例如,计算Y=3X^2时,没有现成的函数可用,就必须自己键入公式后,再进行计算; 第三种方法是利用Excel 中的函数的方法,因为在Excel中提供了大量的内部预定义的公式,包括常用函数、数学和三角函数、统计函数、财务函数、文本函数等等。 怎样用手工输入计算公式和怎样利用Excel的函数直接得出计算结果,下面将分别以例题的形式予以说明; ⑷开始画曲线:同时选择A列和B列的数据→“插入”→“图表”→这时出现如下图所示的图表向导: 选“XY散点图”→在“子图表类型”中选择如图所选择的曲线形式→再点击下面的‘按下不放可查看示例'钮,以查看曲线的形状→“下一步”→选“系列产生在列”→“下一步”→“标题”(输入本图表的名称)→“坐标”(是否默认或

取消图中的X轴和Y轴数据)→“网络线”(决定是否要网格线)→“下一步”后,图形就完成了; ⑸自定义绘图区格式:因为在Excel工作表上的曲线底色是灰色的,线条的类型(如连线、点线等)也不一定满足需要,为此,可右击这个图,选“绘图区格式”→“自定义”→“样式”(选择线条样式)→“颜色”(如果是准备将这个曲线用在Word上,应该选择白色)→“粗细”(选择线条的粗细)。 ⑹把这个图形复制到Word中进行必要的裁剪; ⑺把经过裁剪过的图形复制到Word画图程序的画板上,进行补画直线或坐标,或修补或写字,“保存”后,曲线图就完成了。 2.举例 下面针对三种不同的情况举三个例子说明如下: 例1. 下图是今年高考试题的一个曲线图,已知抛物线公式是Y=2X^2 ,请画出其曲线图。 因为不能直接利用Excel给出的函数,所以,其曲线数据应该用自己输入公式的方法计算出来,画图步骤如下: ⑴用“开始”→“程序”→“Microsoft Office”→”Excel”进入Excel界面;首先画抛物线,为此: ⑵在A1单元格输入“-10”;在A2单元格输入“-9”,并用填充柄把自变量的取值拖到“10”。具体方法是:选择A1和A2单元格,并把鼠标指针拖到A2单元格的右下角,使鼠标指针变成细十字型时,按住鼠标往下拖,直至出现”10”为止。这样,就把自变量x的取值都列出来了; ⑶利用输入公式的方法求出函数值,并把结果列在B列上与A列的自变量相对应的位置。为此:单击选定单元格B1→单击编辑区的空格,在空格栏出现竖直形状指针后,输入“= 2*A1^2”(见下图,这是计算机能认识的公式,且等号和乘号都不可省)→回车→这时在B1单元格将出现数值“200”→用填充柄把B列的数据填满。

指针与参数传递

指针与参数传递 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所示。

EXCEL曲线图

引用用Excel函数画曲线的方法1.用Excel函数画曲线图的一般方法 因为Excel有强大的计算功能,而且有数据填充柄这个有力的工具,所以,绘制曲线还是十分方便的。用Excel画曲线的最大优点是不失真。大体步骤是 这样的: ⑴用“开始”→“程序”→“Microsoft office”→”Excel”,以进入Excel窗口。再考虑画曲线,为此: ⑵在A1 和A2单元格输入自变量的两个最低取值,并用填充柄把其它取值自动填入; ⑶在B列输入与A列自变量对应的数据或计算结果。有三种方法输入: 第一种方法是手工逐项输入的方法,这种方法适合无确定数字规律的数据:例如日产量或月销售量等; 第二种方法是手工输入计算公式法:这种方法适合在Excel的函数中没有 列入粘贴函数的情况,例如,计算Y=3X^2时,没有现成的函数可用,就必须自己键入公式后,再进行计算; 第三种方法是利用Excel 中的函数的方法,因为在Excel中提供了大量的 内部预定义的公式,包括常用函数、数学和三角函数、统计函数、财务函数、 文本函数等等。 怎样用手工输入计算公式和怎样利用Excel的函数直接得出计算结果,下 面将分别以例题的形式予以说明; ⑷开始画曲线:同时选择A列和B列的数据→“插入”→“图表”→这时出现如下图所示的图表向导:

选“XY散点图”→在“子图表类型”中选择如图所选择的曲线形式→再点击下面的…按下不放可查看示例?钮,以查看曲线的形状→“下一步”→选“系列产生在列”→“下一步”→“标题”(输入本图表的名称)→“坐标”(是否默认或取消图中的X轴和Y轴数据)→“网络线”(决定是否要网格线)→“下一步”后,图形就完成了; ⑸自定义绘图区格式:因为在Excel工作表上的曲线底色是灰色的,线条的类型(如连线、点线等)也不一定满足需要,为此,可右击这个图,选“绘图区格式”→“自定义”→“样式”(选择线条样式)→“颜色”(如果是准备将这个曲线用在Word上,应该选择白色)→“粗细”(选择线条的粗细)。 ⑹把这个图形复制到Word中进行必要的裁剪; ⑺把经过裁剪过的图形复制到Word画图程序的画板上,进行补画直线或坐标,或修补或写字,“保存”后,曲线图就完成了。 2.举例 下面针对三种不同的情况举三个例子说明如下: 例1. 下图是今年高考试题的一个曲线图,已知抛物线公式是Y=2X^2 ,请画出其曲线图。 因为不能直接利用Excel给出的函数,所以,其曲线数据应该用自己输入公式的方法计算出来,画图步骤如下:

高中数学双曲线函数的图像与性质及应用

一个十分重要的函数的图象与性质应用 新课标高一数学在“基本不等式 ab b a ≥+2”一节课中已经隐含了函数x x y 1 +=的图象、性质与重要的应用,是高考要求范围内的一个重要的基础知识.那么在高三第一轮复习 课中,对于重点中学或基础比较好一点学校的同学而言,我们务必要系统介绍学习 x b ax y + =(ab ≠0)的图象、性质与应用. 2.1 定理:函数x b ax y +=(ab ≠0)表示的图象是以y=ax 和x=0(y 轴) 的直线为渐近线的双曲线. 首先,我们根据渐近线的意义可以理解:ax 的值与x b 的值比较,当x 很大很大的时候, x b 的值几乎可以忽略不计,起决定作用的是ax 的值;当x 的值很小很小,几乎为0的时候,ax 的值几乎可以忽略不计,起决定作用的是x b 的值.从而,函数x b ax y +=(ab ≠0)表示 的图象是以y=ax 和x=0(y 轴)的直线为渐近线的曲线.另外我们可以发现这个函数是奇 函数,它的图象应该关于原点成中心对称. 由于函数形式比较抽象,系数都是字母,因此要证明曲线是双曲线是很麻烦的,我们通过一个例题来说明这一结论. 例1.若函数x x y 3 233+= 是双曲线,求实半轴a ,虚半轴b ,半焦距c ,渐近线及其焦点,并验证双曲 线的定义. 分析:画图,曲线如右所示;由此可知它的渐近线应该是x y 3 3 = 和x=0两条直线;由此,两条渐近线的夹角的平分线y=3x 就是实轴了,得出顶点为A (3,3),A 1(-3,-3); ∴ a=OA =32, 由渐近线与实轴的夹角是30o,则有a b =tan30o, 得b=2 , c=22b a +=4, ∴ F 1(2,32)F 2(-2,-32).为了验证函数的图象是双曲线,在曲线上任意取一点P (x, x x 3 233+)满足3421=-PF PF 即可;

函数调用参数传递类型(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 {

高中常见函数图像及基本性质

常见函数性质汇总及简单评议对称变换 常数函数 f (x )=b (b ∈R) 1)、y=a 和 x=a 的图像和走势 2)、图象及其性质:函数f (x )的图象是平行于x 轴或与x 轴重合(垂直于y 轴)的直线 一次函数 f (x )=kx +b (k ≠0,b ∈R) 1)、两种常用的一次函数形式:斜截式—— 点斜式—— 2)、对斜截式而言,k 、b 的正负在直角坐标系中对应的图像走势: 3)、|k|越大,图象越陡;|k|越小,图象越平缓 4)、定 义 域:R 值域:R 单调性:当k>0时 ;当k<0时 奇 偶 性:当b =0时,函数f (x )为奇函数;当b ≠0时,函数f (x )没有奇偶性; 例题:y=f (x ); y=g (x )都有反函数,且f (x-1)和g -1 (x)函数的图像关于y=x 对称,若g (5)=2016,求)= 周 期 性:无 5)、一次函数与其它函数之间的练习 1、常用解题方法: b

反比例函数 f (x )= x k (k ≠0,k 值不相等永不相交;k 越大,离坐标轴越远) 图象及其性质:永不相交,渐趋平行;当k>0时,函数f (x )的图象分别在第一、第三 象限;当k<0时,函数f (x )的图象分别在第二、第四象限; 双曲线型曲线,x 轴与y 轴分别是曲线的两条渐近线; 既是中心对成图形也是轴对称图形 定 义 域:),0()0,(+∞-∞ 值 域:),0()0,(+∞-∞ 单 调 性:当k> 0时;当k< 0时 周 期 性:无 奇 偶 性:奇函数 反 函 数:原函数本身 补充:1、反比例函数的性质 2、与曲线函数的联合运用(常考查有无交点、交点围城图行的面积)——入手点常有两个——⑴直接带入,利用二次函数判别式计算未知数的取值;⑵利用斜率,数形结合判断未知数取值(计算面积基本方法也基于此) 3、反函数变形(如右图) 1)、y=1/(x-2)和y=1/x-2的图像移动比较 2)、y=1/(-x)和y=-(1/x )图像移动比较 3)、f (x )= d cx b ax ++ (c ≠0且 d ≠0)(补充一下分离常数) (对比标准反比例函数,总结各项内容) 二次函数 一般式:)0()(2 ≠++=a c bx ax x f 顶点式:)0()()(2 ≠+-=a h k x a x f 两根式:)0)()(()(21≠--=a x x x x a x f 图象及其性质:①图形为抛物线,对称轴为 ,顶点坐标为 ②当0>a 时,开口向上,有最低点 当00时,函数图象与x 轴有两个交点( );当<0时,函数图象与x 轴有一个交点( );当=0时,函数图象与x 轴没有交点。 ④)0()(2 ≠++=a c bx ax x f 关系 )0()(2 ≠=a ax x f 定 义 域:R 值 域:当0>a 时,值域为( );当0a 时;当0

总结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); }

EXCEL绘制函数图像技巧

绘制函数图像 做教学工作的朋友们一定会遇到画函数曲线的问题吧!如果想快速准确地绘制一条函数曲线,可以借助EXCEL的图表功能,它能使你画的曲线既标准又漂亮。你一定会问,是不是很难学呀?其实这一点儿也不难,可以说非常简便,不信你就跟我试一试。 以绘制y=|lg(6+x^3)|的曲线为例,其方法如下:在某张空白的工作表中,先输入函数的自变量:在A列的A1格输入"X=",表明这是自变量,再在A列的A2 及以后的格内逐次从小到大输入自变量的各个值;实际输入的时候,通常应用等差数列输入法,先输入前二个值,定出自变量中数与数之间的步长,然后选中A2和A 3两个单元格,使这二项变成一个带黑色边框的矩形,再用鼠标指向这黑色矩形的右下角的小方块“■”,当光标变成"+"后,按住鼠标拖动光标到适当的位置,就完成自变量的输入。 输入函数式:在B列的B1格输入函数式的一般书面表达形式,y=|lg(6+x^3)|;在B2格输入“=ABS(LOG10(6+A2^3))”,B2格内马上得出了计算的结果。这时,再选中B2格,让光标指向B2矩形右下角的“■”,当光标变成"+"时按住光标沿B

列拖动到适当的位置即完成函数值的计算。 图7 绘制曲线:点击工具栏上的“图表向导”按钮,选择“X,Y散点图”(如图7),然后在出现的“X,Y散点图”类型中选择“无数据点平滑线散点图”;此时可察看即将绘制的函数图像,发现并不是我们所要的函数曲线,单击“下一步”按钮,选中“数据产生在列”项,给出数据区域,这时曲线就在我们面前了(如图8)。 图8

需要注意:如何确定自变量的初始值,数据点之间的步长是多少,这是要根据函数的具体特点来判断,这也是对使用者能力的检验。如果想很快查到函数的极值或看出其发展趋势,给出的数据点也不一定非得是等差的,可以根据需要任意给定。 从简单的三角函数到复杂的对数、指数函数,都可以用EXCEL画出曲线。如果用得到,你还可以利用EXCEL来完成行列式、矩阵的各种计算,进行简单的积分运算,利用迭代求函数值(如x^2=x^7+4,可用迭代方法求x值),等等,凡是涉及计算方面的事,找EXCEL来帮忙,它一定会给你一个满意的答案。

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函数的形式参数*/ {

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.引用实参 与所有引用一样,引用形参直接关联到其所绑定的对象,而并非这些对象的副本。定义引

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() {

函数图象与曲线的方程例题讲解解读

函数图象与曲线的方程例题讲解 一、函数图像 利用函数图像,我们可以研究函数本身的性质,如课本上我们是根据幂函数、指数函数等函数的图像归纳出它们的性质,并以此来进一步研究其它函数的性质. 在解决函数的其它问题时,我们也可以利用函数图像帮助我们打开思路. 例1.试判断函数:???++∈-+∈=) 22,12(,1) 12,2(,1)(k k x k k x x f (k ∈Z )的奇偶性. 分析:由函数奇偶性的定义直接确定函数的奇偶性有些困难,但我们若给出函数图像.以奇偶函数的图像关于原点或y 轴对称这一性质判断,则问题不难解决. 解:令,2,1,0±±=k … … 得到各段函数的离散区间,从而得到函数)(x f 的图像,如图. 由图知,函数)(x f 是奇函数. 例2.设)(x f 是定义在区间),(+∞-∞上以2为周期的函数,对k ∈Z 用I k 表示区间]12, 12(+-k k ,已知当0I x ∈时,2)(x x f =. (1)求)(x f 在I k 上的解析表达式; (2)对自然数k ,求集合M k = {a | 使方程ax x f =)(在I k 上有两个不相等的实根}. 分析:借助于函数图像,不仅能正确理解题意寻求解题思路,还可以直接从图像上得出答案. 当)(,,112x f x y x 又时=≤<-是以2为周期的函数,故它的图像就是: )11(2≤<-=x x y 左、右平移后的重复出现. O

所以在每一周期I k 内对应的解析式点2)2(k x y -=.又考虑ax y =的图像是过原点的直线,要满足题目的条件就应使斜率a 在]1 21 , 0(+k 上取值.当然利用图形的直观性得出结论不能完全替代逻辑推理的论证,但重视函数图像的作用是十分必要的. 解:(1))(x f 是以2为周期的函数,∴当z k ∈时,2 k 是)(x f 的周期. 又k I x ∈ 时o I k x ∈-)2(, ∴2)2()2()(k x k x f x f -=-=, 即对z k ∈,当k I x ∈时,2)2()(k x x f -=. (2)当N k ∈且k I x ∈时,由(1)有.)2(2ax k x =- 整理得 04)4(2 2 =++-k x a k x ).8(16)4(22k a a k a k +=-+=? 方程在区间Ik 上恰有两个不相等的实根的充分必要条件是a 满足 [][ ] )8(42 1 12)8(421 120 )8(k a a a k k k a a a k k k a a ++ +≥++- +<->+ 解不等式组得1 21 0+≤

相关文档
最新文档