C语言入门教程-(3)基本数据类型
1.数据类型
在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。C语言数据类型可以分为四种:
1.基本类型:
它们是算术类型,包括两种类型:整数类型和浮点类型。2.枚举类型:
它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。3.void 类型:
类型说明符 void 表明没有可用的值。4.派生类型:
它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。
本节内容主要学习的是基本类型,以及简单的介绍一下void类型。其他的类型在后续的章节中,将会慢慢的接触到,不用太担心。
2.整数类型
2.1 int型
int类型,就是没有小数的部分,比如2、500、0、-100。
用法如下:
int timoHp = 586;//timo的血量是586;
2.2 char型
char类型用于存放一个字符,值用两个单引号''来表示 (双引号表示字符串)。编程语言通过使用字母的数值编码来解决字母的存储,因此char类型是另一种整型。字符集的字符用数值编码(ASCII码)表示。例如,字符'A'的编码是65,字符'B'的编码是66。
用法如下:
//char 只能存放一个字符,超过一个字符就会产生编译错误
char c = 'a';
char c1 = '盖';
char c2 = '伦';
2.3 bool型
在计算中,bool变量的值可以是true或false。我们经常将非零值解释为true,将零解释为false。举一个简单的例子,我们可以这样编写语句:
bool timoLive = true;
字面值true和false都可以通过提升类型转换为int类型,true被转换为1,而false被转换为0:
int timoLive = true;//stick的值是1
int timoKill = false;//egg的值是0
另外,任何非零值都可以转换为true,而非零被转换为false:
bool timoHp = 586;//timoHp的值是true
bool timoSpeed = -10;//timoSpeed的值是true
bool timoAttack = 0;//timoAttack的值是false
3.浮点类型
浮点数能够表示带小数部分的数字,它们的表示范围也更大。浮点数在计算机中的存储分两部分,一部分表示值,另一部分用于对值进行放大或缩小。举个简单的例子来帮助大家理解计算机中的浮点数,比如说过情人节了,我们给女朋友发个红包表示一下心意。我们需要表示的数额分别是13.14和1314,它们除了小数点的位置不同外,其他都是相同的(帮你们找了一个极好的借口)。至少计算机是这样看的,至于女朋友怎么看~~~在计算机中,第一个数可以表示为0.1314(基准数)和100(缩放因子),第二个数可以表示为0.1314(基准数)和10000(缩放因子)。缩放因子的作用就是移动小数点的位置,这其实也是浮点数术语的来源。计算机中的实际表示其实不是这样的十进制,而是基于二进制,这里我们简单的明白这个原理就行了。
3.1 书写浮点数
浮点数的书写方法有两种,一种是我们使用的标准小数点表示法:
3.14
5.0
0.52
第二种是E表示法:
3.14E+2
1.26e-4
5E6
-20.18E10
3.14E+2
上面的数字就是E表示法,比如说3.14E+3,这里的意思是3.14的小数点向右移动3位。其中前面的符号位可以是正号(+)或者负号(-),小数点也是可选的,可以使用E或者e,后面的符号可以是+、-或者省略,后面的数字代表移动的位数。
3.2 单精度浮点数(float)和双精度浮点数(double)
浮点数根据范围和精度不同分为两种:单精度浮点数(float)和双精度浮点数(double)。一般来说,处理单精度浮点数的速度比处理双精度浮点数快。
单精度浮点数一般占4个字节,32位。单精度浮点数1位符号位,8位指数,23位小数。float的小数位只有23位,能表示的最大十进制数为2的23次方,即8
388
608,相当于十进制的7位,严格点说,精度只能百分百的保证十进制的6位。所以我们一般说有效数字是8位。单精度浮点的表示范围:-3.40E+38 ~
+3.40E+38。双精度浮点数一般占8个字节,64位。双精度浮点数1位符号位,11位指数,52位小数。小数位能表示的最大十进制数为2的52次方,即4
503 599 627 370
496。这是一个16位数,所以精度能百分百的保证十进制的15位。所以有效数字为16位。双精度浮点的表示范围:-1.79E+308 ~
+1.79E+308。
简单的用法如下:
float timoArmor = 150.7; //timo的护甲是150.7,查看VS中armor实际的值可以看到是150.699997
double timoAttackSpeed = 0.865;/*timo的攻击速度是0.865,查看VS中attackSpeed实际的值可以看到是0.86499999999999999*/
与整数相比,浮点数有两大优点。第一个是浮点数可以表示整数之间的值,可以表示小数。第二个是浮点数的表示范围比整数大的多。浮点数也有两个缺点,一个是浮点数运算的速度通常比整数慢,而且精度将降低。下面通过一个简单的程序来说明:
float a = 3.14E+22;
float b = a + 1.0;
该程序定义一个float类型a,然后b是a+1,试问运行程序b-a是多少?我们认为结果应该为1,但是在我们程序运行结果中,b-a将会是0。产生这个问题的原因就是3.14E+22是一个小数点左边有23位的数字,加上1,就是在第23位加1,但是float类型只能表示8位数字有效,因此对这个值不会有任何影响。
4.void类型
void的意思是“无类型”,表示函数没有返回值以及对函数参数做限定。这里如果不理解的话,可以先看看就好了,以后讲到函数就懂了。如果不用void,比如用int或者别的,则函数需要有返回值。void就是不需要结果,否则如int、char等,就必需返回一个与其对应的数据才能编译通过。void不能用来定义变量,让我们试着来定义:
void a;
这个语句编译时会出错。不过,即使编译不会出错,它也没有任何实际意义。
5.总结
总结一下,本节内容主要介绍了C语言程序的基本数据类型。介绍了基本类型的整数类型和浮点类型,以及简单的讲解了void类型。整数类型又包括int型、char型、bool型,浮点类型又包括单精度浮点数(float)和双精度浮点数(double)。
6.练习
3-1 下面的程序,第一处i的值是什么?第二处i的值是什么?
char ch = 'A';
int i = ch;//第一处i
ch = ch + 1;
i = ch;//第二处i
3-2 编写一个程序,对盖伦的属性值,找到合适的类型来定义。
名字:简称为G
生命值:455
移动速度:340
攻击速度:0.625
攻击范围:125
生命回复:8.25
攻击力:59.5
可以在评论中,写下你们的练习答案。
之后的文章会给大家带来更精彩的内容
欢迎关注我的知乎专栏:程序员基础知识
获取练习答案以及更多实战项目
欢迎关注我的公众号:程序员基础知识
交(gao)流(ji)群:493584686
C语言入门教程-(3)基本数据类型的更多相关文章
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- C语言入门教程-(5)格式化输入输出
1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...
- Go语言入门教程(十)之函数
Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...
- 《JavaScript语言入门教程》记录整理:面向对象
目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...
- Go 语言入门教程,共32讲,6小时(已完结)
Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/
- c语言入门教程 / c语言入门经典书籍
用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...
随机推荐
- ci钩子
钩子 - 扩展框架核心 CodeIgniter 的钩子特性提供了一种方法来修改框架的内部运作流程,而无需修改 核心文件.CodeIgniter 的运行遵循着一个特定的流程,你可以参考这个页面的 应用程 ...
- PHP 内置函数strlen 和mbstring扩展函数mb_strlen的区别
#EXAMPLE $str_uncode = "简体中文Chinese(Simplified)"; //统计字符串长度 echo strlen($str_uncode).'< ...
- Android如何避免OOM总结
转自:https://blog.csdn.net/ljx19900116/article/details/50037627 前面介绍了一些基础的内存管理机制以及OOM的基础知识,那么在实践操作当中,有 ...
- java与C++相比增加和缺少的特性--持续更新
缺少的特性 java值类型中没有无符号数 java没有运算符重载语法 java中没有struct和union等用户自定义值类型 java中没有虚函数的概念,所有函数默认具有虚函数的特性 java采用单 ...
- 访问控制列表-ACL匹配规则
1 .ACL匹配机制 首先,小编为大家介绍ACL匹配机制.上一期提到,ACL在匹配报文时遵循“一旦命中即停止匹配”的原则.其实,这句话就是对ACL匹配机制的一个高度的概括.当然,ACL匹配过程中,还存 ...
- JVM类加载机制详解(二)类加载器与双亲委派模型
在上一篇JVM类加载机制详解(一)JVM类加载过程中说到,类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可 ...
- 【BZOJ4027】兔子与樱花(贪心)
[BZOJ4027]兔子与樱花(贪心) 题面 BZOJ 洛谷 题解 很直观的一个感受就是对于每个节点, 考虑它的所有儿子,如果能删就删. 那么我们把所有儿子按照给删去后给父亲\(c[i]\)的贡献从小 ...
- BZOJ3601 一个人的数论 【数论 + 高斯消元】
题目链接 BZOJ3601 题解 挺神的 首先有 \[ \begin{aligned} f(n) &= \sum\limits_{x = 1}^{n} x^{d} [(x,n) = 1] \\ ...
- loj2538 「PKUWC2018」Slay the Spire 【dp】
题目链接 loj2538 题解 比较明显的是,由于强化牌倍数大于\(1\),肯定是能用强化牌尽量用强化牌 如果强化牌大于等于\(k\),就留一个位给攻击牌 所以我们将两种牌分别排序,企图计算\(F(i ...
- 【bzoj3730】 震波
http://www.lydsy.com/JudgeOnline/problem.php?id=3730 (题目链接) 题意 给出一棵树,每个节点又一个权值.两个操作,询问距离节点${x}$不超过${ ...