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;
}
posted @ 2025-05-23 18:02  gdyyx  阅读(48)  评论(0)    收藏  举报