❣博主主页: 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字符型

charsigned 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 = 1int b = ++a;//a=a+1=2,b=2printf("%d",b);

后置++,计算口诀:先使用,后+1

int a = 1int 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等等的相关内容进行介绍。但依然有不足的地方,欢迎大家指正,我会继续学习!


下期预告:分支和循环