再上一篇:1 .5 C语言的基本字符集、标识符和关键字
上一篇:第 2 章 常量和变量
主页
下一篇:第 3 章 基本运算与表达式
再下一篇:3 .2 赋值表达式
文章列表

2 .2 变量

《程序设计基础》(基于C语言讲解) 石光华 编著 —北京: 清华大学出版社

为了在程序中反映现实世界中会发生变化的事情,比如温度的变化,我们可以一个符

号来代表温度,并在程序中改变其值来表示不同的温度,这就是变量(variables)。

使用变量必须按规定的步骤进行。

1 .变量的基本类型

纸杯和玻璃杯都可以装热水,但要泡茶当然还是玻璃杯更好。为了存放不同类型的

数据,需要不同的容器。与前面学过的常量相对应,变量的基本类型有整型变量、实型变

量和字符变量3种,分别用来存放整型数据、实型数据和字符数据。

在数据类型不同的情况下,需要使用不同的变量类型来进行处理,应保证数据的类型

与变量的类型相适应。

2 .变量的声明

变量是指在程序运行过程中值可以改变的量。在程序中为了让计算机记住数据,我

们把数据放在存储单元中,并起一个名字来称呼它,这个名字就是变量名。变量名和变量

值是不一样的,变量名可以看成是一个符号地址,在该地址中放的数据则是变量的值。

计算机程序中所说的变量,与普通数学中使用的变量的概念是不同的。在数学中,变

量隐含的意义是“未知的”;但在计算机程序中,任何时刻变量的值都是确定且已知的,只

是在程序执行的不同时刻,可能变量的值不相同。也就是说,在程序执行过程中,可以改

变变量的值。

变量就是一个可以存放数据的容器,不同的类型适合存放的数据不同。例如,我们想

要哪一种杯子,就由变量的类型来确定;杯子里的水有多少,那是变量的值;而杯子的名 第2章 常量和变量 15字,则是变量的名字。

声明变量的格式为

类型 变量名=初值;

例如,

int isum=0;语句表示声明一个int 类型,即整型变量,名字为isum,初始值为0。

float fscore= 1 .5; 语句表示声明一个float 类型,即实型变量,名字为 fscore,初始值为1 .5。

char ctype=′a′;语句表示声明一个char 类型,即字符型变量,名字为ctype,初始值为′a′。

在进行变量声明时,应注意以下事项。

变量的类型不同,将来在变量里存放的数据也不同;

变量应该在声明时给出初值;

变量说明必须放在变量使用之前,通常放在函数体的开头部分。

允许在一个类型说明符后说明多个相同类型的变量,各变量名之间用逗号间隔,

类型说明符与变量名之间至少用一个空格间隔,最后一个变量名之后必须以分号

结尾。其格式为

类型 变量名1=初值1,变量名2=初值2,…;

例如,

int ino=0,iage=12;

float fscore=60 .5,fprice=1 .0;

3 .变量的命名

每一个变量都应该有一个名字,变量的命名应符合标识符的规定,通常使用小写字母。变量的名字只能是字母(A~Z,a~z),数字(0~9),下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。

变量的名字由用户自己定义,一般不超过8 个字符。建议命名的名字具有一定的意义,让使用者从名字上就知道代表的是什么。给变量取名字时要注意,名字的构成建议遵循所谓的“匈牙利命名法”,即由类型+名字组成,这里的类型用i表示 int,f 表示float。

例如,int total=0;表示声明了一个int(整型)的变量,名字是 total,初始值为0。如果单独看到变量的名字total时,并不知道它的类型,但如果取名为itotal,则可以知道是一个int 类型的变量。同样,我们可以取一个名字fscore来表示一个float 类型的变量。16 程序设计基础

4 .变量的存储

每一个变量都使用存储单元来存储其值。当程序需要处理该变量时,就到存储单元

中读取其值(读取操作并不改变存储单元的内容)。为了便于存储管理,给每个存储单元

分配一个序号,该序号称为地址。对变量的操作依据地址进行(可读、可写)。若变量在一

个存储单元存不下,可以使用多个存储单元。当使用多个存储单元时,则第一个存储单元

的地址就作为变量的地址。

例如,变量x的值为8,而x的地址编号为0002,则0002号存储空间中存储的内容就

是数值8。

5 .变量的作用

由于可以改变变量的值,因此可以用变量来反映现实世界中会发生变化的事情。例

如,我们要编写一个程序来监视水温的变化,则可以定义一个变量 temperature 来保存水

温的变化。可以说,没有变量,程序就没有了灵活性。

6 .变量的三要素

在C语言程序中,任何时候使用变量时,一定要想到它的三要素:类型、名字和当前

值。即要保证类型相匹配,名字不要用错,当前的值是什么。

【例2-2】 输出一个变量的值。

#include < stdio .h>

void main()

{

int iage=0; / *声明变量的类型、名字,并给出初值*/

iage=10; / *使用变量*/

printf(″iage= %d″,iage);

}

在例2-2中,变量声明区域的程序行int iage=0; 表示定义了一个整型变量,名字为

iage,初始值为0。运行到执行语句区的iage=10; 行时,给变量iage 赋整型值10,此后

iage的值即变成10。

7 .使用变量

(1) 声明

所有的变量都必须先声明(declare)后使用,变量的声明应写在变量声明区域,因此变 第2章 常量和变量 17量声明区域一定在执行语句区域的前面。变量的声明就是规定变量的类型和名字。

(2) 赋初值

变量赋初值即赋给变量一个初始值(initialization)。变量在声明后,其中的值并没有确定,因此必须给出一个与其类型匹配的数值。

(3) 使用

变量的使用(using)是指变量只能存放相同类型的数据,变量可分为整型变量、实型变量等。在程序中,应该注意把数据放入相同类型的变量中。

常量可以不经说明而直接引用,但变量则不行。

8 .变量的输入/ 输出

变量的输入/ 输出是按固定格式进行的。在输入/ 输出变量时,一定要注意变量的类型与格式之间的匹配。

整型变量能够处理的数据范围如下:十进制无符号整数的范围为0~65 535,有符号整数的范围为- 32768~+32 767。注意如果超过此范围的数据用整型来处理将导致错误的结果。

实型变量就是值为实数的变量,其数值范围为3 .4E - 38~3 .4E +38,只有7位有效数字。超过此范围的实型数必须用其他类型的变量来处理。

(1) 输入的语句格式

变量的输入/ 输出是通过系统函数进行的,scanf()和printf()是常用的系统函数,其中scanf()为输入函数,printf()为输出函数。

整型变量的输入语句格式为

scanf(″%d″,&变量名);

实型变量的输入语句格式为

scanf(″%f″,&变量名);

字符型变量的输入语句格式为

scanf(″%c″,&变量名);

注意事项如下。

“%d”是整型变量的输入格式符, %f”是实型变量的输入格式符, %c”是字符型

变量的输入格式符,不同类型的变量必须用不同的格式符。

“&变量名”表示将输入的整型值放到变量名所代表的存储单元中。

变量名字前面的符号 & 不能少。

“&变量名”之前用逗号隔开。

18 程序设计基础 第2章 常量和变量 19

printf(″%f″,变量名);

字符型变量的输出语句格式为

printf(″%c″,变量名);

注意事项如下。

“%d”是整型变量的输出格式符,一个%d表示将要输出一个整型变量的值。

“%f”是实型变量的输出格式符,一个%f 表示将要输出一个实型变量的值。

“%c”是字符变量的输出格式符,一个%c表示将要输出一个字符型变量的值。

一般来说,在双引号“”内的其他字符按原样输出。例如在程序例2-3中,如果输入整型数10,则语句printf(″iage= %d″, iage); 将在屏幕上显示

iage=10

printf()可以用于显示一个提示语句,如语句printf(″Please input a number:\n″);

将在屏幕上显示

Please input a number:

在语句printf(″Please input a number:\n″); 中的\n表示换行,即把屏幕光标移动到下一行的开始位置。

换行标志\n只能用在printf语句中,不能用在scanf语句。

双语精髓

A variable is the name given to a collection of memory cells,designed to store aparticular data item .It is calleda variable because the value stored in that variable maychange or vary as the program executes .

变量是一个指定的内存单元的名字,用来存储一个特定的值。之所以被称为变量,是因为在程序执行的过程中,程序可以改变存储的值。

A constant isa data item with a name anda value that remain the same during theexecution of the program .

常量是一种带有名字和值的数据项,但它的值在程序执行过程中保持不变。

Initializea variable is givinga value to it for the first time .

初始化变量就是在第一次使用变量赋予给变量一个值。

20 程序设计基础

本章知识要点

(1) 十进制整常数的构成形式。

(2) 八进制整常数的构成形式。

(3) 十六进制整常数的构成形式。

(4) 实数的两种形式———普通形式和指数形式。

(5) 符号常量的定义方法和特点。

(6) 变量的意义。应注意变量与符号常量的区别,变量的值在程序运行期间可以改

变,但符号常量的值在程序运行期间不能改变,只能在一开始给定值,不能在运行中重新

赋值,即不可改变其值。

(7) 变量声明的三要素———类型、名字和当前值。

(8) 变量使用的3个步骤———声明、赋初值和使用。

(9) 变量的命名规则等同于标识符所遵循的规则。

(10) 整型和实型变量的输入/ 输出方法。

(11) 在输入/ 输出方面,应注意三大匹配:声明、输入和输出。即输入/ 输出都应与声

明的变量类型匹配。

典型试题分析

【例2-6】 选择正确的选项。

以下符号串中不能作为C语言合法常量的是 。

A .235

B .0235

C .0x2345

D .0x34 .8

本题综合考核了常量的构成规则。答案是D。

【例2-7】 指出以下程序中的错误。

#include < stdio .h>

#define PI 3 .14159

#define RI 5 .5

void main()

{

float s=0;

第2章 常量和变量 21

RI=6;

s= PI*RI*RI;

printf(″Area= %f″,s);

}

试题分析 本题第5行RI=6是错误的,因为符号常量的值在程序中不能改变,这是符号常量与变量的主要区别。

【例2-8】 选择正确的选项。

下列说法中正确的是 。

A .变量在使用前必须声明。

B .变量声明语句可以放在任何地方。

C .变量可以存放任何数据。

D .变量名可以数字开头。

试题分析 本题考核了变量的基本概念,即声明、类型匹配及使用的特点。正确答案为A。

【例2-9】 指出以下程序中的错误。

#include < stdio .h>

void main()

{

int isum=0;

isum=ifirst+10;

int ifirst=20;

printf(″isum = %d″,isum);

}

试题分析 本题考核了变量的声明与使用。第6 行语句int ifirst=20; 是声明变量a 并赋初值20,但却写在执行语句区域,造成在第5行语句 isum=a+10; 中还没有声明变量ifirst 就使用的错误。

【例2-10】 指出以下程序中的错误。

#include < stdio .h>

void main()

{

int isum=0;

scanf(″%d″,isum);

printf(″isum = %f″,isum);

}

22 程序设计基础

试题分析 本题考核了变量输入/ 输出的匹配问题。第4行语句int isum=0; 声明

变量isum 为整型,但执行语句区域,造成在第6行语句printf(″isum= %f″,isum); 中使

用了float 型的输出格式。

【例2-11】 指出以下程序中的错误。

#include < stdio .h>

void main()

{

int iage;

float fscore;

printf(″iage is %d,fscore is %f″,iage,fscore);

}

试题分析 本题考核了变量的初始化问题。由于变量iage 和fscore 都没有进行初

始化,printf 语句输出的值是不确定的。

练习题

1 .使用符号常量有何益处,使用时应该注意什么问题?

2 .下列选项中,可以作为C语言常量的是 。

A .13 .8e

B.1/ 2

C .12*3

D .1234

3 .下列选项中,不能作为C语言常量的是 。

A .8 .8

B.35 .6e3

C .4e- 2

D .±5

4 .试比较变量与常量的区别。对照变量类型与常量类型,其中哪些是相同的,哪些

是变量所独有的?

5 .以下程序的输出结果是 。

#include < stdio .h>

void main()

第2章 常量和变量 23{

int x=010,y=10,z=0x10;

printf(″%d,%d,%d″,x,y,z);

}

A .8,10,16

B . 8,10,10

C .10,10,10

D .10,10,16

6 .指出下面程序中的错误。

#include < stdio .h>

void main()

{

int A=0;

printf(″%d″,a);

}

7 .指出下面程序中的错误。

#include < stdio .h>

void main()

{

float a=0;

scanf(″%f″,&a);

a=a*10;

printf(″%d″,a);

}

8 .指出下面程序中的错误。

#include < stdio .h>

void main()

{

int iprice=0;

scanf(″%d″,iprice);

iprice=iprice*10;

printf(″%d″,iprice);

}