一、使用函数的好处
(1)避免代码冗长
(2)模块化的设计思路
(3)可以按功能划分
二、函数要先定义在进行使用
(1)函数的说明
(2)函数的定义:函数名,参数列表,返回值
(3)函数体
三、函数的定义与调用
案例1
无参数函数和有参数返回的函数及函数调用使用
#include<stdio.h>
/*无参数函数*/
void printWclome()
{
puts("============================");
puts("哇呀呀呀,来将可留姓名!!!");
puts("============================");
}
/*有参数有返回值的函数,形参要包含参数类型,变量名
生命期:栈空间,被调用时才为形式参数申请内存,调用结束后,内存被系统释放*/
int compute(int x)//形参
{
int data;
data = x * 2 -2;
return data;
}
int add(int data1,int data2,int data3)//形参
{
int set;
set = data1 + data2 +data3;
return set;
}
int main()
{
int x;
int y;
int data1,data2,data3;
int sum;
printWclome();
printf("请输入你的数字:");
scanf("%d",&x);
y = compute(x);//实参
printf("y= %d",y);
printf("\n");
printf("请输入三个数字:");
scanf("%d,%d,%d",&data1,&data2,&data3);
printf("sum = %d",add(data1,data2,data3));
return 0;
}
案例2
输入两个数,输出大的数(字符和小数同理)
#include<stdio.h>
int compare(int x,int y)
{
int temp;
temp = x > y ? x : y;
}
int main()
{
int x;
int y;
int max;
puts("请输入两个数字 ");
scanf("%d%d",&x,&y);
max = compare(x,y);
printf("max = %d",max);
return 0;
}
案例3
函数嵌套调用的使用
#include<stdio.h>
int CompareTwo(int x,int y)
{
int temp;
temp = x > y ? x : y;
return temp;
}
int CompareFour(int a,int b,int c,int d)
{
int max;
max = CompareTwo(a,b);
max = CompareTwo(max,c);
max = CompareTwo(max,d);
return max;
}
int main()
{
int data1;
int data2;
int data3;
int data4;
int bigger;
printf("请输入四个数字:\n");
scanf("%d%d%d%d",&data1,&data2,&data3,&data4);
bigger = CompareFour(data1,data2,data3,data4);
printf("最大数为:%d",bigger);
return 0;
}
四、函数的递归
案例1:五个孩子年龄的递归问题
#include<stdio.h>
int ageGet(int numchild)
{
int age;
if(numchild == 1)
{
age = 10;
}
else
{
age = ageGet(numchild - 1) + 2;
}
return age;
}
int main()
{
int num;
int age;
printf("请输入你想知道那个孩子的年龄:\n");
scanf("%d",&num);
age = ageGet(num);
printf("第%d的孩子年龄为%d",num,age);
return 0;
}
案例2:阶乘问题(注意越界问题)
#include<stdio.h>
long int factorial(int getnum)
{
long int sum;
if(getnum == 1)
{
sum = 1;
}
else
{
sum = factorial(getnum - 1) * getnum;
}
return sum;
}
int main()
{
int num;
long int outcome;
printf("请输入要求的阶乘数:\n");
scanf("%d",&num);
outcome = factorial(num);
printf("%d的阶乘是%ld\n",num,outcome);
printf("%ld",sizeof(long int));
return 0;
}