有关函数的学习分享


前言

本文为笔者在学习函数时认为存在较多的疑难点需要去点明,因此写下这篇文章来总结有关数组的知识点和易错点。本文将针对函数的定义,声明与调用有参函数无参函数函数的嵌套函数的递归以下几点来归纳总结。


一、函数的定义,声明与调用

1.函数的声明

函数的声明可以放在main函数之前,也可以放在main函数里的第一句,前提是函数的定义在main函数之后。也可以将函数的定义和声明联合到一起,放到main函数的前面。

2.函数的定义

独立于main函数之外的一个函数,一般位于main函数之后,也可以和函数的声明一起放于main函数的前面。

3.函数的调用

在main函数里直接使用函数,方式:函数名(形参1,形参2……)
若数组作为参数,在定义和声明时只需要写上数据类型和数组名加中括号(int a[ ]),在调用的时候只需要写上数组名称就行了。


二、调用有参函数

1.例题展示

(1) 输入四个数字,求前两个数的最大值,后两个数的最大值,以及四个数中的最大值

#include<stdio.h>
int main()
{
	float max(float,float);
	float a[4];
	int i;
	float m1,m2,m3;
	for(i=0;i<=3;i++)
	{
		printf("请输入第%d个数字:",i+1); 
		scanf("%f",&a[i]);
	}
	m1=max(a[0],a[1]);
	m2=max(a[2],a[3]);
	m3=max(m1,m2); 
	printf("前两个数最大值为%.1f\n",m1);
	printf("后两个数最大值为%.1f\n",m2);
	printf("四个数中最大值为%.1f\n",m3);
		
	return 0;	 
}
	float max(float x,float y)
	{
		float max1;
		if(x<y)
		{
			max1=y;
		}
		else
		{
			max1=x;
		}
		
		return(max1); 
	}

补充说明: 函数可以改得更简单一点
形式1:

float max(float x,float y)
	{
		if(x<y)
		{
			return(y); 
		}
		else
		{
			return(x); 
		}
	}

形式2:

float max(float x,float y)
	{
		return(x>y?x:y)	
	}

(2)有两个小组,分别由五名学生和十名学生,输入他们的成绩,利用aver函数求出他们的平均值

#include<stdio.h>
int main()
{
	float aver(float a[],int n);
	int i;
	float a1[5],a2[10];
	printf("请输入第一组的成绩:"); 
	for(i=0;i<=4;i++)
	{
		scanf("%f",&a1[i]);
	}
	printf("请输入第二组的成绩:"); 
	for(i=0;i<=9;i++)
	{
		scanf("%f",&a2[i]);
	} 
	printf("第一组成绩的平均值为%.1f\n",aver(a1,5));
	printf("第二组成绩的平均值为%.1f\n",aver(a2,10));

	return 0;	 
}
	float aver(float a[],int n)
	{
		float sum=a[0],average;
		int i;
		for(i=1;i<n;i++)
		{
			sum+=a[i];	
		}	
		average=sum/n;
		
		return(average);
	}

2.知识点总结

1.注意返回值的数据类型
2.函数最后要写return( )返回值,不然没有输出


三、调用无参函数

1.例题展示

输入若干个整数,并将这些数字从小到大排序

#include<stdio.h>
int main()
{
	void sort(int a[],int n);
	int n,i;
	int a[10];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	sort(a,n);
	for(i=0;i<n;i++)
	{
		printf("%d ",a[i]);
	}	
	printf("\n");
	
	return 0;	 
}
	void sort(int a[],int n)
	{
		int i,j,temp;
		for(i=0;i<n-1;i++)
		{
			for(j=0;j<n-i-1;j++)
			{
				if(a[j]>a[j+1])
				{
					temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			}
		}
	}
	

2.知识点总结

数据类型写void,且最后不需要写return


四、函数的嵌套

1.例题分析

输入n个数,求出其中的最大值

#include<stdio.h>
int main()
{
	int max_n(int a[],int n);
	int i,n,maximum;
	int a[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	maximum=max_n(a,n);
	printf("%d\n",maximum);
	
	return 0;	 
}
	int max_n(int a[],int n)
	{
		int max_2(int a,int b);
		int j,temp;
		for(j=0;j<n;j++)
		{
			temp=max_2(a[j],a[j+1]);
		}
		
		return(temp);
	}
	
	int max_2(int a,int b)
	{
		return(a>b?a:b);
	}
	

2.知识点总结

通俗地讲就是一个大函数的功能是由若干个小函数构成的,就像上文中的max_n函数是求n个数字的最大值,但是细分就是将n个数两两比较,得出最大值,因此最小单元函数是max_2函数,利用for循环实现嵌套。


五、函数的递归

1.例题展示

一共有n名学生,第一名学生8岁,后面每一名学生比前一名都大两岁,求第n名学生的年龄

#include<stdio.h>
int main()
{
	int age(int n);
	int n;
	scanf("%d",&n);
	printf("%d\n",age(n));
	
	return 0;
}
	int age(int n)
	{
		int age_single;
		if(n==1)
		{
			age_single=8;	
		}
		else
		{
			age_single=age(n-1)+2;
		}
		
		return(age_single);
	}

2.知识点总结

函数的递归通俗地讲就可以类比于数列的递推公式,函数自己调用自己,直至算出最终结果


这就是今天的全部内容了,谢谢大家的观看,不要忘了给一个免费的赞哦!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

✿小瑞同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值