调用函数
Void printstars (int m)定义输出m个星号的函数
{
}
Int main ()
{
}
函数 printstars {}中为函数体
调用函数例子:
*
***
*****
*******
*********
***********
程序如下:
#include<iostream>
#include<cmath>
using namespace std;
void printstars (int m)
{
for (int j=1;j<=m;++j)
cout<<'*';
cout<<endl;
}
int main ()
{
int n=6;
for (int i=1;i<=n;++i)
printstars (2*i-1); 调用函数printstars
return 0;
}
好处:自行编写函数进行需要的调用,而不是函数库中已经编好的
例2:
*
***
*****
*******
*********
***********
程序:
#include<iostream>
#include<cmath>
using namespace std;
void printchs (char c,int m) 括号内为形式参数,类似为y=f(x)中的x,取值决定于实际参数
{
for (int j=1;j<=m;++j)
cout<<c; //每一行输出m个字符c
} 自定义函数
int main ()
{
int n=6;
for (int i=n;i>=1;--i)
{
printchs (' ',n-i); 括号内为实际参数,调用时输出该参数
printchs ('*',2*i-1); 函数的调用
cout<<endl;
}return 0;
}
定义一个调用函数,就可以不需要循环套循环
基本结构:
Int main ()
{
Max(a,b)
}
Int max(int x,int y)
{
Return z
}
模块化程序设计:自顶向下,逐步求精
得到一系列以功能块为单位的算法描述
为了降低程序的复杂度,使程序设计,调试,维护等操作简单化
C++中的函数
1 一个源程序文件由一个或多个函数组成
2 一个程序必须且只有一个main()函数,C++从main()函数开始执行
Main函数为主调函数,max等自定义函数为被调函数,共同组成函数调用;再对被调函数进行函数定义
C++语言中,所有函数都是平行独立的,无主次,相互包含之分,函数可嵌套调用,不可嵌套定义
Void eat()
{
}
Void sleep()
{
}
Void hitdoudou()
{
}
C++使用函数实现模块化 函数是C++的基本模块
1 避免重复的编程,可以直接进行重复调用
2 使程序更加模块化,便于阅读和修改
用户使用的角度看函数分类
1 系统函数,即由编译系统提供的库函数,也称为标准函数
如 头文件#include <cmath> 调用库函数sqrt(),exp(),Pow()求幂函数等
2 用户自己定义的函数,用以解决用户的专门需要
在设计程序时可以将完成某一相对独立功能的程序定义一个函数,以满足根据应用的需要
从函数的形式进行函数分类
1 无参函数 调用函数时不必给出参数 int main()
2 有参函数 在调用函数时要给出参数,在主调函数和被调函数之间传递数据
Int max(int x, int y)
定义无参函数
类型标识符 函数名(【void】)
{
声明部分
语句
}
类型标识符可以为int,也可以为void,即空类型,仅仅注重于执行操作,而不求值
函数名也是标识符,有字母,数字,下划线组成,且开头只能为字母或者下划线
【】中的内容可以省略,即可以为()和(void)
主调函数没有向被调函数传送的数据
无参函数主要用于执行某一操作,但是相对于有参函数来说灵活性较差
定义有参函数
类型标识符 函数名(形式参数表列) 形式参数表列可以由逗号隔开
{
声明部分
语句
如果不是void类型,还必须有返回语句 return()
}
形式参数和实际参数
形参:在定义函数时,函数名后括号中的变量
实参:在调用函数时,函数名后括号中的变量(可以是表达式)
执行过程中,将实际参数的值传给被调函数的形式参数,计算后得到函数返回
形参和实参对应的存储空间
1 定义函数时指定形参,但不分配存储单元
形参又称虚拟参数,表示不是实际存在的数据
2 发生函数调用时,才为形参分配内存单元,以便接受实参传来的数据
3 在调用结束后,形参所占的内存单元也被释放
4 不同函数可以使用相同的形参变量名
实参变量对形参变量进行“值传递”
在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值
实参可以使表达式
函数的返回值
如果函数需要求值,则最后需要函数值返回return语句
Return语句将被调用函数中的一个确定值带回主调函数中去
Return (表达式);
Return 表达式;
函数值类型为定义函数式指定函数值的类型
如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准,即函数类型决定返回值的类型,对数值型数据,可以自动进行类型转换
实参单元与形参单元是不同的单元
#include<iostream>
#include<cmath>
using namespace std;
void fun (int a,int b)
{
a=a*10; a,b为形式参数,执行结束后释放内存单元
b=b+a;
cout<<a<<'\t'<<endl; 形参输出 20
}
void main ()
{
int a=2,b=3; a,b为实际参数,fun执行结束后继续为实际参数的输出
fun (a,b);
cout<<a<<'\t'<<endl; 实参输出 2
}
实参和形参
形参实参类型相等,且一一对应
实参可以是常量,变量或表达式
实参必须要有确定的值,以便在调用函数时赋值给形参
实参与形参的类型应该相同或者赋值兼容
形参不可以为常量,因为不分配内存
Int max (int x, int y)
{return (x>y?x:y);}
可以有多个return语句,执行到哪一个,哪一个就起作用返回,后面程序就不起作用
Int max (int x,int y)
{
If (x>y)
Return x;
Else
Return y;
} 风格不好
好的风格为程序只出现一个return语句,放在最后,先求值再返回
函数调用的一般形式
函数名 (【实参表列】)
参数是按顺序对应,一对一传递数据
如果实参表列包括多个实参,对实参求值的顺序并不确定:VC++采用自右向左
Int i=2;
Fun (i,++i)
自右向左,先++i得到i=3,然后再得到i的值,即输出 fun(3,3,)
函数调用的方式
1 函数语句 把函数调用单独作为一个语句
Printstars ();
2 函数表达式 c=2*max(a,b);
函数带回一个确定的值参加表达式运算
3 函数参数 函数调用作为一个函数的实参
M=max(a,max(b,c));
Cout<<max(a,b);
2,3两种情况返回值不能是void型,因为其可以不返回值或者返回值无意义
1情况一般情况返回值为void型,只注重作用了什么,并不要求函数带回一个值
函数调用的条件
1 被调用的函数必须是已存在的函数
2 如果使用库函数,必须用头文件#include<……>
3 函数调用遵循先定义,后调用的原则,即被调函数应出现在主调函数之前
若要先调用,后定义:调用前声明
即将定义函数的头拿到调用处,加上分号即可(一定要加函数的类型)然后再进行函数调用
例:
先定义后调用
void fun (int a,int b) 函数定义
{
}
void main ()
{
fun ( a, b); 函数调用
}
先调用后定义
void main ()
{
void fun (int a,int b); 调用前声明
fun (a,b); 函数调用
}
void fun (int a,int b) 函数定义
{
}