C语言初使用—数据类型2

news/2024/12/26 19:56:29/
  • C语言初使用—数据类型
  • 1、实型数据
    • 实型也称为浮点型。实型常量也成为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式,
    • 1)十进制数形式:由数码0~9和小数点组成
      • 例:0.0、25.0、8.789、0.13、4.56、200.、-2665.454等均为合法的实数。注意,必须要有小数点。
    • 2)指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。
      • 其一般形式为:a E n(a为十进制数,n为十进制整数)
        在这里插入图片描述
    • 说明:2.1E5是2.1乘以10的5次方。E后面的数值,代表是10的几次方。
    • 标准C允许浮点数使用后缀。后缀为f或者F即表示该数为浮点数。如256f是等价与256F的

1.1实型数据的舍入误差

  • 由于实型变量是由有限的存储单元组成的,因此能提供的有效数字也是有限的。如下例:
    在这里插入图片描述

  • 打印结果:a=12345678848.000000 b=12345678848.000000

  • 说明:float a = 123456.189e5 这个取值范围超出float的范围,所以结果有误差。

  • 2、字符型数据

  • 字符型数据包括字符常量和字符变量。

  • 2.1字符常量

  • 字符常量是用单引号括起来的一个字符。

    • 例如:‘a’、‘b’、‘c’、‘=’、‘+’、‘?’都是合法字符常量
  • 在C语言中,字符常量有以下特点:

  • 字符常量只能用单引号括起来,不能用双引号或其它符号

  • 字符常量只能是单个字符,不能是字符串。

  • 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如‘5’和5是不同的,‘5’是字符常量,不能参与运算。

  • 2.2字符变量

  • 字符变量是用来存储字符常量,即单个字符。

  • 字符变量的类型说明符是char。字符变量类型定义的格式和书写规则斗鱼整型变量形同。例如:

    • char a,b;
  • 2.3转义字符

  • 转义字符是一种特殊的字符常量。转义字符以反斜线’’'开头,后跟一个或几个字符。转义字符具有特性的含义,不同于字符原有的意义,故称为转义字符。例如:\n就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符便于表示的控制代码。

  • 常用的转义字符及其含义
    在这里插入图片描述

  • 字符型数据在内存中的存储形式及使用方法

  • 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。

  • 如X十进制的ASCII码是120,Y的十进制ASCII码是121。对字符变量a,b赋予’X’、'Y’值:

    • a=‘X’ b=8
  • 实际上是a,b两个单元内存放120和55的二进制代码。
    在这里插入图片描述

  • 例题:向字符变量赋值
    在这里插入图片描述

  • 打印结果:a=x,b=y a=120,b=121

  • 原因:%c是以字符形式打印,%d是以十进制的整数格式打印

  • 字符串常量

  • 字符串常量是由一对双引号括起来的字符序列。例如:

  • “China”、“Hello World”、“$11111”等都是合法的字符串常量。

  • 字符串常量和字符常量是不同的量。区别如下:

    • 1)字符常量由单引号扣起来,字符串常量由双引号括起来。
    • 2)字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。
    • 3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。
      • 例:char a = ‘a’ 不能 char a = “a”
    • 4)字符常量占一个字节的内存空间。字符串常量站的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0"这是字符串结束的标志。
  • 变量初赋值

  • 在程序中常常需要对变量赋初值,以便使用变量。语言程序中可有多种方法为变量提供初值。变量定义的同时给变量赋予初值的方法。这种方法统称为初始化。在变量定义中赋予初值的一般形式为:

  • 类型说明符 变量l = 值l,变量2 = 值2; 在这里插入图片描述

  • 各类数值型数据之间的混合运算

  • 变量的数据类型是可以转换的,转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:

    • 若参与运算量的类型不同,咋先转换成同一类型,然后进行运算。

    • 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int型转成long型后在进行运算。

    • 所有的浮点运算都是以双精度进行的,即使仅包含float单精度量运算的表达式,也要先转换成double型,在做运算。

    • char型和short型参与运算时,必须先转换成Int型。

    • 在赋值运算中,赋值号两边的数据类型不同时,赋值号有变量的类型将转换成左边量的类型,。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。

    • int = long 右边的数据类型将会丢失一部分数据。
      在这里插入图片描述
      在这里插入图片描述

    • 例题:PI为实型,s,r为整型。在执行s= rrPI语句时,r和PI都转换成double型计算,结果也为double型。但是由于s为整型,故赋值结果仍为整型,舍去了小数部分。

  • 强制类型转换

    • 强制类型是通过类型转换运算来实现的。

    • 其一般形式为:

      • (类型说明符)(表达式)
    • 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

      • 例如:(float)a 把a转换成float型
      • (int )(x+y) 把x+y的结果转换成int型
  • 在使用强制类型转换时应注意以下问题:

    • 类型说明符和表达式都必须加括号(单个变量可以不加括号),如把 (int )(x+y)写成 (int )x+y
      则成了把x转成int型之后再与y相加了。

    • 无论是强制转换或者是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明对该变量定义的类型。
      在这里插入图片描述

  • 例题说明:f虽然强制转换为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为5,删去了小数而f的值仍为5.75。

  • 算数运算符和算数表达式

    • 加法运算符 “+”:加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有结合性。
    • 减法运算符 “-”:减法运算符为双目运算符,但"-"也可作负值运算符,此时为单目运算符,如-x,-5等具有左结合性。
    • 乘法运算符"*":双目运算符,具有左结合性。
    • 除法运算符"/":双目运算符具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果刚好为双精度实型。
      在这里插入图片描述
      在这里插入图片描述
  • 算术运算符和算术表达式

    • 运算符的优先级:C语言中,运算符的优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。

    • 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与"-“号结合,执行x-y运算。然后在执行+z的运算。这种自左至右的结合方向就称为左结合性 。而自右至左的结合性成为 右结合性。最典型的右结合性运算符是赋值运算符。例如:x=y=z。由于”="的右结合性,应先执行y=z再执行x=(y=z)运算。C语言运算符中右不少为右结合性,应注意区别。

    • 下面是C语言中所使用的运算符的优先级和结合性:
      在这里插入图片描述

  • 强制类型转换运算符

    • 其一般形式为:(类型说明符)(表达式)

    • 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

    • 例如:(float)a 把a换转为实型 (int)(x+y) 把x+y的结果转换为整型

  • 自增、自减运算符

    • 自增 1 。自增 1 运算符:自增1 运算符为 “++”,其功能是使变量的值自增1。
    • 自减 1 运算符标记为 “–” , 其功能使使变量自减1。
    • 自增1,自减1运算符均为单目运算符,都具有结合性。可以有以下集中形式:
    • ++ i i自增1后再参与其他运算。
    • –i i自减后再参与其他运算。
    • i++ i参与运算后,i的值再自增1。
    • i-- i参与运算后,i的值再减1.
    • 在理解和使用上容易出错的是i++和i–。特别是当他们出现在比较复杂的表达式或者语句,应该仔细。
      在这里插入图片描述
  • 复合的赋值运算符

    • 在赋值符 “=” 之前加上其它二目运算符可构成复合赋值符。如+=,-=,*=,/=,%=,<<=,>>=,&=,^=。

    • 例如:

在这里插入图片描述

  • 复合赋值法这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。
  • 逗号运算符和逗号表达式
    • 在C语言中逗号 “,”,也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
      其一般形式为:表达式1,表达式2
    • 其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。

在这里插入图片描述

  • 对逗号表达式说明两点:
    • 1)逗号表达式一般行驶中的表达式1和表达式2也可以又是逗号表达式。
    • 例如:表达式1,(表达式2,表达式3)
  • 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式:
    • 表达式1,表达式2…表达式n。
  • 整个逗号表达似乎的值等于表达式n的值。
  • 2)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。
    并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。

http://www.ppmy.cn/news/794706.html

相关文章

C语言标准库函数介绍(pow---指数)

文章目录 1.函数形式2.头文件3.作用4.举例4.1返回类型是否可以由其他类型接受&#xff1f;4.2 printf函数打印&#xff0c;可不可以用其他类型来打印4.2.1总结 1.函数形式 double pow( double x, double y ); 解析:传给这个函数两个double类型的参数&#xff0c;返回的是一个d…

可恶的剪绳子问题

1. 剑指 Offer 14- I. 剪绳子 题目描述&#xff1a;给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n>1并且m>1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最…

没有为 vtkGUISupportQt-8.2.dll 加载的符号文件

没有为 vtkGUISupportQt-8.2.dll 加载的符号文件 在你的main函数前&#xff0c;加上&#xff1a; #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2) VTK_MODULE_INIT(vtkInteractionStyle) #include "VtkDemo_02.h" #include <QtWidgets/…

elementUI 返回上一个页面

elementUI 返回上一个页面 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. ba…

为什么在数据库中查询时count(1)和count(*)都能达到同样的效果,而count(1)效率更高?

具体原因如下&#xff1a; 1. 常量值 vs 通配符&#xff1a; COUNT(1)使用的是一个常量值1&#xff0c;而COUNT(*)使用的是通配符*&#xff0c;表示所有的列。由于在进行行统计时&#xff0c;不需要具体的列数据&#xff0c;只需要计算满足条件的行数&#xff0c;所以使用任何…

leetcode-3-无重复字符的最长子串

题意描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示意&#xff1a; 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: …

认识文件操作与IO

文章目录 认识文件文件夹文件路径文件分类 文件操作File类构造方法常用方法 字节流IOInputStream常用方法 FileInputStream构造方法FileInputStream实例 OutputStream方法 FileOutputStream 字符流IO 认识文件 我们平时所说的文件指的是存在硬盘上的文件&#xff0c;我们平时的…

阿里云服务器架构X86计算、ARM、GPU/FPGA、裸金属和超级计算集群

阿里云服务器架构有什么区别&#xff1f;X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别&#xff1f;阿里云服务器网分享云服务器ECS架构详细说明&#xff1a; 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…