4.1 、 什么是函数
1)为什么需要函数(一个函数就是一个功能)
一个大型程序:不可能都在main中完成。
把功能分成很多模块,放在不同的函数中,甚至放到不同的文件中。
公司运作。
公司比较小时,所有的工作都由老板完成。
(所有的代码都写在main中)。
公司做大时,需要其他员工。
每人做自己最善长的事。
会计,出纳,秘书,保安。
2)main(老板)可调用其他函数(员工),其他函数之间也可互相调用
除了main之外,所有的函数是平等的。
#include < iostream> 用户自己定义的函数 Vs2010 devc++ cfree 基本功能类似,但不完全 一样。 有些公司会提供一些特有的函数,方便用户使用。 )getchar() 求两个数的最大值(必须提供两个数)求一个数的平方(必须提供一个数)。 如果不需要得到结果。 函数类型为void.如果需要得到一个结果。 结果是什么类型,此函数就是什么类型(求两个数的平均值,结果是一个小数) 求两个整数的最大值(结果一个整数) 用于区别其他函数 如果不使用函数 函数值赋给c 在没有调用时。 只是一个形式。 被调用时由实参赋值,只有在被调用时,才会为形式参数申请空间。 当调用结束,形式参数占据的内存被释放。 有实际的值。 在调用时,由实参将值传递给形参(单向传递) 3)每个形参都需要定义类型吗(是的)?可以同时定义多个形参吗?在哪里定义? 在函数定义处的一对()中。 调用结束,空间马上释放。 而且。 会转换成形参类型。 把1.23456转换为1赋值给x;我们在编程时尽量避免此类情况。 尽量类型相同。 谁说了算?返回值类型以定义时类型为准(函数名前的类型) 由于定义fun时返回值类型为int因此会将1.5强制类型转换为1.返回。 又由于a是double会将1转换为1.0赋值给a #include < iostream> 2)系统函数就能随便调用吗?(1 必须存在,2 头文件) 后面所有的函数都能使用这个函数。 不允许 程序的条理清晰。 把其他函数的定义放在main后面。 一般有两个位置(main内部前面,或者main外部的前面)。 4)如何写函数的声明?(变量名,爱写不写,也可写其他,不起作用。 变量类型,必须写) 欢迎分享,转载请注明来源:内存溢出
3)函数举例
#include
using namespace std;
int main(void)
{
cout<<"*****************************
"<
cout<<“Welcome to C++!”<
return 0;
}
using namespace std;
void printstar(void)//定义printstar函数
{
cout<<"******************************"<
void print_message(void)//定义print_message函数
{
cout<<“Welcome to C++!”<
int main(void)
{
printstar();//调用printstar 函数
print_message();//调用print_message函数
printstar();//调用printstar 函数
return 0;
}
4 ) 函数的分类
(1) 用户使用的角度:系统函数,即库函数。
系统函数,即库函数:由软件开发商提供。
用户自己定义的函数:系统函数不可能满足用户所有的需要,自己编写函数,程序员来完成。
(2) 函数的形式: 无参函数、有参函数
无参函数:完成某个功能不需要提供任何条件(老张,只负责开关大门。
有参函数:(更多一些),完成某个功能 必须提供一个或多个条件。
4.2、 定义函数的一般形式
1)、 无参函数的定义形式
类型名 函数名([void])
{ 声明部分
执行语句
}
如打印星号
2 )、 定义有参函数的一般形式
类型名 函数名(形式参数表列)
{ 声明部分
执行语句
}
自定义函数时要考虑的内容
1调用这个函数是否需要得到一个结果。
2函数名,函数名是函数的标识。
3函数名后是一对()
4如果需要 参数则把每个参数的类型,写在()中
5在()后是一对{}
6在{}中完成所需要的功能。
7如果函数有一个结果,需要使用return语句将结果返回给调用者。
如果使用函数
求最大值
#include < iostream>
using namespace std;
int max(int x,int y)//定义有参函数max
{
int z;
z=x>y?x:y;
return(z);
}
int main()
{
int a,b,c;
cout<<“please enter two integer numbers:”;
cin>>a>>b;
c=max(a,b);//调用max函数,给定实参为a,b。
cout<<“max=”<
}
4.3、 函数参数和函数的值
1) 形式参数和实际参数(求最大值为例)
形式参数:在定义函数时()中的内容称为形式参数。
实际参数:在调用时()中的内容称为实际参数。
2)形参只能是变量(只有变量才能接收值),实参呢?
实参,可以是常量 ,变量,表达式。
#include < iostream>
using namespace std;
int max(int x,int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
int main()
{
int a,b,c;
a=5;
b=3;
c=max(a,b);
cout<
}
以上为错误示例。
每个形参必须单独定义,即使是同一类型。
4 )形参占内存吗?什么时候占?什么时间释放?
不调用形参不占内存,被调用时才申请内存。
5)改变了形参的值,实参会跟着变吗?(形参实参占据不同的内存单元)
6)实参给形参传递值时,类型必须一样吗?
类型可以不一致,但必须兼容。
通过函数输出变量的值时,为什么输出的是1,而不是1.23456?
在调用时,实参d的值传递给形参x;由于形参类型为int因此会发生类型转换。
7)函数的返回值(干完活了要交差)
通过return语句将结果返回给调用者。
8如果return语句中的类型,与定义的类型不一样。
在调用时返回值为1.5。
using namespace std;
int func()
{
return 1.5;
}
int main()
{
float f;
f=func();
cout<
}
4.4、函数的调用
1)如何调用函数(函数语句,表达式,再次作为参数:m=max(a,sqrt(b)); m=max(a,max(b,c)))
#include < iostream>
#include < cmath>
using namespace std;
int max(int x,int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
int main()
{
putchar(‘A’);//调用函数作为语句
cout<
x=sin(30) ;//函数调用作为表达式
cout<
a=max(5,sin(30)) ;//函数调用作为参数
cout< return 0;
}
3)自定义函数放在哪里都可以吗?(1 定义在调用前 2 定义在调用后,声明放在调用前)
把函数的定义放到前面。
把average函数定义放main前,在main中可以使用这个函数。
如果定义在后,使用在前。
一般做法,main出现在最前。
在函数的声明放在调用前。
第二种做法更为普遍。
如果把声明放在main内部,则其他函数不能调用average.
#include < iostream>
using namespace std;
int main()
{
float add(float x,float y); //函数的声明
float a,b,c;
cout<<“please enter a,b:”;
cin>>a>>b;
c=add(a,b);
cout<<“sum=”<
}
float add(float x,float y) //函数的定义
{
float z;
z=x+y;
return (z);
}
一般把定义的第1行(首部)复制放到声明处加分号
在声明处的变量名,不起作用
作业:定义一个函数,求三个整数的平均值,返回值为float类型,在main中使用这个函数。
评论列表(0条)