C++入门学习:函数篇

C++入门学习:函数篇

逻辑

main()函数

程序的执行从main()函数开始,调用了其他函数后程序控制流程会返回到main()函数,在main()函数中结束整个程序运行。main()函数可以出现在程序的任何位置,每个程序有且仅有一个main()函数。

联系

程序所有函数都是平行定义的,在一个函数内部不允许定义另外的函数。函数可以相互调用,但是不能调用main()函数。main()函数的主要作用是调用各个函数,相当于总调度。

分类

标准库函数(结合头文件使用)
自定义函数

函数声明

格式

返回值的数据类型 函数名(数据类型 变量名1,数据类型 变量名2,……);
说明:“数据类型 变量名1,数据类型 变量名2,……”称为形参列表

//变量名可以省略,但数据类型不能省略

//有返回值
double area(double a,int b);
char* strcpy(char*,const char*);

//无返回值
void abort();

函数定义

格式

返回值的数据类型 函数名(形参列表)
//此处形参名不能省略
{
//若干实现算法的语句,称为函数体
[return 语句;]
}

说明

①返回值
有返回值:必须有return 语句;
无返回值:类型为void,为 “ return;”或者无return 语句;

②形参列表
有形参的形参列表为(类型 形参1,类型 形参2,……)
无形参的形参列表为( )。

③return
只能返回一个值,当函数体内代码执行到return语句时,函数立刻结束。

④注意
函数体内不能包含另一个函数的定义,但可以声明其他函数。

函数调用

(函数不带默认形参值)

格式

函数名(实参1,实参2,……)
函数名()

说明

1.实参可为常量、变量或其他构造类型数据及表达式,实参必须有确定的值
2.实参个数必须和形参个数相同(带有默认值的形参例外),且数据类型相匹配

方式
// 函数表达式
result=factorial(m);
cout<<factorial(m)<<endl;

//函数语句
abort();

//函数实参
cout<<max(max(a,b),c)<<endl;

函数使用流程

方式一
先定义,后调用,可省略声明
方式二
先调用,后定义,必须在调用前声明

以求三个数中最大的数为例

int Max(int a, int b, int c)
{
	int MAX = 0;
	if (a > b) MAX = a;
	if (c > a) MAX = c;
	return MAX;
}
int main(  )
{
  int l,m,n;
  cin>>l>>m>>n;
  int MAXMIUM=0;
  MAXMIUM=Max(l,m,n);
  cout<<"最大值为"<<MAXMIUM<<endl;
  return 0;
}

或者

int Max(int a,int b,int c);
int main()
{
  int l,m,n;
  cin>>l>>m>>n;
  int MAXMIUM=0;
  MAXMIUM=Max(l,m,n);
  cout<<"最大值为"<<MAXMIUM<<endl;
  return 0;
}
int Max(int a, int b, int c)
{
	int MAX = 0;
	if (a > b) MAX = a;
	if (c > a) MAX = c;
	return MAX;
}

带默认形参值的函数

设置形参的默认值,调用时如果给出实参,则采用实参值,否则采用预先给出的默认值。

//实参与形参的传递顺序为从左至右,故指定默认值的参数必须放在形参最右端,否则出错
void fun(double a,int b=0,int c,char d='a');//错误
void fun(double a,int c,int b=0,char d='a');//正确

//若函数定义在调用之前,须在函数定义中给出默认值
void fun(double a,int c,int b=0,char d='a')
{ ……;}
int main()
{ ……
  fun(10.2,5);
  ……}
//若函数定义在函数调用之后,则函数声明中必须给出默认值,而函数定义时不能再给出默认值,即使默认值相同也不可以
void fun(double a,int c,int b=0,char d='a');
int main()
{ ……
  fun(10.2,5);
  ……}
void fun(double a,int c,int b,char d);
{ ……;}

函数重载

相同函数名,不同参数列表。

//函数声明
int sum(int a,int b);
int sum(int a,int b,int c);
double sum(double a,double b,double c);

//不能以形参名不同构成重载,不能以返回值类型不同构成重载
int sum(int a,int b);//错误
double sum(int x,int y);//错误、

函数参数传递

值传递

一般用于不需要修改实参的值

//以求三角形面积为例
double Square(double a, double b, double c)
{
	double s = 0, p = (a + b + c) / 2;
	double k = p * (p - a) * (p - b) * (p - c);
	s = sqrt(k);
	return s;
}
int main()
{
	double l,m,n;
	cin>>l>>m>>n;
	double S=0;
	S=Square(l,m,n);
	cout<<"三角形面积为"<<S<<endl;
	system("pause");
	return 0;
}
指针传递

一般用于要修改实参的值 或者 返回值不止一个

//以输入一个学生两门课程成绩为例
void input(double*ma,double*en)
{
cout<<"请输入Math及English成绩";
cin>>*ma>>*en;
}
void output(double ma,double en)
{
cout<<"数学成绩="<<ma<<endl;
cout<<"英语成绩="<<en<<endl;
}
int main()
{
double math,english;
input(&math,&english);
output(math,english);
return 0;
}
引用传递
//以交换两个数据为例
void swapData(int&,int&);
int main()
{
int x,y;
cin>>x>>y;
cout<<"main x="<<x<<",y="<<y<<endl;
swapData(x,y);
cout<<"main x="<<x<<",y="<<y<<endl;
return 0;
}
void swapData(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
数组参数
数组元素作为函数的实参

参考值传递

数组名作为函数的实参

地址传递,即把实参数组的首地址赋予形参数组名,形参数组名取得该首地址后与实参数组为同一数组,共同拥有一段内存空间,编译系统不再为形参数组分配内存

//以排序一个数组内的值为例
void sort(int* brr)
{
	int temp = 0;
	for (int i = 0; i < 8; i++)
		for (int j = 0; j < 7; j++)
		{
			if (brr[j] > brr[j + 1])
			{
				temp = brr[j];
				brr[j] = brr[j + 1];
				brr[j + 1] = temp;
			}
		}
	return;//此语句可加可不加
}

int main()
{
	int arr[8] = { 49,38,65,97,76,43,27,49 };
	sort(arr);
	for (int j = 0; j < 8; j++)
		cout << arr[j] << endl;
	return 0;
}
说明
//函数声明,注意一维形参数组不用指明数组长度
double average(double [],int);
//用指针方式声明
double average(double* ,int);
//特别注意二维形参数组不能缺省第二维的长度
double average(double[][3]);
double avg=average(arr);//调用函数,实参是数组名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值