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

简介:

本节书摘来自华章社区《C语言程序设计:问题与求解方法》一书中的第2章,第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中,哪些是程序的正文部分?哪些是关键字?哪些是标识符?哪些是数值常量?哪些是符号常量?

相关文章
|
2月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
77 16
|
2月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
96 18
|
2月前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
66 18
|
2月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
65 13
|
2月前
|
存储 安全 C语言
【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
分支的语句,这可能不是预期的行为,这种现象被称为“case穿透”,在某些特定情况下可以利用这一特性来简化代码,但在大多数情况下,需要谨慎使用。编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。根据提示,在右侧编辑器补充代码,计算并输出最终预测的身高。分支下的语句,提示用户输入无效。常量的值必须是唯一的,且在同一个。语句的作用至关重要,如果遗漏。开始你的任务吧,祝你成功!,程序将会继续执行下一个。常量都不匹配,就会执行。来确保程序的正确性。
85 10
|
2月前
|
小程序 C语言
【C语言程序设计——基础】顺序结构程序设计(头歌实践教学平台习题)【合集】
目录 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果: 任务描述 相关知识 编程编写一个程序,从键盘输入3个变量的值,例如a=5,b=6,c=7,然后将3个变量的值进行交换,使得a=6,b=7,c=5。面积=sqrt(s(s−a)(s−b)(s−c)),s=(a+b+c)/2。使用输入函数获取半径,格式指示符与数据类型一致,实验一下,不一致会如何。根据提示,在右侧编辑器补充代码,计算并输出圆的周长和面积。
49 10
|
2月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
46 3
|
2月前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
32 2
|
2月前
|
存储 C语言
【C语言程序设计——循环程序设计】利用数列的累加和求 sinx(头歌实践教学平台习题)【合集】
项的累加和,一般会使用循环结构,在每次循环中计算出当前项的值(可能基于通项公式或者递推关系),然后累加到一个用于存储累加和的变量中。在C语言中推导数列中的某一项,通常需要依据数列给定的通项公式或者前后项之间的递推关系来实现。例如,对于一个简单的等差数列,其通项公式为。的级数,其每一项之间存在特定的递推关系(后项的分子是其前项的分子乘上。,计算sinx的值,直到最后一项的绝对值小于。为项数),就可以通过代码来计算出指定项的值。对于更复杂的数列,像题目中涉及的用于近似计算。开始你的任务吧,祝你成功!
63 6
|
2月前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
59 1