1、第3章常量与变量 程序可以完成各种各样的任务 而这些任务的执行依赖于许许多多用于含有存储任务信息的数据 这些数据含有的信息也是执行程序的基础 在C程序中 使用常量和变量两种形式来存储和表示数值 为了保存各式各样不同的数据 C语言中定义了一系列的数据类型 本章将重点讨论常量和变量的使用方法 通过本章的学习 要重点掌握以下内容 第3章常量与变量 常量的概念和使用 变量的概念和使用 如何声明变量 如何定义变量 printf函数和scanf函数的使用 3 1常量与变量 C语言中 常量与变量都可以用来表示数据 常量的值在程序执行过程中是不可改变的 而变量的值则是可变的 本节将介绍常量和变量的概念 并通过
2、范例的讲解来学习两者的区别 3 1 1常量 常量是指不可改变的量 C语言中的数值都可以用常量来表示 由于常量的字面值就表征了其数值大小 因此也称为文字常量 常量可以表示各种数据类型的值 其数据类型也可以从其字面形式直接获知 比如 1 就是一个常量 其值为其字面值1 而数据类型为整型 下面是几种不同数据类型的常量的示例 234 93LL037 037 32e373 43 e 下面的范例展示各种不同类型的常量的值 范例3 1 显示常量的值和类型 见示例代码3 1所示 示例代码3 1 01 include0203intmain void 04 使用printf函数输出各种常量的值 05printf
3、234 d n 234 输出234的值 06printf 93 lld n 93LL 输出 93LL的值 07printf 037 d n 037 输出037的值 08printf 037 c n 037 输出 037 的值 09printf 32e3 lf n 32e3 输出32e3的值 10printf 73 43 lf n 73 43 输出73 43的值 11printf e c n e 输出 e 的值 1213return0 14 示例代码3 1 运行结果 运行程序后 输出结果如下图所示 3 1 2变量 变量 顾名思义 与常量是相对的 就是指可以改变的量 简单地看 变量由两部分组成 变
4、量名和变量值 变量名是一个标识符 变量值为是一个数据值 在C语言中 便可以使用变量名来表示变量值 所谓 变量就是指可以改变的量 就是指其变量值是可以改变的 范例3 2 演示变量的访问和修改 实现方法如示例代码3 2所示 示例代码3 2 01 include0203intmain void 04intdata 24 定义变量data 0506printf data d n data 1 访问变量data 07data 26 修改变量值 08printf data d n data 访问变量data 0910return0 11 运行结果 程序输出结果如下图所示 示例代码3 2 3 2变量的使用
5、相对常量单一的使用方法而言 变量的使用必须依照一定的规则进行 要使用一个变量 首先要声明和定义这个变量 然后才能使用它来表示数据 此外 还可以对变量进行多次赋值 其中 第一次赋值行为被称为对变量的初始化 本小节将依次讨论这些问题 并在最后介绍与变量紧密相关的地址操作符和指针操作符的使用 3 2 1声明变量 声明一个变量 实际上是以特定的格式声明一个标识符 其作用是告诉编译器与标识符相关联的一些属性 变量声明包括数据类型名和变量名两部分 其形式如下 数据类型名变量名 范例3 3 使用未声明的标识符 如示例代码3 3所示 示例代码3 3 01 include0203intmain void 04p
6、rintf data d n data 输出data的值 0506return0 07 运行结果 编译器在编译时会报错 信息如下 3 3 c 4 errorC2065 data undeclaredidentifier 3 2 2定义变量 变量定义的主要作用 是定义语句中的标识符代表的变量分配一块内存 其形式与变量声明基本一致 如下所示 数据类型名变量名 在使用变量前 必须有定义语句为变量分配内存 一般情况下 只要将变量定义语句放在使用语句之前即可 首先 由于变量的定义完成了声明作为变量的标识符的功能 因此在变量定义语句之后便可使用该变量名 其次 变量的定义还为该变量分配了空间 因此在变量定义
7、语句之后使用该变量才能访问到对应的内存空间 3 2 3使用extern声明变量 从上一小节的讨论知道 变量使用之前必须要先定义变量 一般情况下 都会在变量定义语句之后才使用变量 若一定要在变量定义语句之前使用变量 也必须借助关键字extern来声明变量 使用extern声明变量的形式如下 extern数据类型名变量名 范例3 4 使用extern语句声明变量 如示例代码3 4所示 示例代码3 4 01 include0203intmain void 04externintdata 声明一个变量data 05printf data d n data 输出data的值 0607return0 08
8、 0910intdata 23 定义变量data 示例代码3 4 运行结果 程序运行后 得到结果如下图所示 3 2 4赋值和初始化 赋值是指为变量设定一个数值的过程 在变量的使用过程中 对函数赋值是十分频繁的操作 对变量赋值最主要的方式是使用赋值表达式 形式如下 变量名 值 例如 01inta 02doubleb 03charc 0405a 2 给a赋值 06b 3 2 给b赋值 07c c 给c赋值 3 2 4赋值和初始化 大部分的变量需要程序员在程序中以赋值的形式为其显式初始化 形式如下 数据类型名变量名 初始值 其中 初始值可以由程序员设定 使用初始化的方法 以上3个变量的赋值可以改写为
9、 01inta 2 02doubleb 3 2 03charc c 3 2 4赋值和初始化 可以在一个语句中定义多个同类型的变量 形式如下 数据类型名变量1 变量2 变量3 例如 要定义3个int型变量可以写为 inta b c 但若要在一个语句中初始化多个变量 仍需挨个为其赋值 例如 inta 2 b 2 c 2 若只在末尾赋值 如下所示 inta b c 2 范例3 5 展示了初始化的变量和未初始化的变量 如示例代码3 5所示 示例代码3 501 include0203intmain void 04intx 定义x但不对齐初始化 05inty 2 定义并初始化y 0607inta b c
10、3 定义3个变量 只初始化c 08inti 3 j 3 k 3 定义3个变量 并全部初始化 0910printf x 8dy 8d n x y 输出x和y的值 11printf a 8db 8dc 8d n a b c 输出a b和c的值 12printf i 8dj 8dk 8d n i j k 输出i j和k的值 1314return0 15 示例代码3 5 示例代码3 5 运行结果 本程序编译后有如下警告信息 3 5 c 10 warningC4700 uninitializedlocalvariable x used 3 5 c 11 warningC4700 uninitialize
11、dlocalvariable b used 3 5 c 11 warningC4700 uninitializedlocalvariable a used 示例代码3 5 产生警告的原因是 变量a b和c未初始化 由于这是程序有意而为的 故忽略之 在VisualStudio2005环境下的运行程序 可得结果如下图所示 在VisualC 6 0环境下的运行程序 结果如下图所示 3 2 5地址操作符和指针操作符 变量被定义后 都会占用一块内存 而内存都是有地址的 由于一个变量可用以表示其内存空间 因此变量内存地址也可以直接称为变量的地址 C语言提供了地址操作符 来获取变量 内存 的地址 同时还提供
12、了指针操作符 来获取某地址上的内存内容 1 地址操作符 要获取一个变量的地址 在该变量名前加 即可 例如下图中的变量data为例 其地址为0016 要获取其地址值 可以使用 data 它的结果即为0016 此外 地址操作符只能使用变量作为操作数 不能将其用在常量前面 比如 14 c 这种用法是错误的 2 指针操作符 要取得一个地址中的内容 可以使用指针操作符 指针操作符的操作对象必须为地址 例如 错误 这里的q被认为是int型 不是变量地址 范例3 6 展示如何使用地址操作符和指针操作符 如示例代码3 6所示 示例代码3 6 01 include0203intmain void 04intke
13、y 0 定义变量key 0506printf Pleaseinputainteger 07scanf d 13 图3 7地址操作符和指针操作符 运行结果 程序运行后 得到结果下图所示 3 3格式化输入输出 格式化输入是指按照给定的格式从输入设备读取数据 相应地 格式化输出是指按照给定的格式向输出设备输出字符串 C语言提供了printf函数和scanf函数来实现数据的格式化输入和输出 这两个函数是C语言中最常用的输入输出函数 在本小节中将简要介绍这两个函数的用法和特点 3 3 1printf函数 printf函数属于C标准库函数 要使用这两个函数必须包含头文件 stdio h printf函数的
14、功能是向标准输出打印特定的内容 调用的标准形式如下 printf 参数1 参数2 参数3 参数4 参数1为一串包含在一对引号内的字符 即字符串 参数2 参数3及其后的所有参数为要输出的数值 为方便表述 将其形式改写为 printf 字符串 参数列表 范例3 7展示了printf函数对字符串和变量的处理方式 范例3 7 展示printf函数的使用 如示例代码3 7所示 示例代码3 7 01 include0203intmain void 04intintValue1 1 定义第1个int型变量 05intintValue2 2 定义第2个int型变量 06charcharValue s 定义一个
15、char型变量 0708printf intValue1 d n intValue1 输出第1个变量 09printf intValue2 dd n intValue2 输出第2个变量 10printf charValue c n charValue 输出第3个变量 11return0 12 示例代码3 7 运行结果 程序运行后 得到结果如下图所示 3 3 2scanf函数 scanf函数也属于C标准库函数 使用时也必须包含头文件 stdio h scanf函数和printf函数的调用形式和处理数据的方式都十分相似 标准的调用形式如下 scanf 参数1 参数2 参数3 参数4 参数1为按照特
16、定格式书写的字符串 其后带一个参数列表 参数2 参数3及其后的所有参数都为用来存储读取的数值的空间地址 类似的 这个函数的调用形式也可以改写为 scanf 字符串 参数列表 范例3 8 展示printf函数和scanf函数的使用 如示例代码3 8所示 示例代码3 8 01 include02intmain void 03 定义两个变量 04intu 0 05intv 0 06printf Th csis cte ctingprogram c n 为分行号 07 i a s 使用printf函数输出一个字串 08scanf ooo dooo dooo 11 示例代码3 8 运行结果 程序运行后
17、在得到如下图第1行所示内容的结果后 输入如该下图第2行所示的字符串 最后可以得到结果如图中第3行所示 3 4数据类型 C语言中的数据是以数据类型的形式来组织的 所有的常量和变量都属于某种数据类型 C语言中定义了一系列的关键字来组成数据类型名 下面的这些是C语言中的常用数据类型 signed unsigned shortint signed unsigned int signed unsigned longint signed unsigned longlongint 3 4数据类型 char float double longdouble void 数据类型名 数据类型名 structstruct name enumenum name unionunion name 3 5综合练习 1 要求使用printf函数输出如下字样 Copyright2007 2008ALUcorporation 提示 可以将上述字符串依样输出 也可以将其中的数字作为整数输出 实现方法如示例代码3 9所示 3 5综合练习 2 定义2个整型变量 分别使用scanf为它们赋值 并使用printf函数输出 提示 整型在scanf和printf函数中对应的格式为 d 实现方法如示例代码3 10所示