1.函数定义及声明:
- 定义:函数是具有特定功能的代码段,某一段代码组合实现某个功能。 例如:main(主)函数
- 函数调用:通过名字调用函数
易于维护,可读性好 声明:
返回值类型 函数名(形式参数列表){
功能代码块;
return 返回值;// 无返回值时,返回值类型为void
}
返回值类型:int void char float…….
函数名:驼峰命名法 sayHi
形参:函数的材料
注意:不同的函数中可以使用相同的变量名一个函数只有一个返回值,如果返回值类型不为空,切记函数写return语句。
如果实际返回值类型和声明的类型不一样,将会强制转换成声明的类型。- 定义函数的四种类型:
无返回值,无参数 无返回值,有参数 有返回值,无参数 有返回值,有参数(参数指形参哦)
函数中,return后面的语句并不会被执行
2.函数调用:
调用函数时,无论有无参数都要记得写(),实际参数(实参)可以是:常量 变量 表达式
普通变量传递是拷贝的状态,不是直接传递。函数的三部分:声明,定义,调用
函数声明:指定函数的名字,返回值类型,参数
如果函数定义出现在主调函数之前,可以省略函数声明
如果函数定义出现在主调函数之后,必须要声明函数例题一:输入日期,判断一年中的第几天
方法有各种各样的,本人只是写了两种情况而已~~
方法一:(方法比较笨!!!)
int dayOfYear(int year, int month, int day){
int days = 0, mark = 0;
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
mark = 1; // 闰年 29天
else
mark = 0; // 平年 28天
switch (month) {
case 1:
days = day;
break;
case 2:
days = 31 + day;
break;
case 3:
days = day + 59;
break;
case 4:
days = 90 + day;
break;
case 5:
days = 120 + day;
break;
case 6:
days = 151 + day;
break;
case 7:
days = 181 + day;
break;
case 8:
days = 212 + day;
break;
case 9:
days = 243 + day;
break;
case 10:
days = 273 + day;
break;
case 11:
days = 304 + day;
break;
case 12:
days = 334 + day;
break;
default:
break;
}
if(mark == 1 && month > 2)
return days + 1;
else
return days;
}
方法二:(这个比较简单,易理解)
int days[12] = {31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31};
int sum = 0;
for (int i = 0; i < month-1; i ++) {
sum += days[i];
}
sum += day;
return sum;
}
例题2:求三个数中的中间数
同样提供两种方法:
方法一:
int midValue(int a, int b, int c){
int mid = 0;
if ((a >= b && a <= c) || (a >= c && a <= b)){
mid = a;
return mid;
}
else if((b >= c && b <= a) || (b >= a && b <= c)){
mid = b;
return mid;
}
else {
mid = c;
return mid;
}
}
方法二:
int midValue(int a, int b, int c){
int max = 0, min = 0;
max = a > b ? a : b;
max = max > c ? max : c;
min = a < b ? a : b;
min = min < c ? min : c;
return a + b + c - max - min;
}
导入自己定义的函数用:“”
导入系统的函数用:<>
.h文件:写声明函数
.m文件实现函数内容数组作为形参:
数组作为函数的参数时,函数一般情况下需要设置两个形参,一个存储数组名,一个存储数组元素个数
函数声明形式: 返回值类型 函数名(int a[], int count) // [ ]中不写东西
函数调用形式:数组名作为参数,传入的其实是数组的首地址
形参和实参操作的是同一个内存空间- 函数嵌套:
函数定义不可以嵌套,但是可以嵌套调用 - 函数递归:自己调用自己 但是递归函数一定要有出口。
变量的作用域
- 作用域(生命周期):变量的有效范围 (根据所定义的大括号的范围)
分为:全局变量和局部变量
局部变量:在函数体内部定义的变量
全局变量:在函数体外定义的变量 例:在main函数外部定义变量
for循环里面定义的变量,只限在for循环内部使用,
例(好好看看这个例子,要明白):
int i = 5;
int main() {
int i = 10;
printf("%d ", i);
return 0;
}
打印结果为:10
在其他的.m文件中在变量前写extern int ; 就可以使用在main外定义的全局变量,还可以进行修改,修改之后,全局变量的改变。如果不想让其他文件使用全局变量,则可以使用关键字static: static int i; 则这个i只能在main.m文件里面使用。