核桃哥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(数据类型或变量名);返回的是所占字节。
真是难得给力的帖子啊。 支持核桃~~~ 顶下1!!!1!!!!!!1!!!!! 顶{:1_1:}加油加油加油加油 留名 帮顶强烈支持楼主ing…… 楼主加油,鱼C加油!我们都看好你哦! 很好的教程谢谢 核桃哥最新歌曲试听 绝对支持…… 强烈支持楼主ing……LZ大爱无私,值得学习 谢谢楼主分享 真是难得给力的帖子啊。 楼主加油,鱼C加油!我们都看好你哦! 真是难得给力的帖子啊。 哇。。。谢谢楼主啊
歌曲不错,很好听
强烈支持楼主ing…… 等等等等等等等 激动人心,无法言表!