《C语言程序设计:问题与求解方法》——3.6节变量类型的进一步讨论

3.6 变量类型的进一步讨论
第2章已经介绍了int 、float和char 变量类型。但是在实际编程工作中,int型的取值范围和float型的精度很可能满足不了应用的需要,下面再介绍三种新的基本变量类型。
(1)double类型
如果float 类型变量的精度达不到在应用中的要求(精度超过6位、取值范围不够大或者不足够接近0),那么可以使用double型变量。
虽然C语言标准没有规定double型变量的取值范围和精度,但是IEEE 754标准规定:double型变量的上下限取值范围是–1.79×10308~1.79×10308之间,double型变量可以表示的最接近0值的正负数是±2.22×10–308,精度在通常的PC上(不论你使用的是Windows还是Linux操作系统)可达十进制的15个数字(IEEE 754标准规定的double型的精度是10位)。大多数计算机制造商都遵守这个规范标准。
double型变量在输入时,使用格式符%Lf(或%lf);而在输出double型变量时,使用格式符%f(而不是%Lf)。
注意:double 型变量在调用scanf()库函数时,要用%Lf (或%lf)与之匹配。不要用%f。
double型变量在调用 printf()库函数时,要用%f与之匹配。不要用%lf。
记忆口诀:输出(即output)时,double 像 float (都有output中的o)。
(2)long int 类型(可简写为long)
如果int 型变量在你所用的编译环境下取值范围不够大(比如在–32768~32767之间),而你又不想使用取值范围更大但有一些缺陷的float型(或double型)变量,则可以使用长整型long int (简写为long)。long 型的通常取值范围是在–2147483648~2147483647之间(大约在正负21亿之间)。
long 型变量在调用格式化输入输出库函数时,要用%Ld (或%ld) 与之匹配。
但是在通常的32位系统中,int型与long型的取值范围通常是一样大的,都在–2147483648~2147483647之间,在这种系统中使用long与int型变量没有什么区别。
延伸与拓展:如果long int的取值范围在应用中还是不够大,通常有两种选择:
1)用支持新的C99标准的C编译器。其中的long long int 类型是64位长整数类型。取值范围在–263~263–1之间,格式符要用%LLd。
2)用后面将要学到的字符数组。
(3)short int 类型
short int 类型就是短整型,可以简写为 short 。C89标准只规定了 int型变量的取值范围必须大于或等于short型变量的取值范围。只有在short型变量分配的字节数少于int型变量的情况下(比如在通常的32位系统中,short型变量占2个字节内存,而int型变量占4个字节内存),在程序中使用short类型变量,才能起到节省内存空间的作用。
short类型变量在使用中更容易发生溢出(超出short的通常取值范围,即从–32768~32767),所以编程时要小心,不要因为节省一点点内存空间而使数据产生溢出。
在调用格式化输入输出库函数输入输出short型的值时,需使用的格式符是%hd。
(4)C89标准规定的全部整型变量类型
上述整型类型short、int、long 所定义的变量,取值都是可正可负的,所以都是有符号(signed)整型。各种整型类型又有对应的无符号(unsigned)整型:
与short对应的无符号短整型:unsigned short
与int对应的无符号整型:unsigned int
与long对应的无符号长整型:unsigned long
所有无符号整型变量的(正数的)取值范围,都比所对应的有符号整型变量的正数取值范围大一倍。这是由于有符号整型要用一半数来表示负整数的缘故,细节参见本章提高部分。
(5)C语言中所有变量类型的分类
C语言中的变量类型如图3-6所示。

(7)溢出问题
如果存入变量中的值超出了变量的取值范围,称为发生了溢出。出现整数溢出时,程序通常会继续运行,但所得结果是错误的。如果出现浮点数溢出(包括将一个浮点运算结果赋值给一个整型量产生的溢出)的话,将产生未定义的行为。因此,编程者必须确保所有表达式的值在运行时都在合理的取值范围内。
延伸与拓展:溢出导致的后果
把超出变量允许范围的值赋值给变量,如果值是整型并且变量是无符号型,那么会直接丢掉超出部分的高位数;如果变量是有符号型,那么结果值将由编译器决定的(C语言标准将此交给具体的编译器自行决定);而把一个太大的浮点型数赋给一个整型变量或浮点型变量的话,这两种变量都会因为取值范围太小而无法承受,从而产生未定义的行为,此时任何事情都有可能发生,包括程序终止。

时间: 2024-11-02 18:13:55

《C语言程序设计:问题与求解方法》——3.6节变量类型的进一步讨论的相关文章

《C语言程序设计:问题与求解方法》——导读

目 录 第0章 "理想厨房"的工作原理0.1 理想厨房系统0.2 理想厨房系统的一个炒菜实例0.3 "理想厨房"工作的重要特点0.4 理想厨房系统与计算机系统术语对照表本章习题第1章 计算机的基本工作原理1.1 二进制简介1.2 计算机系统1.3 提高部分本章习题第2章 C语言程序结构和基本语法要素2.1 高级程序设计语言和编译程序简介2.2 C语言历史概述2.3 C语言源程序的主要构成成分:函数定义2.4 C语言源程序的次要组成成分:编译预处理命令.注释和声明2.

《C语言程序设计:问题与求解方法》——2.10节变量

2.10 变量一些动态变化的量(比如车速.温度.股票价格等)称为变量,这些量在源程序中用常量无法表示.用C语言进行编程,要使用数据区(数据值可变)而不是代码区(数据值不允许变)的内存单元来存放数据,都必须向编译程序提出申请.在C语言源程序中,向编译程序申请一个(或几个)存放某种类型数据的.值的大小可以变化的内存单元称为定义变量. 2.10.1 变量的定义定义一个简单变量的格式为:类型名 变量名;类型名要使用关键字(比如int.float.char等,参见2.7节),变量名必须使用标识符.通过这种

《C语言程序设计:问题与求解方法》——2.11节数据输出—格式化输出函数 printf()的用法

2.11 数据输出-格式化输出函数 printf()的用法 变量的值如果不从内存单元中取出来,通过输出设备送到计算机的外部,这个值对外界就不起任何作用,程序本身的运行也就失去了意义. 1.变量值的输出 格式化输出库函数printf()用来在某些常用的输出设备(PC的显示器或打印机)上输出双引号括住的格式控制串中的字符序列. 但是,printf()不仅可以像例题2.3那样,将格式串中的字符序列按照原样输出,还可以通过格式串的设置和控制,输出n个(n≥1)变量的值,其格式为:printf("占位符1

《C语言程序设计:问题与求解方法》——3.8节不同类型数据之间的类型转换

3.8 不同类型数据之间的类型转换 机器语言的算术运算指令比C语言算术表达式的限制更多.为了让计算机执行机器指令中的算术运算,通常不仅要求两个操作数有相同的长度(字节数),而且还要求数据的存储方式也相同.比如同是单精度浮点型数. 在C语言中,最好把同类型的常量值赋给同一类型的变量,或者使用同类型的常量和变量进行算术运算或关系运算. 然而在C语言程序中,允许在表达式中混合使用各种不同类型的数据.在一个表达式中,可以同时出现整型.浮点型.字符型的常量和变量.在这种情况下,C语言编译程序通常需要生成一

《C语言程序设计:问题与求解方法》——3.9节常见编程错误

3.9 常见编程错误 通常,编程错误可以分为以下几类: 语法错误:可以在编译期间由编译程序找出的错误. 运行时错误:程序在运行时才能发现的错误. 算法错误:在编译和运行时都不能发现的,只有通过事先(编译前)或事后(程序试运行后)分析.检查结果才能发现的错误. 注意:编程时,首先要想方设法避免的是算法错误,因为对于一个规模较大的程序,如果在算法上有根本性的错误,有可能造成前功尽弃的严重后果.这就要求程序员在编写算法时仔细慎重,并掌握一些验证算法是否正确的方法. 下面列出了初学者极易犯的一些错误,在

《C语言程序设计:问题与求解方法》——3.11节本章习题

本章习题 一.选择题 1. ( )是C语言提供的合法的数据类型关键字. A. Float B. signed C. integer D. Char 2. 属于合法的C语言长整型常量的是( ). A.5876273 B. 0L C.2E10 D.(long)5876273 3. 判断int x = 0xaffbc:x的结果是( ). A.赋值非法 B.不确定 C.affb D.ffbc 4. 下面选项中,均是合法浮点数的是( ). A.+1e+1 B.-.60 C.123e D.-e3 5e-9.

C++实现二叉树遍历序列的求解方法_C 语言

本文详细讲述了C++实现二叉树遍历序列的求解方法,对于数据结构与算法的学习有着很好的参考借鉴价值.具体分析如下: 一.由遍历序列构造二叉树              如上图所示为一个二叉树,可知它的遍历序列分别为:                       先序遍历:ABDECFG                       中序遍历:DBEAFCG                       后序遍历:DEBFGCA 我们需要知道的是,由二叉树的先序序列和中序序列可以唯一地确定一棵二叉树:由

c语言-请问怎么学好《C语言程序设计教程》

问题描述 请问怎么学好<C语言程序设计教程> 这本书下学期就要学了,可是看着迷迷糊糊,看不懂,有没有什么学习的捷径?什么配套的辅导书比较好?谢谢! 解决方案 简单来说,就是Reading+Coding. 阅读入门可以从谭浩强的<C程序设计>开始,国人所写比较符合我们的思维习惯,但是过于基础,许多细节问题没有讲到,所以看完那本可以接着看看<C语言深度解剖>. 另外还有两本国外的C语言经典著作<C程序设计语言><数据结构与算法分析--C语言描述>,可

C语言学习教程第三章-C语言程序设计初步(1)

C语言程序设计 本课介绍C语言程序设计的基本方法和基本的程序语句.从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构.分支结构.循环结构. 这三种基本结构可以组成所有的各种复杂程序.C语言提供了多种语句来实现这些程序结构. 本章介绍这些基本语句及其应用,使读者对C程序有一个初步的认识, 为后面各章的学习打下基础. C程序的语句 C程序的执行部分是由语句组成的. 程序的功能也是由执行语句实现的.C语句可分为以下五类:1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句 1.表