标准C语言

sillion 2020-07-09


一、数据类型
为什么对数据进行分类:节约存储空间,提高运行速度。

整型:
signed
signed char 1 -128~127
signed short 2 -32678~32767
signed int 4 正负20亿
signed long 4/8 正负20亿/9开头19位整数
signed long long 8 9开头19位整数
注意:signed 不加就代码
unsigned:
unsigned char 1 0~255
unsigned short 2 0~65535
unsigned int 4 0~40亿
unsigned long 4/8 0~40亿/1开头20位整数
unsigned long long 8 1开头20位整数
注意:由于定义无符数据时比较麻烦,标准库把这些无符类型重新定义成了以下类型
需要包含头文件 stdint.h
uint8_t、uint16_t、uint32_t、uint64_t
int8_t、int16_t、int32_t、int64_t

浮点:
float 4
double 8
long double 12/16
注意:采用科学计算法,二进制与真实数据之间需要翻译,因此计算整数要比整型要慢。
小数点后六位有效。

模拟:
char 字符其实就是符号或图案,在内存中存储的是整数,需要显示时会根据ASCII表中的对应关系显示出相应的符号或图案。
‘\0‘ 0 特殊字符,字符串的结束标志。
‘0‘ 48
‘A‘ 65
‘a‘ 97
bool 布尔 先有了C语言之后才有 bool 类型,所有C语言不可能有真正布尔类型,stdbool.h头文件对布尔类型做的模拟。
bool true false
可以使用sizeof计算类型的字节数。

二、变量与常量
什么是变量:程序运行期间数值可以变化的叫变量,相当于存储数据的盒子。
定义:类型 变量名;
int num;
取名规则:
1、由字母、数字、下划线组成
2、不能以数字开头
3、不能与关键字重名,能默写。
4、见名知义(功能、类型、范围)
printf scanf bool
注意:变量的默认值是随机,为了安全要给初始化,一般初始化为0。
使用:
赋值:num = 10;
参与运算:num * 100;

变量的输入、输出:
int printf(const char *format, ...);
功能:输出数据
format:双引号包含的格式信息(提示信息+占位符)
...:变量列表
返回值:输出字符个数

int scanf(const char *format, ...);
功能:输入数据
format:双引号包含的格式信息(占位符)
...:变量地址列表
返回值:成功输入变量的个数
注意:scanf需要的是变量类型和变量地址,变量地址=&变量名

练习1:定义各类型的变量并初始化,使用printf显示。
练习2:定义各类型的变量并初始化为0,使用scanf输入,printf显示。

类型占位符:C语言通过占位方式来传递变量的类型。
%hhu %hu %u %lu %llu
%hhd %hd %d %ld %lld
%f %lf %LF

什么是常量:程序运行期间数值不能变化的叫常量
100 默认int
100l long
100ll long long
100u unsigned int
100lu unsigned long
100llu unsigned long long
3.14 默认double类型
3.14f float
3.14l long double
三、格式化输入输出
%nd 显示n个字符宽度,不够则补空格,右对齐
%-nd 显示n个字符宽度,不够则补空格,左对齐
%0nd 显示n个字符宽度,不够则补0
%n.mf 显示n个字符宽度(小数点算一位),不够则补空格,m表示小数点后的位数(四舍五入)
%g 不显示小数点后多余的0

四、运算符
自变运算符:++/-- 使变量的值自动加1或减1
前自变:立即有效
后自变:下一条语句才有效
注意:不要一行代码中多次使用自变运算符;
算术运算符:+ - * / %
整数/整数结果没有小数点。
/ % 除数不能为零,否则会产生浮点数例外,核心转储。
关系运算符:> < >= <= == !=
比较的结果是 0 或 1 比较结果还能继续参与运算。
10 < n < 100 结果永远为真,与数学中的运算规则不同。
逻辑运算符:&& || !
会先把运算对象转换逻辑值,0转换成假,非0转换为真。
A && B 一假即假
A || B 一真即真
!A 求反
&& || 具有短路特性,当左边的值可以确定表达式结果,右边不同计算。

三目运算符:运算对象有三个部分
A?B:C; 判断A的值如果为真执行B,如果为假执行C。
该语句不能使用流程控制语句,因为它必须要有运算结果。

赋值运算符:+= *= /= ...
a += b; a = a+b;
a *= b; a = a*b;

位运算符:& | ~ ^ >> <<

五、类型转换
自动类型转换:
只有相同类型的数据才能进行运算,不同类型数据转换成相同类型再进行云计算。
转换规则(以不丢失数据为基础,适当牺牲一些空间):
1、字少的向字节多的转。
2、有符号向无符号转。
3、整型向浮点型转。
强制类型转换:
(类型)数据 有丢失数据的风险,慎重使用。

六、分支语句
if(表达式)//单分支
{
表达式值为真,执行此处代码。
}

if(表达式)//双分支
{
表达式值为真,执行此处代码。
}
else
{
表达式值为假,执行此处代码。
}

if(表达式1)//多分支
{
表达式1值为真,执行此处代码。
}
else if(表达式2)
{
表达式2值为真,执行此处代码。
}
else
{
表达式1和2都为假,执行此处代码。
}

相关推荐