Ch1-初识C语言
1.1 选择C语言的理由:
1 设计特性:让用户轻松完成自顶向下,结构化和模块化的编程。用c语言编写的程序更易懂、更可靠。
2 高效性:c程序相对紧凑,运行速度很快,可以根据具体情况微调程序以获得最大的运行速度和最有效的使用内存。
3 可移植性:许多计算机体系结构都可以使用C编译器(C编译器),不管是家庭计算机、专业工作站,还是大型机,都可以找到针对特定系统的C编译器。
4 强大而灵活:比如功能强大而灵活的UNIX系统,大部分是c语言写的,其他许多语言的编译器和解释器都是C语言编写的,C语言可以解决物理学和工程学的问题。
5 面向程序员:程序员可以利用C语言访问硬件、操作内存中的位,C语言有一个大型的库,这些函数用于处理程序员经常需要解决的问题。
6 想拥有自由必须时刻保持警惕,C语言的灵活可能会带来许多莫名其妙的错误,比如涉及指针的编程错误往往难以察觉。
1.2 使用C语言的7个步骤
步骤1:定义程序的目标 (不涉及具体的计算,用一般话术描述问题)
步骤2:设计程序
步骤3:编写代码 (给自己所写的程序添加合理的注释)
步骤4:编译 (将C代码翻译成特定的机器语言)
步骤5:运行程序
步骤6:测试和调试程序 (编译器会帮助找出错误)
步骤7:维护和修改代码
C语言代码编写规范:可以用小写字母、大写字母、数字和下划线(_)来命名。而且,名称的第1个字符必须是字符或下划线,不能是数字。
Ch2-数据和C
关键字:
int:有符号整型,64位占8个字节,32位占4个字节。
Short:占用空间可能比Int类型少,常用于较小数据场合。
Long:占用的空间可能比int多,适用于较大数值场合。
Unsigned:只用于非负场合。
Char:用于存储字符,在技术层面上,存储的是整数而不是字符。
C语言中,用单引号括起来的单个字符被称为字符常量,用双引号括起来的,编译器认为是一个字符串。
Float:通常8位用来表示指数的值和符号,24位用来表示非指数及其符号。
转义字符:
报警字符-\a
换页字符:\f
换行符:\n
回车符:\r
水平制表符:\t
垂直制表符:\v
进制显示:
以十进制显示数字,使用%d;
以八进制显示数字,使用%o;
以十六进制显示数字,使用%x。
要显示各进制数的前缀0、0x和0X, 必须分别使用%#o、%#x、%#X。
整形类型和浮点数类型的区别;
计算机把浮点数分成小 数部分和指数部分来表示,而且分开储存这两部分。
数组 :
同类型数据元素的有序序列,字符串必须要以空字符结束,意味着数组的容量必须比字符串字符数多一个。空字符NULL,即’\0’。
Const:
用const创建的变量不可以修改。
注意:1:常量最好用大写表示,在常量名称之前添加C_和k_前缀来表示常量。
CH3
基本运算符:
“=” 赋值运算符,等号左边是一个变量名,右侧是赋给该变量的值。赋值行为 从右往左进行,等号左侧不可以是常量,必须是变量。“+/-”相加的值(运算对象)可以是变量,也可以是常量
”%” 求模运算符,只能用于整数,不可以用于浮点数。
运算符优先级:
“++” 递增运算符,比如i++,i先赋值再++,++i则先执行自++,在把变化后的值赋值。--是同样的道理。
类型转换:
1: 当类型转换出现在表达式时,无论是unsigned还是signed的char和short都会被自动转换位int。
2: 涉及两种类型的运算,两个值会被分别转换成两种更高的级别。
3: 类型的级别从高到底依次是long double、double、float、unsignedlong long、long long、unsigned long、long、unsigned int、int。
4: 在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。
5: 当作为函数参数传递时,char和short被转换成double。
6: 类型升级通常不会有太大的问题,但是类型降级会导致真正的麻烦。
待赋值的值与目标类型不匹配时,规则如下:
1) 目标类型是无符号整型,且待赋值的值是整数时,额外的位将被忽略。
2) 如果目标类型是是一个有符号的整型,且待赋值的是整数,结果因实现而异。
3) 如果目标类型是一个整型,且待赋值的值是浮点数,该行为是未定义的。
CH4:C控制语句:循环
While循环通用形式:
While(expression){statement};
Expression为非零,则执行statement,再次回到expression判断,不断的循环,直到expression为0,跳出while()循环,或者利用关键字比如(break,if等)来结束循环。
运算符优先级:
for循环:
for(表达式1;表达式2;表达式3){语句}
注意:省略第二个表达式,默认为真。只对第一个表达式求值一次或执行一次。
逗号运算符:
性质1:保证了被它分隔的表达式从左往右求值。
性质2:整个逗号表达式的值是右侧项的值。
do while循环:
do{语句}while(表达式)
保证了至少执行循环体中的内容一次。
CH5:分支和跳转
If else语句通用形式:
if(expression)Statement_1;
Else
Statement_2;
逻辑运算符:
表达式1 && 表达式2
只有表达式1和表达式2都为真时,整个表达式才为真,只要有一个为假则整 个表达式都为假。而且当表达式1为假时,表达式2不会被执行。
表达式1 || 表达式2
当两个表达式中有一个为真时,整个表达式就为真,只有两个表达式都为假时 整个表达式才为假,当表达式1为真时,表达式2不会被执行。
条件运算符:
表达式1 ? 表达式2 : 表达式3
如果表达式1为真,那么整个条件表达式的值与表达式2的值相同,如果表达式1为假,则整个表达式的值为表达式3的值。
Continue:
执行该语句时,会跳过本次迭代的剩余部分,并开始下一轮的迭代,如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。
Break:
程序执行到循环中的break语句时,会终止包含它的循环,并继续执行下一阶
段,比如在for语句中的break和continue不同,执行完break语句后直接
执行循环后的第一条语句,连更新的部分也跳过。嵌套循环内层的break只会
让程序跳出包含他的当前循环,要跳出外层循环还需要一个break。
Switch:
Switch(表达式)
Case 0:语句1;
Break;
Case 1:语句2;
Break;
Default:语句3;
Break;
注意:break语句可以用于循环和switch语句中,而continue只能用于循环中,但是,当switch语句在一个循环中,continue便可以作为switch语 句的一部分,在这种情况下,continue让程序跳出循环的剩余部分,包括Switch语句的其他部分。Switch 在圆括号中的测试表达式的值一定得是一个整数值(包括char类 型)。Case标签必须是整数类型的常量或者常量表达式,不能把变量当成Case标签。