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

2.9 常量
C语言源程序中,可以使用的运算量有两大类:常量和变量。在程序运行过程中,其值不能被改变的量称为常量。
C语言中常量又分为数值常量和符号常量两大类。程序中应当多使用含义比较清楚的符号常量,尽量不要用意义不太明确的数值常量。

2.9.1 数值常量
在C语言源程序中,数值常量可以直接使用,数值常量的书写规则与我们在日常工作中书写常量的规则很类似但又有些区别。必须严格按照C语言的规范要求来书写,否则,编译程序将无法识别,不能将其转换成机器指令能够处理的二进制机内形式的常量。
常用的数值常量有以下几种:
1)十进制整型常量 : 567、–425 、0 等, 这是没有小数分量的整数值。可以带有正负号,但正号可以省略不写。
注意:一个整型常量的各个数字之间不能出现空格或逗号(例如,12345 既不能写成12,345也不能写成12 345)。除了整数值0以外,其他任何整数值不能以0开头(比如,0761会被编译程序当作八进制整数,参见第3章)。
整型常量的其他表示形式请参见下一章。
2)实型(或称为浮点型)常量。实型常量在源程序中的两种书写形式是:
十进制小数形式:由正负号、数字、小数点构成。0.543、.543、543.、543.21、0.0 都是十进制的小数形式。在数的左边还可以加上正负号。比如–543.0。小数点的两边至少有一边要有数字。
指数形式:绝对值太小或太大的实型常量,用小数形式表示很不方便,可以用指数形式表示。比如,数学中的7.16×1015 在C语言中要用7.16E+15 表示;数学中的–3.456×10–11在C语言中要用–3.456e–11 表示。
注意:一个数值的指数表示形式并不是唯一的。比如,54.3e–2和5.43e–1都等于0.543,也就是说表示同一个实数时,该数的小数点是可以“浮动”的。这是浮点数名称的由来。
小数点前面只保留一位非零数字的指数形式,称为规范化的指数形式。
提示:指数形式浮点数的书写规则
字母e(或者E)之前和之后都必须有数字,这些数字之前都可以带有正负号。
e(或者E)之后的指数必须是一个整数值。
在字母e(或者E)的前后以及数字之间不得插入空格。
注意,在C语言源程序中不能使用二进制常量。
3)字符常量:用一对单引号括起来的英文常用字符集(英文常用字符集对于绝大多数当代计算机来说,就是ASCII字符集)中的单个字符,称为字符常量,例如'a'、'*'、'8'、' '(这是一个空格字符)等。
在程序的正文部分书写字符常量时,都必须用单引号括住,以便与单个字符的标识符或运算符区别开来。比如在源程序正文部分,a 是标识符,+ 是加法运算符,然而,用单引号括住的'a' 和'+'都是字符常量。但是在输入或输出字符常量时,都不用单引号括住。
在C语言中,可以使用转义字符'\n'表示“回车换行”字符,本章后面将对转义字符进一步说明。
字符常量是用计算机进行文字处理的基础。
4)字符串常量:由用双引号括起来的连续多个字符组成,如“567”、“hello”等。
我们在程序中看到的字符串常量,其实在内存中,通常只不过是在多个连续的字节中存放的一串二进制的ASCII码而已。
注意:“h”是字符串常量而不是字符常量。
2.9.2 符号常量
前面所讲的都是数值常量(C语言中字符常量也是数值常量中的一种)。而符号常量是用符号在源程序中表示一个数值常量。符号常量一般由大写英文字符组成的标识符构成,用编译预处理命令#define将符号常量与某个数值常量关联起来。 比如:

#define  PI  3.14

这样一来,在进行编译之前,源程序中所有出现的符号常量PI都会被编译预处理程序用 3.14 替换掉。
使用符号常量会使得修改常量的值变得非常方便。对于上例,只要将 #define PI 3.14 修改为#define PI 3.1416 ,则源程序中多处出现的PI便都会被编译预处理程序替换成 3.1416,程序的可读性也更好。
对于字符常量和整型常量,也都可以用符号常量来表示,比如:

#define  ADD    '+'
#define  days   31

2.9.3 数据的机内形式和机外形式
源程序中(或输入输出时),常量(或变量)值的形式(比如十进制形式)称为数据的机外形式;而计算机内部存储(和传输)的二进制数据形式称为数据的机内形式。一个机内形式的数据常常可以表示为多种等值的机外形式的数据。
我们在编写C语言源程序和运行程序输入数据时,只能使用数据的机外形式,不能使用二进制数据。将机外形式数据转换成机内形式数据是由系统(编译程序、输入输出库函数等)自动进行的。但是在遇到了一些疑难编程问题(溢出、类型转换或进行嵌入式编程和系统编程)时,往往需要了解和掌握数据的机内形式,才能找到较好的解决方案。
延伸与拓展:数据的机内存储形式
整型量在计算机内部的存储方式
整型量在计算机内部的存储方式有两类:无符号整型和有符号整型。无符号整型就是用一定长度的二进制位串直接表示的非负整数。有符号整型就是用一定长度的二进制位串作为编码,来间接表示一个有符号整数。通常用最高位表示数的符号,最高位为0表示正数,最高位为1表示负数。在绝大多数计算机中,使用补码来表示有符号整数。
实型量在计算机内部的存储方式
在计算机内部,实型量的存储方式与整型量的存储方式全然不同。它们通常是以规范化的指数形式来存储的(即小数点前面只有一位非负整数的指数形式,在二进制中,这个非负整数必定是1)。一般是用内存中地址连续的几个字节(比如4个字节一共32位)中的最高位表示数的正负号、若干位表示数的指数部分、若干位表示数的小数部分(即除去一位非零整数部分后的小数部分),见下表。
符号位(占1位) 指数部分(若干位) 小数部分(若干位)

指数部分的符号通常隐含在指数部分的数据位串中,这是由于指数部分通常采用余码表示法,进一步的讨论请参见第3章。
【过关测试】指出例题2.2中,哪些是程序的正文部分?哪些是关键字?哪些是标识符?哪些是数值常量?哪些是符号常量?

时间: 2024-12-05 00:32:49

《C语言程序设计:问题与求解方法》——2.9节常量的相关文章

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

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

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.表

《C语言程序设计与实践(第2版)》——导读

前言 C语言程序设计是一门理论与工程实践密切相关的专业基础课程,在计算机学科教学中具有十分重要的地位.大力加强该课程的建设,提高该课程的教学质量,有利于教学改革和教育创新,有利于创新人才的培养.通过本课程的学习,学生应培养良好的编程风格,掌握常见的算法思路,真正提高运用C语言编写程序解决实际问题的综合能力,为后续课程的实践环节打好基础. 目前国内关于C语言的教材较多,有些教材语法知识介绍细致,较适合作为非专业的等级考试类教学用书:有些教材起点较高,内容深奥,不适于初学者.为了帮助广大学生更好地掌

《C语言程序设计与实践(第2版)》——1.2 计算机与程序设计

1.2 计算机与程序设计 计算机的功能非常强大,能做非常复杂.人脑难以胜任的许多工作.然而,从电子市场买回CPU.主板.内存.硬盘等硬件并组装好一台计算机后,你却发现这台计算机什么也做不了.究其原因,就是因为该计算机上还没有安装任何计算机程序,即软件.硬件是计算机拥有强大功能的前提条件,但是如果没有"大脑"(也就是计算机程序)去指挥它,它将什么也做不了,所以计算机程序的存在是计算机能够工作.能够按指定要求工作的必要条件.因此,计算机程序(Program,通常简称程序)可以简单理解为人们

《C语言程序设计进阶教程》一导读

前 言 为什么要写这本书 本文讲的是C语言程序设计进阶教程一导读,市面上有成百上千种关于编程的书籍,其中有很多都是关于C语言编程的,那么为什么我还要写这本书呢?为什么建议你花时间读它呢?这本书跟其他书有什么不同呢?跟很多作者一样,我写这本书是因为我觉得有必要,觉得这本书中的方法比其他书中的更好. 我将现在已有的关于编程的书分为两类:入门和进阶.入门类书是给初学者写的,一般都假设读者没有编程基础,所以主要是介绍基本的概念.通常以"Hello World!"程序开始,也就是将"H

c语言-求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)

问题描述 求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的) 编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2. 学校工会组织活动,要求有8名教师参加,这8名教师将分别从A学院3名教师.B学院5名教师.C学院6名教师中任意抽取,且其中必须有B学院的教师参加,请编程输出所有可能的方案 已知在C盘根目录下存有文本文件"file1.txt",编程统计文件"file1.txt"中每个字母字符和每个数字字符

Go语言中普通函数与方法的区别分析_Golang

本文实例分析了Go语言中普通函数与方法的区别.分享给大家供大家参考.具体分析如下: 1.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然. 2.对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以. 以下为简单示例: 复制代码 代码如下: package structTest    //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候)  //Date:2014-4-3 10:00:07    import ( 

Go语言中使用反射的方法_Golang

本文实例讲述了Go语言中使用反射的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: // Data Model type Dish struct {   Id  int   Name string   Origin string   Query func() } 创建实例如下: 复制代码 代码如下: shabushabu = Dish.new shabushabu.instance_variables # => [] shabushabu.name = "Shabu-S