{C++利用函数实现指定的功能}菜大学生C++笔记10

{C++利用函数实现指定的功能}菜大学生C++笔记10,第1张

第4章 利用函数实现指定的功能
4.1 、 什么是函数
1)为什么需要函数(一个函数就是一个功能)
一个大型程序:不可能都在main中完成。



把功能分成很多模块,放在不同的函数中,甚至放到不同的文件中。



公司运作。


公司比较小时,所有的工作都由老板完成。


(所有的代码都写在main中)。


公司做大时,需要其他员工。


每人做自己最善长的事。


会计,出纳,秘书,保安。



2)main(老板)可调用其他函数(员工),其他函数之间也可互相调用

除了main之外,所有的函数是平等的。



3)函数举例

#include
using namespace std;
int main(void)
{
cout<<"***************************** "<"
cout<<“Welcome to C++!”< cout<<"***************************** "<"
return 0;
}

#include < iostream>
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) 用户使用的角度:系统函数,即库函数。


用户自己定义的函数
系统函数,即库函数:由软件开发商提供。


Vs2010 devc++ cfree 基本功能类似,但不完全 一样。


有些公司会提供一些特有的函数,方便用户使用。



用户自己定义的函数:系统函数不可能满足用户所有的需要,自己编写函数,程序员来完成。



(2) 函数的形式: 无参函数、有参函数
无参函数:完成某个功能不需要提供任何条件(老张,只负责开关大门。


)getchar()
有参函数:(更多一些),完成某个功能 必须提供一个或多个条件。


求两个数的最大值(必须提供两个数)求一个数的平方(必须提供一个数)。



4.2、 定义函数的一般形式
1)、 无参函数的定义形式
类型名 函数名([void])
{ 声明部分
执行语句
}
如打印星号
2 )、 定义有参函数的一般形式
类型名 函数名(形式参数表列)
{ 声明部分
执行语句
}
自定义函数时要考虑的内容
1调用这个函数是否需要得到一个结果。


如果不需要得到结果。


函数类型为void.如果需要得到一个结果。


结果是什么类型,此函数就是什么类型(求两个数的平均值,结果是一个小数) 求两个整数的最大值(结果一个整数)
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。


函数值赋给c
cout<<“max=”< return 0;
}
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< cout< cout< cout< return 0;
}

3)每个形参都需要定义类型吗(是的)?可以同时定义多个形参吗?在哪里定义?


以上为错误示例。



每个形参必须单独定义,即使是同一类型。


在函数定义处的一对()中。



4 )形参占内存吗?什么时候占?什么时间释放?
不调用形参不占内存,被调用时才申请内存。


调用结束,空间马上释放。



5)改变了形参的值,实参会跟着变吗?(形参实参占据不同的内存单元)


6)实参给形参传递值时,类型必须一样吗?
类型可以不一致,但必须兼容。


而且。


会转换成形参类型。



通过函数输出变量的值时,为什么输出的是1,而不是1.23456?
在调用时,实参d的值传递给形参x;由于形参类型为int因此会发生类型转换。


把1.23456转换为1赋值给x;我们在编程时尽量避免此类情况。


尽量类型相同。



7)函数的返回值(干完活了要交差)
通过return语句将结果返回给调用者。



8如果return语句中的类型,与定义的类型不一样。


谁说了算?返回值类型以定义时类型为准(函数名前的类型)

在调用时返回值为1.5。


由于定义fun时返回值类型为int因此会将1.5强制类型转换为1.返回。


又由于a是double会将1转换为1.0赋值给a

#include < iostream>
using namespace std;
int func()
{
return 1.5;
}
int main()
{
float f;
f=func();
cout< return 0;
}
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< double x;
x=sin(30) ;//函数调用作为表达式
cout< int a;
a=max(5,sin(30)) ;//函数调用作为参数
cout< return 0;
}

2)系统函数就能随便调用吗?(1 必须存在,2 头文件)
3)自定义函数放在哪里都可以吗?(1 定义在调用前 2 定义在调用后,声明放在调用前)

把函数的定义放到前面。


后面所有的函数都能使用这个函数。



把average函数定义放main前,在main中可以使用这个函数。



如果定义在后,使用在前。


不允许
一般做法,main出现在最前。


程序的条理清晰。


把其他函数的定义放在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=”< return 0;
}
float add(float x,float y) //函数的定义
{
float z;
z=x+y;
return (z);
}

4)如何写函数的声明?(变量名,爱写不写,也可写其他,不起作用。


变量类型,必须写)
一般把定义的第1行(首部)复制放到声明处加分号


在声明处的变量名,不起作用
作业:定义一个函数,求三个整数的平均值,返回值为float类型,在main中使用这个函数。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)