第一部分
-
编程语言不是用来和计算机交谈的,而是用来描述要求计算机如何做事情的过程或方法。
-
从高到低:算法 -> 程序 -> 计算机
-
什么是算法?让计算机做计算时,要先找出计算步骤,然后用编程语言写出来。计算机做的所有事情都叫计算,计算的步骤就叫做算法。
-
两种不同的程序执行方式:
(1)解释:借助一个程序,这个程序会试着理解你的程序。
(2)编译:借助一个程序,翻译你的程序,翻译成计算机可以理解的程序。
- 语言本无编译和解释之分,只是常用的执行方式而已。
- 解释性语言有特殊的计算能力。
- 编译型语言有确定的运算性能。
-
语言的能力和使用领域主要是由库和传统所决定的。
-
语言的发展:FORTRAN -> BCPL -> B语言 -> C语言
-
C语言的发展和标准:
(1)1989年,ANSI发布了一个标准:ANSI C
(2)1990年,ISO接受了ANSI的标准:C89
(3)C95 (4)C99
- ANSI C只能在代码开头的地方定义变量
- C99可以在代码的任意地方定义变量
-
早期的、面向底层的语言强调类型。C语言就是一种有类型的语言。
-
语言的两个方向发展:
(1)C、C++、JAVA:更强调类型,对类型的检查更严格。
(2)JavaScript、Python PHP:不看重类型,甚至不需要事先定义。
第二部分
-
标识符的构造规则:只能由字母、数字、下划线开头。数字不可以出现在第一个位置,不可以使用关键字(保留字)作为标识符。
-
C语言不要求变量定义时做初始化,但在使用之前应该被赋一次值。
-
整数运算只能得到整数。整数和浮点数一起运算,整数会被当作浮点数。
-
浮点数在进行计算时,是由专门的硬件部件实现的。
-
运算符分类:
(1)算术运算符:+、-、乘、/、%、++、–
(2)关系运算符:>、<、>=、<=、==、!=
(3)赋值运算符:=
(4)逻辑运算符:&&、||、!
(5)复合运算符:+=、-=、乘=、/=
(6)位运算符:&、|、~、^
(7)其它:逗号运算符、条件运算符等。 -
运算符优先级:
注:条件运算符的优先级高于赋值运算符,但低于其它运算符。结合性自右向左。
注:逗号运算符是所有运算符里优先级最低的。
-
sizeof 运算符:给出某个类型或变量在内存中所占据的字节数。sizeof 是静态运算符,其结果在编译时就决定了。
-
printf 输出 inf 表示超过范围的浮点数:±无穷大(浮点数/0);printf 输出 nan 表示不存在的浮点数(0/0)。
-
对于 printf 来说,任何小于 int 的类型都会被转换成 int,float 会被转换为 double。但 scanf 需明确知道后面变量的大小,如输入 short 类型的值,需使用%hd。
-
unsigned 的初衷并非为了扩展数能表达的范围,而是为了做纯二进制运算,如移位等。
-
PAT:浙江大学计算机程序设计能力考试系统。
第三部分
-
C会在不同类型之间自动转换,故不需要做强制类型转换。C++有时需要做强制类型转换。
-
当运算符的两边出现不一致的类型时,C会使之自动转换成能表达的数的范围更大的类型:
(1)char->short->int->long->long long
(2)int ->float->double -
强制类型转换:把一个类型的量强制转换成另一个类型(通常是较小的类型)。格式为:(类型)值。如:(int)10.0。
-
整数与浮点数的范围:
注:int 是用来表达寄存器的,所以取值范围会发生变化。
-
八进制的一位数字正好表达3位二进制,十六进制的一位数字正好表达4位二进制。早期计算机的字长是12的倍数,而非8的倍数,故习惯使用8进制。而现在的计算机字长是8的倍数,故习惯使用16进制。
-
为了准确地表达内存,且出于做底层程序的需要,整数类型有许多种。现在的CPU字长普遍为32位或64位,且一次内存读写就是一个 int,一次计算也是一个 int。故选择更短的类型不会更快,甚至更慢。因此,若没有特殊需要,使用 int 类型即可。
-
CPU可以直接对 double 类型做硬件运算,性能不会比 float 差,且在64位的机器上,数据存储速度也不比 float 慢。因此,若没有特殊需要,使用 double 类型即可。
-
选择语句(if 语句、switch 语句)
(1)else 的匹配:else 总是和最近的那个 if 匹配。
(2)switch 必须是 int 类型,case 必须是常数。 -
循环语句的选择(for语句、do-while语句、while语句)
(1)如果有固定的次数,用for语句。
(2)如果必须先执行一次,用do-while语句。
(3)其他情况用while语句。 -
continue、break、goto
-
判断两个小数是否相等的条件:fabs(f1-f2)<1e-12