23C++函数(1)——教学
一、认识函数
(第71课 一见如故)
有些问题的程序太长或太复杂,编写起来就会很困难,如果我们将一个复杂的问题分解成多个较小、较简单的子问题,就会比较容易解决。在C++中可以利用函数来实现一些小功能,一个函数就是一个功能。
一个程序文件中可以包含若干个函数。无论把一个程序划分为多少个程序模块,有且只有一个main函数。程序总是从main函数开始执行,在程序执行时main函数可以调用其他函数,其他函数也可以互相调用,但其他函数不能调用main函数。
示例1:狐狸老师,您先定义一个输出三个“*”号的函数,让我们学习一下吧。
#include <iostream>
using namespace std;
void show(void)
{
cout<<"***";
}
int main()
{
show();
return 0;
}
本程序执行过程如下图:

函数有两种,一种是库函数,也称为系统函数,如随机函数rand()。另一种就是用户自己编写程序时根据需要定义的函数,称为自定义函数,如show()。show()函数的类型是void,表示无返回值,其参数类型为void,表示没有参数,调用时不必也不能给出参数,如图:

大多数情况下,函数是带有参数的,主函数和被调用的函数之间有数据传递关系。在定义函数时,函数名后面括号中的变量名称为形式参数(简称“形参”),在调用函数时,函数名后面括号中的参数称为实际参数(简称“实参”)
示例2:老师,您再定义一个输出n个“”号的函数,利用它输出三角形的“”号图吧。

在定义函数时,必须在函数首部指定形参的数据类型,实参变量对形参变量的数据传递是“值传递”,即单向传递,只能由实参传给形参,不能由形参传回实参。有时候,实参的变量名和形参的变量名一样,但它们是两个不同的变量,有自己不同的存储单元。
定义一个输出n个“”的函数,利用它输出三角形的“”号图,其中输出的行数在程序运行时输入。
#include <iostream>
using namespace std;
void show(int geshu)
{
int i;
for(i=1;i<=geshu;i++)
cout<<"*";
cout<<endl;
}
int main()
{
int i, n;
cout<<"行数:";
cin>>n;
for(i=1;i<=n;i++)
show(i);
return 0;
}
英汉小词典
void[void]无参数;无返回值;无类型
二、局部变量与全局变量
(第72课 函数与最大值)
定义一个求两个整数最大值的函数,利用它求出5个整数的最大值。
编程思路,定义一个求两个整数最大值的函数,先求出前两个数的最大值,然后将求出的最大值和第3个数进行比较,求前3个数的最大值,以此类推,求出5个数的最大值。
#include <iostream>
using namespace std;
int max(int x, int y)
{
int ans;
if(x>y)ans=x;
else ans=y;
retum ans;
}
int main()
{
int i, ans, a[5];
for(i=0;i<5;i++)
cin>>a[i];
ans=a[0];
ans=max(ans, a[1]);
ans=max(ans,a[2]);
ans=max(ans, a[3]);
ans=max(ans, a[4]);
cout << ans << endl;
return 0;
}
在本程序中,main函数和max函数内都定义了变量ans,名字相同,这样可以吗?这是可以的,在前一课中我们已学过,虽然名字相同,却在两个不同的函数内被定义,它俩只存在于自己的函数内,属于两个不同的变量,是局部变量。
在函数内部定义的变量,是局部变量,它只在本函数范围内有效,也就是说,只有在本函数内才能使用它们,在此函数以外是不能使用的。
定义在所有函数外部的变量是全局变量,可以为本程序中程序中全局变量定义语句后面的其他函数所共用,即它的有效范围为从定义变量的位置开始到本程序结束。
#include <iostream>
using namespace std;
int ans,a[5]; //全局变量,此位置后面的函数都可以使用它
int max(int x,int y)
{
if(x>y) return x;
else return y;
}
void fun1(void)
{
int i;
for(i=0;i<5;i++)
cin>>a[i];
ans=a[0];
for(i=1;i<5;i++)
ans=max(ans,a[i]);
}
int main()
{
fun1();
cout<<ans<<endl;
return 0;
}

小提示:
全局变量在定义时若没有赋初值,其默认值为0,而局部变量在定义时若没有赋初值,其默认值是随机的。全局变量在程序执行的全过程中一直占用内存单元,而局部变量的内存单元是临时分配的,当函数(或程序块)执行完毕,局部变量的内存单元就被释放,其值无法保留到下次使用。
三、函数应用之找丑数
(第73课 丑数_函数应用)
我们把只包含2、3、5这三个质因子的自然数称为丑数。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上,我们把1当作是第一个丑数。先定义一个判断丑数的函数,利用它输出1~100之间所有的丑数,并统计出个数。
根据丑数的定义,丑数只能被2、3和5整除。也就是说一个数如果能被2整除,就连续除以2:如果能被3整除,就连续除以3;如果能被5整除,就连续除以5。如果最后我们得到的数是1,那么这个数就是丑数,否则不是。
#include <iostream>
#include <iomanip>
using namespace std;
bool choushu(int n)
{
while(n%2==0)
n/=2;
while(n%3==0)
n/=3;
while(n%5==0)
n/=5;
return (n==1);
}
int main()
{
int num=0;
for(int i=1;i<=100;i++)
if(choushu(i))
{
cout<<setw(6)<<i;
num++;
if(!(num%10)) cout<<endl;
}
cout<<endl;
cout<<"个数:"<<num<<endl;
return 0;
}

浙公网安备 33010602011771号