大家好,我是码哥,今天给大家带来一期C语言的数据类型和变量,我觉得这些东西主要是多运用,运用得多了就能掌握了。
1.数据类型介绍
生活中我们能够遇到各种各样的数据,我们会将收到的数据有个大致的分类,数据类型的作用就是将计算机得到的数据进行分类,比如给了一个数据“20”,编译器是如何知道怎么操作它的呢,这就需要用到数据类型中的int 来声明他是一个整形数据(也就是整数),再比如给了一个数据“3.14”,这就需要用到float或者double来声明它是一个浮点数(小数),若是一个字符‘a’时,则需要用char来声明。
1.1字符型
Char:用来描述一个字符或一个字符串(多个字符)
比如:
[signed] char 表示有符号的字符
[unsigned] char 表示无符号的字符
1.2整型:描述一个整数
Int 普通整数
long int 长整型
short int 短整型
long long int 更长的整型
这几个整型的区别就在于他们在计算机中所占的内存空间大小不同
1.3浮点型:描述一个小数
float 描述单精度浮点数
double 描述双精度浮点数
long double 描述双精度浮点数
float 和double 的区别在于精确程度double 更精确
1.4 _bool 类型(只用于判断真假)
在C99之后引入了新的类型”_bool”类型,这个类型只用于判断真假,头文件是#include<stdbool.h>
1.5各种数据类型的长度
在C语言编译运行的过程中,数据要在计算机中占据一定的空间,下面是一些常见的类型占据的空间大小
首先给大家介绍一下空间单位
比特位(bite) 字节 Kb Mb Gb Tb
其中一个字节等于八个比特位,剩下的进制都是1024
int 占据4个字节的大小
Char 占据1个字节的大小
Float 占据4个字节的大小
Double 占据4个字节的大小
Long int占据4个字节的大小
Long long int 占据8个字节的大小
要想打印出各种类型所占空间的大小,需要用到sizeof函数,该函数是用来计算函数内容所占空间总的大小
1.6sizeof在执行时函数中的表达式不计算
sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。
2.signed和unsigned
signed和unsigned主要用来修饰int和char类型的,signed表示数据有正负号,unsigned则表示没有,而int本身就自带正负号,所以int 前面加不加signed都一样,有符号的int的范围是-32768~32767,而无符号的int的最大值是0~65535。Unsigned int 中的int也可以省略,直接写unsigned a = 0;
char的signed类型表示的范围是-128~127,unsigned类型表示的范围是0~255,但是char有没有符号主要取决于编译器,有些就认为是有符号,有些则认为没有,这与int类型有写区别
3.变量
3.1变量的创建
在设计C语言代码的过程中,我们往往需要创建一个变量并且给他赋一个值,那么什么是变量呢?顾名思义,能够发生变化的量叫变量。
例如:
Int a = 10; 数据类型 变量名 变量的初值 |
3.2变量的种类
全局变量:大括号外的变量叫做全局变量,其在整个工程中都能够被使用。
局部变量:在函数内部被定义的变量叫做局部变量,他只在自己的大括号中能够被调用
注意:如果局部变量和全局变量的名字相同,应该以局部变量为优先,并且变量名字不能与库函数或数据类型重名。
在创建变量的过程中,计算机会把变量存放在一个区域,根据存放内容不同可以划分三个区域:栈区、堆区和静态区
- 局部变量放在栈区;
- 全局变量放在静态区;
- 堆区存放动态内存管理。(目前用不到,以后再说)
- 算数运算符(操作符)
4.1 +和-运算符
“+”就是将两个常量或变量相加
比如:int a = 12 +34; 这样a的值就变成了46.
“-”是将两个量相减
比如:int x = 3 – 1; 此时x的值是2。
-
- *、/和 % 运算符
“*”是将两个数相乘
比如:int b = 3 * 4; 这样b的值就变成了12.
“/”是取整数
比如:int c = 5 / 2; 这样c的值就变成了2,把后面剩下的1给舍去。
“%”是取余数
比如:int d = 5 / 2; 这样d的值就变成了1,把前面的2去掉。
4.3 = 运算符
“=”是将一个值赋值给一个变量,因此它叫赋值运算符
比如:int a = 2; 这样就把2赋值给了a。
注意:赋值运算符也可以连续赋值
将a,b和c初始化 |
比如:int a = 1;
Int b = 0;
int c = 0;
b = c = a + 5
不过还是建议分开写,避免出错。
5.复合赋值符
在c语言中有一些单目运算符,像自增、自减运算符等
比如: int a = 0;
a++;
此时a++就相当于a = a + 1
自减运算符也是如此(--)
++和--操作符分为前置和后置,当其放在变量前面时,就是先++或—再拿来使用,后置则是先使用在++或--。值得一提的是,+和-可以是单目也可以是双目,当其是单目时可以把它们理解为正负号,双目时就把他们理解为加或减。
6.强制类型转换
强制类型转换就是把一个类型的数据强制变成另一种数据
比如:
Int a = 3.14;
这时编译器会报警,但如果改为:int a = (int)3.14;就不会报错,而是将3.14小数点后面的数字省略掉。
7.scanf和printf
scanf是输入一个数据,而printf是输出一个数据
比如:int a = 0;
scanf(“%d”,&a);//输入a的值
printf(“%d”,a);//输出a的值
当然,也可以直接输入或输出常数
在这里就不得不提到占位符了,那么什么是占位符呢,我的理解就是帮助你创建的数据占位置的符号。码哥这边有一些占位符的举例
%a :⼗六进制浮点数,字⺟输出为⼩写。
%A :⼗六进制浮点数,字⺟输出为⼤写。
%c :字符。
%d :⼗进制整数。//int
%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
%E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
%i :整数,基本等同于 %d 。
%f :⼩数(包含 float 类型和 double 类型)。//float%f double-%lf
%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。
%G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
%hd :⼗进制shortint类型。
%ho :⼋进制shortint类型。
%hx :⼗六进制shortint类型。
%hu :unsignedshortint类型。
%ld :⼗进制longint类型。
%lo :⼋进制longint类型。
%lx :⼗六进制longint类型。
%lu :unsignedlongint类型。
%lld :⼗进制longlongint类型。
%llo :⼋进制longlongint类型。
%llx :⼗六进制longlongint类型。
%llu :unsignedlonglongint类型。
%Le :科学计数法表⽰的longdouble类型浮点数。
%Lf :longdouble类型浮点数。
%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
%o :⼋进制整数。
%p :指针(⽤来打印地址)。
%s :字符串。
%u :⽆符号整数(unsignedint)。 %x :⼗六进制整数。
%zd : size_t 类型。
%% :输出⼀个百分号。
printf函数在输出时可以设置输出数据的最小宽度
比如:
printf(“%3d”,23);在输出数据时会在前面补一个空格来凑成3个最小宽度,如果希望左对齐可以在%的后面加上一个“-”。
在默认情况下输出整数时正数不会带+,如果想要带+,可以在%的后面加上+变成“+%d”
同样的,小数也可以限定位数
比如:
Printf(“%.2f”,3.1415);
在这时侯输出的数据就会只取小数点后两位,后面的会直接舍去。这种限定小数的可以与限宽的占位符结合使用
小数限位符可以与限宽限位符都可以用*来代替,只要在printf中传参就行
Printf(“%*.*f“,2,1,3.12);这时会打印出3.1
想要输出部分字符串可以在%后面加上你想取的数量变为%5s
scanf()函数可以读取用户在键盘上输入的数据,它的用法与peintf十分相似,不过在双引号后面的数据名字要取地址(指针变量除外)
例如:
int a = 0;
scanf(“%d”,&a);
scanf在处理占位符时会自动过滤空白字符,包括空格,制表符,换行符等
scanf的返回值是一个整数,它表示读取成功的变量的个数,如果没有读取到或者匹配失败就会返回0.
8.赋值忽略符
#include
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d-%d-%d", &year, &month, &day);
printf("%d %d %d\n", year, month, day);
return 0;
}
在上面的代码中,如果用户要输入2024年5月1日,那么他就只能输入2024-5-1,如果他输入2024.5.1就会出错,要想满足用户需求,就必须吧-给忽略掉,可以用“%*c“来代替
”-“,这样用户输入的容错率就更高了。
今天的C语言就到这里,感谢大家的观看。