1 stdio.h
包含编译器在编译标准输出函数printf时要用的信息和声明
包含帮助编译器确定对库函数调用的编写是否正确的信息
若仅用到scanf和printf 可省略该行
2 int
说明后面标识符xyz sum是整型变量
C语言规定 程序中所有使用的变量都必须先定义后使用
3 & 取地址符
将整数值输入到变量(x...)的地址所标志的单元中,即输入给x..
4 %d 格式控制字符串
用来指定输入/输出时的类型和格式 表示十进制整数类型
5 一个c程序是由一个固定名称为main的主函数和若干个其他函数(可没有)组成
6 函数说明:对函数名 函数类型和形式参数等的定义和说明
函数体:(1)局部变量说明 (2)执行语句组 *由一对花括号括起
7 对所有数据都要先指定其数据结构
8 八进制整数
以0为前缀,其后为0~7
E.g. 015(13) 0101(65)
9 十六进制整数
以0x或0X组成 其后为0~9和a~f(A~F)----表示10~15
E.g. 0X1f(31) 0xFF(255) 0x201(513)
10 实型常量 C语言中 实数又称为浮点数
- 十进制小数形式 1.2 .24 2. 0.0
- 指数形式
组成:十进制数、阶码标志e或E、阶码(只能是整数)
注意:e/E前必须有数字,后面必须是小数
E.g. 123.456——123.456e0、12.3456e1、1.23456e2(标准化指数形式)......
11 符号常量
C语言中 用一个标识符表示一个常量;使用之前必须定义
- 宏定义 #define
定义:C语言源程序中用一个标识符(宏名)来表示一个字符串(宏替换/宏展开)
a.不带参数的宏定义
形式:#define 标识符(一般大写字母) 字符串(常量 表达式 格式串)
*Define是一条预处理命令 将命令格式中的标识符定义为后面的常量值
//计算圆的面积周长体积 #define PI 3.14
//计算多项式的值 #define P (3*x*x-*x-1)
//格式为字符串 #define FORMAT “%f,%f,%f,%f“
*双引号括起的字符 不进行宏展开
*可嵌套 如 #define PI 3.14
#define S PI*r*r
*终止其作用域 使用#undef PI
b.带参数的宏定义
形式:#define 宏名(形参表) 字符串
#define PI 3.1415926
#define S(r) PI*(r)*(r)
*先用实参代替形参,之后出现的所有宏名都用宏定义处理过的字符串替换
- 条件编译
12 字符型常量
- 字符常量(字符常数)
- 用单引号括起 起界定作用 ‘’内只能有一个字符 且不能为‘ \
- 每个字符常量都对应一个整数值(ASCII码对照表)
- 区分大小写
*转义字符多用于printf()函数,在scanf()中通常不使用
- 字符串常量
- 有一对双引号括起来的字符串序列 “a”“china”“123.0”
- 存储方式:每个字符以ASCII码值的二进制形式存放在内存中 系统在末尾加一个字符串结束标志\0 “a”的实际长度为2
13 变量 字节*
- 变量名:用标识符表示 *数字、字母、下划线 且第一个字符必须为字母/下划线
- 变量类型 原则:先定义后使用
- 整型变量
- 可使用十进制 八进制 十六进制的数据 在内存中都以二进制形式存放
- 基本类型说明符 int2 此外还有short int/short2 long int/long4
- 实型变量
- 分类:单精度实型(float4)双精度实型(double8)
- 字符型变量
- 用来存储字符常量
- 类型名:char 1 e.g. char c1=‘a’,c2;
//定义两个字符型变量c1 c2 并将字符常量‘a’赋给字符型变量c1
- 存储:将一个字符放到一个字符型变量中 将该字符的ASCII码存放在该变量的内存单元中
- 变量值 1)赋值语句 int a;a=2; 2)初始化 int a=2;
- C运算符
- 分类
优先级:单目运算符>双目运算符
结合性:a.从左到右 称为左结合性 b.从右到左 称为右结合性
*详见附录3
- 算术运算符 + - (正负)+ - * / % ++(自增) --(自减)
除法运算:两个操作数都是整数 结果为整数,小数部分一律舍去
F=3/5 结果为000000 f=3.0/5.0 结果为0.600000
自增、自减运算符:a.前缀形式 先加1后运算 ++k --k
后缀形式 先运算后加1 k++ k--
- 只能用于变量 不能用于常量 表达式
- 结合方向:自右向左
-(k++) k=3 则最终表达式的值为-3 k=4
- 赋值运算符 = :将一个数据/表达式赋给一个变量 结合性从右到左
a=x%y 作用是将右边的结果赋给变量a
赋值表达式:变量=表达式
类型转换:若=两边数据类型不一致,赋值时要进行数据转换,以=左边的变量为准
复合的赋值运算符 += -= *= /= %= <= >= &= ^= |=
a+=3---a=a+3 a*=a+3---a=a*(a+3)
- 关系运算符(比较两个操作数大小关系)
关系表达式:其结果的逻辑值为0或1
- 两个运算对象满足给定关系,取真值1;否则取假值0
- 两个运算对象可以是算术表达式
*若为字符数据 则按ASCII码值比较
- 其值可作为整数值参与运算
int a=10,b=9,c=1,f;f=a>b>c; 则f=0
*a>b结果为1,1>c结果为0+
- 逻辑运算符:逻辑与&& 逻辑或|| 逻辑非!(自右向左)
*优先级:逻辑非>逻辑与>逻辑或
!a 若a为真,则结果为假(0),若a为假,则结果为真(1)
逻辑运算的结果:逻辑真(1) 逻辑假(0){只能为0或1,无其他数值}
判断逻辑运算对象的逻辑值:0为假,非0为真
eg.15&&13 15||13---15 13非零 即运算对象作为真,所以两个式子结果值均为1
*求解过程中,有解则停止执行
- 条件运算符:由? :组成 (三目运算符 从右向左)
一般格式:表达式1?表达式2:表达式3
*先计算表达式1,若为真,则求解表达式2,表达式2的值作为整个条件表达式的值;否则,为表达式3
优先级:仅比赋值运算符和逗号运算符高
- 逗号运算符:“,”
一般形式:表达式1,表达式2,表达式3,……,表达式n
求解过程:依次求解表达式1,2...n,整个逗号表达式的值为表达式n的值
优先级:最低
Printf(“%d,%d,%d”,(a,b,c),b,c) 其中(a,b,c)为逗号表达式 值为c
附加——源码补码反码
1.机器数:一个数在计算机的存储形式是二进制数,我们称这些二进制数为机器数,机器数是有符号,在计算机中用机器数的最高位存放符号位,0表示正数,1表示负数。
2.机器数的真值:带符号的机器数真正表示的值。
例如:机器数1000 0111 真值为-7 形式值为135
3.源码:表示方法与机器数的真值一样,第一位表示符号,其余位表示数值
例如 +1:0000 0001 -1:1000 0001
4.反码:正数是源码本身;负数在符号位不变的前提下,其余位取反
例如 +1:0000 0001 -1:1111 1110
5.补码:正数是源码本身;负数在反码的基础上加1
例如 +1:0000 0001 -1:1111 1111
- 位运算:对运算对象按二进制位进行操作的运算,可以完成对内存中的数据进行直接操作
对象只能为整型数据/字符型,运算结果为整型
位运算符
- & 按位与
运算规则:0&0=0 0&1=0 1&0=0 1&1=1 参与运算的两个数均以补码形式出现
- | 按位或
运算规则:0|0=0 0|1=1 1|0=1 1|1=1 参与运算的两个数均以补码形式出现
*通常用来将某些位置转为1
- ^ 按位异或 (相等为0 不等为1 )
运算规则:0^0=0 0^1=1 1^0=1 1^1=0 参与运算的两个数均以补码形式出现
*通常用来使特定位置翻转或保留原值
- ~ 按位取反
运算规则:!0=1 ~1=0
- << 左移
运算规则:将操作对象各二进制位全部左移指定位数
高位丢弃,低位补0 每左移一位,相当*2
6)>> 右移
运算规则:将操作对象各二进制位全部右移指定位数 符号位一起移动
低位丢弃 高位:正数补0 负数补1 右移一位,相当/2,并去掉小数
9.强制类型转换:将一个表达式转化成所需类型
例如: (double)a 将a的值转换成double类型
(int)(x+y) *表达式应用括号括起来