C#从入门到精通(第2版)
上QQ阅读APP看书,第一时间看更新

第4章 变量与常量

本章视频教学录像:23分钟

通过第3章的学习,我们对C#的数据类型及类型转换有了简单的了解。每一门语言都有各自的变量和常量的命名与使用规则,本章主要介绍常量与变量的相关内容。

本章要点(已掌握的在方框中打钩)

□ 变量

□ 匿名变量

□ 常量

4.1变量

本节视频教学录像:6分钟

变量是编程语言中最基本的元素。变量是一个名称,表示程序执行时存储在内存中的数据。当需要访问存储在变量中的信息时,只需要使用变量的名称即可。

4.1.1变量的命名

C#是一种对大小写敏感的语言,变量命名需要遵循如下规则。

(1) 变量名必须以字母或下画线开头,只能由字母(大写和小写)、数字和下画线组成。

(2) 变量名不能包含空格、标点符号、运算符字符。

(3) 变量名不能与C#中的关键字、运算符或函数名同名。

(4) 使用多个单词组合为变量名时,使用骆驼命名法(camelCase),即第1个单词的首字母小写,其他单词的首字母大写。

注意

C#不能用关键字做变量名,但C#允许在关键字的前面加上前缀“@”作为变量的名字,如@using是合法的变量名。引入“@”的目的在于与其他语言进行交互时避免冲突。建议尽量不要使用前缀“@”作为变量名的一部分。

下面给出一些合法与不合法的变量名例子。

    2a                 //不合法,以数字开头
    number.1           //不合法,含有非法字符'.'
    numberOne          //合法
    break              //不合法,break为关键字
    mod                //不合法,mod为运算符
    Main               //不合法,Main为函数
    intAge             //合法,使用骆驼命名法

4.1.2变量的声明和赋值

变量的声明语法如下。

[访问修饰符] [变量修饰符] 变量的数据类型 变量名

其中访问修饰符和变量修饰符可以省略,这将在9.2节中介绍。变量声明和赋值如下所示。

    01  private  int  x;         //声明x为整型变量,private可以省略
    02  x=10;                    //变量的赋值,让变量x的值为10
    03  string  name="John";     //声明一个字符串变量name,值为John

也可以在声明变量的同时赋值,如:

    int  x=10;

也可以在一行声明多个变量,如:

    int x=3,y=8; //不同变量之间用逗号隔开

4.1.3 隐式类型的局部变量

隐式类型的局部变量又叫匿名变量,是C# 3.0版本中引入的一个新用法,使用关键字var来声明。可以用var声明任何类型的局部变量,它只是负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。

语法如下。

    var  变量名称=变量值;

例如,

    01  var i=8;               //定义局部变量i,i作为整型数据被编译
    02  var s="Hello C#!";     //定义局部变量s,s作为字符串数据被编译

4.2常量

本节视频教学录像:12分钟

常量就是在程序运行过程中值保持不变的量,即在程序执行期间,常量的值不会发生改变。可以在代码的任何位置用常量代替实际值。如定义const PI=3.14159265,这里使用PI来代替数值3.14159265。常量声明时需要包含常量的名称和常量的值,其格式如下。

    [访问修饰符号]  const  类型  常量表达式;

其中“访问修饰符号”可以省略。常量的修饰符可以是new、public、protected、internal、private等。常量的表达式表示常量的名字。如下所示。

    public  const  int  x=3,  y=8;//定义int型常量x和y,其值分别是3和8

可以在一行声明多个常量。不过如果每行只声明一个常量,代码会更具有可读性。

【范例4-1】 定义常量和变量,熟悉常量、变量的使用。

⑴ 在VisualStudio 2013中新建C#控制台程序,项目名为“ConsVarDemo”。

⑵ 在Program.cs的Main方法中输入以下代码(代码4-1.txt)。

        01  const  int  months=12;  //定义常量months
        02  const  int  weeks=52;   //定义常量weeks
        03  const  int  days=365;   //定义常量days
        04  //可以使用定义过的常量声明新的常量
        05  const  double  daysPerWeek=(double)days/(double)weeks;        //定义常量daysPerWeek
    06  const   double  daysPerMonth=(double)days/(double)months;       //定义常量daysPerMonth
    07  string  name="Tom";                               //定义变量name
    08  int  annualSalary=500000;                         //定义变量annualSalary
    09  loat  monthSalary=annualSalary/months;            //定义变量monthSalary
    10  float  weekSalary=annualSalary/weeks;              //定义变量weekSalary
    11  float  daySalary=annualSalary/days;                //定义变量daySalary
    12  Console.WriteLine("常量变量演示结果:");          //输出常量和变量的值
    13  Console.WriteLine("double型常量daysPerWeek的值是:{0}",daysPerWeek);
    14  Console.WriteLine("double型常量daysPerMonth的值是:{0}",daysPerMonth);
    15  Console.WriteLine("float型变量monthSalary的值是:{0}",monthSalary);
    16  Console.WriteLine("{0}的年薪是:{1}元",name,annualSalary);
    17  Console.WriteLine("{0}的月薪是:{1}元",name,monthSalary);
    18  Console.WriteLine("{0}的周薪是:{1}元",name,weekSalary);
    19  Console.WriteLine("{0}的日薪是:{1}元",name,daySalary);
    20  Console.ReadKey();                                //暂停程序的运行直到输入任意键
    21  Console.ReadLine();

【代码详解】

代码1~3行定义了3个常量;第5~6行,利用声明过的常量定义两个新常量;第7~11行声明了5个3种不同类型的变量;第13~19行,采用Console的WriteLine方法输出格式字符串来进行信息输出,其中采用输出格式字符串的方式在C#中经常使用,这种方式包含两个参数:格式字符串和变量列表,{0}和{1}作为占位符出现在字符串中,代表后面依次排列的变量的值出现的位置。

【运行结果】

单击工具栏中的按钮,即可在控制台中输出如下图所示的结果。

【范例分析】

在这个实例中定义了常量months、weeks和days,使用定义过的常量声明新的常量daysPerWeek、daysPerMonth,并强制进行了类型转换,把int转为double类型;定义了多个变量,并采用格式字符串的形式输出。在这里需注意,计算monthSalary等变量没有进行类型转换,故monthSalary等变量的赋值结果最终是int类型。

【拓展训练】

把【范例4-1】改成隐式类型的局部变量重新运行。

分别声明多个常量和多个变量,变量类型根据赋的值自动确定。代码如下(拓展代码4-1.txt)。

    01  const  int  months=12;                                         //定义常量
    02  const  int  weeks=52;                                          //定义常量
    03  const  int  days=365;                                          //定义常量
    04  //可以使用定义过的常量声明新的常量
    05  const  double  daysPerWeek=(double)days/(double)weeks;         //定义常量
    06  const  double  daysPerMonth=(double)days/(double)months;       //定义常量
    07  var  flag=true;                                    //定义var变量,赋值为布尔型数据
    08  var  name="Tom";                                  //定义var变量,赋值为字符串
    09  var  annualSalary=500000;                         //定义var变量,赋值为整型
    10  var  monthSalary=annualSalary/months;             //定义var变量,根据表达式的值确定类型
    11  var  weekSalary=annualSalary/weeks;               //定义var变量,根据表达式的值确定类型
    12  var  daySalary=annualSalary/days;                 //定义var变量,根据表达式的值确定类型
    13  var  x=Math.Exp(2);                               //定义var变量,根据表达式的值确定类型
    14  var  y=name.Length;                               //定义var变量,赋值为整型
    15  Console.WriteLine("double型常量daysPerWeek的值是:{0}",  y);
    16  Console.WriteLine("常量变量演示结果:");          //以下语句用来输出结果
    17  Console.WriteLine("double型常量daysPerWeek的值是:{0}",  daysPerWeek);
    18  Console.WriteLine("double型常量daysPerMonth的值是:{0}",  daysPerMonth);
    19  Console.WriteLine("匿名变量flag的值是:{0}",  flag);
    20  Console.WriteLine("匿名变量monthSalary的值是:{0}",  monthSalary);
    21  Console.WriteLine("{0}的年薪是:{1}元",  name,  annualSalary);
    22  Console.WriteLine("{0}的月薪是:{1}元",  name,  monthSalary);
    23  Console.WriteLine("{0}的周薪是:{1}元",  name,  weekSalary);
    24  Console.WriteLine("{0}的日薪是:{1}元",  name,  daySalary);
    25  Console.ReadKey();
    26  Console.ReadLine();

技巧

匿名变量声明的同时必须赋值,声明一个匿名变量后不能给它赋另一类型的值;匿名变量初始化不能为null(空值),匿名变量仅限于声明局部变量。

【运行结果】

运行结果如下图所示。

4.3高手点拨

本节视频教学录像:2分钟

变量和常量有什么区别和联系,使用常量有什么优点?

常量即程序运行的过程中它的值不发生改变的变量。在声明和初始化时,在变量的前面加上const关键字,把此变量声明成为常量。只有局部变量、字段才能被声明为常量。

其特征如下。

常量声明时必须要初始化,赋值后不能再改变,而且所赋的值在程序编译的过程中要能用于计算。其次常量一般都是静态的,但也不用在声明常量时在其前面加上static。

为了使程序更加通俗易懂、更加方便于修改等,这个时候我们就可以使用常量。用一个简单易懂的英文字母组合来代替程序中多次出现的数字等,例如,某种商品的价格或单价。这就是使用常量的优点。

变量实际上代表的是数据真实的存储位置。变量的类型决定了它存储的数值。必须先给变量声明类型之后才能赋值。严格语法格式有两种。

变量类型 变量名称;

变量类型 变量名称=值;

第一种只声明了变量的类型,没有赋值;第二种声明了类型且赋了值,且赋的值必须与变量的类型一致。也就是说数据要存放在合理的数据类型里面,例如,勺子是用来喝汤的,筷子是用来吃面的。另外一种情形,例如,打完球,喝完了饮料,还是很渴,有水但没有杯子,怎么办?可以用饮料的瓶子接水喝。由于饮料和水都是液体,也就是说数据的类型没变,数据发生变化了,只是给变量重新赋值而已。

4.4实战练习

一、思考题

C#中变量命名规则有哪些?

二、操作题

1. 创建一个控制台程序,验证短整型变量的取值范围。

2. 创建一个控制台程序,定义一个常量pi赋值为3.14,输入半径,计算圆的周长和面积。