一、什么是函数
函数是一个功能模块,它把实现某个功能的代码块包含起来,并且起一个函数名,供别人使用,如printf函数、system函数。是程序与进行当中包装起来的步骤
二、为什么要用函数调用
- 代码很好看
- 容易定位问题
- 可复用性
- 分工
三、如何定义一个函数
1.无形参无返回值
void function() //void 代表无返回值,不需要return
{
}
2.无形参有返回值
int function()
{
return 0;
}
3.有形参有返回值
int function(int data1, int data2)
{
return 0;
}
函数的定义包含一下参数:
- 函数名—— function
- 形式参数——data1, data2
- 返回值——return 0;
- 函数体(代码块)——{}里面的内容
四、如何调用一个函数
1.函数名(实际参数)
function(1,2);
2.函数名()
function();
四、函数可以多级调用
void function2()
{
}
int function(int data1, int data2)
{
function2();
return 0;
}
四、一般函数定义的几种情况(先说部分)
1.无返回值,无参数
#include <stdio.h>
#include <stdlib.h>
//你妈妈叫你去买米,不关心买多少斤(参数),也不关心你买回来没(返回值)
void buyRice()
{
printd("去买米......\n");
}
int main()
{
buyRice();
system("pause");
return 0;
}
作用:打印一些东西
2.无返回值,有参数
#include <stdio.h>
#include <stdlib.h>
//你妈妈叫你去买米,告诉你买多少斤(参数),也不关心你买回来没(返回值)
void buyRice(int weight) //weight是形式参数,意思有点类似变量定义,所以写法也类似变量的定义,如int a;
{
printd("去买%d斤米......\n",weight);
}
int main()
{
int a = 5;
buyRice(10); //如果调用函数带有参数,必须传参!!!
buyRice(a); //调用的时候传递的参数叫做实际参数,对格式没有要求,对数据的类型严格要求
system("pause");
return 0;
}
3.有返回值,有参数
#include <stdio.h>
#include <stdlib.h>
//y = f(x)
//y = 2x+1
int f(int x)
{
int y;
printf("x = %d\n",x);
y = 2*x + 1;
return y;
}
int main()
{
int x = 100;
int y = 0;
y = f(x);
printf("y = 2x+1\n");
printf("y = %d\n",y);
system("pause");
return 0;
}
4.有返回值,有多个同类型参数
#include <stdio.h>
#include <stdlib.h>
//z = f(x)
//z = x + y
int f(int x, int y)
{
int z;
printf("x = %d\n",x);
printf("y = %d\n",y);
z = x + y;
return z;
}
int main()
{
int x = 100;
int y = 100;
int z = 0;
z = f(x,y);
printf("z = x + y\n");
printf("z = %d",z);
system("pause");
return 0;
}
五、使用函数制作可选择算法计算器
#include <stdio.h>
#include <stdlib.h>
void tishi()
{
printf("**********************\n");
printf("****请选择一种算法****\n");
printf("*****设计者: LXY*****\n");
printf("**********************\n");
printf("**********************\n");
}
int jia(int x,int y) //加法函数
{
int z;
z=x+y;
return z;
}
int jian(int x,int y) //减法函数
{
int z;
z=x-y;
return z;
}
int cheng(int x,int y) //乘法函数
{
int z;
z=x*y;
return z;
}
double chu(int x,int y) //除法函数
{
double z;
z=(double)x/y;
return z;
}
void xzsf(char suanfa) //提示算法选择函数
{
switch(suanfa){
case'+':
printf("你选择了加法\n");
break;
case'-':
printf("你选择了减法\n");
break;
case'*':
printf("你选择了乘法\n");
break;
case'/':
printf("你选择了除法\n");
break;
default:
printf("你输入了错误的算法\n");
break;
}
}
void jisuan(int x,int y,char suanfa) //计算结果打印函数
{
switch(suanfa){
case'+':
printf("两数相加结果为:%d\n",jia(x,y));
break;
case'-':
printf("两数相减结果为:%d\n",jian(x,y));
break;
case'*':
printf("两数相乘结果为:%d\n",cheng(x,y));
break;
case'/':
printf("两数相除结果为:%f\n",chu(x,y));
break;
}
}
int d1(char suanfa) //键盘输入2个数
{
xzsf(suanfa);
int x,y;
printf("请输入第一个数:\n");
scanf("%d",&x);
printf("请输入第一个数:\n");
scanf("%d",&y);
jisuan(x,y,suanfa);
}
int main()
{
int x,y,z;
char suanfa;
int mark=0;
while(1){
tishi();
if(mark != 0)
getchar(); //吸收回车字符
mark = 1;
scanf("%c",&suanfa);
getchar(); //吸收回车字符
d1(suanfa);
}
system("pause");
return 0;
}
六、补充
1.函数可以多级调用
2.形式参数
-
形式参数也是一个局部变量,作用域仅限于该函数
-
形式参数,也是一个变量,局部变量,有自己的内存空间
空间的生存期(出生和死亡) ①何时申请了该空间 a.当函数被调用的时候,才申请了该内存空间 b.同时,这个空间内的数据被赋值成实际参数的值,函数调用把实际参数的值拷贝一份给形式参数 ②何时释放了该空间 函数执行结束后,该内存空间由内存管理单元自动回收(释放)
3.看懂一个函数,才懂得怎么使用函数:
- 参数怎么传:参数的类型,参数的个数
- 参数的返回值 :返回值的类型
- 功能:函数名来体现