#include<stdio.h>
void max(int i,int j) //max是函数的名字,i和j是形式参数(形参),void表示函数没有返回值
{
if(i>j)
printf("%d\n",i);
else
printf("%d\n",j) ;
}
int main() //系统先执行main函数
{
int a,b,c,d,e,f;
a=1,b=2,c=3,d=9,e=-5,f=100;
max{a,b};
max{c,d};
max{e,f};
return 0;
}
为什么需要函数
避免了重复性操作
有利于程序的模块化
什么叫做函数
逻辑上:能够完成特定功能的独立的代码块
物理上:能够接收数据 能够对接受的数据进行处理 能够将数据处理的结果返回
总结:函数是个工具,他是为了解决大量类似问题而设计的
函数可以当作一个黑匣子,
#include<stdio.h>
int f(void) //括号中的void表示该函数不能接受数据 int表示函数返回值是int类型的数据
{
return 10; //向主调函数返回10
}
int main()
{
int j=88;
j=f();
printf("%d\n",j);
return 0;
}
如何定义函数
函数的返回值 函数的名字(函数的形参列表)
{
函数的执行体
}
函数定义的本质是:详细描述函数之所以能够实现某个特定功能的具体方法
return表达式;的含义:
函数返回值的类型也称为函数的类型,因为如果函数名前面返回值的类型和函数执行体中的return表达式的类型不一致,则最终返回值的类型是以函数名前的类型为准。
终止被调函数,向主调函数返回表达式的值
如果表达式为空,则只终止函数,不向主调函数返回任何值
例子:
void f()
{
return 0; //终止函数 ,不向主调返回任何值
}
int f()
{
return 10; //终止函数并且向主调函数返回了一个值10
}
#include<stdio.h>
int f()
{
return 10.5; //因为函数的返回值类型是int,所以最终f返回的是10,而不是10.5
}
int main(void)
{
int i=99;
double x=6.6;
x=f();
printf("%lf\n",x);
return 0;
}
break是用来终止循环和switch的,return是用来终止函数的
#include<stdio.h>
void f(void)
{
int i;
for(i=0;i<5;++i)
{
printf("大家辛苦了!\n"); //输出一次
return; //不是用来终止循环的,是用来终止函数的
}
printf("同志们好!\n"); //不会输出
}
int main()
{
f();
return 0;
}
函数的分类
有参函数和无参函数
有返回值和无返回值函数
库函数和用户自定函数
库函数:c语言本身提供的一些函数
普通函数和主函数(main函数)
一个程序必须有且只能有一个主函数
主函数可以调用普通函数 普通函数不能调用主函数
普通函数可以相互调用
主函数是程序的入口,也是程序的出口
#include<stdio.h>
void max1(int i,int j)
{
if (i>j)
printf("%d\n",i);
else
printf("%d\n",j);
}
int max2(int i,int j)
{
if(i>j)
return i;
else
return j;
}
int main()
{
int a,b,c,d,e,f;
a=1,b=2;
c=3,d=9,e=-5,f=100;
printf("%d\n",max2(a,b));
return 0;
}
注意的问题
常用的系统函数
变量的作用域和存储方式:
按作用域分:
全局变量:在所有函数外部定义的变量叫全局变量
全局变量使用范围:从定义位置开始到整个程序结束
局部变量:在一个函数内部定义的变量或者函数的形参 都统称为局部变量
void f(int i)
{
int j=20; 其中i和j都属于局部变量
}
局部变量使用范围:只能在本函数内部使用
全局变量和局部变量命名冲突的问题:
在一个函数内部如果定义的局部变量的名字和全局变量名一样时,局部变量会屏蔽掉全局变量
int i=99;
void f(int i)
{
printf("i=%d\n",i)
}
int main() //最终输出结果时8
{
f(8);
return 0;
}