无中生有之C++学习day2

太原理工大学机器人团队20天学习打卡day20


今天是20天学习打卡的最后一天,为了提高学习速度,之后的学习应该不会再写博客了,感谢大家的陪伴。希望以后还会有写博客的机会吧
今天的学习内容是C++的函数


1、函数

【这里只是了解函数的一些基本特征】

C++函数分为两种:有返回值的和没有返回值

①有返回值的函数

  • 有返回值的函数将生成一个值,而这个值可以赋给变量或者在其他表达式中使用

例如:C++库函数中有一个sqrt()函数,他返回平方根,如果我们要计算4的平方根,就可以用以下语句:

x=sqrt(4);

  • 表达式sqrt(4)被称为函数调用
  • 被调用的函数叫做被调用函数(called function)
  • 包含函数调用的函数叫做调用函数(calling function)
  • 圆括号中的值【这里是4】是发送给函数的信息,这被称为传递给函数
  • 以这种方式发送给函数的值叫做参数
  • 函数sqrt()得到的结果为2,并将这个值发送给调用函数,发送回去的值叫做函数的返回值(return value)
函数原型

C++为每个函数提供了原型

函数原型之于函数就像变量声明之于变量——指出涉及的类型

例如:sqrt()函数的原型是:double sqrt(double);

第一个double【后面讲】意味着sqrt()将返回一个double值,括号中的double意味着sqrt()需要一个double参数。

原型结尾的分号表明他是一条语句,这使得它是一个原型,而不是函数头

  • 在程序中使用sqrt()也需要函数头,我们可以通过包含cmath头文件来实现。

例程:

#include <iostream>
#include <cmath>

int main()
{
    using namespace std;

    double area;
    cout << "Enter the floor area, in square feet, of your home:";
    cin >> area;
    double side;
    side = sqrt(area);
    cout << "That's the equivalent of a square " << side
         << " feet to the side." << endl;
    cout << "How fascinating!" << endl;
    return 0;
}

②其他类型的函数

多个参数
  • 有些函数需要多项信息,这些函数使用多个参数,参数间用逗号隔开

    例如:pow()函数接收两个参数,返回值为以第一个参数为底,第二个参数为指数的幂;

    原型double pow(double,double)

    可以这样使用:answer=pow(5.0,8.0)计算5的8次方

无参数
  • 有些函数不接受任何参数

    例如:rand()函数不接受任何参数,并返回一个随机整数

    原型int rand(void);

    void明确指出该函数不接受任何参数。如果省略void,让括号为空,则C++将其解释为一个不接受任何参数隐式声明

注意:C++函数调用必须要括号,即使没有参数

③用户定义的函数

引例
#include <iostream>
void simon(int n);  //simon的函数原型

int main()
{
    using namespace std;
    simon(3);
    cout << "Pick an integer: ";
    int count;
    cin  >> count;
    simon(count);
    cout << "Done!" <<endl;
    return 0;
}

void simon(int n)//定义函数simon()
{
    using namespace std;
    cout << "Simon says touch your toes " << n << " times." <<endl;
}//void函数不需要返回值

函数格式
返回值类型 函数名(参数列表)
{
	函数体
}

注意:和C一样C++不允许将函数定义嵌套在另一个函数定义中。每个函数定义都是独立的

函数头

上述程序中,simon()的函数头为:void simon(int n);

  • 开头的void表明simon()没有返回值,因此不可以这样调用:simple = simon(3);

  • 括号中的int表明应提供一个int参数

  • 如:simon(3);表示将3赋给了simon()函数头中定义的变量

对于main()函数

函数头 int main()开头的int表示要返回一个整数值,对于有返回值的函数,应使用return关键字来提供返回值,并结束函数,这就是为什么要在main()函数结尾使用 return 0;的原因

那么,这个返回值返回到哪里了呢?

答案是,main()的返回值并不是返回给程序的其他部分,而是返回给操作系统

④用户定义的有返回值的函数

在英国,很多都以英石(stone)为质量单位,不像美国以磅或者公斤为单位,一英石等于14磅,下面的程序可以实现这个转换

#include <iostream>
int stonetolb(int);//函数原型
int main()
{
    using namespace std;
    int stone;
    cout << "Enter the weight in stone: ";
    cin >> stone;
    int pounds = stonetolb(stone);
    cout << stone << " stone = ";
    cout << pounds << " pounds." <<endl;
    return 0;
}

int stonetolb(int sts)
{
    return 14 * sts;
}

在main()中,程序使用cin给整型变量stone提供一个值。这个值被作为参数传递给stonetolb()函数,在函数中,这个值被赋给sts。然后,stonetolb()用关键字return将14*sts返回给了main()。

上面的两个例子表明

  • 函数原型描述了函数接口,即函数如何与程序的其他部分交互。

  • 参数列表指出了何种信息将被传递给参数。

  • 函数类型指出了返回值的类型。

函数stonetolb()短小简单,但包含了全部的函数特性

  • 有函数头和函数体;
  • 接收一个参数
  • 返回一个值
  • 需要一个原型

⑤多函数中使用using编译指令

在③中的代码中,两个函数都包含了 using namespace std;

这是因为每个函数都使用了cout,因此需要能够访问位于名称空间std中的cout定义。

我们也可以采用另一种方法让两个函数都能访问名称空间std,即将编译指令放在函数的外面,且位于两个函数的前面

#include <iostream>
using namespace std;
void simon(int n);  //simon的函数原型
int main()
{
    using namespace std;
    simon(3);
    cout << "Pick an integer: ";
    int count;
    cin  >> count;
    simon(count);
    cout << "Done!" <<endl;
    return 0;
}

void simon(int n)//定义函数simon()
{
    cout << "Simon says touch your toes " << n << " times." <<endl;
}//void函数不需要返回值

当前通行的理念是,只让需要访问名称空间std的函数访问它是更好的选择。
例如在④程序中,只有main()使用cout,因此没必要让函数stonetolb()能够访问名称空间std。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值