函数
具有特定功能的代码段叫做函数;简单地说函数就是一连串的语句组合在一起,实现某种功能,就取名代替这些语句。
-----------------------------------------------------------------
特点:
1、都实现了某一种功能
2、函数的使用可以省去重复的代码编写,大大简化程序,提高开发效率
---------------------------------------
从定义来看,函数可分为:
1、库函数,系统提供好的函数,只需要使用时调用,不用关心函数的内部实现。
2、自定义函数 程序员自己定义的函数。
---------------------------------------
定义:返回值类型
函数名(形式参数列表)
{语句;//代码片段
return返回值;}
例:
自定义数的和
//编写函数int sumValue(int n):计算1到n的和。
int sumValue(int n){
int sum =
0;
for (int i =
1; i <= n; i++) {
sum = sum + i;
}
return sum ;
}
返回值类型:void、int、char、float...
返回值类型可以使基本数据类型,也可以是void空类型。
特别注意:
1当函数的返回值类型是void的时候,函数体内不需要return返回值;
2
当函数返回值不是void的时候,体内需要return返回值,并且要与返回值类型要与函数定义时的返回值类型保持一致。
3程序遇到return,就会跳出函数,不再往下执行,所以不要在return后写任何代码。
4return的返回值可以使常量,也可以是变量,但类型一定要和函数返回值一致。
--------------------------------------
概念:需要参与函数执行的一个变量 形式参数的定义没有个数限制,可以随便定义
定义:基本数据类型 参数名
多个形式参数之间用逗号隔开; 形式参数和函数返回值类型没有关系
函数返回值的类型与return中返回值类型一致;
-----------------------------------------
函数分类 1、根据返回值和参数可以将函数划分为4种
有参数,有返回值 无参数,无返回值 有参数,无返回值 无参数,有返回值。
分类如下各例:
//无参数,无返回值
void introduce(void){
printf("大家好!我来自火星,我叫*****\n");
}
//有参数
无返回值
void num(int i)
//形式参数
{
printf("%d\n",i);
}
//有参数,有返回值
int number(int age,float b ){
printf("今年%d岁了\n",age);
return age;
}
//无参数,有返回值
long lo(void){
return
321546887945;
}
形参,实参 形参,出现在函数定义中,以变量的名字来表示实际函数调用过程中需要提供的值
实参出现在函数调用过程中的
注意:函数调用中,形参会拷贝实参的内容。传递参数是给函数传递信息的方式
----------------------------------------------------------------------------
关于函数的返回值
1、函数返回的值被称为函数的值,并且只能通过return语句返回主调函数。
2、一个函数只能有一个返回值。
3、函数即使没有返回值,也可以使用return来结束函数的执行。
4、return后边的语句不会被执行
------------------------------------------------------------------------------
严格上的函数包括三个部分:函数声明、函数定义、函数调用
函数声明就是对函数的描述(实际就是给函数取个名字,后边加分号),没有具体的实现,后边加分号结尾。
注意的两点
1、函数定义出现在主调函数之前,函数声明可以省略。
2、函数定义出现在主调函数之后,需要提前说明函数。
函数嵌套 函数的嵌套
C语言中不允许嵌套定义,但可以嵌套调用
C语言中允许函数再次调用函数本身,这种调用方式成为递归调用,这个函数就叫做递归函数
警告:递归调用一定要有出口!!!!!!!!
如下例
//用递归求n!
// n! = n * (n - 1)!
// n=1 //递归调用的出口;
int fun(int n);
int fun(int n)
{
if (n ==
1) {
return
1; //跳出递归的条件
}
return n * fun(n -
1); //递归调用的公式
}
变量的作用域
变量的有效范围:
全局变量
局部变量
定义在函数体外的变量为全局变量
定义在函数体内的变量为局部变量
全局变量和局部变量可以重名,但是在局部变量作用域内,只能访问局部变量。
结构体
结构体:是一种自定义的数据类型。
结构体声明;
struct结构体名
{
类型说明符
成员名;
.... //可以定义多个结构体成员
类型说明符
成员名;
};
格式如下:
struct student1
{
int number;
//学号
char name[20];
//姓名
char sex;
//性别
float score;
//成绩
……
};
结构体变量
定义:有结构体修饰的变量叫做结构体变量
struct结构体名
变量名 = {初值};
结构体成员的访问
结构体变量名.成员变量名
typedef
为现有的类型创建一个类型别名
语法:typedef
原类型名 新类型名
typedef
struct student{
char name[20];
float score;
int age;
} Student;
结构体数组
将多个结构体变量放到数组中,构成结构体变量
typedef
struct student{
int num;
char name[20];
float score;
}Student;
Student stu[5] = {{1,
"red", 92.5},{2,
"green", 92},{3,
"bluk", 89},{4,
"black", 96},{5 ,
"yellow", 90}};