一.常量
程序执行过程中值不发生改变的量叫做常量
1.1符号常量
用标识符表示一个常量。一般形式:#define 标识符 常量
习惯上符号常量的标识符用大写字母表示,变量标识符用小写字母
1.2整型常量
整型常量分为十进制,八进制,十六进制,每种常量都有固定的表示前缀
其中:
十进制常量没有前缀正常表示即可,十进制无符号整常数的表示范围为0-65535,有符号数为-32768-+32767
八进制整数必须以0开头,八进制数通常是无符号数。表示范围是0-0177777
十六进制整常数的前缀是0x或者0X
如果使用的数超出使用范围就需要用长整型进行表示。
二.变量
其值可以改变的量称为变量,变量应该有自己的名字,在内存中占据一定的存储空间。变量定义必须放在变量使用之前,一般放在函数体的开头部分
2.1整型变量

常识补充:
一个字节是8比特
数值是以补码表示的,正数的补码和原码相同,负数的补码是在原码的基础上取反再加一
整型变量的分类
1.基本型(int)
2.短整型(short int)
3.长整型(long int)
4.无符号整型(unsigned int)
各种类型所占字节数多少可以自己写代码编译看一下


整型变量定义
定义变量的一般形式为:
类型说明符 变量名标识符,变量名标识符.....;
在书写变量定义时应注意:
允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用","间隔。类型说明符与变量名标识符之间至少用一个空格间隔
最后一个变量名之后必须以";"结尾
变量定义必须放在变量使用之前,一般放在函数体的开头部分。


整型数据的溢出


那为啥会出现这种情况呢,之前的例子里面我们也看到了short占2个字节也就是short一共占16个bit位,那我们就可以算出有符号整型和无符号整型的表示范围
有符号整型表示范围为-32768-+32767
无符号数表示范围0-65535
而我们用的是有符号数所以最后出现了溢出现象。


实型数据
实型也称浮点型,实型常量也称实物或者浮点数,c语言中实数只采用十进制
有两种表示方式:
1.十进制小数形式:
由数码0-9和小数点组成
2.指数形式:
有十进制数加阶码标志"E"或者"e"以及阶码组成
阶码只能为整数可以带符号
eg:
2.1E5=2.1*10^5
标准c允许浮点数使用后缀。后缀为"f"或是"F"即表示该数为浮点数如"356f"和"356."是等价的
实型数据在内存中的存放形式
实型数据一般占四个字节存储空间,按指数形式存储。3.14159在内存中的存储形式如下:

小数部分占的位越多,数的有效数字越多,精度越高
指数部分占的位越多,则能表示的数值范围越大。
为啥这里指数部分写的是1呢
因为我们小数部分存储的是".314159"也就是"0.314159"但是我们要表示的数是"3.14159"所以要乘10即10^1
实型变量的分类
实型变量分为:单精度(float)。双精度(double),和长双精度(long double)
每个类型所占字节还是自己打代码看一下


各类数值型运算之间的混合运算
变量的数据类型是可以相互转换的,转换的方式有两种一种是自动转换,一种是强制转换
自动转换:发生在不同数据的两混合运算时,由编译系统自动完成,自动转换遵循一下规则
1.若参与运算量的类型不同则先转换成同一类型再进行运算
2.转换向数据长度增加的方向运行,以保证精度不降低。如int和long进行运算时,先把int转换成long再进行运算
3.所有浮点运算都是以双精度进行的,即使仅含单精度运算的表达式,也要先转换成double型再进行运算
4.char型和short型进行运算时,必须先转换成int型。
5.在赋值运算中,赋值号两边的类型不同时,赋值号右边量的类型转换为左边量的类型。如果右边量的数据长度大于左边量的数据长度就会损失部分数据,丢失的数据按照四舍五入向前舍入。



强制类型转换
一般形式为:(类型说明符)(表达1.式)
其功能是把表达式的运算结果强制转换为类型说明符的类型
eg:
(int)(x+y) 将x+y的运算结果转换成int型数据
(int)x+y 将x转换成int型在与y相加
使用强制转换时的注意要点:
1.类型说明符和表达式必须加括号,如果表达式是单个变量的话表达式可以不加括号
2.无论是强制转换还是自动转换,都只是为了本次的运算需要而对变量长度进行临时替换,不改变该变量原始定义类型。


算术运算符和算术表达式
基本运算符
加"+",减"-",乘"*",除"/",取余"%"
需要注意:除运算参与运算量均为整型时结果也为整型,舍去小数。如果运算中有一个变量是实型结果转换为双精度实型。




运算符的优先级:c语言中运算符的优先级共分为15级。1级最高,15级最低,优先级高的先运算。
而在一个运算量两侧的运算符优先级相同时,则按照运算符的结合性所规定的结合方向处理
运算符的结合性
结合性分为两种:左结合性和右结核性
左结合性:即运算时从左向又得运算比如算术运算符的结合
右结合性:结合方向为自右向左比如赋值运算符

自增,自减运算符
自增:记为"++"即让变量的值自增1
自减:记为"--"即让变量的值自减1
自增,自减有一下几种形式:
++i i先自增1在参与其他运算
--i i先自减1在参与其他运算
i++ i先参与运算后,i的值再加1
i-- i先参与运算后,i的值再减1



赋值运算符
一般形式为:变量=表达式
类型转换
如果赋值运算符两边的类型不相同,系统将自动进行类型转换即右边的类型转换为左边的类型。
具体规定如下:
1.实型赋予整型:舍去小数部分
2.整型赋予实型,数值不变但以浮点形式存放
3.字符型赋予整型,由于字符型为一个字节整型为4个字节,故将字符型ASCII码值放到整型变量的低八位中,高八位为0.整型赋予字符型,只把低八位赋予字符变量。


复合的赋值运算符
种类:+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=
eg:
a+=5即a=a+5
逗号运算符和逗号表达式
其功能是把两个表达式连接起来组成一个表达式
其一般形式为:
表达式1,表达式2
其求值过程是分别求两个表达式的值,表达式2的值作为整个逗号表达式的值


程序
程序可以分为三种基本结构即:顺序结构,选择结构,循环结构
c语句可以分为以下五类:
1.表达式语句
表达式+分号组成
2.函数调用语句
由函数名+实际参数+分号
一般形式为:函数名(实际参数表)
3.控制语句
控制语句用于控制程序的流程。一般分为以下三类:
(1)条件判断语句:if语句,switch语句
(2)循环执行语句:do while语句,while语句,for语句
(3)转向语句:break语句,go to语句,continue语句,return语句
4.复合语句
把多个语句用{}括起来组成的一个语句,复合语句的各条语句都必须以;结尾在}外不能再加;
5.空语句
只有;组成的语句
字符数据的输入输出
putchar函数
putchar函数是字符输出函数,核心功能是在显示器上输出单个字符其一般形式为putchar(字符变量)


\t 是转义字符,作用是输出一个 Tab 键的空格(通常 4/8 个空格),用来对齐内容
getchar函数
功能是从键盘上输入一个字符
一般形式为:getchar();


格式输入与输出
printf函数
其功能是按照用户指定的格式将指定的数据显示到屏幕上
调用一般形式为:printf("格式控制字符串",输出表列)
其中
%d表示按照十进制整型输出
%ld表示按照十进制长整型输出
%c表示按照字符型输出







使用printf函数时还需要注意一个问题,就是输出列表的求值顺序。不同编译系统不一定相同,可以从左向右也可以从右向左




scanf函数
scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量当中去
一般形式为:scanf("格式控制字符串",地址列表);


格式字符串
格式字符串的一般形式为:%[*][输入数据宽度][长度]类型
其中有方括号的项为任选项,各项的意义如下:











练习题
最后给大家一道编程题自己试着打一下,答案放在下篇笔记
