黑马程序员技术交流社区

标题: 北京0419期5.2上课笔记 [打印本页]

作者: 赵安庆    时间: 2016-5-3 21:51
标题: 北京0419期5.2上课笔记


#pragma mark 00 知识回顾

1.什么是函数?
大家学习编程的目的是什么?
是不是为了从事iOS开发对不对,做iOS开发的同时。
从事iOS开发就是做app。

有的是想成为高富帅,有的是想成为白富美

函数就是为了满足某一个功能,封装的一段代码!可以解决代码重用的问题,也可以解决分工的问题

#pragma - 01 局部变量和全局变的异同点 [掌握]
变量:内存中若干个字节,用来存储数据
1>局部变量:定义在函数内部的变量

2>全局变量:定义在所有函数外部的变量变量叫做全局变量

3>局部变量属于距离最近的{}
void test(){
    //局部变量
    int age = 0;
    age++;
    {
        int tepm = 10;
    }
    printf("age= %d\n",age);
}

4)初始值
局部变量:初始是垃圾值
全局变量:0

5>创建和回收的时间不同
局部变量:程序运行到局部变量那一行代码的时候才会创建,在作用域结束回收
全局变量:程序一启动就会创建,在程序运行结束回收

#pragma - 02 什么时候需要使用全局变量 [掌握]
void testing()
{
    int age = 33;
    printf("%d\n",age);
}
int main()
{
    for (int i = 0; i<3; i++) {
        testing();
    }
    return 0;
}
1.什么时候需要使用全局变量?
如果一个变量需要在整个程序范围内访问
会在多个函数或者同一个函数多次使用,同一个变量的时候!!!

#pragma - 03 函数的参数的介绍
什么情况下需要使用函数的参数
班长有一个买冰棍的功能,但是买冰棍需要钱?我们不能让班长去买冰棍还自掏腰包吧!
所以我们是不是应该给班长钱,班长才能去买冰棍!
这个时候就需要给班长钱!!

1.为什么视频中说scanf函数在ios开发中用不了?
iPhone 运行 OS X
iOS应用如何获取用户输入信息,UITextfield这个控件来获取.
scanf是从控制台用键盘输入,iOS操作系统不支持这个功能.没有控制台
如果iPhone弹出一个控制台,宝宝表示看不懂!!

2.函数的调用者是谁?
1>main函数
    main函数的调用者是操作系统.
2>其他函数
    1)main函数中调用其他函数,那么main函数是调用者
    2)main函数中调用函数A,函数A又调用函数B,函数B的调用者是A

#pragma - 04 参数可以实现的效果

传入的参数的方法既可以是常量也可以是变量
void test(int num){
    int num;
    printf("%d\n",num);
}
int main(){
    int num = 10;
    test(10);
    return 0;
}

#pragma - 05 练习水仙花的数量
判断一个数是不是水仙花数?
三位数,并且各位数的立方相加等于其本身

void isShuiXianHuaShu(int num){
    //1.判断是不是三位数
    if (num >= 100 && num <= 999) {
        int bai = num /100;
        int shi = num %100 / 10;
        int ge = num %10;
        if (bai*bai*bai + shi*shi*shi + ge*ge*ge == num) {
            printf("这是一个水仙花数");
        }else{
            printf("不是水仙花数");
        }
    }else{
        printf("不是水仙花数");
    }
}

延伸:找出所有的水仙花的数量
void getAllShuixianhua(){
    int temp = 0;
    for (int i = 100; i <= 999; i ++) {
        int bai = i /100;
        int shi = i %100 / 10;
        int ge = i %10;
        int num = bai*bai*bai + shi*shi*shi + ge*ge*ge;
        if ( num == i) {
            temp++;
            printf("这是一个水仙花数!%d\n",i);
        }
    }
    printf("所有的水仙花数量是--%d\n",temp);
}


#pragma mark - 06 什么时候函数需要带参数 [掌握]
"小结
如果你写一个函数的时候,不知道有没有参数,就暂时不要写
先写函数的主体功能部分,在写函数的实现部分的时候,发现需要数据,数据的来源是
不定的,但是数据的类型是确定的,这个时候我们就将这个数定义为函数的参数

#pragma mark - 07 课堂练习讲解 [掌握] --自己讲解






作者: 赵安庆    时间: 2016-5-3 21:52
我们来看一下一个小练习 -- 判断一个年份是不是闰年? '函数取名的时候最好是首字母小写,其余单词的字母大写   闰年的规则是 年份能被 400整除,或者 年份能被4整除,同时被100整除不为0  void isRunNian(){     if (年份 %400 || (年份%4 ==0 && 年份 %100 != 0)) {         printf("这是一个闰年");     }else{         printf("这不是一个闰年");     } }  #pragma mark - 08 带多个参数的函数 [掌握] 功能: 计算小明的期中考试成绩  void getXiaomingScore(int yuwen,int shuxue,int yingyu,int art){     int score = yuwen + shuxue + yingyu + art;     printf("小明的考试成绩是--%d",score); }  #pragma mark - 09 什么时候需要带多个参数 [掌握] 多个参数的函数的声明方式: 在小括弧中声明多个变量就可以了,每个声明用逗号分开。 然后我们在调用的函数代理多个参数,必须要为这个函数的每一个参数赋值!  #pragma mark - 10 练习讲解  求输入的三个数中的最大值 求三个数中最大值的其他实现  方法一: void getMax(int num1,int num2,int num3){     if (num1 >= num2 && num1 >= num3) {         printf("最大数是--%d",num1);     }else if(num2 >= num1 && num2 >= num3){         printf("最大数是--%d",num2);     }else{         printf("最大数是--%d",num3);     } }   求三个数中最大值的其他实现 //思路 //1.找到第一个数和第二个数中的比较大的 //2.拿1中结果和第三个数进行比较谁最大谁就是最大值.  方法二: void maxNum(int num1,int num2,int num3) {     int max = num1;     //找到num1和num2之间的最大数     if(num2 > max)     {         max = num2;     }     //拿num1和num2之间的最大数和num3比较谁大谁就是三个数中最大的     if(num3 > max)     {         max = num3;     } }  #pragma mark - 11 return关键字  将函数结束  讲解一个return后面的警告,代码永远执行不到 void test(){     printf("啦啦啦啦啦了");     printf("啦啦啦啦啦了");     return;     printf("啦啦啦啦啦了"); }  void test(){     for (int i = 0; i < 10; i++) {         if (i == 5) {             return;             //            break;         }         printf("现在循环到的数字是---%d\n",i);     }     printf("我的代码终于敲完了---\n"); }   #pragma mark - 12 带返回值的函数 下面两个函数有什么区别 void test(){     printf("----"); } int test1(){     return 0; }  printf 仅仅是c语言中的输出方法 oc中的输出方法不是这个!!! NSLog(@"");  "强调 1>为什么函数一些函数要有返回值? 函数是为了实现一个功能,最终功能完毕之后,调用者非常期待功能执行完毕之后的结果! 写代码需要烟。 我给你钱去买烟,你是不是得把烟买回来给我,我还等着烟去写代码!!  2>如何将数据返回给调用者?  3>调用者如何拿到函数的返回的数据?  函数: 函数是一段能实现特殊功能的代码块 比如: 一个函数实现判断一个数是不是偶数 ---> 功能是就判断,只要做到能判断就行了,不需要去打印  int isOuShu(int num) {     if(num%2==0)     {         return 1;     }     else     {         return 0;     } }  int main() {     int result = isOuShu(20);     if(result == 1)     {         printf("是偶数,应该....\n");     }     else{         printf("是奇数,应该....\n");     }     return 0; }   #pragma mark - 13 函数什么时候需要返回数据[掌握]  1>什么时候定义函数的时候需要返回值,看函数的调用者需不需要一个结果,如果需要一个结果,那么就需要函数有一个返回值。 int panDuanOuShu(int num){     // 0 是假 非0 为真     if (num % 2 != 0) {         printf("不是一个偶数");         return 1;     }     printf("是一个偶数");     return 0; //    return !(num %2); }  #pragma mark - 14 使用带返回值的函数注意细节[掌握] "函数在定义好返回值之后,必须会有返回值。否则报错 但是函数有返回值,可以不接收  "例子 定义一个函数计算两个double数据的和,并且返回,调用这个函数 double addNum1andNum2(double num1,double num2) {     return  num1+num2; }  int main() {     double result = addNum1andNum2(1.1,2.2);     printf("%lf\n",result); }   报错的信息:定义了函数的返回值类型,但是却没有返回 control reaches end of non-void function  函数在定义好返回值之后,必须会有返回值。否则报错 下面的代码就会报错!!! int test(int num){     if (num % 2 == 0) {         printf("是一个偶数");     }else if(num % 2 == 1){         printf("是一个奇数");     } }  #pragma mark - 15 函数的声明和定义 [掌握] 我们来想一想为什么? 因为编译器在编译代码的时候,是从上到下从左到右编译的,如果函数的定义放在调用的下面,编译时候遇到 调用的语句,就不知道有这个函数存在  main函数最好都写在第一位 声明和实现应该分开 声明和实现需要分开
作者: 赵安庆    时间: 2016-5-3 21:53
我们来看一下一个小练习 --
判断一个年份是不是闰年?
'函数取名的时候最好是首字母小写,其余单词的字母大写


闰年的规则是
年份能被 400整除,或者
年份能被4整除,同时被100整除不为0

void isRunNian(){
    if (年份 %400 || (年份%4 ==0 && 年份 %100 != 0)) {
        printf("这是一个闰年");
    }else{
        printf("这不是一个闰年");
    }
}

#pragma mark - 08 带多个参数的函数 [掌握]
功能:
计算小明的期中考试成绩

void getXiaomingScore(int yuwen,int shuxue,int yingyu,int art){
    int score = yuwen + shuxue + yingyu + art;
    printf("小明的考试成绩是--%d",score);
}

#pragma mark - 09 什么时候需要带多个参数 [掌握]
多个参数的函数的声明方式:
在小括弧中声明多个变量就可以了,每个声明用逗号分开。
然后我们在调用的函数代理多个参数,必须要为这个函数的每一个参数赋值!

#pragma mark - 10 练习讲解
求输入的三个数中的最大值
求三个数中最大值的其他实现

方法一:
void getMax(int num1,int num2,int num3){
    if (num1 >= num2 && num1 >= num3) {
        printf("最大数是--%d",num1);
    }else if(num2 >= num1 && num2 >= num3){
        printf("最大数是--%d",num2);
    }else{
        printf("最大数是--%d",num3);
    }
}


求三个数中最大值的其他实现
//思路
//1.找到第一个数和第二个数中的比较大的
//2.拿1中结果和第三个数进行比较谁最大谁就是最大值.

方法二:
void maxNum(int num1,int num2,int num3)
{
    int max = num1;
    //找到num1和num2之间的最大数
    if(num2 > max)
    {
        max = num2;
    }
    //拿num1和num2之间的最大数和num3比较谁大谁就是三个数中最大的
    if(num3 > max)
    {
        max = num3;
    }
}

#pragma mark - 11 return关键字

将函数结束

讲解一个return后面的警告,代码永远执行不到
void test(){
    printf("啦啦啦啦啦了");
    printf("啦啦啦啦啦了");
    return;
    printf("啦啦啦啦啦了");
}

void test(){
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            return;
            //            break;
        }
        printf("现在循环到的数字是---%d\n",i);
    }
    printf("我的代码终于敲完了---\n");
}


#pragma mark - 12 带返回值的函数
下面两个函数有什么区别
void test(){
    printf("----");
}
int test1(){
    return 0;
}

printf 仅仅是c语言中的输出方法
oc中的输出方法不是这个!!!
NSLog(@"");

"强调
1>为什么函数一些函数要有返回值?
函数是为了实现一个功能,最终功能完毕之后,调用者非常期待功能执行完毕之后的结果!
写代码需要烟。
我给你钱去买烟,你是不是得把烟买回来给我,我还等着烟去写代码!!

2>如何将数据返回给调用者?

3>调用者如何拿到函数的返回的数据?

函数: 函数是一段能实现特殊功能的代码块
比如: 一个函数实现判断一个数是不是偶数 ---> 功能是就判断,只要做到能判断就行了,不需要去打印

int isOuShu(int num)
{
    if(num%2==0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    int result = isOuShu(20);
    if(result == 1)
    {
        printf("是偶数,应该....\n");
    }
    else{
        printf("是奇数,应该....\n");
    }
    return 0;
}


#pragma mark - 13 函数什么时候需要返回数据[掌握]

1>什么时候定义函数的时候需要返回值,看函数的调用者需不需要一个结果,如果需要一个结果,那么就需要函数有一个返回值。
int panDuanOuShu(int num){
    // 0 是假 非0 为真
    if (num % 2 != 0) {
        printf("不是一个偶数");
        return 1;
    }
    printf("是一个偶数");
    return 0;
//    return !(num %2);
}

#pragma mark - 14 使用带返回值的函数注意细节[掌握]
"函数在定义好返回值之后,必须会有返回值。否则报错
但是函数有返回值,可以不接收

"例子
定义一个函数计算两个double数据的和,并且返回,调用这个函数
double addNum1andNum2(double num1,double num2)
{
    return  num1+num2;
}

int main()
{
    double result = addNum1andNum2(1.1,2.2);
    printf("%lf\n",result);
}


报错的信息:定义了函数的返回值类型,但是却没有返回
control reaches end of non-void function

函数在定义好返回值之后,必须会有返回值。否则报错
下面的代码就会报错!!!
int test(int num){
    if (num % 2 == 0) {
        printf("是一个偶数");
    }else if(num % 2 == 1){
        printf("是一个奇数");
    }
}

#pragma mark - 15 函数的声明和定义 [掌握]
我们来想一想为什么?
因为编译器在编译代码的时候,是从上到下从左到右编译的,如果函数的定义放在调用的下面,编译时候遇到
调用的语句,就不知道有这个函数存在

main函数最好都写在第一位
声明和实现应该分开
声明和实现需要分开
作者: 赵安庆    时间: 2016-5-5 22:46
55555556666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2