一.知识总结
1.函数定义的语法形式
数据类型 函数名(形式参数表)
{
函数体 //执行语句
}
函数定义说明
·函数的数据类型是函数的返回值类型(若为void,则无返回值)
·函数名是标识符,一个程序中除了主函数名必须为main 外,其余函数的名字校照标
识符的取名规则可以任意选取,最好取有助于记忆的名字
·形式参数(简称形参)表可以是空的(即无参函数),也可以有多个形参,形参间用逗
号隔开,不管有无参数,函数名后的圆括号都必须有。形参必须有类型说明,形参可以是变量名、数组名或指针名,它的作用是实现主调函数与被调函数之间的关系
·函数中最外层一对花括号“{ }”括起来的若干个说明语句和执行语句组成了一个函
数的函数体。由函数体内的语句决定该函数功能。函数体实际上是一个复合语句,它可以没有任何类型说明,而只有语句,也可以两者都没有,即空丽数。
2.函数定义的例子
int max(int x,int y)
{
return x>y? x:y;
}
3.函数的形式
(1)无参函数
无参数传递的函数,不需要带回函数值
(2)有参函数
有参数传递,需要带回函数值
(3)空函数
函数体只有一对花括号,花括号内没有任何语句
实例
- #include<iostream>
- using namespace std;
- int js(int); //函数的声明
- int main()
- {
- int sum=0;
- for(int i=0;i<=10;i++)
- sum+=js(i); //函数的调用
- ocut<<"sum+"<<sum<<endl;
- return 0;
- }
- int js(int n) //定义的函数体
- {
- int s=1;
- for(int i=1;i<=n;i++)
- s*=i;
- return s; //函数的返回值<strong>
- </strong>}
二、函数的声明和调用
1.函数的声明
在主调函数中或所有函数定义之前,按如下形式声明:
类型说明符 被调函数名(含类型说明的形参表);
下面对js()函数原型声明是合法的
- int js(int n);
也可以:
- int js(int);
2.函数的调用
声明了函数原型之后,便可以按如下形式调用函数:
函数名(实参列表);
实参列表中应给出与函数原型形参个数相同、类型相符的实参
3.函数的返回值
在组成函数体的各类语句中,值得注意的是返回语句return。它的一般形式是:
return(表达式);
其功能是把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数的返回
三、函数的传值调用
1.传值调用
这种调用方式是将实参的数据值传递给形参。在被调用函数中,形参值可以改变,但不影响主调函数的实参值
例:
- #include<iostream>
- using namespace std;
- void swap(int a,int b)
- {
- int tmp=a;a=b;b=tmp;
- }
- int main()
- {
- int c=1,d=2;
- swap(c,d);
- cout<<c<<' '<<d<<endl;
- return 0;
- } //程序输出为:1 2
2.传址调用
这种调用方式是将实参变量的地址值传递给形参,这时形参是指针,即将形参的指针指向实参地址
例:
- #include<iostream>
- using namespace std;
- void swap(int &a,int &b)
- {
- int tmp=a;a=b;b=tmp;
- }
- int main()
- {
- int c=1,d=2;
- swap(c,d);
- cout<<c<<' '<<d<<endl;
- return 0;
- } //程序输出为:2 1
四.函数的应用举例
例1:数字反转
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形
式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零
#include<bits/stdc++.h>
using namespace std;
int fanzhuan(int n);
int main()
{
int x;
cin>>x;
cout<<fanzhuan(x);
return 0;
}
int fanzhuan(int n)
{
int s=0;
while(n)
{
s=n%10+s*10;
n=floor(n/10);
}
return s;
}
例2验证歌德巴赫猜想
验证“歌德巴赫猜想”,即:任意一个大于2的偶数均可表示成两个素数之和
#include<bits/stdc++.h>
using namespace std;
int sushu(int n);
int main()
{
int x,j;
cin>>x;
for(j=2;j<=x/2;j++)
{
if(sushu(j))
if(sushu(x-j))
{
cout<<x<<" "<<"="<<" "<<j<<" "<<"+"<<" "<<(x-j);
cout<<endl;
}
}
return 0;
}
int sushu(int n)
{
int i,t=1;
for(i=2;i<=sqrt(n);i++)
if(n%i==0)t=0;
if(t==1)
return 1;
else
return 0;
}
例3:求两数的最大公约数
#include<bits/stdc++.h>
using namespace std;
int chushu(int a,int b);
int main()
{
int x,y,i,t=0;
cin>>x>>y;
if(x<y)
{
for(i=1;i<=x;i++)
if(chushu(x,i)==1&&chushu(y,i)==1)
t=i;
}
if(x>y)
{
for(i=1;i<=y;i++)
if(chushu(x,i)==1&&chushu(y,i)==1)
t=i;
}
if(x==y)
t=x;
cout<<t;
return 0;
}
int chushu(int a,int b)
{
if(a%b==0)
return 1;
else
return 0;
}
例4:求两数的最小公倍数
#include<bits/stdc++.h>
using namespace std;
int chushu(int a,int b);
int main()
{
int x,y,i,t=0;
cin>>x>>y;
if(x<y)
{
for(i=1;i<=x;i++)
if(chushu(x,i)==1&&chushu(y,i)==1)
t=i;
}
if(x>y)
{
for(i=1;i<=y;i++)
if(chushu(x,i)==1&&chushu(y,i)==1)
t=i;
}
if(x==y)
t=x;
cout<<(x*y)/t;
return 0;
}
int chushu(int a,int b)
{
if(a%b==0)
return 1;
else
return 0;
}
四.总结
经过几个周的学习,我对函数的用法有了一定的了解,但是实际应用时还有一些不熟,需要多加练习。c++是一种比较难的编程语言,需要反复的使用才能很好的掌握,在以后的学习中要反复练习,争取掌握这门语言。