最近工作上比较忙,看书也少了,而且感觉编程语言么,共通的地方比较多,C语言应该是比较重视格式,调用之前需要先声明之类的,主要就是记录格式上的东西。
前两章是基础,算是基本的介绍概念性的东西,接下来应该就是开始C的东西了。
要完成一个程序需要掌握几点,一个是解决思路,即算法,面向对象跟面向过程稍微有些区别,不过区别不大。第二个是对应语言的语法,其实计算机语言的大部分语法都相同,特别是循环的那部分,区别在于API、在于其相应的格式,所以基本都是相同的,能够非常深刻的掌握一门语言,再学习其他语言的时候就会变得非常的快,效率很高。如同现在的C语言。
1. 顺序程序设计举例
a) 书中举了一个华氏度转换成摄氏度的例子,有了公式其实很简单,无非就是带入公式来计算,没什么可说的。
b) 第二个例子,计算三种不同的方法的存款本息和,也有公式的,非常简单。
c) 个人体会:这里的公式,我感觉就是算法,不过这些的公式算是前人总结出来的算法了,省去了我们很多的时间。其实每个程序都是很多的小块功能组成的,每个小块功能,又分了很多的实现,每种实现都有自己的实现方法,即算法,这些可能是已有的,比如数学公式;也有没有的,需要自己去想。学习算法,无非就是学习现有的比较经典与常用的算法,再一个就是通过学习已有的算法,学会设计新算法的思路。
2. 数据的表现形式及其运算
a) 常量和变量,在计算机高级语言中,数据就这两种表现形式。
i. 常量包括几种,整型常量;实型常量(带小数的);字符常量(普通字符、转义字符);字符串常量;符号常量
ii. 转义字符,都是用\后边跟一个符号或字母,转义即为将\后边的字符转换成另外的意思,算是一种特殊的符号,有两种情况
1. 后边跟的符号在该语言中有特殊的含义,想要输出此字符的时候就需要前边跟个\,比如 \’, \”, \?,\\等
2. 还有一种情况就是后边跟字母的,表示特殊的意思,比如
a) \a表示警告(alert),产生声音或视觉信号,来警告
b) \b表示退格,backspace,将当前位置后退一个字符;
c) \f表示换页,formfeed,将当前位置移到下一页的开头;
d) \n表示换行,将当前位置移到下一行的开头,这个用的最多了;
e) \r表示回车,carriagereturn,将当前位置移到本行的开头;
f) \t表示水平制表符,将当前位置移到下一个TAB位置;
g) \v表示垂直制表符,将当前位置移到下一个垂直制表对起点
h) \o、\oo、\ooo,其中的o代表一个八进制的数字,表示与该八进制码对应的字符,ASCII字符;
i) \xh[h…],这里的h表示一个十六进制的数字,同上,这个表示与该十六进制码对应的字符,ASCII字符;
iii. 符号常量:使用#define指令,制定一个符号名称代表一个常量。
1. 例如:#define PI 3.1416,此后所有的PI都表示3.1416了,
2. 好处就是,含义比较清楚,因为定义符号常量名的时候就应该考虑见名知意;再一个就是可以做到一改全改。
iv. 变量表示一个有名字的,具有特定属性的存储单元。须先定义后使用。
v. 常变量,就是规定了之后不可改变,同JAVA的final,不过C里边是用const表示的。
vi. 常变量跟符号常量的区别:符号常量是#define来定义的,属于预编译指令,只是用符号常量代表一个字符串,在预编译的时候就进行替换了,预编译完成后,符号常量就不存在了,所以对符号常量的名字是不分配内存的,而常变量需要分配内存,有变量值,只是不能改变。相比较来说,常变量更方便一些。可以不必多用符号变量。(难道,常变量就是从符号变量发展来的么)
vii. 标识符:用来对变量、符号变量名、函数名、数组名、类型等各种命名的有效字符序列统称为标识符(这个字读zhi,好吧,所有的名都属于标识符)
viii. 标识符只可以由字母、数字、下划线组成,而且第一个字符不可以为数字。区分大小写
b) 数据类型,所谓数据类型,就是对数据分配存储单元的安排,包括该存储单元的长度与数据的存储形式。
i. 数据类型在C语言中包括四种:基本类型、枚举类型、空类型、派生类型。
ii. 基本类型:各语言基本都差不多,分两种,一个是整型,一个是浮点型,可以把浮点型理解为有小数点的。其中整型包括:基本整形(int)、短整型(short int)、长整形(long int)、双长整形(long long int)、字符型(char)、布尔型(bool);浮点型包括:单精度浮点型(float)、双精度浮点型(double)、复数浮点型(float_comple,double_comple,long long_comple)。
iii. 枚举类型为emum,空类型为void
iv. 派生类型包括:指针类型(*)、数组类型([])、结构体类型(struct)、共用体类型(union)、函数类型
c) 整形数据
i. 这一节就是介绍了各种整形数据,C的int有:short int, int, long int, long long int这几种,规定了shortint占2个字节,long int占4个字节,long long int是8个字节,(字节就是byte,是8位的)而int是在short int和long int之间的,按照编译器来改变,所以有可能是2个byte,也有可能是4个byte。这一点不像java,java是只有short,int,long三种的,分别是248个字节,估计java的作者们也很郁闷这个不定的int长度吧。
ii. 符号——正负,每个数据都是第一位来表示符号的,如果不想要符号,即都是正的,需要在声明时前边添加unsigned来表示。
d) 字符型数据,基本包括了127个字符
i. 字母,大写A ~ Z,小写a ~ z;
ii. 数字,0 ~ 9;
iii. 专门符号,29个 !“ # & ‘ ( ) * + , - . / : : < = > ? [ \ ] ^ _ { | } ~ 这些都是在标准键盘上可以直接输出的;
iv. 空格符:包括空格、水平制表符、垂直制表符、换行、换页
v. 不能显示的字符:空字符(以\0表示)、警告(\a)、退格(\b)、回车(\r)
vi. 详见ASCII字符表
e) 浮点型数据
i. 其中float型是4个字节,double是8个字节,long double看编译环境分配8或16个字节
f) 怎样确定常量的类型
i. 通过大小、范围等来确定需要分配几个字节。
g) 运算符和表达式
i. 基本的算术运算符,即+- * / %等,最简单的这种
ii. 自增、自减运算符,++--等,常用的,不解释
iii. 算术表达式和运算符的优先级与结合性,如同数学表达式的运算顺序。
iv. 不同类型数据间的混合运算
1. 数字间的运算,都向大转换,结果为大。大即为占的字节多;
2. char和数字数据运算,把char的ASCII码与数字进行运算。结果为数字的数据类型;
v. 强制类型转换运算符,前边加括号,括号内是被强制转换的类型
vi. C运算符
1. 算术运算符,(+ - */ % ++ --)
2. 关系运算符,(>< == >= <= !=)
3. 逻辑运算符,(!&& ||)
4. 位运算符,(<<>> ~ | ^ &)
5. 赋值运算符,(=及其扩展赋值运算符)
6. 条件运算符,(? :)
7. 逗号运算符,(,)
8. 指针运算符,(*和&)
9. 求字节数运算符,(sizeof)
10. 强制类型转换运算符,((被强制转换的类型))
11. 成员运算符,(.->)(没用过,重点)
12. 下标运算符,([])
13. 其他,(如函数调用运算符())
3. C语句
a) C语句的作用和分类
i. 控制语句,包括if else,for, while, do while, continue, break, switch, return, goto,实现条件、循环、选择等功能的语句
ii. 函数调用语句,额…
iii. 表达式语句,实现赋值的,由表达式跟分号组成;
iv. 空语句,尼玛有病
v. 复合语句,就是用{}括起来的句块
b) 最基本的语句——赋值语句
i. =,+=,-=等,最终都是把值赋给变量,其他不说了,用的太多了
4. 数据的输入输出
a) C语言本身不提供输入输出语句,是在C标准库中提供了一些输入输出函数,所以需要#include<stdio.h>等预编译指令。
b) Printf函数算是比较主要的输出函数了。如printf(“%d,%c\n”,I,c).
i. 格式字符:d表示输出一个有符号的十进制整数
ii. c格式符,用来输出一个字符,char。可以指定域宽,比如%5c,表示输出5个字符宽度的,如果输出a,那么前边就4个空格
iii. s格式符,用来输出一个字符串
iv. f格式符,用来输出实数,普通就是%f,还可以指定数据宽度,如%7.2f,表示输出的数据占7列,其中2位小数。
v. e格式符,用来以指数形式输出实数,也可以用%m.ne来指定宽度
vi. 其他的还有i格式符,同d,输出十进制整数,不过一般用d;o格式符,以八进制输出整数;x格式符,以十六进制输出整数;u格式符,用来输出无符号的整数;g格式符,用来输出浮点数,自动选f或e来输出,选择其中长度较短的格式。
c) 用scanf函数输入数据,格式scanf(“a=%f, b=%f, c=%f, &a, &b, &c”);
i. 格式符同上。需要注意的是后边的是变量地址,所以需要前边加&,输入的时候应该两个数据间有一个冒号和一个以上的空格,不然会报错。
d) 其他:字符数据的输入输出,只是输入输出字符。
i. 用putchar函数输出一个字符
ii. 用getchar函数输入一个字符