C语言的类型
基础
sizeof是一个运算符 格式=sizeof(类型名称 列如int i等)
sizeof是一个静止的运算符 不能在括号中间进行运算
不同类型的字节大小 char=1;short=2;int=4;float=4;double=8,long=4。
long long=8,long double=8;
\\一个字节=8比特;
//整数的输入与输出
unsigned可以移位,将负数除去,扩大正数
int long long
. %d:int
.%ld:long long
.%u:unsigned
%lu:unsigned long long
\\整数的选择:如果没特别的要求一般都用int
//浮点数类型
float,4个字节,有效数字为7;32个字长.
double,8个字节,有效数字15;字长64.
\\浮点数的输入与输出
float scanf %f printf %f,%e
double scanf %lf printf %f,%e
\\科学计数法
列 10000 为1e4; -1200为-1.2e3; 0.0012为1.2e-3
\\输出精度
在%和f之间加上.n可以保留n位小数,为四舍五入.
\\浮点运算的精度
带小数点的字面量是double,float需要用f/F来表示身份.
//由于浮点数有误差,所以f1==f2可能会失败
//解决方法
\\fabs 浮点数求绝对值 fabs(-a)=a
\\abs 整数求绝对值abs(-a)=a{不能拿来求解浮点数}
故当fabs(f1-f2)<1e-10一定精度时可满足,一般为1e-8;
double的为1e-18;
\\选择浮点类型
一般都用double.
\\字符类型
char 是一种整数,也是一种字符
用单引号表示字符的字面量:'a', '1'。
' ' 也是一种字符
printf和scanf里有%c;来表示输入和输出字符。
\\字符的输入与输出
scanf(“%c”,&c)
printf(“%c”,c)
\\特殊的情况
//scanf为%d时不能处理char,所以要赋值char给int。
int c;
char i=‘1’
c=i
scanf("%d",&c)
\\字符的计算
一个字符加上一个数字得到ASCLL码表那个数之后的字符;相减得到两字符之间的距离,可用来转化大小写字母。
\\逃逸字符
定义:无法打印的字符
字符 | 意义 | 字符 | 意义 |
\b | 回退一格 | \" | 双引号 |
\t | 到下一个表格位 | \' | 单引号 |
\n | 换行 | \\ | 反斜杠本身 |
\r | 回车 |
\\类型转换
//自动类型转换
自动向大范围的转换
char<short<int<long<long long
int<float<double
\\scanf不会自动转换,printf会,故scanf需要%hd
\\强制类型转换(一般为大到小转换)
(类型)值
(int)10.2
注意小的类型不一定能包含大的值所以需要注意
//强制类型的优先级高于四则运算
\\逻辑类型
使用条件:#include<stdbool.h>
定义条件之后可以使用bool和true;false
\\逻辑运算
结果只有0和1 0是false 1是ture
运算符 | 描述 | 示例 |
! | 非 | !a |
&& | 与 | a&&b |
|| | 或 | a||b |
//单目的运算符高于双目的运算符
优先级 !>&&>||
优先级 | 运算符 | 结合性 |
1 | () | 从左到右 |
2 | ! + - ++ -- | 从右到左(这里的+ -为+1 -1这种) |
3 | % * / | 从左到右 |
4 | + - | 从左到右 |
5 | <= < > >= | 从左到右 |
6 | == != | 从左到右 |
7 | && | 从左到右 |
8 | || | 从左到右 |
9 | = += -= *= /= %= | 从右到左 |
\\短路
双目会短路,单目不会
&& 且· 一错全错
|| 或 一对全对
\\条件运算
列 count=(count>20)? count-10 : count+10;
可嵌套 优先级在赋值前1个
\\逗号运算
优先级最低 自己找感觉。
函数
\\什么是函数? 接收零个或多个参数做一件事然后返回零个或一个值
\\定义:由函数头,函数名,函数体,返回类型,参数表组成。
eg:void sum(int a,int b)
{int i;
int sum=0;
`````
}
\\函数头:由返回类型,函数名,参数表组成。
\\返回类型 列如void
\\函数名 列如sum
\\参数表 为括号里的内容
\\函数体 为{}里的内容
!!!()起到了调用的作用
\\从函数中返回值
return停止函数执行并返回一个值
(1 return; 2 return 表达式)
省流 eg:
当c=max(a,b);时就需要将函数值返回给c所以需要return 表达式
但不需要返回时可以使用return;且返回类型void
\\函数的书写
一般写在int main()之后,但此时程序错误,故需要在前面加上(函数的原型)
函数原型:函数头以分号结尾可构成。
c语言会自动转换类型在调用函数时,从而使结果被吞掉。
变量的生存期和作用域:了解一下即可
没有参数时void swap(void) 当为void swap()时编译器会猜。
函数定义不能嵌套
int main()也是一个函数 return 0;有人看,用来报错。
int fun()与int fun(void)的区别
前者可以编译但()里的会被丢弃
后者()里不能有代码不然会报错
数组
介绍:数组相当于一个容器,用来存放数据。
定义:
1格式 <类型>变量名称[元素数量];
2组成 类型 名称 元素数量(必须为整数)
c99之后元素数量可以为变量,但确定一次之后就不能改变了
特点:所有类型都是相同的数据类型;
一旦被创建就无法被改变
数组元素在内存中是连续依此排列的
数组的单位
[]中的数字叫做下标 从0开始数
有效下标的范围
当超出范围时会报错
int a[0];可以存在但没有作用。
\\数组的运算过程
确定数组的大小
定义数组
初始化数组 for遍历或int count[num]={0};
数组参与运算
遍历数组输出
\\const代表着不能修改
\\数组的集成初始化 eg: int a[]={2,3,4,23,45,1,}
集成初始化的定位
eg:int a[10]={[0]=2,[4]=5,9,3,2,}
用[n]在初始化数据中给出定位
没有定位的数据接在前面的位置后面
其他位置的值补零
也可以不给出数组大小,让编程器算
特别适合初始数据稀疏的数组
数组的大小
sizeof(数组)可求出数组的大小
sizeof(a[0])可求出一个位置的大小
故数组的长度=sizeof(a[])/sizeof(a[0]);
数组的赋值
有且只有遍历
数组作为函数的参数时,不能在[]中给出数组的大小
不能再用sizeof来计算数组的元素个数了
当数组作为函数参数时,往往必须在用另一个参数来传入数组的大小
二维数组
int a[3][5]理解为三行五列的矩阵
二维数组的遍历需要两个for循环遍历
二维数组的初始化
列必须给出来,行数可以由编译器来数
每行一个{},逗号分隔
最后的逗号可以存在,有古老的传说
如果省略,表示补零
也可以用定位
若有收获,就点个赞吧