黑马程序员——黑苹果的日记(3)——函数和进制

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------




一函数


1概述:函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能

分类:库函数和用户定义函数

库函数:printf、scanf、getchar、putchar、gets、puts、strcat等

用户定义函数:由用户按需要写的函数。


2用户定义的函数

2.1其分为有返回值和无返回值的函数

有返回值函数:  此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。

无返回值函数: 此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。

2.2无参函数和有参函数

无参函数 :  函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。

有参函数: 也称为带参函数。


2.3自定义函数的书写格式

函数的基本格式:

返回值类型 函数名称(函数参数){函数体}

2.3.1无参无返回值一般形式如下:

void 函数名(){

    声明部分
}

2.3.2无参有返回值函数定义一般形式如下:

返回值类型 函数名(){ 声明部分
    语句
return 返回值类型变量或常量;
//返回给主调函数

}

其中返回值类型和函数名称为函数头.

2.3.3有参无返回值函数定义
一般形式如下:
void 函数名(形式参数表列){ 声明部分
    语句 }


2,.3.4有参有返回值函数定义

一般形式如下:


返回值类型 函数名(形式参数表列){ 声明部分
    语句
return 返回值类型变量或常量;
}

3形参和实参

定义函数的时候,函数名后面小括号中的参数,简称形参

调用函数的时候,函数名后面小括号,简称实参


(1)在进行函数调用时,主调函数将赋予这些形
式参数实际的值。形参既然是变量,必须在形参表中给出形参的类型说明。

(2)主调函数把实参的值传送给被调函数的形参从而实现主 调函数向被调函数的数据传送。
形参变量只有在被调用时才分配内存单元,进行函数调用时,它 们都必须具有确定的值
形参和实参类型不一致时,会自动转化为形参的类型。

4函数返回值

定义:函数的值(或称函数返回值)是指函数被调用之后,执行函数体中的程序段所取得的并返 回给主调函数的值。

return语句的一般形式为:
return 表达式;
或者为:

return (表达式);

注意返回值类型和定义类型的一致



5函数的声明
(1)函数在main之前可以不用声明
(2)函数返回值是整型可以不用声明

6两种调用必须有返回值

1) 函数表达式
函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数 是有返回值的
2)  函数实参
这种情况是把该函数的返回值作为实参进行传送,因 此要求该函数必须是有返回值的。


注意)函数名不能和变量名同名函数的嵌套调用。C语言中不允许作嵌套的函数定义。


递归函数概述及构成条件

递归函数:一个函数在它的函数体内调用它自身称为递归调用。

面试题:有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。问 第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个 人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人, 他说是10岁。请问第5个人多大?

#include <stdio.h>


int getAge(int n){
    int age ;
    if(n==1){ age = 10;
    }else{
        age = getAge(n-1)+2;
    }
    return age;
}


int main(int argc, const char * argv[]) {
    
    printf("%d",getAge(5));
    return 0;
}

以上的题目用数组依然可以解决


二xcode的运行原理


打开终端:
应用程序---->实用工具---->终端

查看目录下得文件: ls
切换目录:  cd
查看用户  who
查看当前目录   pwd
清屏:   clear
创建文件的方法 touch
查看文件的方法  cat more
打开文件  open
删除文件 rm
创建文件夹 mkdir

执行流程: 注意:要进行手工编译的时候,打开终端后,要cd到当前.c文件所在的目录
编译:cc -c 文件名.c
链接:cc 文件名.o
执行:./a.out

三include文件包含

1文件包含是C预处理程序的另一个重要功能。
include 不一定非要写在第一行

预处理的指令,所有的预处理指令都是以"#"开头

2 include作用: 把要包含的文件的内容拷贝到当前使用include的地方
include可以出现在函数的内容,也可以出现在文件开头

3.1    #include " "    搜索顺序:当前--->编译器中找--->系统的include找--报错

3.2     #include <>    搜索顺序:先到编译器器---->系统的include--->报错


四C语言模块化编程概念

概念:多文件(.c文件)编程,一个 .c 文件和一个 .h 文 件可以被称为一个模块
              类似于oc的类的声明和实现

五计算机中的进制
5.1位数的转换
       10 -> 2 : 除2取余法,把10进制数除以2,然后取得余数的序列,再倒序


         2 -> 10 : 所有位的位权相加 101 = 1*2^0+0*2^1+1*2^2

会进行不同位之间的运算

        2 --> 16 : 4合1法, 整数部分从右向左 4位结合成一位,小数部分从左向右4位结合1位, 不足部分补0
         16 -->2: 1拆4法, 16进制的1位拆成二进制的4位

5.2机器数和真值
一个数在计算机中的二进制表示形式, 叫做这个数的机器数

将带符号位的机器数对应的真正数值称为机器数的真值。

5.3原码、反码、补码的基本概念.
1)原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
2)反码
反码的表示方法是:正数的反码是其本身
3)补码
补码的表示方法是:正数的补码就是其本身

      思考:以整型-13为例,计算分别写出-13的原码、反码、补码

5.4位运算符

位运算是指按二进制进行的运算

1)& 按位与 只有对应的两个二进位均为1时,结果位才为1,否则为0

1001 &1101
------ 1001

2) | 按位或 只要对应的二个二进位有一个为1时,结果位就为1,否则为0
1001 & 1101
---------------------
1101

3) ^ 按位异或 当对应的二进位相异(不相同)时,结果为1,否则为0
1001 ^ 1101
----------------------
0100
口诀: 同1为1

4)~ 取反 各二进位进行取反(0变1,1变0)


原码:0000 0000 0000 1000 0000 0001 反码:1111 1111 1111 0111 1111 1110

知道补码求原码:也是符号位不变,其他各位取反+1

1、<< 左移 1、各二进位全部左移n位,高位丢弃,低位补0

2<<2 == 2*2

2、>> 右移 各二进位全部右移n位,保持符号位不变

3、位运算技巧: 1)任何数和1进行&操作,得到这个数的最低位
1001 & 0001
------------
0001

写一个函数把一个10进制数按照二进制格式输出

void b1(int num){
    //0000 0000 0000 0000 0000 0000 0000 1101 //0000 0000 0000 0000 0000 0000 0000 0001
 int len = sizeof(int)*8;
    int temp;
    for (int i=0; i<len; i++) {
        temp = num; //每次都在原数的基础上进行移位运算
        temp = temp>>(31-i); //每次移动的位数
        int t = temp&1; //取出最后一位
        if(i!=0&&i%4==0)printf(" "); printf("%d",t);
    }
    
}
printf("\n");
}

六变量在内存中存储的细节

内存分配给变量的存储空间是从高到低。一个变量低位低地址 高位存放高地址。

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值