文章目录
基本数据类型
一、基本数据类型
数据的含义:一些事物的特征,比如身高183cm
C语言的数据类型:基本数据类型、构造数据类型、指针类型、空类型
1.1 基本数据类型
基本数据类型包含整形、浮点型、字符型;
基本数据类型特点:知道分配空间的大小。
1.1.1 整型
关键字: int
分配的空间大小: 编译器不同,空间大小不同,一般是4个字节
按符号来分,符号就是正数和负数的意思。
signed 有符号 //默认有符号,可以省略
数据是按位存储的,符号,存储在最高位
最高位是符号位,其余的位为数据位
unsigned 无符号 //不能保存有符号的数据,不能保存负数
所有位存储的都是数据位
当写无符号的数据时,必须写unsigned 定义,不能省略
例:
unsigned (int) a;
signed (int) b;
a就是无符号整形变量,b是有符号整形变量。
按大小来分:
短整型 :
关键字:short int 分配空间大小:2个字节
整型:
关键字: int 分配空间大小:4个字节
长整型:
关键字:long int 分配空间大小:4个字节
数据有效取值范围:
有符号数据
最大值: 最高位存储符号位 剩余31位数据位
符号位为0 剩余31位存1 ---->2147483647
0111 1111 1111 1111 1111 1111 1111 1111
最小值: 符号位为1, 剩余31位存0 ----> -2147483648
1000 0000 0000 0000 0000 0000 0000 0000
无符号数据
最大值: 32位全部都是数据位,32存1 ------> 4294967295
最小值: 32位全部都是数据位,32存0 ----> 0
1.1.2 浮点型
分为两类:单精度、 双精度;
单精度 关键字 :float 精度:6位
所占空间大小: 4个字节 //精度:6位
双精度 关键字:double
所占空间大小:8个字节
浮点型的数据:在存储的空间中,分为三部分:符号位+小数部分+指数部分
二、数据溢出问题
给变量赋值什么样的数值,并不代表字体会保存多大的数值,需要依据数据类型来决定你能保存多大的数值。
数据类型决定数据的取值范围,如果超出了数据类型的取值范围,就会发生数据的溢出,
数据如果从最大值方向溢出,数据会从最小值开始计数
数据如果从最小值方向溢出,数据会从最大值开始计数
为了便于举例,我使用char定义一个整形变量:
如:unsigned char a; //a是一个占有8个bit的内存空间,并且无符号的变量
a的取值范围是:0~255
若赋值a=256,由最大值方向溢出,就要从最小值计数,溢出1,所以a=0;
若赋值a=-1,由最小值方向溢出,就要从最大值计数,溢出1,所以a=255;
总结:给变量赋值的时候,一定要遵循数据的取值范围,否则,你给变量的值,并不是系统保存的值,这是数据范围一种环状结构
三、常量与变量
3.1 常量:
常量的分类:整型常量 实型常量 字符常量 ‘\0’
字符常量:打印字符 ,转义字符
‘\n’:换行
‘\t’:制表符
‘\r’:回车不换行
概念:在程序运行中,其值不能改变的量叫做常量
字符串:不是一种数据类型
用双引号来表示 “hudegi” “g” + ‘+’ “+”
字符与字符串之间的关系:
字符串:由多个字符来构成
‘h’ ‘e’ ‘l’ ‘l’ ‘o’ 字符
‘h’ ‘e’ ‘l’ ‘l’ ‘o’ ‘\0’ == “hello” 字符串
3.2 变量:
概念:在程序运行中,其值可以改变的量叫做变量
3.2.1 变量的定义
变量定义形式: 数据类型 变量名
int
char 变量名
int b,a;
变量名:符合标识符的命名规则
标识符的命名规则:
a、是由字母、数字、下划线、美元符($)组成
b、开头不能是数字
c、变量名不能是关键字,一般变量名是小写
变量名尽量取得有意义一点,区分大小写
3.2.2 变量的赋值
初始化: 定义变量的同时并赋值
double mn = 12;
将12赋给变量mm
赋值:先定义好变量,再赋值
double mn;
mn=12;
3.2.3 变量名的理解
char a;
表示在内存空间分配了一个字节的空间,并命名为a;
对a空间进行写操作,将数值写到该空间,
此时变量a必须在赋值运算符的左侧
对a空间进行读操作,将该空间的数值取出来,进行相关的运算
此时变量a必须是赋值运算符的右侧
实际项目中,变量名更多是用英语的缩写/本身英语代替;
比如:临时变量t/temp
用作计数的功能是i/j
年龄用age,身高用tall
初学者常用拼音做变量名,但是在程序界看来是十分的不专业,即是不违反编程语法
使用变量名应遵循英语命名/公司使用的命令规范。
四、输入输出函数
4.1 printf()函数
函数功能:输出函数
函数形式:printf(“格式控制”,输出列表)
格式控制:
双引号里面的内容是什么就输出什么,
格式控制符:控制数据输出的格式
%d :以十进制的形式输出数据
%c : 输出字符型数据
%f : 输出浮点型数据
%s : 输出字符串
%u : 输出无符号数据
%o : 输出八进制
%x : 输出十六进制数据
%p : 输出地址数据
%#p : 输出完整的十六进制地址数据
%lf : 输出双精度数据
%ld :输出长整型数据
转义字符:功能字符
格式控制符特殊的使用形式:%d %f
4.1.1 %[整数]d : 控制数据输出的宽度
%[正整数]d : 向右对齐,左补空格
%[负整数]d : 向左对齐,右补空格
注意:当数据原有的宽度大于所要控制的数据的宽度的时候,数据会原样输出
4.1.2 %[.整数]f: 控制的是小数位数输出的宽度
注意:在控制(保留)小数位数输出的时候,会四舍五入
输出列表:所要输出的数据
输出列表中的内容,跟格式控制符在位置,数量上一一对应
如果输出列表中的数据是多个的话,要用逗号隔开
输出函数的作用:起到提示的作用,用来代码调试
4.2 scanf()函数
函数功能:输入函数(键盘获取数值)
函数形式:scanf(“格式控制”,地址列表)
格式控制:原样输入,原样输出
注意:如果输入的是double类型的数据,需要以%lf形式输入数据
格式控制符:
%d :以十进制的形式 输入数据
%c : 输入字符型数据
%f : 输入浮点型数据
%s : 输入字符串
%u : 输入无符号数据
%o : 输入八进制
%x : 输入十六进制数据
地址列表: 取地址符 &
注意:格式控制里面输入什么,就输出什么,
格式控制里面,可以有逗号,有空格,有其他的,但必须都要
在终端要原样输入,一般转义字符不能加,如果有转义字符
则必须输入转义字符
对于整型数据来说:scanf("%d%d",&a,&b);
在输入数据的时候,中间可以加空格,区分数据
对于字符型的数据来说:scanf("%c%c",&a,&b) ;
scanf()函数会识别字符,包括空格键,回车键,
并保存在变量中,所以在输入字符的时候,中间最好不要用空格
如果格式控制里面有空格的话,在输入的时候就可以
练习:在终端中输入小三的姓名、身高、年龄,和语文成绩。
4.3 getchar
4.4 putchar
使用例程:
#include <stdio.h>
int main(int argc, char *argv[])
{
char c;
printf("Hello \n请输入一个字符:");
c=getchar();
printf("你输入的字符是:");
putchar(c);
printf("\n");
return 0;
}
五、数据类型的转换
1)数据类型自动转换
原理:当数据类型不一样时,系统自动转换,不需要人为操作
能够发生自动转换的条件:低精度向高精度转换
精度从低到高的顺序:
char->short–>int–>long–>float–>double
3 (int) 5.67(double)
2)数据类型强制转换
原理:人为操作,将高精度的数据转换为低精度的数据
形式:int a; float b;
a=(int)b
(需要转换成为的数据类型)变量