第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,输入半径,计算圆的周长和面积。