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)基本数据类型的更多相关文章

  1. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  2. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  3. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  4. C语言入门教程-(5)格式化输入输出

    1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...

  5. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  6. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...

  7. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  8. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

  9. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

随机推荐

  1. ci钩子

    钩子 - 扩展框架核心 CodeIgniter 的钩子特性提供了一种方法来修改框架的内部运作流程,而无需修改 核心文件.CodeIgniter 的运行遵循着一个特定的流程,你可以参考这个页面的 应用程 ...

  2. PHP 内置函数strlen 和mbstring扩展函数mb_strlen的区别

    #EXAMPLE $str_uncode = "简体中文Chinese(Simplified)"; //统计字符串长度 echo strlen($str_uncode).'< ...

  3. Android如何避免OOM总结

    转自:https://blog.csdn.net/ljx19900116/article/details/50037627 前面介绍了一些基础的内存管理机制以及OOM的基础知识,那么在实践操作当中,有 ...

  4. java与C++相比增加和缺少的特性--持续更新

    缺少的特性 java值类型中没有无符号数 java没有运算符重载语法 java中没有struct和union等用户自定义值类型 java中没有虚函数的概念,所有函数默认具有虚函数的特性 java采用单 ...

  5. 访问控制列表-ACL匹配规则

    1 .ACL匹配机制 首先,小编为大家介绍ACL匹配机制.上一期提到,ACL在匹配报文时遵循“一旦命中即停止匹配”的原则.其实,这句话就是对ACL匹配机制的一个高度的概括.当然,ACL匹配过程中,还存 ...

  6. JVM类加载机制详解(二)类加载器与双亲委派模型

    在上一篇JVM类加载机制详解(一)JVM类加载过程中说到,类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可 ...

  7. 【BZOJ4027】兔子与樱花(贪心)

    [BZOJ4027]兔子与樱花(贪心) 题面 BZOJ 洛谷 题解 很直观的一个感受就是对于每个节点, 考虑它的所有儿子,如果能删就删. 那么我们把所有儿子按照给删去后给父亲\(c[i]\)的贡献从小 ...

  8. BZOJ3601 一个人的数论 【数论 + 高斯消元】

    题目链接 BZOJ3601 题解 挺神的 首先有 \[ \begin{aligned} f(n) &= \sum\limits_{x = 1}^{n} x^{d} [(x,n) = 1] \\ ...

  9. loj2538 「PKUWC2018」Slay the Spire 【dp】

    题目链接 loj2538 题解 比较明显的是,由于强化牌倍数大于\(1\),肯定是能用强化牌尽量用强化牌 如果强化牌大于等于\(k\),就留一个位给攻击牌 所以我们将两种牌分别排序,企图计算\(F(i ...

  10. 【bzoj3730】 震波

    http://www.lydsy.com/JudgeOnline/problem.php?id=3730 (题目链接) 题意 给出一棵树,每个节点又一个权值.两个操作,询问距离节点${x}$不超过${ ...