文章目录
前言
本文为笔者在学习函数时认为存在较多的疑难点需要去点明,因此写下这篇文章来总结有关数组的知识点和易错点。本文将针对函数的定义,声明与调用,有参函数,无参函数,函数的嵌套,函数的递归以下几点来归纳总结。
一、函数的定义,声明与调用
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.知识点总结
函数的递归通俗地讲就可以类比于数列的递推公式,函数自己调用自己,直至算出最终结果
这就是今天的全部内容了,谢谢大家的观看,不要忘了给一个免费的赞哦!