您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  二级C++精品课程2-4:变量的相关知识 【注册男护士专用博客】          

二级C++精品课程2-4:变量的相关知识

www.nanhushi.com     佚名   不详 

  变量就是机器一个内存位置的符号名,在该内存位置可以保存数据,并可通过符号名进行访问。变量有三个特征:
  ◇ 每一个变量有一个名字,其命名规则与标识符相同。
  ◇ 每一个变量有一个类型。
  ◇ 每一个变量保存一个值。如果需要变量保存某一个值,就把该值赋给变量。
  为了提高程序的可读性,给变量命名时,应该注意使用有意义的名字,以帮助描述变量所保存的值。最好是一开始就坚持使用小写字母。例如:要用一个变量保存工资总额,可以使用total_payroll,也可以使用XYZ34作变量名,它们都是合法的名字。但使用前者比使用后者就更好,因为从变量名,就能大致知道它保存了什么样的值,便于记忆。
  在使用一个变量之前,必须先定义。变量的定义的一般格式如下:
  数据类型 变量名1[= 初始值1], 变量名2[= 初始值2], ...;
  "数据类型"是指C++有效的数据类型,如int、double、long等。方括号中的内容是可选的,它是在变量定义时,给变量赋初值。下面是几个变量定义的实例:
  long n; //定义了一个长整型变量n,未赋初值
  double a, b = 0.5; //定义双精度型变量a、b,a未赋初值,b的初值为0.5

下面是一个使用变量的程序实例:
程序段 程序2-3:
  #include <iostream.h>
int main (void)
{
 1. int workDays = 5;
 2. float workHours, payRate, weeklyPay;
 3. workHours = 7.5; payRate = 38.55;
 4. weeklyPay = workDays * workHours * payRate;
 5. cout << "Weekly Pay = " << weeklyPay << '\n';
}
  第一行定义了一个整型变量workDays,并初始化为5,表示一周的工作天数。
  第二行定义了三个实型变量,分别表示每天工作的小时数、每小时应支付的薪水及每周应支付的薪水。
  第三行是两个赋值语句。7.5 赋给变量workHours,38.55赋给变量payRate。
  第四行是计算每周的工资,即三个变量workDays、workHours、payRate的积,*是乘运算符,结果保存在变量weeklyPay变量中。
  第五行输出字符串"Weekly Pay = "、变量weeklyPay 的值和换行符。
  本程序的运行结果如下:
    Weekly Pay = 1445.625
  如果我们定义一个变量时,没有给它赋初值,它的值是不定的。例如,在上面的第四行执行前,weeklyPay的值是不定的。
  变量第一次赋值称之为初始化,变量在使用之前应当先初始化。

2.4.1 整型
  整型变量可用short、int、long定义,区别在于int占用机器的字节数比short多或一样,而long占用的字节数比int多或一样。例如:
  short age = 20;
  int salary = 65000;
  long price = 4500000;
  缺省的情况下,整型变量假定为有符号的,但是,使用unsigned关键字,也可以把整型变量定义为无符号的。当然,定义整型变量时,也可以使用signed关键字,但是多余的。
  unsigned short age = 20;
  unsigned int salary = 65000;
  unsigned long price = 4500000;
  一个整型数,例如1984,总是被假定为int类型,除非有L或l后缀,才被处理为long int类型。同样,一个整型数也可以加U或u后缀,指定为unsigned类型。例如表2-6:
  整型数能被表示成10进制、8进制和16进制。如果一个整型数有前缀0,则表示是8进制数,有前缀0x或0X,表示是16进制数。例如:
  92 // 十进制
  0134 // 8进制
  0x5C // 16进制
  8进制数只能使用数字0~7,16进制数可用0~7及A~F (或a~f)表示。

表格 表2-6
 
1984L 1984l 1984U 1984u 1984LU 1984lu
  整型是常用的一种数据类型,但是,它的大小是不固定的,这是由操作系统决定的。在计算机中任何信息都是以二进制的形式存储的,二进制数每一位是0或1,八位组成一个字节(byte),两个字节组成一个字(word),四个字节组成一个双字(dword)。
  整数能存储的最大值是由计算机给它分配的存储空间的大小决定的,而整数所占的存储空间因不同的计算机而异。例如,某种计算机可能用16位(两个字节)来存储一个整数,而另一种计算机则可能用32位(四个字节)来存储。
  当一个整数存储在计算机中时,左起第一位叫做第0位,即符号位,它用来表示该数是正数或负数。如果是负数,符号位被置1,正数则为0。
  两个字节能表示的整数范围是-32768~32767, 四个字节能表示的整数范围则增加到-2147463648~2147483647。
  由于整数所占的存储空间在不同的计算机上是不同的,所以在代码移植时容易出现问题。
图示 图2-3 2字节如何表示整型值
 

2.4.2 浮点型
  浮点型变量可用float或double定义,后者在机器内存中占用的字节数更多,所以有效位数更多,表示的数字范围也更大。例如:
  float interestRate = 0.06; double pi = 3.141592654;
  一个实型数,如0.06总是假定为double型,除非有F或f后缀,才被处理为float型。若有L 或 l后缀,则被处理为long double型。例如表2-7:
  实型数也可以表示成指数形式。例如:0.002164可以写成:


  2.164E-3或2.164e-3
  E或e代表指数。

表格 表2-7

1984L 1984l 1984U 1984u 1984LU 1984lu

  浮点型分为单精度浮点型和双精度浮点型,就是所谓的float和double。下表列出了它们的主要数据:

表格 表2-8
 
类型 字节数 有效位(十进制) 指数长度 尾数长度
float 4 6-7 8bits 23bits
double 8 15-16 11bits 52bits

  浮点数是由符号位、指数位和尾数位构成的,上表已列出浮点型的指数位长度和尾数位长度。以单精度浮点数为例:它是由1个符号位、8位指数位和23位尾数组成,共32位,4个字节。
2.4.3 字符型
  字符变量用char定义,一个字符变量仅占用一个字节,存放该字符的编码。该编码是一个数字,并依赖于所使用的编码系统(即与机器相关)。最普通的编码是ASCII(American Standard Code for Information Interchange),即美国信息交换标准编码。例如:字符A的ASCII码为65,字符a的ASCII码为97。
  char ch = 'A';
  象整型数一样,字符变量也可被指定为signed或unsigned。大多数机器上,char与signed char意义相同。有些机器上,char可能与unsigned char意义相同。一个有符号字符变量可以保存-128 ~127之间的整数,而一个无符号字符变量可以保存0 ~255之间的整数,它们均可用于表示小整数,象整型数一样赋值:
  signed char offset = -88;
  unsigned char row = 2, column = 26;
  一个字符是用一对单引号包围起来,例如:'A'。C++中还有一些不能打印的特殊字符,称之为转义字符。例如2-1:
  字符也可以用它们的编码指定,转义字符通常用三位8进制数表示,例如2-2:(假定为ASCII码):
  C++的字符由下列字符组成。
  1、大小写英文字母
   a~z,A~Z
  2、数字字符
   0~9
  3、特殊符号
   空格 ! # % ^ & * _ - + = ~ < > / \ | . , ; ? ' " ( ) [ ] { }

图示 图2-6 2字节如何表示字符型值
 
  C++语言把字符型变量当作一个较小的整型量,可以象整型量一样使用它。下面举一个例子说明:
程序段 程序2-6
  #include <iostream.h>
void main()
{
 char c1 = 'a';
 char c2 = 'b';
 char c3,c4;
 c3 = c1 - ('a' - 'A');
 c4 = c2 - ('a' - 'A');
 cout<<c3<<c4<<endl;
}
运行结果为:
 A B

  程序中的'a' - 'A'是大小写字母之间的差值,其值为32。所以我们也可以把程序写成:
    c3 = c1 - 32;
    c4 = c2 - 32;
  如果我们想看一看c3、c4中到底存储的值是多少,可以这样:
    cout<<(int)c3<<(int)c4<<endl;
  其运行结果为:
    65 66
  注意:在内存中,字符数据以ASCII码存储,即以整数表示,'0'和0是不同的。

例题 例2-1:
  '\n' // 换行
'\r' // 回车
'\t' // 水平tab
'\v' // 垂直tab
'\b' // 退格
'\f' // 进纸
'\'' // 单引号 (')
'\"' // 双引号 (")
'\\' // 反斜杠 (\)
例题 例2-2:
  '\12' //换行(10进制编码 = 10)
'\11' // 水平tab (10进制编码= 9)
'\101' // 'A' (10进制编码= 65)
'\0' // null (10进制编码= 0)

2.4.4 字符串
  字符串是一个连续的字符系列,有一个'\0'字符结尾。假定有一个字符串为"HELLO",它在内存中的存储,参见图2-2。
  一个字符串用一对双引号包围起来,例如:"HELLO",编译器在每一字符串的结尾增加'\0' 结尾符。字符串可以由任意字符组成,例如:
  "Name\tAddress\tTelephone" // tab-分隔字符
  "ASCII character 65: \101" // 'A' 用'101'指定
  一个长字符串可以占两行或多行,但在最后一行之前的各行应用反斜杠结尾,例如:
  "Example to show \
  the use of backslash for \
  writing a long string"
  上面的字符串与下面的单行字符串等价:
  "Example to show the use of backslash for writing a long string"
  需要注意的是:
  (1) 不要把字符与字符串混淆了。例如:"A"与'A'不等价,前者由两个字节组成(字符'A'与字符'\0'),而后者只有一个字节。
  (2) 最短的字符串是空字符串(""),它仅由一个结尾符'\0'组成。
  (3) C++中,没有字符串类型,而是用字符数组来处理字符串,这将在第六章中介绍。
图示 图2-7 在内存中的字符串
 
  字符串常量与字符常量不同,字符串常量是用一对双引号括起来的零个或多个ASCII字符的序列,并以NULL(ASCII码值为0)结束。例如:
例题 例2-3:
  "This is a character string."
"CHINA"
"0123456789"
"a"
"$10000.00"
" "(引号中有一个空格)
""(引号中什么也没有)
"\n"(引号中有一个转义字符)
  字符串常量在内存中存储时,系统自动为每个字符串常量的尾部加一个字符\0,用以标识这字符串的结束,如字符串
    "CHINA"
  在内存中的形式是:
表格 表2-9
 
C N I N A \O
  了解这一点,我们就可以区分字符串"a"和字符'a'有何不同了。它们在内存中的形式分别为:

2.4.5 布尔型
  布尔类型变量用bool关键字定义,其值为true或false,true和false都是C++的关键字。整型值也可赋给bool变量,但会被隐式转换成true或false。转换规则如下:整型值非0时,转换为true,整型值为0时,转换为false。
  同样,布尔值也可赋值给整型变量,但要进行隐式转换,转换规则为:布尔值为true时,转换为1,布尔值为false时,转换为0。
  布尔值也可插入输出流cout,当布尔值为true时,在屏幕上打印1,当布尔值为bool时,在屏幕上打印0。例如2-5。

  C没有bool这个数据类型,C++中定义了bool类型,它只有两个值:true和false。所有的条件表达式返回类型都是bool型,比如n!=0(!=是"不等于"运算符,我们在本章后面要介绍)根据不同的n,返回true或false。true和false有如下关系:
    !true==false;
    !false==true;
  !是取反运算符,我们在本章后面要介绍。我们看一个简单的例子:"if (exp1) statement1;"。这个语句的意思是:如果表达式exp1的值是true,就执行statement1,否则就不执行。
  如果对一个bool类型变量使用前缀或后缀自增(++)运算符,不管这个变量是false还是true,这个变量将变为true。但是不能对bool类型变量使用前缀或后缀自减(――)运算符(有关自增、自减运算符的内容在本章的后面介绍)。如:
例题 例2-4:
  #include "iostream.h"
int main(int argc, char* argv[])
{
 bool b;
 b=false;
 cout<<b++;
 cout<<b++;
 cout<<b;
 return 0;
}
程序运行结果为:
011
  一个右值为bool型变量将被自动转换成整型,且false被转换成0,true被转换成1。所以上面程序中输出的是011,代表的意思是false、true、true。
  C++中还有一种比较特殊的类型,它用于定义函数返回类型,或者用于定义"一般类型"的指针,即该指针可以指向任意类型数据(被const和volatile修饰的变量除外),但是不能定义空类型的变量。例如,
  函数声明:void func();
  指针定义:void *p;
例题 例2-5:
  cout << "A true value: ";
cout << true;
cout << endl;
cout << "A false value: ";
cout << false;
cout << endl;
输出结果为:
A true value: 1
A false value: 0

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目