核桃哥 发表于 2013-4-25 22:24:49

核桃哥C语言笔记【让你六天学完郝斌视频】


-----------------------------------------------------------------
笔记作者:核桃哥(转载注明)
创建时间:2013-01-02
发布时间:2013年3月17日 15:25:04
郝斌C语言全集教程,核桃哥初学C源代码笔记   下载:
http://pan.baidu.com/share/home?uk=3741889442&view=share#category/type=0
关于初学者学C语言推荐:谭浩强C程序设计(第三版)、郝斌C语言视频教程。
初学笔记,还望各位同行多多指教。
希望大家能关注我的微博:新浪微博:http://weibo.com/u/2645354320
                                    腾讯微博:http://t.qq.com/zhanghe1994
                核桃哥最新歌曲试听地址:http://yc.5sing.com/1604687.html【为网络小说仙逆量身定做】
---------------------------------------------------------------

素数:能被1和本身整数,且不能被2到(本身)的数整除,称为素数。
回文数:正与逆排序数字一样的称为回文数。

基本数据类型数据:
         整型                      -- int            (4个字节)
         短整型               -- short int      (2个字节)
      长整型                  -- long int       (8个字节)
      逻辑型                  -- bool
      单精度浮点数       --float         (4个字节)
      双精度浮点数      --double      (8个字节)
      单字符                  -- char         (1个字节)   ‘A’或“A”单引号表示单字符;
      字符串                   -- char[]       字符串定义与数组基本相同,字符串用双引号括起来“AB”,每个字符以‘\0’隔开。

复合类型数据:
    结构体:结构体可相互赋值。
                                 struct ac      //ac名,定义了一个新数据类型。

                                    {
                                        int a;

                                        float b;

                                        char c;

                                    };

                定义并初始化:struct ac dl = {0, 0.1,'F'};   //将a、b、c 按顺序赋值。
                定义: struct ac dla;         dla.a = 0;      dla.b = 0.1 ;   dla.c = 'f';
                指针定义:struct ac * dlb = &dla;            dlb->a = 88;   // 等价于(*dlb).a 也等价于dla.a
                指针动态结构体定义:struct Students * p = (struct Students *)malloc(sizeof(struct Students));       p.a ;   p.a

    枚举:把事务一一列出来。
                              enum weekday      --->定义枚举名:weekday
                              {

                                    MonDay, TuesDay      // 从位数0开始,将事务一一列出来,判断时,只能输入枚举内容。
                              };

数组:数组成员称为元素。---int a={0}; ---> 对5名元素初始化为0。
             一维数组:1. int a = {1,2,3,4,5} 位数从0开始。
                                  2. &a = a = &a
                                  3.int i; printf ("%d",i)----> 输出的是i的地址,此规则可配合指针使用。
                                  4.a == *(a+i)   -------> 指针篇章。
   二维数组:int a------> 定义3行4列。该数组是含有3个元素的一维数组,只不过每个元素都可以再分成4个小元素
                           a a a a
                           a a a a
                           a a a a


三维数组:int a; -----> 该数组是含有3个元素的一维数组,只不过每个元素都是4行5列的二维数组。
多维数组:是不存在的,因为内存是线性一维;n维数组可以当做每个元素是n-1维数组的一维数组。

进制规范:
      八进制前面加0(即零)
      十六进制前面加0X或0x
      十进制前面什么都不加

输出表示---->printf()
         %d表示以整型十进制输出
         %ld表示以长整型十进制输出
         %x或%X或%#X或%#x表示以十六进制输出【推荐使用%#X】
         %o表示以八进制输出
         %f表示以单精度浮点数输出
         %lf表示以双精度浮点数输出
         %C表示以字符输出
         %S表示以字符串输出

输入表示---->scanf()
         1.非输入控制符必须原样输入加所需输入数据。 例如:scanf ("4%d",&i) 则输入410 ----10所需输入变量
         2.编写断续输入应做适当的处理,如下【非重点】
                  char ch;
                  while ((ch=getchar()) !='\n');   //while循环;getchar获取字符
                   continue;                        //continue继续;

运算符表示方式:
      算术运算符: +    -    *   /(除)    %(取余数)
      关系运算符: >    >=   <   <=    !=(不等于)   ==(等于)
      逻辑运算符: !(非)   &&(并且)||(或)true;(真)false;(假)
      赋值运算符:=   +=   /=   -=   *=   ++--//例+=:a+=3 等价于 a=a+3;++i 等价于 i=i+1;

      三目运算符: i = 0>2 ? 5 : 1;---> if (0>2) {i=5} else {i=1}
      位运算符: &    ---->3&5 = 1 按位运算并且   
                   |    ---->3|5 = 7 按位运算或
                   ~    ---->k=~i    按位取反+1

                   ^    ---->1^0   按位异或,相同为零,不同为1

                   <<   ---->i<<3    表示把i所有的二进制位左移3位,右边补零。十进制:左移N位相当于乘以2的N次方。

                   <<   ---->i<<3    表示把i所有的二进制位右移3位,左边一般补零。十进制:右移N位相当于除以2的N次方。


运算符注意事件:
      除法运算:两个数都是int,则商是int,被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型。
      取余运算:取余%运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同。//例如:-13%23==-13;-13%-23=-13
      &&运算符:左边的表达式为真,右边表达式肯定不会执行
      ||运算符:左边的表达式为真,右边表达式肯定不会执行

流程控制语句:
      if:英文含义“如果”,if默认只能控制一个语句,如果想控制多个语句,就必须把这些语句用{}括起来。
      else:英文含义“否则”,else默认只能控制一个语句,如果想控制多个语句,就必须把这些语句用{}括起来。
      else if:英文含义“否则-如果”,else if默认只能控制一个语句,如果想控制多个语句,就必须把这些语句用{}括起来。

      for(<初始化>; <条件表达式>; <增量>)------>for (int i = 0; i < 100; i++)
      while(条件表达式) ----->int i=1;--->while (i<100) {sum=sum+i; ++i;}
      do {语句} while (表达式);---->do...while...;先执行语句后判断,称为:判断循环尾。
      switch (需要跳到的标号) {case 标号: --执行语句--break;-->(跳出)   -----default: -->(默认) ---执行语句---> break;}
    break:在多层循环中,break只能终止距离它最近的循环;在多层switch嵌套中,break只能终止距离它最近的switch。
      continue; : 继续执行循环条件表达式。

函数:
    1.函数无返回值写法: void max()
    2.函数有返回值写法: int max(void) / void max(int i) {-----> return 0; }
    3.除了main函数外,其它函数名可随意取。
    4.函数返回值以函数类型为准。
    5.一个程序必须有且只能有一个主函数(main),也是程序的入口和出口。

    6.主函数可以调用普通函数,普通函数不能调用主函数;普通函数可相互调用。

    7.true 英文含义“真”;false 英文含义“假”。例如:return true --->返回真。

    8.所有函数必须写在main函数前面,除非先对函数申明。

    9.函数申明:void f();   //函数申明可不写形参,分号不能丢掉。


常用的系统函数:
    1. double sqrt(double x);   ------->求X的平方根,double数据类型

    2. int abs(int x)      ------>求x的绝对值。

    3. double fabs(double x)   ------> 求x的绝对值。
    4. strcpy(,)------> 将参数二字符串拷贝到参数一里。两个参数都是字符串类型

指针与指针变量:
概念:
    1. 指针:指针就是地址,地址就是指针,地址就是内存单元的编号。

    2. 指针变量:存放地址的变量称为指针变量。
    3. 指针与指针变量:变量的地址就是指针,存放指针的变量就是指针变量。
4. 指针变量不能相加,不能相乘,也不能相除。
5. 两个指针变量指向同一个A数组不同的A数组元素,可进行相减。

6. 不管什么类型,指针变量只占4个字节。

7. 多级指针执行结果:               
               int q;
               int * a; a = &q; *a = q;
               int ** b; b = &a; *b = a; **b = *a = q;
               int *** c; c = &b; *c = &a; **c = b; ***c = *a = q;


语法:
    1. 定义指针变量:变量类型 * 变量名-------->int * i

    2. 取普通变量地址: int * i   ----i = p    //是把p的地址放在i中
    3. 指针变量与普通变量相等: p = *i      //将i地址中的内容存放在p中。


动态内存:
malloc:int * p = (int *)malloc(4)
    1. 要使用malloc函数,必须添加malloc.h这个头文件
    2. malloc函数只有一个形参,并且形参是整型
    3. 4表示请求系统为本程序分配4个字节
    4. malloc函数只能返回第一个字节的地址
    5. 分配了8个字节, p变量占4个字节, p所指向的内存也占4个字节
    6. p本身所占的内存是静态分配的, p所指向的内存是动态分配的   

free():含义--->释放动态内存。freep(p)表示把p所指向的内存给释放掉。p本身的内存是静态的,不能由程序员手动释放。


补码:不够位数按数据类型进行补位----> 1个字节=8位。   假如int类型,4*8=32位
正整数的二进制:除2取余,直至商为零,余数倒叙排序。
负整数的二进制:先求该负数相对应正整数的二进制代码,然后将所有位取反,末尾加1,不够位数时,左边补1。
负整数二进制求十进制:如果首位是1,则表明是负整数。将所有位取反,末尾加+1,所得的数值就是该负数的绝对值。               
注意:若正整数超出所规定字节范围,则当作负数处理。
      例如: 128 ----> 1000 0000 ----> 当1个字节处理:正负结果一样,符号位为1,所以是-128。如果是两个字节,则不够位数补1,则结果不同。


二进制全部为零含义 --0000000000000000的含义
1. 数值零

    2. 字符串结束标记符‘\0’
    3. 空指针NULL:NULL本质也是零,而这个零不代表数字零,而表示的是内存单元的编号零。
    4. 计算机规定了,以零为编号的存储单元的内容不可读,不可写。


常见与用法问题:

1. if...else if... 同时成立,则只输出if。
2. if...语法正确;
3. float和double都不能保证可以精确的存储一个小数(也就是误差),所以循环更新的变量不能定义成浮点数。(例如:float i = 0 ; if(0 == i) i不可能精确到0.0000)
4. 所有判断语句返回值只有2个1或1,例如:if ( 3 % 2 == 1),余数不为0,则逻辑值为1
5. 自增与自减:前自增整体表达式的值加1之后的值;m = ++j---> 执行步骤: j = j + 1 ---> m = j;
                后自增整体表达式的值加1之前的值;k = i++---> 执行步骤: k = i ---> i = i + 1;
6. “,”逗号: i = (3,2,5,6);括号里面从左到右执行,最后i=6;如果去掉括号,则i=3      
7. 一维数组:a= {1,2,3,4,5} 是错误的,只有在定义数组的同时才可以整体赋值。
8. 在C语言中,所有数组成员位数都是从0开始的。
9. return; 返回函数值return 0;,且终止被调函数return;。
10. 全局变量与局部变量命名相同时,局部变量会屏蔽全局变量。
11. 科学计数法   ------> 3.2e3=3200=3.2*10^3   \\ e表示10,后面数为几次方,例如10的3次方。

12. 强制转换:(数据类型)(变量);
13. sizeof();用法:sizeo(数据类型或变量名);返回的是所占字节。





神释 发表于 2013-4-25 22:27:35

真是难得给力的帖子啊。

hlm 发表于 2013-4-25 22:31:28

支持核桃~~~

尐丶忆 发表于 2013-4-25 22:32:02

顶下1!!!1!!!!!!1!!!!!

luomengkang 发表于 2013-4-25 22:32:11

顶{:1_1:}加油加油加油加油

小丑Delta 发表于 2013-4-25 22:32:51

留名 帮顶强烈支持楼主ing……

Peng-Fei_Zeng 发表于 2013-4-25 22:35:11

楼主加油,鱼C加油!我们都看好你哦!

Jany 发表于 2013-4-25 23:10:40

很好的教程谢谢

网络学习 发表于 2013-4-26 00:01:09

核桃哥最新歌曲试听

a1c2c3 发表于 2013-4-26 07:29:06

绝对支持……

linwin108 发表于 2013-4-26 08:03:55

强烈支持楼主ing……LZ大爱无私,值得学习

沉ジ寞 发表于 2013-4-26 08:05:46

谢谢楼主分享

刘VS培 发表于 2013-4-26 08:08:28

真是难得给力的帖子啊。

℉ashion丶 发表于 2013-4-26 08:16:09

楼主加油,鱼C加油!我们都看好你哦!

随心飞扬 发表于 2013-4-26 08:20:43

真是难得给力的帖子啊。

qvbmnm520 发表于 2013-4-26 09:02:25

哇。。。谢谢楼主啊

友来友网 发表于 2013-4-26 09:09:40

歌曲不错,很好听

jonas82 发表于 2013-4-26 09:27:34

强烈支持楼主ing……

178031608 发表于 2013-4-26 10:46:09

等等等等等等等

liaharward 发表于 2013-4-26 11:17:54

激动人心,无法言表!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 核桃哥C语言笔记【让你六天学完郝斌视频】