TMDBug

Code Change The World And Make It Better!

TMD.Bug

C语言学习笔记(一)

C语言大总结

目录

0、个人笔记-题记

1、二进制
1.1 二进制相关解说
1.2 二进制、八进制、十六进制互相转换
1.3 原码、反码、补码
2、基本数据类型
2.1 基本数据类型
3、运算符、表达式
3.1 运算符
3.2 表达式
4、分支语句(条件语句)、循环语句
4.1 分支语句:if、switch
4.2 循环语句:while、dowhile、for
5、数组
5.1 数组相关解说
5.2 一维数组
5.3 二维数组
5.4 几种常见排序方法
6、函数
6.1 函数相关解说
6.2 有无返回值 及传值
6.3 递归函数
7、指针
7.1 指针交换两个数的值
7.2 指针常见问题
7.3 指针的指向
7.4 复杂数据类型的拼凑
8、字符串
8.1 字符串常用函数:比较、拼接、分割等
9、位运算
9.1 位运算的或、且、非
9.2 位运算相关举例
10、结构体、联合体、枚举
10.1 结构体、联合体相关解说
10.2 结构体、联合体相关举例
10.3 枚举相关
11、动态内存分配malloc
11.1 malloc相关解说
12、宏定义、预处理
12.1 宏定义
12.1 预处理
13、文件操作

13.1 文件操作解说及举例

——————————–华丽分割线——————————–

c-language

0.题记:

0.1. C语言难吗?
C语言不难,但是你就是用不明白。听明白,看明白不代表你懂了,你懂了不代表你会用了,你会用了不代表你能用明白,你能用明白不代表你真正懂了!(你能清楚的讲给别人听,而且别人都听明白了,说明你懂了)!
0.2. 怎样才能入门C语言?
一条不是捷径的捷径:把键盘的调试和运行快捷键按坏。
0.3. 除非特殊情况,不允许用printf这个函数。为啥?
永远记住一点:结果对,并不代表程序真正没有问题。所以我们尽量不要使用printf函数,要去看变量的值,内存的值。
0.4. 参考书
参考得比较多的书有:Kernighan & Ritchie 的《The C Programming Language》;Linden 的《Expert C Programming》; Andrew & Koening《C Traps and Pitfalls》; Steve Maguire 的《Write Clean Code》;Steve McConnell 的 《Code Complete. Second Edition》;林锐的《高质量 C++/C 编程指南》。学习 C 语言,这几本书如果真正啃透了,水平不会差到哪!!—————-【题记来源以一位C语言老师】
1、二进制

    1.1 二进制相关解说

①. 计算机的基本工作原理?
答:CPU支配硬件工作;内存是存放数据指令的,数据以二进制形式存放;硬盘存放下载软件。CPU从内存中取指令,CPU再取指令反馈给内存,硬盘装载软件存放数据到内存。

②.  如何理解计算机语言?
答:就是一交流工具。
a.机器语言:每一台计算机都有不同的语言;
b.汇编语言:1973年出现汇编语言被C语言重写了90%以上;
c.高级语言:19世纪50年代出现,通用性强,越来越接近自然语言和数学语言,1954年诞生第一门高级语言fortran语言。

③. 计算机识别的进制:二进制。

④. 计算机语言:一门与计算机打交道的语言。

⑤. 什么是语言?
答:使用高级语言编写的一系列指令,这些指令是计算机能执行的。程序本质是处理各种数据。

⑥. C语言的开发步骤:
高级语言—          机器语言—         可执行文件
(源文件.c)(目标文件.o)  ( 可执行文件.out)

     程序:使用高级语言编写的一系列指令,这些指令是计算机能执行的。

    1.2  进制转换

①说明
十进制:平常我们所用数字,均为10进制;
二进制:由0和1组成的数;
八进制:由0、1、2、3、4、5、6、7组成的数;
十进制:由0、1、2、3、4、5、6、7、8、9组成的数;
十六进制:由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F组成的数;

②转换
十进制转二进制:用除2法则;将所得的余数倒序写出 即是该数二进制;
十进制转八进制:用除8法则;倒序余数 – 即该数八进制数;
十进制转十六进制:用除16法则;(注意余数:如果是10就用A表示…….16就用F表示!);
二进制转十进制:从低位到高位,将每位的数 * (2的位数次方) 的和!(如:1011 = 1*2^0+1*2^1+0*2^2+1*2^3 =1+2+0+8=11 得到十进制下为11);

二进制转化成八进制:从后向前 三位一隔,前边不够用0补全,将每三位转换成八进制 拼接起来:(如:[二进制]1100100=[二进制]001 100 100)=[八进制]1 4 4。

二进制转换成十六进制:从后向前,四位一隔,最前边不够四位的用0补全,将每四位转换成十六进制, 拼接起来!(如:2进制 1000 1001 1010 1011 1100 1101 1110 1111 16进制 8 9 a(10) b(11) c(12) d(13) e(14) f(15) )

八进制转十进制:
1          2       5        1
8^3     8^2    8^1    8^0 (八进制转十进制  每位乘以8的相应幂数  最后将各个位的成绩相加)

十六进制转十进制:
5                    F            1
16^2        16^1     16^0

十六进制转八进制
方法有两种:
1、 由十六进制转为二进制     再由二进制转为八进制
2、 由十六进制转为十进制     再由十进制转为八进制

八进制转十六进制(同上:先让八进制转成十进制 或者二进制,再进行计算);

记住:数字是客观存在的,不管用哪进制表示,都是在表示那一个数字;

如何分辨一个数是多少进制?如10;
一般会这样表示:
十进制:10;二进制:0b10;八进制:010;十六进制:0x10;

内存中最小的单位是字节;八位表示1字节;
想要把数存到内存中,需要内存先开辟空间,如1字节,2字节等;
所以内存[1字节]中的二进制数是八位:
如 5:二进制:101   但在内存[1字节]中要写成0000 0101;最高位(符号位)代表正负数;0代表正数,1代表负数;比如-5,二进制则表示为-0b101;那么在内存中则为:10000 0101;

    1.3  原码、反码、补码

①正数的 原码 反码 补码

一个正数的原码,就是它的反码,同时也是它的补码;[不妨叫它 “三位一体”];(如:在1字节的内存中5,原码:0000 0101,反码:0000 0101,补码:0000 0101)!

②负数的 源码 反码 补码

一个负数(原码)的反码,是 符号位不变,其它的按位取反,补码就是反码加1;(如1字节内存中的 -5:原码:1000 0101,反码:1111 1010;补码:1111 1011;)
注意:内存中的数据都是以补码的方式存在;

2、基本数据类型

2.1  基本数据类型

short 短整型;
short a=5 表示在内存中开辟2字节空间存放a=5这个数;(2个字节十六位)
0000 0000 0000 0101

long长整型;
在64位的CPU下:
int                 4字节;
unsingnd int: 4字节;
short              2字节;
unsigned short 2字节;
long               8字节;
unsigned long  8字节;

打印:
long %ld,
short %d,
int %d;
    不看怎么存,只看怎么读;
想要打印进制数:
八进制数:用%o来打印;
十六进制数:用%x来打印;
%d是十进制;
无符号(unsigned)整型用%u来表示;

无符号:unsignd 表示没有负数,只有正数;
(在2进制数里最高位不表示正负了,如果是1,不表示负数,4字节空间下将会是一个很大的数:2的32次方;)
字符常量:char;
“A”:%d打印为65;(查看Ascll码表)->http://blog.csdn.net/fly12358/article/details/37317119
char并不是字符变量,仍是整型;占1个字节;也有unsigned char!
在c中,如果sizeof(“A”)会显示4字节;在c中字符是以int存在的;
ascll码表,最大数是127;
一个字符默认是int存在;
截断:当字符->char中的时候,高位存不下就会截断;
短整型->长整型的时候,就会发生位扩展!
实型(小数):float和double;
float:保证6-7位是准确的;4字节
double:15-16位是准确的;8字节;
long double:17-18位是准确的,16字节

3、运算符、表达式

3.1 运算符

①、关系运算符与逻辑运算符
(1)    >  <    >=    <=   ==     !=
3>2   C语言运算中表示真:非零数都是表示真, 假:0表示假
C语言打印真和假 使用的是:1表示真  0表示假

(2)  逻辑或(||)  逻辑与(&&)  逻辑非(!)——表达式的返回值(结果)为真或者假(1或者0)

逻辑或:||   一真即真。逻辑与:&& 一假即假。逻辑非:![优先级比较高],你真我假,你假我真,是非颠倒。

(3)逗号运算符:表达式用逗号链接起来;逗号运算符会从左向右运算;逗号运算符总表达式,是最后一个表达式的值;
问号冒号运算符:int s = a>b ? a:b;如果a真的大于b,那么就返回a,s=a;否则返回b,s= b;
②、运算符的优先级与结合性(左结合右结合)
!>算数运算符>关系运算符>逻辑运算符(&&和||)>赋值运算符
赋值运算符的结合性为右结合(从右向左运算)

②.①算数运算符优先级比较(从高到低);

1、()优先级排第一。[]有数组的时候,[]优先级高。
2、!逻辑非;
3、单目运算符;++   --
4、算数运算符;
/(除号)如果参加运算的数是整数,取整。
% (求余符号)取余运算必须是整数,除数不能为0,余数的符号与被除数相同;
5、移位运算符
6、关系运算符:>       <      ==
赋值是右结合;
7、位与位非
8、逻辑运算符的与和或 :&& 、||、
9、条件运算符
10、逗号运算符,赋值运算符高于逗号。

3.2 表达式

怎样看表达式:就是看表达式(对变量)做了什么?

自动类型转换
* 短字节向长字节看齐;
* 有符号向无符号看齐;
* 整型向浮点看齐;
* 单精度向双精度看齐;
整数默认是int类型;

4、分支语句(条件语句)、循环语句

4.1 分支语句(条件语句)

① if语句:选择语句
1、if语句定义的一般形式if(){}
2、if-else 语句定义的一般形式if(){}else{}
3、if-else if -else语句定义的一般形式if(){}else if(){}else{}
4、if – else 语句的嵌套使用
② switch语句
1、switch语句定义的一般形式 (可以放枚举变量。)
2、swich语句的说明:字符要用 ’ ’ 标。

在循环中,如果大括号里只有一条语句,那么就可以不加大括号;

4.2 循环语句

while(表达式){
语句;
}
//while可以看做是循环的if语句;
当表达式为真时,执行语句,再次判断表达式是否为真,如果为真,再次执行;再次判断,再次执行,反复如此;所以在制作表达式时,可以用++或–!或者判断哪个地方加 break;break是跳出循环;break只会跳出循环和switch;continue表示跳回到表达式计算;
最怪的循环:for循环;
break;跳出;
continue;在这里continue是跳过本次循环,进入下一次循环;这样的说法不严密,只是针对一种情况而言的;
for(语句1;表达式;语句3){
语句2;
}
语句1,判断表达式为真,执行语句2,然后执行语句3,判断表达式,执行语句2,执行语句3,判断表达式……
for循环 语句1不用的话,可以省略;如果语句3不用,也可省掉;如果把表达式省掉,它就恒为真,进入死循环;

do while 与while的区别
(1)do while 和while都是循环语句 都必须遵守循环三要素
(2)do while 先执行后判断 (第一次执行无论条件是否为真 都会执行一遍循环体)while 是先判断后执行(第一次执行是 如果条件为假 就一遍都不执行循环体)
(3)do while语句以分号作为结束表示  while不可以!

2015年8月11日 0 / /
标签: 

9 + 9 =

回到顶部