//第八天开始,函数(很重要)
// 函数是具有特定功能的代码段(简单地说,函数就是一连串的语句组合在一起,实现了某一功能,我们为他起了一个名字。以后就用这个名字代替这些语句)
//特点:都实现了某一功能。优点:可以省去重复的代码,大大简化程序,提高开发效率
函数分类,从定义上来看,可以分为(1)库函数(系统提供的函数,咱们只需要调用,不用关心函数内部实现),(2)自定义函数(程序员自己定义的函数)
//如何定义自己的函数:函数的定义:
/* 返回值类型函数名(形式参数列表){
语句(即代码片段)
return返回值
}
返回值类型可以是基本数据类型(int,char, long, short, float, double,),也可以是void(空)类型 */
/*特别注意,当函数的返回值类型是void的时候,函数体内不需要return返回值
当函数的返回值类型不是void的时候,函数体内需要return返回值,并且返回值的类型要和函数定义时的返回值类型保持一致!!!!!!!
程序遇到return就会跳出函数不再继续往下执行,所以不要在return下边写任何代码*/
//形式参数列表
//形式参数的定义:基本数据类型参数名字
// 各个形式参数之间,用","隔开
// 形式参数的定义没有个数限制,可以随便定义
// 形式参数类型和函数返回值类型无关
// 函数返回值类型值和return的返回值的类型有奸情必须保持一致
// return的返回值可以是常量也可以是变量,但是类型一定要和函数返回值类型一致
// 函数分类
/*
根据返回值和参数可以把函数分为四种
1,有返回值有参数的函数
2,有返回值无参数的函数
3,无返回值有参数的函数
4,无返回值无参数的函数
函数声明:严格的函数通常包含三部分:函数声明,函数定义,函数调用;
函数声明:就是对函数的描述(实际就是给函数起个名字),没有具体的实现,后边加分号结束
函数定义在主调函数之前,可以省略函数声明
函数定义在主调函数之后,需要提前声明函数
规范上来说,不要省略
*/
形参,实参
// 形参:出现在函数定义中,以变量的名字来表示实际函数调用过程中需要提供的值
// 实参:出现在函数调用过程中的表达式
// 函数调用中,形参会拷贝实参的内容,传递参数是给函数传递信息的一种形式
//
// 关于函数的返回值
// 函数的返回值被称为函数的值(可以用等号赋值给相同的变量),并且只能通过return返回给主调函数。
// 一个函数只能有一个返回值
// 函数即使没有返回值也可以使用return来结束函数的执行,回到主调函数
// return后边的语句不会被执行
//
//
// c语言不允许函数嵌套定义,但可以嵌套使用
// 递归函数:C语言允许函数实现 体内再次调用 函数本身,这种方式被称为递归调用,这个函数被称为递归函数(阶乘就可以使用递归调用)
// 注意:递归一定要有出口;
// 函数的作用域:即变量的有效范围(全局变量,局部变量),外部变量和局部变量可以同名,,但是在局部变量作用域内只能访问局部变
//1、编写函数int sumValue(int n):计算1到n的和。
int sumValue(int n){
int sum=0;
for (int i=0; i<=n; i++) {
sum+=i;
}
return sum;
}
printf("%d\n",sumValue(100));
函数声明: int fun(int a, int b); 函数定义: int fun(int a,int b) { // 语句 return c; }函数定义要在mian前
函数定义举例:
// 无返回值无参数: void l(){}
// 无返回值有参数: void kk(int m){}
// 有返回值无参数
int kkk(){
return 0;}
// 有返回值有参数
int kkkk(int k,char n){
// printf("%d,%c\n");
return 0;
}
int c(){
for (int i=0; i<100; i++) {
printf("%d ",i);
}
return 0;
}
char d(int a,char b){
printf("\n求知若饥,虚心若愚\n");
return b;
}
char fun(char k,char l){
//语句
return 'c';
}
float lk(char v,int m){
return 1.33;
}
double llll(int k,char n){
return 3.021123325;
}