一、内建函数
比较常用的函数在编译器中直接设置过了如:printf、sysytem("pause")
没有设置过的函数不能直接使用
是编译器厂商的一种优化,目的是增加编译效率,但是尽量把头文件写上,不要使用这种方式进行编译
二、数据类型
1、基本数据类型,相同的数据类型在不同的系统上的大小可能不一样
(1)整型(int,short,long,long long):整型就是整数
格式化输出符号:%d(十进制)、%o(八进制)、%x(十六进制)(十六进制用大写X时输出的是大写字母,小写的x输出为小写字母)
数据没有声明时默认为十进制int型整数
int(整型) 范围(-231~231-1)(4字节)
无符号整型:unsigned int (0~232-1)(4字节)(与int一样大)(%ud)
short (短整型)(-215~215-1)(2字节)(不大于int)(%hd)
long (长整型)(-231~231-1)(4字节)(不小于int)(%ld)
long long(c99的新标准)(-263~263-1)(8字节)(%lld)
(2)浮点型(数学中的小数)
float(默认打印6位小数)(4字节)%f 6位有效
double(8字节) %lf 15位有效
long double (不小于double) %lf(必须进行初始化,会出现异常)
科学计数法 %e(可以输出任意数字)
浮点型后缀
正常小数默认为double类型的数,直接赋值到float类型的变量中会发生截断,在小数后加一个后缀就可以转化为相应类型的数据
float f=12.12f;//没有f会发生截断,f或者F都可以
long double=12.12L;//long double类型用l或者
浮点型的内存存储
float
最高位是符号存储:0是正数,1是负数
8位指数位
23位有效数位
double:1个符号位,11个指数位,52位有效数位
注意
使用浮点型时要赋值0.0,不要赋值0,会有微小的差异
有效数位:从前到后的数字精度,有效精度的后的数字不一定准确,具体的有效数位要看编译器规定
所有浮点型下数都默认输出到小数点后6位,在格式化输出符号%后可以调整输出的位数等信息
%5.2f //表示一共输出5位数字(包含小数点),前面不够用空格补上,小数点后输出2位,被舍弃的位数会四舍五入。如果在5前加一个负号就是左对齐,不加就是右对齐
(3)字符型
2、构造类型
(1)数组
(2)结构体
(3)联合
(4)枚举
3、指针%p
4、数据类型的使用
声明
int a=123;
变量名尽量用英文,字母个数不限制
变量要跟变量的类型对应
赋值
int a,b;
a=10;//常量给变量赋值
a=b;//变量给变量赋值
赋值只能给变量赋值
得到类型的大小: sizeof()返回数据类型的字节数,是int类型的值
地址
每个变量对应的内存空间叫做地址
取地址预算符&(地址默认16进制表示)
print("%p"&a); //以%形式输出地址 (输出结果为0014ff20)
print("%#p"&a); //以%#形式输出带前缀的地址(输出结果为0x0014ff20)
三、变量的输入
scanf()引号里是格式化输出符号,引号外是引号内符号变量对应的地址(不加取地址符不会报错,但运行时出现崩溃)
不要在引号里加入\n,会导致无法结束输入
#include <stdio.h>
int main(void)
{
int a=12;
int b=34;
scanf("%d",&a);//输入单个变量后按回车,程序继续运行
scanf("%d%d",&a,&b);//输入多个变量时默认使用空格将变量分开
scanf("%d,%d",&a,&b);//在设计时使用什么符号隔开,在输入时就要使用什么符号分开
return 0;
}
四、运算符
1、赋值:=
左侧必须是变量,右侧可以是变量也可以是常量,必须与变量的类型相同
连续赋值:
a=b=c=12;//从右到左进行赋值,先c赋值为13,再b赋值为c...,常量只能出现在最右边
注:当左右数据类型不同时,可能会产生内存截断等问题
2、加、减、乘、除、取余(+ - * / %)
符号两边都可以是变量或者是常量
输出
b=a+14+16+10;//先进行运算再进行赋值
注:整型除法结果只保留整数,只能对整型取余
运算顺序是有括号()时先计算括号里的,大多与数学中一致(去查c语言运算符优先级表)
计算机只能对同种类型的数据进行运算,不同类型混合运算,系统要先进行转换,才能计算。类型转换,可能造成内存截断,使结果产生错误,或者出现我们不想要的结果
自增自减(变量加或者减1)
自增自减符号在变量前还是变量后的运算过程不一样
在变量前时,变量先进行语句的计算,最后进行自增自减
在变量后时,变量先进行自增自减的计算,最后运行运算语句
int a=12;
int b=12;
int c=a++;//a的值为13,c的值为12
int d=++b;//b的值为13,d的值为13
注:同一个变量的自增自减不能同时出现在一个语句中,不同的编译器得到的结果不同
复合赋值运算符
a+=1;//与a=a+1相同
a-=1;
a*=1;
a/=1;