函数分类与表达

本文详细探讨了C++中的函数概念,包括函数的分类、求值特性与过程性,以及函数在C++中的具体实现方式。同时,文章还对比了数学函数与C++函数的区别,分析了函数的调用形式,如值形式、语句形式和混合形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);    //值形式调用,复制且输出结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值