运算符
(1)算数运算符
- 对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
- 当对一个数取模时,可以等价a%b=a-a/b*b
- 当自增作为一个独立的语言使用时,++i和i++是一样的
- j=++i等价于i=i+1; j=i
- j=i++等价于j=i; i=i+1 (–相同)
(2)关系运算符
- 关系运算符的结果要么为真(非0),要么是假(0)。C语言中没有布尔类型。
- 关系表达式经常用在if结构或循环结构中。
(3)逻辑运算符
&&:逻辑与。两个操作数都为非0为真,否则为假。如果第一个条件为false,则后面的条件就不再判断,这种现象为短路现象。
||:逻辑或,两个操作数中任意为非0则为真
!:逻辑非,将操作结果进行反转
(4)位运算符
&按位与操作,按二进制位进行“与”运算;0&0=0;0&1=0;1&0=0;1&1=1;
|按位或操作,按二进制位进行“或”操作;0|0=0;0|1=1;1|0=1;1|1=1;
^异或运算符,按二进制位进行“异或”运算。0 ^0=0;0 ^1=1;1 ^0=0;1 ^1=0;
~取反运算符,按二进制位进行“取反”运算。
<<二进制左移运算,将一个运算对象的各二进制全部左移若干位(左边的二进制丢弃,右边补0);二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补,右边丢弃。
(5)三元运算符
条件表达式?表达式1:表达式2
1)如果条件表达式为非0(真),表达式1执行
2)如果条件表达式为0(假),表达式2执行
注:表达式1或表达式2要为可以赋给接收变量的类型(或可以自动转换),否则会有精度损失。
(6)运算符的优先级
- 所有的双目运算符中只有赋值运算符的结合方向是从右向左
- 另外两个从右向左的结合运算符,一个是单目运算符,一个三目运算符
- 逗号的运算符优先级最低
- 算数运算符>关系运算符>逻辑运算符(除!)>赋值运算符>逗号运算符
标识符的命名
(1)规则
- 由26个英文字母大小写,0-9,_或$组成
- 数字不可以开头
- 不可以使用关键字和保留字,但能包含关键字和保留字
- C语言中严格区分大小写,长度无限制
- 标识符不能包含空格
(2)规范
- 程序中不得出现仅靠大小写区分的相似的标识符
- 所有宏定义、枚举常数、常量全用大写字母命名,用下划线分割单词
- 定义变量一定要初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据,运行程序,会异常退出
- 变量名、方法名采用驼峰命名法
键盘输入语句
- include<stdio.h>
- 使用scanf函数
- 使用适当的格式参数接收输入
原码、反码、补码
对于有符号的而言:
- 二进制的最高位是符号位:0表示证书,1表示负数
- 正数的原码、反码、补码都一样(三码合一)
- 复数的反码=它的原码符号不变,其它位取反
- 负数的补码=它的反码+1
- 0的反码、补码都是0
- 在计算机运行的时候,都是以补码的方式来运算的(即进行逻辑操作先求补码运算,再将补码变为原码)
break和continue
(1)break
用于终止某个语句块的执行,一般使用在switch或者循环中
(2)continue
用于结束本次循环,继续执行下一次循环
只能和循环语言使用,不能单独和switch结合使用
goto和return
(1)goto
- C语言的goto语句可以无条件地转移到程序中指定地行
- goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能
- 在c程序设计中一般不主张使用goto语句,以避免造成程序流程混乱,使理解和调试程序都产生困难
goto label1;
...
label1:
...
(2)return
枚举
- 枚举是C语言中的一种构造数据类型,在只有几个有限的特定数据,可以使用枚举
- 枚举是一组常量的集合,包含一组有限的特定数据
- 定义格式:enum 枚举名 {枚举元素1,枚举元素2,…}
- c语言中,枚举类型是被当作int或者unsigned in类型来处理,枚举类型必须连续是可以实现有条件的遍历。
- 枚举的第一个成员的默认值为整数0
//声明方式1
enum DAY {MON=1,SUN};
....
enum DAY;
//2
enum DAY {MON=1,SUN} day
//3
enum {MON=1, SUN} day; //这种方式此枚举类型只能使用一次
函数
为完成某一个功能的程序指令(语句)的集合
C语言中的函数分类:系统函数、自定义函数
//基本语法
返回类型 函数名 (形参列表){
函数体;
return 返回值;
}
//函数可以有返回值,也可以没有返回值,如果没有返回值,返回类型声明为void
头文件
(1)基本概念
- 头文件是扩展名为.h的文件,包含了C函数声明和宏定义,被多个源文件中引用共享。可以分为:自定义头文件和C标准库自带头文件。
- 在程序中要使用头文件,需要使用C预处理指令#include来引用头文件
- #include叫做文件包含命令,用来引入对应的头文件。#include也是C语言预处理命令的一种。
- #include的处理过程,将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件。
- 建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。
(2)头文件的注意事项
1)引用头文件相当于复制头文件的内容。
2)源文件的名字可以不和头文件一样,但是为了好管理,一般头文件和源文件名一样。
3)include<>和include""的区别
a. include<>:引用的是编译器的类库路径里面的头文件,用于引用系统头文件。
b.include"":引用的是程序目录的相对路径中的头文件,如果在程序目录没有找到引用的头文件则到编译器的类库路径的目录下寻找该文件头,用于引用用户头文件。
c.引用系统头文件,两种形式都可以,但include<>效率高,引用自定义头文件,只能使用include""。
4)一个#include命令只能包含一个头文件,多个头文件需要多个#include命令
5)同一个头文件如果被多次引入,多次引入的效果和一次引入的效果相同,因为头文件在代码层面有防止重复引入的机制。
6)在一个被包含的文件(.c)中又可以包含另一个头文件
7)不管是标准头文件,还是自定义头文件,都只能包含变量和函数的声明,不能包含定义,否则在多次引入时会引起重复定义错误。
函数
(1)调用规则
- 当调用(执行)一个函数时,就会开辟一个独立的空间(栈)
- 每个栈空间相互独立
- 当函数执行完毕后,会返回到调用函数的位置,继续执行
- 如果函数有返回值,则将返回的函数值赋值给接收的变量
- 当一个函数返回后,该函数对应的栈空间就被销毁了
(2)函数使用的注意事项和细节
- 函数的形参列表可以有多个
- C语言传递参数可以是值传递,也可以是传递指针,也叫引用传递
- 函数的命名遵循标识符命名规范,首字母不能是数字
- 函数中的变量是局部的,函数外不生效
- 基本数据类型默认是值传递的,即值进行拷贝。在函数内修改不会影响到原来的值
- 如果希望函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量
- C语言不支持函数重载
- C语言支持可变参数(<stdarg.h>)