函数(Day-5)

1.函数定义及声明:

  1. 定义:函数是具有特定功能的代码段,某一段代码组合实现某个功能。 例如:main(主)函数
  2. 函数调用:通过名字调用函数
    易于维护,可读性好
  3. 声明:
    返回值类型 函数名(形式参数列表){
    功能代码块;
    return 返回值;// 无返回值时,返回值类型为void
    }
    返回值类型:int void char float…….
    函数名:驼峰命名法 sayHi
    形参:函数的材料
    注意:不同的函数中可以使用相同的变量名

    一个函数只有一个返回值,如果返回值类型不为空,切记函数写return语句。
    如果实际返回值类型和声明的类型不一样,将会强制转换成声明的类型。

  4. 定义函数的四种类型:
    无返回值,无参数 无返回值,有参数 有返回值,无参数 有返回值,有参数(参数指形参哦)
    函数中,return后面的语句并不会被执行

2.函数调用:

  1. 调用函数时,无论有无参数都要记得写(),实际参数(实参)可以是:常量 变量 表达式
    普通变量传递是拷贝的状态,不是直接传递。

  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;
}
  1. 导入自己定义的函数用:“”
    导入系统的函数用:<>
    .h文件:写声明函数
    .m文件实现函数内容

  2. 数组作为形参:
    数组作为函数的参数时,函数一般情况下需要设置两个形参,一个存储数组名,一个存储数组元素个数
    函数声明形式: 返回值类型 函数名(int a[], int count) // [ ]中不写东西
    函数调用形式:数组名作为参数,传入的其实是数组的首地址
    形参和实参操作的是同一个内存空间

  3. 函数嵌套:
    函数定义不可以嵌套,但是可以嵌套调用
  4. 函数递归:自己调用自己 但是递归函数一定要有出口。

变量的作用域

  1. 作用域(生命周期):变量的有效范围 (根据所定义的大括号的范围)
    分为:全局变量和局部变量
    局部变量:在函数体内部定义的变量
    全局变量:在函数体外定义的变量 例:在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文件里面使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值