函数分类与表达

论坛 期权论坛 脚本     
匿名技术用户   2021-1-6 07:38   31   0

1. 函数分类

首先要了解的是数学的函数性。

c++的函数定义描述了计算序列。有的函数具有返回值,有求值倾向,但函数本质上还是更强调过程性。在设计语言的时候,使用函数(function)这个词,套用了函数的原始意义——求值,但却与数学函数大不相同。它虽然说也是数学意义上的函数,但它是通过过程操作来实现求值的。

举个例子,就像是这个函数:f(x)=\left\{\begin{matrix} -1& x<0 & \\ 0&x= 0 & \\ 1& x>0 & \end{matrix}\right.

在c++中表示为:

double f(double x)
{
    if(x < 0) return -1;
    if(x = 0) return 0;
    if(x >0 ) return 1;
}

这里用double类型表示返回值和参数。不过无论是double还是值域更广的longdoule都无法真实地表达R实数集。

数学函数f所描述的区间在C++函数中,用分支if语句来描述。f函数所对应的x=0,虽然我在代码中说if(x=0) return 0;但该句的前半句是完全可以省略的。在if以外涉及的数值区域,c++会默认else。

函数是可以没有参数的,比如,求随机数的函数int rand()没有参数,但可以获得非负的整数范围内的随机数。该函数源自于C库,在头文件stdlib.h中声明,也对应于c++中的cstdlib。该函数的作用是,取内部自身定义的素数加工成一个伪随机数作为函数值。

然后需要了解的是纯过程性:

另外的一些函数是没有“求值”表现的,其返回类型用void描述。调用的结果就是啥子都么得,仅用作传输的过程。

就像是:

void print()
{
    cout<<"unsigned int f(unsigned int n){\n"
        <<"    if (n == 1 || n == 2) return 1; \n"
        <<"    return f(n-1) + f(n-2);\n"
        <<"}\n";
}

这个过程就不需要参数,自然也就没有返回值。

但有一些表现为过程的函数会有参数表现,比如:

void delay(int n)
{
    for(int i = 1; i <= n; ++i)
    for(int j = 0; j<10000000; ++j)

}

就单纯的拖时间。

2. 语句抑或表达式

①值形式

有返回类型的函数构成值的形式,可以参加表达式运算,或者直接赋值给对应类型的变量,构成表达式语句。例如:

double s = sin(b) + 1;    //变量s定义中用函数调用的表达式来初始化
s = cos(s)/2;    //函数调用参加运算构成变量s的赋值

②语句形式

无返回值类型的函数,不能以值的形式赋给其他变量或者参加运算,其调用只能独立构成一条语句。例如:

print();    //正确
int t = print();    //错误

③ 混合形式

有需要的话,有返回类型的函数也可以像无返回类型的函数一样单独构成语句。例如:

char s1[30];
char s2[] ="hello";
strcpy(s1, s1);    //单独成句,完成复制
cout<<strcpy(s1, s2);    //值形式调用,复制且输出结果

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP