第一次学c语言系列之——数据类型与变量!!!

前言

       相信在上一篇的文章中,我们已经学会了什么是c语言,vs2022的安装等知识。这一期文章我们主要介绍数据类型,变量,一些常见的操作符以及printf和scanf等相关知识,希望对作为第一次学c语言的你我小白有些许帮助。

一.数据类型

1.什么是数据类型(对数据进行分类

在学习数据类型之前,我们要先明白这个词为什么叫数据类型。可以将数据类型拆开来看,数据就是我们每天看到的,听到的。那么应对这么多的数据,我们要将它们管理起来更好的进行处理,就这样将数据进行了分类,数据类型由此应运而生。(当然我们还需要清楚一点,在c语言中,对所有的数据都要先指定其数据结构,然后我们才可以使用。) 

2.内置类型和自定义类型

  在这里,我用一个图来表明具体的分类,我们先不用理解,看看就行。

对于新手而言,我们只需要知道内置类型是c语言自带的,我们可以直接使用。而自定义类型我们在使用时要对它先进行定义后,才能够使用。这篇文章我们主要讲解内置类型,自定义类型后面会专门出文章来讲解。   

3.内置类型

我们在学习内置类型之前,需要先知道电脑的存储单位,关键字sizeof及signed和unsigned的区别,这样才能更好的理解内置类型。

(1)布尔(bool)类型

对于我们新手而言,关于bool类型我们只需要知道下面3点就行了:

①bool类型是用来判断真假的

②其中非0的数代表真(true),0代表假(false)

③你在使用bool类型的时候必须引用头文件stdbool.h

下面我们来看一下两个代码的对比:

首先我们可以明显的看到,如果你没有引用bool类型的头文件它就会报错,接下来我来解释一下我们第一次看到的陌生代码printf("%d\n",true),在这里我们先讲一下printf这个库函数的基本使用方法,首先是它的基本格式printf("",);c语言规定,前面的双引号里面放的内容是你要声明你打印的数据类型,逗号就是将你要声明的数据类型和具体的内容分隔开来,最后逗号后面的内容就是你要打印的东西,还有一点需要注意的是换行符只能放到双引号里面。(字符串比较特殊,我们在打印它的时候可以声明类型,也可以不声明)

(2)前置知识

在接下来我们学习的字符型,整型,浮点型,需要一些前置知识方便我们对他们更好的理解。

①存储单位

在电脑中,存储(电脑中,我们用来存放数据的地方)的最小单位是比特位,换算如下:

1bit(可以将它想象成一个存放二进制的格子)

1Byte(字节)=8bit

1KB=1024Byte

1MB=1024KB

1GB=1024MB

1TB=1024GB

……

②sizeof(关键字之一)

用来计算数据类型的长度,单位是字节。(它只计算你数据类型的长度,返回值为无符号整数,我们在打印时声明它的类型时,用%zd来表示)

③signed和unsigned的区别(关键字之一)

c语言中使用signed和unsigned来修饰整型和字符型的类型。

signed:用来修饰整型和字符型中的0,正整数和负整数,一般可以省略不写。(修饰字符型的时候,是修饰它对应的ASCII编码)

unsigned:用来修饰整型和字符型中的0和正整数。(在执行打印功能时,用%u表示)

我们这里很明显的就可以看出来,当你用错修饰类型时,他就会出现一堆不是你想打印的结果。

(3)字符型(char)

①我们要明确字符型指的存储一字节的整数,(这里的整数有两层含义一是指我们传统意义上的整数,另一个是指我们ASCII编码表中所对应的整数),分为signed char:范围是-128——127,(一般省略不写),unsigned char:范围是0——255,至于你到底要打印整数还是ASCII,取决于你用%c还是%d。

②这是具体的代码对字符类型的解释,对于新手你不用管有等于号那几行,变量我们后面会提到,你只需要能看懂它是什么类型的,给他赋的值是多少即可。

这是一个求取字符串长度的代码,我们用strlen来表示求取字符串的长度,这里的长度是你字符串结束符之前的长度,不包含\0。

(4)整型(int)

用来存贮整数的数据类型。

注:[ ]里面的内容可以省略

首先是短整型,整型,长整型和更长的整型它们的最大区别就是可存储的空间范围不同,下面我们用具体的代码来表示。

在这张图片我们明显可以看出它们的区别。(在c语言中,long>=int)

关于sizeof和unsizeof前面已经有了很明确的解释了,这里就不做过多的说明了。

(5)浮点型(float)

浮点型分为3类,分别是float,double,long double,它们的区别主要是在存储范围和精度上有区别:(打印时类型声明:float是%.nf,double是%.lf,long double是%.nLf,其中n代表你到底想打印多少位的小数,如果你不输入n的话,默认0位小数)

首先我们来看看它们精度的区别(我们用圆周率来举例子)

从这张图片里,我们很明确的看到,float从第七位开始精确度就不准确了,我们的double和long double依旧准确

下来我们来看看它们存储范围的区别:

其中,long double>=double

二.变量

1.什么是变量

在C语言中,变量是指用来存储数据类型,且它的值可以由你改变。

2.基本形式

数据类型 变量名 = 你赋给变量名的值(其中“=你赋给变量名的值”这一步叫做对变量进行初始化,对于全局变量而言,你不进行初始化会默认为0,对于局部变量而言,你不进行初始化它的值默认为随机,但是在严格的ide中,会报错比如我们的VS中)

3.变量名取名的规则

①由数字,字母和下划线组成

②不能以数字开头

③区分大小写(如Num和num是两个不同的变量)

④不能使用关键字命名

⑤不宜过长,最好见名知义 

(4)变量的分类

对于我们小白而言,我们只需要知道花括号里面的是局部变量,花括号外面的是全局变量(我们后面学到函数的知识将会有更深刻的理解),当局部变量名和全局变量名重复时,printf默认找最近的。

三.算数操作符(运算符)

专门用来计算的符号,有“+”,“-”,“*”,“/”,“%”五种。

1.“+”,“-”和“*”

我们用几行代码来感受一下:

顾名思义,这里的“+”和“-”和我们数学中是一样的,而在计算机中我们用“*”来表示乘法。

2.“/”

首先,在计算机中,我们用“/”来表示除法,观察我什么的代码,我们可以得出我们需要注意的两个点:

①当除号两边为整数时,我们的商不管你除出来是浮点数还是整数,都默认取整数

②当你想要取这个结果为浮点数时,必须在除号的两边起码一个数取浮点数。

3.“%”

①“%”叫做取模/余运算,只能用来计算两个整数的余数

②观察这两组代码,很明显我们可以看出你进行取模运算时,你余数的正负号由“%”前面的数字所决定。

:我们的算数操作符也叫做双目操作符,观察我们前面的代码可以很明显的看出来,它们在运算时都有一个符号,和两个操作数,就是因为有两个操作数,所以也称它为双目操作符。

四.赋值操作符

1.什么是赋值操作符

“=”就叫做赋值操作符,它是区别与我们数学中所学的等于号的。比如对于我们的‘int a =2’这一个代码我们正确的读法是把2赋值给a。

2.连续赋值

我们用下面这个代码来举例:

在这个代码int c这一行,就叫做连续赋值,我们是这样读取这行代码的,(从右向左依次读)把a+6赋值赋值给b,此时b的值为7,再将b的值赋给c,所以我们最终打印出来的值就是和7。

3.复合赋值符

从上面两组代码我们可以得出,它们最终打印的结果都是10。但是一个是a = a+8一个是a += 8,在这里我可以很明确的告诉你,它们没有任何的区别,我们只需要知道a += 8的意思就是把a+8赋值给了a,像“+=”这样的符号就叫做复合赋值符,像这样的符号还有很多,结合我们前面学的运算操作符,我们就得到了“-=”,“*=”,“/=”,“%=”。

五.单目操作符

只对一个操作数进行运算的操作符。例如:“++”、“--”、“+”、“-”(这里的“+”和“-”表示正负号,不是加号和减号的意思)

1.++

我们来观察什么两个不同的代码,它们的区别只是在于b这一行,但是打印出来的数字却截然不同。首先,我们需要知道++这个运算符就是指给我的操作数进行加1操作,我们的++分为前置++和后置++。

对于前置++,它是先运算再赋值。让我们用代码来解释一下,我们来看左边图片中的代码,对于第五行代码我们是这样解读的,先对a进行运算,此时a的值变为了4,然后再将a的值赋给了b,所以你最终打印出b的值就是4。

对于后置++,它是先赋值后运算。我们来看右边代码的第五行,它是先把a的值赋给了b,然后再执行a = a+1的运算,所以你最终打印出来b的值就是3。

2.--

这里关于--就不过多赘述了,他和我们的++是一样的。

3.“+”(正号)

我们观察这两个代码,可以发现有没有正号其实对我们打印结果没有任何的影响,在这里,我们知道有这个东西就行,正号我们一般省略不写。

4.“-”(负号)

 由上述两个代码我们可以得出,一是负号是不能省略不写的,二是我们可以像数学中学的那样来理解负号,第二个负负得正就打印出了正式。

六.强制类型转换

上面的代码我们可以看到,6.66是浮点型,我们给变量a定义的数据类型是整型,那么我们要强制将6.66转化成为int类型,最好在6.66前面加上(int),这就叫强制类型转化,我们强制把浮点型转化成为了整型,在这里,我们了解即可,一般也很少用到。

七.printf

1.什么是printf

①printf是一个库函数,它的作用是打印数据到屏幕上,引用这个库函数时,我们必须要引用stdio.h这个头文件。

②printf是一个复合词,它是由print(输出,在c语言中我们常理解为打印)和format组成的,正因为有了format所以它在打印数据时可以定义要打印的格式。

2.基本格式

printf("格式控制字符串",输出列表)

3.占位符

(1)什么是占位符

在格式控制字符串中占一个值,可以被其他值代替

在这个例子里面,%s就是占位符,他表示字符串格式的占位符。

(2)多个占位符的输出内容

 我们从左边这个代码里可以很好的观察出多个占位符的使用还是很简单的,而且它是一样对应的,第一个占位符对应王五,第二个占位符对应胖虎,第三个占位符对应10,从右边的代码我们可以看出,当你的输出列表的个数和占位符的数量不匹配时,它虽然不会报错,但是会读取任意值,所以我们的输出列表个数一般是与占位符的数量一致的。

4.限定宽度

基本格式:“%”+“数字”+“字母”(对于“数字”部分而言,不写符号默认左对齐并且补充好你限定的宽度,“-”表示右对齐)

注:当你在“数字”部分打上正号,它的意思其实是给你后面要打印的数字加上正号,我们知道一般打印时是不显示正号的。

5.输出部分字符串

基本格式:“%” +“.”+“数字”+“s”

通过下面的代码,我们可以很好的观察到它的应用。

八.scanf

1.什么是scanf

scanf和printf是同属于stdio.h这个头文件里面的两个库函数,scanf表示的是输入的意思,所以你在使用scanf时也要引用stdio.h这个头文件。

2.scanf在VS 2022里报错的原因及解决办法

报错的原因:在VS 2022这个IDE里面它默认scanf这个库函数是不安全的,所以会报错。

解决方法

①点击最下面的输入将报错信息中的“_CRT_SECURE_NO_WARNINGS” 放到你代码的首行,并且给它的前面加上#define,后面加上一个1就行。

②要是我们不想每次都这样处理觉得麻烦的话,可以在我们的电脑中找到newc++.cpp(我们创建的所有.c文件都拷贝自这个文件),然后将这一行代码复制过去即可,这样你以后创建的任意一个源文件都会包含这一行代码。

3.scanf的基本形式

scanf("格式字符串",&变量1,&变量2,……)

我们通过上面的代码可以观察到,相较于printf,scanf多了一个&,这是取地址的意思,因为你的printf只是打印,而scanf是你输出后要拿出来用的,所以就要存储,因此多了一个&。

4.scanf读取多个变量

scanf在使用时,你的输入会去scanf的格式字符串里面找分隔符,如果没有就默认回车和空格,下面是具体的代码举例:

(1)格式字符串里面没有分隔符

(2)格式字符串里面有分隔符

(3)拓展(赋值忽略符)

那么要是我们想要无论输入什么都可以表示分隔,同样也是可以实现的,只需要在%前面加上赋值忽略符(%*c),如下图所示

5.scanf的返回值

我们前面已经说过了在VS 2022中,你输入scanf会报错该如何解决,现在我们来处理它的警告怎么处理。

我们观察上面这个代码,不难发现它虽然可以运行,但是会报警告,警告我们忽略了scanf的返回值。

(1)什么是scanf的返回值呢

scanf的返回值表示你总共输入了几个数据,最后返回一个整数。

就像上面这样,你定义了它的返回值,它就不会给你报警告了(上面图片的左下角我们很清楚的可以看到它写的是未找到相关问题)

(2)如何终止数据的输入

ctrl z可以直接终止,你直接终止它会返回给你一个常量EOF(-1)  。

通过上面的两个代码我们就可以很好的理解终止数据的输入了。

(3)占位符

像我们常见的“%s”,“%c”,“%d”,“%f”,“%lf”,“%Lf”和我们的printf中的占位符几乎都是一个意思,下面主要讲解有区分的点。

%c

scanf在输入字符后,你用printf打印出这个字符时,不会像其他的数据类型自动忽略空格,你要想忽略这个空格,就必须在“%s”前面加上一个空格,从上图的对比中就可以很明显的看出。

九.结语

下一篇文章我们将剑指分支与循环!!!


                                                                                                                             

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值