C++每日一课(四)
2017-06-24 13:19
197 查看
一、函数
使用函数的模块,是用于创建C++程序模块
简单先介绍下函数
函数,分为两种:有返回值、无返回值的
有返回值的函数在执行后会生成一个值,这个值可以用来赋给变量或在其它的表达式中使用。
比如 sqrt()这个函数它回平方根,它是C/C++标准库中定义的数
y = sqrt(6.25); //这个时候会求6.25的平方根并返回给到变量y
表达式sqrt(6.25)会调用sqrt()函数,其中表达式sqrt(6.25)称为函数调用
其中表达式sqrt(6.25)在圆括号中的值6.25是参数,它会被传递给对应的函数来做相应的运算,如果函数存在返回值那表达式sqrt(6.25)会返回这个值
在使用函数前,C++编译器必须知道,这个函数的返回值类型和参数类型
编译器要知道这些信息则必须为每个函数提供原型
函数的原型对应于函数就相当于,变量的声明对应于变量
对于上面的sqrt(6.25);这个调用的函数,在标准库里就应该有类似如下的声明
double sqrt(double);
其中第一个double表示是返回值是一个double类型的值
sqrt表示函数的名称
第二个double表示此函数在调用时必须传入一个double类型的值做为参数
最后需要有一个分号,表明它是一个语句而不是一个函数头,如果是函数头的话则需要在接下来有花括号的就比如main()函数一样后面要接花括号,来写函数体内容
如果要在程序中使用sqrt()这个函数必须要提供原型,可以有两种方法来实现
1.在源代码文件中输入函数原型
2.包含对应的头文件,比如sqrt()函数要包含cmath,在头文件中定义了原型
注意:这里说的函数原型、函数定义是有区别的
原型只是描述函数接口,它描述的是发送给函数的参数和返回值
在定义中则包含了函数的代码
/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++函数调用
*/
#include <iostream>
#include <cmath> //这里可以使用math.h,建议使用cmath
int main() {
using namespace std;
double m;
cout << "请输入一个待开平方根的值:";
cin >> m;
double y;
y = sqrt(m);
cout << "待开平方根的值:" << m;
cout << " 开平方根后的结果是:" << y << endl;
system("pause");
return 0;
}
上面的sqrt()函数只需要一个参数,有很多函数是需要更多的参数的,各个参数之间使用逗号进行分隔。
比如:double pow(double,double);
计算2的4次方
result = pow(2.0,4.0);
有一些参数是不接收任何的参数的,比如cstdlib/stdlib.h库里有一个随机函数
int rand(void);
这里关键字void表示不接收任何的参数
guess = rand();
有一点要注意的,在函数的调用中如果不需要参数也一定要写上括号,括号是不可以省略的。
另外还有一此函数是没有返回值的
对于没有返回值的函数在声明时返回值部分直接使用void
除了C库提供的标准函数外,用户自己也是可以预定义函数的
有一个原则就是如果库里的标准函数要以满足要求则使用库里的标准函数,如果无法满足时才去编写自定义的函数
/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++函数调用,自定义函数
*/
#include <iostream>
void say(int); //自定义函数的声明
int main() {
using namespace std;
say(3); //调用自定义函数
cout << "输入一个整数:";
int n;
cin >> n;
say(n);
cout << "自定义函数调用结束!";
system("pause");
return 0;
}
void say(int n) {
using namespace std;
for (int i = 0; i < n; i++) {
cout << "hello";
cout << "\t";
}
cout << endl;
}
函数定义格式
上面say()函数的定义格式与main()函数的是相同的,它先有一个函数头再有一个花括号括起来的函数体
type funcname(args){
statements;
}
在C++中需要注意,每一个函数的定义都是定义的不允许进行嵌套定义某一个函数在另一个函数中
我们看看int main()这个主函数
它有返回值 是一个int的整数,不接收参数
所以在最后有写上语句return 0;
但是这个函数返回的0到什么地方去了?为什么会返回一个0呢?
这里的0不是返回给了程序的其它部分,因为调用main函数的是操作系统,当然这个0也就返回给了操作系统了
这里返回给操作系统的值0也可以理解成是退出值,因为main执行完要退出前返回的,通常返回0表示正常退出,返回非0表示有错误
/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++函数调用,自定义函数
*/
#include <iostream>
int say(int);
int main() {
using namespace std;
int n = say(3);
cout << "--------------------------------------------\n";
cout << "刚才输出了"<<n<<"次hello\n";
cout << "--------------------------------------------\n";
cout << "请输入一个整数:";
int m;
cin >> m;
n = say(m);
cout << "--------------------------------------------\n";
cout << "刚才输出了" << n << "次hello\n";
cout << "--------------------------------------------\n";
system("pause");
return 0;
}
int say(int n) {
using namespace std;
for (int i = 0; i < n; i++) {
cout << "hello";
cout << "\t";
}
cout << endl;
return n;
}
从前面的函数里using namespace std;这个指令都是写在main函数里的,这样对于std空间命名只在main中可用如果在其它函数中需要使用则需要在其它函数中也写上这个指令
如果所有函数中都需要使用可以记住有如下特性:
1.using namespace std;放在函数定义之前,则让文件中所有的函数都可以使用std空间中的元素
2.如果using namespace std;只是放在了特定的函数中,则只是让这个特定函数使用std空间中的元素
3.完全不使用using namespace std;则需要在使用std名称空间中的元素时,都要加上前缀Std::
使用函数的模块,是用于创建C++程序模块
简单先介绍下函数
函数,分为两种:有返回值、无返回值的
有返回值的函数在执行后会生成一个值,这个值可以用来赋给变量或在其它的表达式中使用。
比如 sqrt()这个函数它回平方根,它是C/C++标准库中定义的数
y = sqrt(6.25); //这个时候会求6.25的平方根并返回给到变量y
表达式sqrt(6.25)会调用sqrt()函数,其中表达式sqrt(6.25)称为函数调用
其中表达式sqrt(6.25)在圆括号中的值6.25是参数,它会被传递给对应的函数来做相应的运算,如果函数存在返回值那表达式sqrt(6.25)会返回这个值
在使用函数前,C++编译器必须知道,这个函数的返回值类型和参数类型
编译器要知道这些信息则必须为每个函数提供原型
函数的原型对应于函数就相当于,变量的声明对应于变量
对于上面的sqrt(6.25);这个调用的函数,在标准库里就应该有类似如下的声明
double sqrt(double);
其中第一个double表示是返回值是一个double类型的值
sqrt表示函数的名称
第二个double表示此函数在调用时必须传入一个double类型的值做为参数
最后需要有一个分号,表明它是一个语句而不是一个函数头,如果是函数头的话则需要在接下来有花括号的就比如main()函数一样后面要接花括号,来写函数体内容
如果要在程序中使用sqrt()这个函数必须要提供原型,可以有两种方法来实现
1.在源代码文件中输入函数原型
2.包含对应的头文件,比如sqrt()函数要包含cmath,在头文件中定义了原型
注意:这里说的函数原型、函数定义是有区别的
原型只是描述函数接口,它描述的是发送给函数的参数和返回值
在定义中则包含了函数的代码
/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++函数调用
*/
#include <iostream>
#include <cmath> //这里可以使用math.h,建议使用cmath
int main() {
using namespace std;
double m;
cout << "请输入一个待开平方根的值:";
cin >> m;
double y;
y = sqrt(m);
cout << "待开平方根的值:" << m;
cout << " 开平方根后的结果是:" << y << endl;
system("pause");
return 0;
}
上面的sqrt()函数只需要一个参数,有很多函数是需要更多的参数的,各个参数之间使用逗号进行分隔。
比如:double pow(double,double);
计算2的4次方
result = pow(2.0,4.0);
有一些参数是不接收任何的参数的,比如cstdlib/stdlib.h库里有一个随机函数
int rand(void);
这里关键字void表示不接收任何的参数
guess = rand();
有一点要注意的,在函数的调用中如果不需要参数也一定要写上括号,括号是不可以省略的。
另外还有一此函数是没有返回值的
对于没有返回值的函数在声明时返回值部分直接使用void
除了C库提供的标准函数外,用户自己也是可以预定义函数的
有一个原则就是如果库里的标准函数要以满足要求则使用库里的标准函数,如果无法满足时才去编写自定义的函数
/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++函数调用,自定义函数
*/
#include <iostream>
void say(int); //自定义函数的声明
int main() {
using namespace std;
say(3); //调用自定义函数
cout << "输入一个整数:";
int n;
cin >> n;
say(n);
cout << "自定义函数调用结束!";
system("pause");
return 0;
}
void say(int n) {
using namespace std;
for (int i = 0; i < n; i++) {
cout << "hello";
cout << "\t";
}
cout << endl;
}
函数定义格式
上面say()函数的定义格式与main()函数的是相同的,它先有一个函数头再有一个花括号括起来的函数体
type funcname(args){
statements;
}
在C++中需要注意,每一个函数的定义都是定义的不允许进行嵌套定义某一个函数在另一个函数中
我们看看int main()这个主函数
它有返回值 是一个int的整数,不接收参数
所以在最后有写上语句return 0;
但是这个函数返回的0到什么地方去了?为什么会返回一个0呢?
这里的0不是返回给了程序的其它部分,因为调用main函数的是操作系统,当然这个0也就返回给了操作系统了
这里返回给操作系统的值0也可以理解成是退出值,因为main执行完要退出前返回的,通常返回0表示正常退出,返回非0表示有错误
/*
作者:xiesheng
时间:2017-06-24
版本:v1.0
说明:C++函数调用,自定义函数
*/
#include <iostream>
int say(int);
int main() {
using namespace std;
int n = say(3);
cout << "--------------------------------------------\n";
cout << "刚才输出了"<<n<<"次hello\n";
cout << "--------------------------------------------\n";
cout << "请输入一个整数:";
int m;
cin >> m;
n = say(m);
cout << "--------------------------------------------\n";
cout << "刚才输出了" << n << "次hello\n";
cout << "--------------------------------------------\n";
system("pause");
return 0;
}
int say(int n) {
using namespace std;
for (int i = 0; i < n; i++) {
cout << "hello";
cout << "\t";
}
cout << endl;
return n;
}
从前面的函数里using namespace std;这个指令都是写在main函数里的,这样对于std空间命名只在main中可用如果在其它函数中需要使用则需要在其它函数中也写上这个指令
如果所有函数中都需要使用可以记住有如下特性:
1.using namespace std;放在函数定义之前,则让文件中所有的函数都可以使用std空间中的元素
2.如果using namespace std;只是放在了特定的函数中,则只是让这个特定函数使用std空间中的元素
3.完全不使用using namespace std;则需要在使用std名称空间中的元素时,都要加上前缀Std::
相关文章推荐
- C++每日一课(三)
- C/C++每日一课 >> [原创]细说如何确定一个变量的类型(2005-04-25)
- C++每日一课(十九)
- C++每日一课(一)
- C++每日一课(十七)
- C++每日一课(十六)
- C/C++每日一课 >> [原创]指针易犯错误集(初学者适用)(2005-05-08)
- C++每日一课(九)
- C++每日一课(八)
- C++每日一课(十八)
- C++每日一课(十三)
- C/C++每日一课 >> [原创]typedef 的两种用法
- C++每日一课(七)
- C++每日一课(十一)
- C++每日一课(十五)
- C++每日一课(二十)
- C++每日一课(六)
- C++每日一课(十二)
- C++每日一课(二)
- C++每日一课(五)