❣博主主页: 33的博客❣
▶文章专栏分类: C语言从入门到精通◀
我的代码仓库: 33的代码仓库
数据类型和变量
- 1.前言
- 2.C语言数据类型介绍
- 2.1字符型
- 2.2整型
- 2.3浮点型
- 2.4布尔类型
- 2.5各种数据类型的长度
- 3.signed 和unsigned
- 4.数据类型和取值范围
- 5.变量
- 6.算术操作符 + – * / %
- 7.赋值操作符 =
- 7.1连续赋值
- 7.2复合赋值
- 8.单目操作符 ++ — + –
- 8.1++和–
- 8.2 +和-
- 9.强制类型转换
- 10.scanf 和 printf介绍
- 10.1printf
- 10.1.1基本用法
- 10.1.2 占位符
- 9.1.3输出格式
- 10.2 scanf
- 10.2.1基本用法
- 10.2.2 赋值忽略符
- 11. 总结
1.前言
在前一篇文章中,我们已经对c语言的基本概念进行了学习,这篇文章我们将更进一步的去学习c语言的有关知识。
本章重点:
本篇文章主要对c语言的数据类型,数据类型的取值范围,变量,算数操作符,赋值操作符,单目操作符,强制类型转换等等进行介绍。
2.C语言数据类型介绍
所谓类型,就是相似的数据所拥有的共同特性,下面盘点一下c语言提供的各种数据类型
2.1字符型
char【signed char】//有符号字符型【unsigned char】//无符号字符型
2.2整型
short //短整型int//整型long [int]//长整型
2.3浮点型
float //单精度浮点型double//双精度浮点型
2.4布尔类型
引入布尔类型专门用来表示真假
_Bool
代码演示
int main(){_Bool a = ture;if(a){printf("是真的");}}
2.5各种数据类型的长度
每种数据类型都有自己的长度,那么使用不同的数据类型,就能创造出不同长度的变量,那么我们该如何求出数据类型的长度呢?我们引用sizeof操作符。
sizeof是专门用来求操作符的类型长度的,单位是字节。
那么接下来我们一起求一下数据类型的长度
int main(){ printf("%zd",sizeof(char)); printf("%zd",sizeof(short)); printf("%zd",sizeof(int)); printf("%zd",sizeof(long)); printf("%zd",sizeof(float)); printf("%zd",sizeof(double));}
那么就可以求出各数据类型的长度:char为1byte,short为2,int为4,long为8,float为 4,double为 8.
注:计算结果是size_t类型,无符号整型用%zd表示
sizeof求表达式的时候,表达式不计算
int main() {short a = 2;int b = 10;printf("%zd\n", sizeof(a = b + 1));printf("%zd\n", a);return 0;}
发现运算后,a的值依然为2
3.signed 和unsigned
signed 和unsigned都为关键字,修饰字符型和整型,signed 表示一个类型带有正负号,unsigned表示该类型不带正负号,只能表示0和正数。
signed int a;//等同于int aunsignedint a;//等同于 unsigned asigned char c//不等同于char!!!
4.数据类型和取值范围
数据类型非常多,尤其是整型就有,short,int,long,longlong,这是为什么呢?其实每一种数据类型都有自己的取值范围,也就是存储的数值的最大值和最小值。如果要查看当前系统的极限值:limits.h说明了整型的取值范围,float.h说明了浮点型的取值范围。
5.变量
了解清楚了类型,那么我们使用类型是干什么呢?其实类型是用来产生变量的,什么是变量呢?c语言中经常变化的量就称为变量,一直不变的量就称为常量
变量的创建语法如下:
data_type name;//data_type为数据类型 name为变量名int a;//整型变量achar b;//字符变量bdouble c;//浮点型变量c
变量的分类:局部变量和全局变量
局部变量:在大括号内部定义的变量,使用范围比较局限,只能在大括号内部使用。全局变量:在大括号外部定义的变量。当局部变量和全局变量符号相同的时候,局部变量优先。局部变量放在内存的栈区,全局变量放在内存的静态区。
6.算术操作符 + – * / %
算数操作符也被叫做、运算符,分别是**+ – * / %**,这些操作符称为双目操作符,双目操作符是指,有两个操作数,操作符两端就是操作数。
+和-用来完成加法和减法;*和/用来完成乘法和除法。但值得注意的是在进行除法运算时,除号的两端如果是整数,得到的结果也是整数。结果只会返回整数部分,那么该如何得到为结果为小数的值呢?那么两个运算数必须至少有一个是浮点数。
我们可以来看个例子
int main(){float a = 6/4;//结果为1.000000float b= 6.0/4;//结果为1.500000printf("%f\n",a);printf("%f\n",b);}
因为/的结果只能返回整数部分,那么余数部分怎么求呢,其实我们只需要用%来求余,负数求余的规则是结果的正负由第一个运算数的正负决定。
7.赋值操作符 =
在变量创建的时候给一个值叫做初始化,在变量创建好以后,再给一个值就是赋值
7.1连续赋值
int a = 2;int b = 3;int c = 4;c = b = a+c;//把a+c赋值给b,b=6,再把b赋值给c=6
7.2复合赋值
int a = 2;int c = 4;int a += 3;//等价与a=a+3int c -= 3;//等价与c=c-3
注:a+=3与a=+3是有区别的,前者表示a=a+3,后者是a=正3
8.单目操作符 ++ – + –
操作符只有一个操作数被称为单目操作符,分别是++,–,+,-
8.1++和–
++是一种自增的操作符,分为前置++和后置++;–是一种自减的操作符,分为前置–和后置–
前置++,计算口诀:先+1,后使用
int a = 1;int b = ++a;//a=a+1=2,b=2printf("%d",b);
后置++,计算口诀:先使用,后+1
int a = 1;int b = a++;//b=a=1,a=a+1=2printf("%d",b);
同理可以得到前置–,计算口诀:先-1,后使用;后置– ,计算口诀,先使用,后–;
8.2 +和-
这里的+是正号,和-号,都是都是单目操作符,运算符+不会对正负值没有影响,一般可以省略,但是,写了也不会报错。运算符-用来改变一个值的正负,负号前面加上-就会变成正数,正号前面加上-就会变成负数。
9.强制类型转换
在操作符中还有一种特殊的操作符是强制类型转换,语法的形式很简单,如下:
(类型)int a = 3.14;//其中a是int类型,3.14是double类型,两边类型不一致会报警//消除警告方式可以使用强制类型转换int a =(int)3.14;/
10.scanf 和 printf介绍
scanf 和 printf的使用都需要包含
10.1printf
10.1.1基本用法
printf()的作用是将参数文本输出屏幕。它名字里面的f代表format(格式化),表示可以定制输出的文本格式。printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出解释的地方,不会自动换行,为了使光标换号可以使用换行符\n换行且文本内部换行也是用\n来表示;
int main(){printf("hello world\n");printf("hello\n world\n");}
10.1.2 占位符
所谓占位符,就是这个位置可以用其他值代入。细心的同学已经发现在前面,我已经频繁使用过了,用%表示的。占位符的第一个字符一律为%,第二个字符表示占位符的类型。
int main(){int a = 3;printf("%d",a)}
常见的占位符:
%s : 字符串
%c : 字符
%d :十进制整数
%zd:size_t类型(sizeof中用到)
%p :指针
%%输出一个%
9.1.3输出格式
限定宽度格式:%nd,允许限定占位符的最小宽度为n,默认为右对齐,不满n为前面自动补齐,如果希望改为左对齐,则改成%-nd。
int main(){int a = 32;printf("%5d",a)//输出’ 32‘printf("%-5d",a)//输出’32‘}
如果想限定小数的位数,例如希望保留小数点后保留2为,整数部分保留3位,如下:
int main(){printf("%6.2f\n",0.5)//输出' 0.50’}
总是显示正负号格式:%+
int main(){printf("%+d",12)//输出+12printf("%+d",-12)//输出-12}
输出部分字符串格式:%.【m】s
int(){printf("%.5s","hello world");//输出hello}
10.2 scanf
如果我们要给变量输入值,可以使用scanf2,如果要打印在屏幕上,就可以结合上方所学的printf函数。
10.2.1基本用法
scanf()用于读取用户的键盘输入,程序运行到这个语句时,会停下来等待用户输入,用户输入数据时,按一下回车,scanf就会处理用户的输入,scanf的返回值是一个整数,表示成功读取变量的个数。除了%c之外都会忽略空白字符
int main(){int a = 0;int r =scanf("%d\n",&a)//输入数aprintf("%d %d\n",a,r)//打印数a,读取变量的个数r}
10.2.2 赋值忽略符
有时,用户的输入可能不符合格式,如下:
int main(){int a = 0;int b = 1;int c = 1;scanf("%d-%d-%d",&a,&b,&c) ;//输入格式只能是例如 1-3-4printf("%d %d %d",a,b,c) ;}
如果输入a b c就会出现错误,为了避免这种情况,scanf提供了赋值忽略符*,只要把 * 加入在任何%的后面,该占位符就不会返回值,解析后将被丢弃。
int main(){int a = 0;int b = 1;int c = 1;scanf("%d%*c%d%*c%d",&a,&b,&c) ;//输入格式只能是例如 1-3-4printf("%d %d %d",a,b,c) ;}
11. 总结
本篇文章主要对c语言的数据类型,数据类型的取值范围,变量,算数操作符,赋值操作符,单目操作符,强制类型转换,printf和scanf等等的相关内容进行介绍。但依然有不足的地方,欢迎大家指正,我会继续学习!
下期预告:分支和循环