(本科)第3章数据类型、常量与变量ppt课件.ppt
课程主讲人:第3章 数据类型、常量与变量3.1 数据类型数据类型3.2 常量与变量常量与变量在日常生活中存在着各种各样的数据,人们通常把每一种数据根据在日常生活中存在着各种各样的数据,人们通常把每一种数据根据其特点进行归类划分成很多种类,从而成为不同的数据类型,例如整其特点进行归类划分成很多种类,从而成为不同的数据类型,例如整数、小数数、小数。数据类型在数据结构中的定义是一组性质相同的值的集合以及定义数据类型在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称。在这个值集合上的一组操作的总称。即每一种数据类型有其特定的取即每一种数据类型有其特定的取值范围和可执行的运算。值范围和可执行的运算。C#是一种是一种强类型语言强类型语言,要求每个变量都必须指定数据类型。,要求每个变量都必须指定数据类型。图图3-1 C#中数据类型的分类中数据类型的分类值类型亦称为基本数据类型,包括整型、浮点型、字符型、布尔值类型亦称为基本数据类型,包括整型、浮点型、字符型、布尔型、枚举型等。型、枚举型等。值类型在栈中分配空间值类型在栈中分配空间,直接保存数据,因此效率高。值类型具,直接保存数据,因此效率高。值类型具有下列特性:有下列特性:(1)所有值类型均隐式派生自)所有值类型均隐式派生自System.ValueType;(2)值类型变量都存储在栈中(静态分配);)值类型变量都存储在栈中(静态分配);(3)值类型不能为)值类型不能为null,必须由一个确定的值,每种值类型均,必须由一个确定的值,每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值;有一个隐式的默认构造函数来初始化该类型的默认值;(4)复制值类型变量时,复制的是变量的值,而不是变量的地)复制值类型变量时,复制的是变量的值,而不是变量的地址;址;(5)所有的值类型都是密封()所有的值类型都是密封(seal)的,所以无法派生出新的)的,所以无法派生出新的值类型。值类型。1整数类型整数类型2实数类型实数类型【实例实例3-1】计算平均成绩。计算平均成绩。实实例描述:例描述:创建一个控制台应用程序,输入个人的学号、高等数学和大学英语的成绩(整数),然后计算两门课程的平均成绩,保留两位小数。实实例分析:例分析:平均成绩要求保留两位小数,故应采用float或double类型,这里使用double类型,在输出时要通过输出格式控制符控制输出两位小数。【实例实例3-1】计算平均成绩。计算平均成绩。static void Main(string args) int student_ID, mathScore,engScore;/声声明明学号变学号变量、高等量、高等数学数学成成绩绩、大、大学学英英语语成成绩绩和平均成和平均成绩变绩变量量 double avgScore;/声声明平均成明平均成绩变绩变量量 Console.Write(请输请输入入学号学号:);/提示提示输输入入学号学号 student_ID = int.Parse(Console.ReadLine();/输输入入学号学号 Console.Write(请输请输入高等入高等数学数学成成绩绩:); mathScore = int.Parse(Console.ReadLine();/输输入高等入高等数学数学成成绩绩 Console.Write(请输请输入大入大学学英英语语成成绩绩:); engScore = int.Parse(Console.ReadLine();/输输入大入大学学英英语语成成绩绩 avgScore = (mathScore + engScore) / 2.0;/计计算平均成算平均成绩绩,除以,除以2.0而不是除以而不是除以2,是,是为为了了将将整整数计数计算算式按式按double计计算算 Console.WriteLine(平均成平均成绩绩:0:f2, avgScore); /f2:控制控制输输出出两两位小位小数数 Console.ReadLine();3字符类型(字符类型(char类型)类型)字符类型采用国际标准字符类型采用国际标准Unicode字符集,占用两个字节,只能存字符集,占用两个字节,只能存放一个西文字符或一个汉字。放一个西文字符或一个汉字。字符类型用字符类型用char关键字标识,存放到关键字标识,存放到 char 类型的字符需要使用类型的字符需要使用单引号括起来,例如单引号括起来,例如 a、中中 等。等。char um=6;char letter1 =a;char letter2 =中中;4布尔类型布尔类型布尔类型使用布尔类型使用bool关键字来声明,布尔类型只能表示逻辑真关键字来声明,布尔类型只能表示逻辑真(true)或逻辑假()或逻辑假(false),即该类型的值),即该类型的值只有只有true和和false。布尔类型的值经常用在条件判断的语句中。布尔类型的值经常用在条件判断的语句中。例如:例如:bool myBool = false;myBool = (month=1 & month=12);5结构类型结构类型结构类型属于结构类型属于自定义类型自定义类型,可以将不同类型的多个信息集成在一个结构体中,可以将不同类型的多个信息集成在一个结构体中,共同描述一个结构体的完整信息。结构类型和类一样,还可以定义相应的方法。共同描述一个结构体的完整信息。结构类型和类一样,还可以定义相应的方法。定义结构类型需要使用定义结构类型需要使用struct关键字关键字,声明结构类型(结构体)的一般语法,声明结构类型(结构体)的一般语法格式为:格式为:5结构类型结构类型【实例实例3-2】用结构类型保存学生多项信息。用结构类型保存学生多项信息。实例描述:创建一个控制台应用程序,通过结构数据类型来保存、实例描述:创建一个控制台应用程序,通过结构数据类型来保存、处理学生信息,学生信息包括学号、姓名、班级名称、高等数学和处理学生信息,学生信息包括学号、姓名、班级名称、高等数学和大学英语的成绩(整数)等,并输出学生基本信息。大学英语的成绩(整数)等,并输出学生基本信息。实例分析:应使用实例分析:应使用struct关键字来声明学生结构类型,要注意结关键字来声明学生结构类型,要注意结构类型中的各个字段要根据字段的实际值域使用合理的数据类型,构类型中的各个字段要根据字段的实际值域使用合理的数据类型,如学号为纯数字,可使用如学号为纯数字,可使用int或或string,姓名为字符串,应使用,姓名为字符串,应使用string类型等。类型等。namespace Example3_2 class Program struct Student /声明Student结构体 public int student_ID; /学号 public string student_name; /姓名 public string student_sex; /性别 public string class_name; /班级名称 public int mathScore; /高等数学成绩 public int engScore; /大学英语成绩 static void Main(string args) Student s1, s2; /声明两个Student变量 s1.student_ID = 20201106; /为s1学号赋值 s1.student_name = 张三丰; /为s1姓名赋值 s1.student_sex = 男; /为s1性别赋值 s1.class_name = 软件工程201; /为s1班级名称赋值 s1.mathScore = 97; /为s1高等数学成绩赋值 s1.engScore = 95; /为s1大学英语成绩赋值 s2.student_ID = 20203311; /为s2学号赋值 s2.student_name = 欧阳锋; /为s2姓名赋值 s2.student_sex = 男; /为s2性别赋值 s2.class_name = 数据科学203; /为s2班级名称赋值 s2.mathScore = 88; /为s2高等数学成绩赋值 s2.engScore = 99; /为s2大学英语成绩赋值 Console.WriteLine(学号:0,姓名:1,性别:2,班级名称:3,高等数学成绩:4,大学英语成绩:5, s1.student_ID, s1.student_name, s1.student_sex, s1.class_name, s1.mathScore, s1.engScore); /输出学生s1信息 Console.WriteLine(学号:0,姓名:1,性别:2,班级名称:3,高等数学成绩:4,大学英语成绩:5, s2.student_ID, s2.student_name, s2.student_sex, s2.class_name, s2.mathScore, s2.engScore); /输出学生s2信息 6枚举类型枚举类型枚举类型和结构体类型都是特殊的值类型。枚举类型用于声明一组具有相同枚举类型和结构体类型都是特殊的值类型。枚举类型用于声明一组具有相同性质的常数。例如一年中的十二个月份、一周中的七天等。性质的常数。例如一年中的十二个月份、一周中的七天等。使用枚举可增加代码的可读性和可维护性,同时可避免类型错误。使用枚举可增加代码的可读性和可维护性,同时可避免类型错误。枚举类型使用枚举类型使用enum关键字声明,定义枚举类型的一般语法格式如下:关键字声明,定义枚举类型的一般语法格式如下:enum 枚举名枚举名 枚举成员枚举成员1, 枚举成员枚举成员2, ,枚举成员枚举成员n定义一个描述一周内七天的枚举类型:定义一个描述一周内七天的枚举类型:enum Days Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday; /声明一周内七天的枚举类型声明一周内七天的枚举类型【实例实例3-3】一周内七天的描述与应用。一周内七天的描述与应用。实实例描述:例描述:创建一个控制台应用程序,用枚举类型描述一周内的七天,并演示应用。namespace Example3_3 class Program /enum类型要声明在Main函数外面 enum Days Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday; /声明一周内七天的枚举类型 static void Main(string args) Days day1, day2; /定义两个Days枚举变量 day1 = Days.Monday; /为day1赋值 day2 = Days.Friday; /为day2赋值 Console.WriteLine(day1=0,值=1; day2=2,值=3, day1, (int)day1, day2, (int)day2); /输出day1和day2及其相应值 Console.ReadLine(); 也称为参考类型,和值类型变量直接存储值不同,也称为参考类型,和值类型变量直接存储值不同,引用类型变量存储引用类型变量存储的是对值(对象)的引用的是对值(对象)的引用。换句话说,引用类型变量存储的是指向实际。换句话说,引用类型变量存储的是指向实际值(对象)存储的内存地址(指针)。值(对象)存储的内存地址(指针)。另外,值类型变量的存储空间是在栈空间中分配,而另外,值类型变量的存储空间是在栈空间中分配,而引用类型变量的引用类型变量的存储空间是在堆空间中分配。存储空间是在堆空间中分配。所有被称为所有被称为“类类”的都是引用类型,包括类、接口、数组、委托等,的都是引用类型,包括类、接口、数组、委托等,引用类型的变量又称为引用类型的变量又称为“对象对象”,这些内容将在后面相关章节中详细介,这些内容将在后面相关章节中详细介绍。绍。C#预定义的引用类型有预定义的引用类型有object和和 string。引用类型具有下列特性:引用类型具有下列特性:(1)所有引用类型均隐式派生自)所有引用类型均隐式派生自System.object;(2)引用类型可以派生出新的类型;)引用类型可以派生出新的类型;(3)引用类型可以包含)引用类型可以包含null值,引用类型被赋值前的值都是值,引用类型被赋值前的值都是null;(4)引用类型变量的复制只复制对对象的引用,而不复制对象本身;)引用类型变量的复制只复制对对象的引用,而不复制对象本身;(5)引用类型的对象总是在堆中分配(动态分配)。)引用类型的对象总是在堆中分配(动态分配)。object是是System.Object 类的别名,类的别名,object(对象)类型是(对象)类型是C#通用类型通用类型系统(系统(Common Type System,CTS)中所有数据类型的基类,即所有)中所有数据类型的基类,即所有类型都是直接或间接地派生于类型都是直接或间接地派生于object类型。类型。1object类型类型2string类型类型string(字符串)类型表示零个或多个(字符串)类型表示零个或多个Unicode字符组成的字符串。字符组成的字符串。string类型属于引用类型,是程序设计语言中重要的数据类型,具体的类型属于引用类型,是程序设计语言中重要的数据类型,具体的介绍详见第介绍详见第6章。章。类型转换是把数据从一种类型转换为另一种类型,如:类型转换是把数据从一种类型转换为另一种类型,如:intdoublecharASCII值值 在在C#程序中对不同类型的数据进行操作时,经常需要进行数据类型程序中对不同类型的数据进行操作时,经常需要进行数据类型转换。转换。C#类型转换有两种方式:类型转换有两种方式:隐式类型转换和显式类型转换。隐式类型转换和显式类型转换。1隐式类型转换隐式类型转换隐式类型转换就是系统默认的、不需要加转换声明就可以进行的转换。隐式类型转换就是系统默认的、不需要加转换声明就可以进行的转换。隐式类型转换是编译器默认的以安全方式进行的转换隐式类型转换是编译器默认的以安全方式进行的转换, 不会导致数据不会导致数据丢失。丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。类。隐式类型转换时转换前后的类型必须相兼容。隐式类型转换时转换前后的类型必须相兼容。1隐式类型转换隐式类型转换2显式类型转换显式类型转换显式类型转换又称为强制类型转换,和隐式类型转换不同,显式类型显式类型转换又称为强制类型转换,和隐式类型转换不同,显式类型转换需要在代码中明确指定要转换的类型。转换需要在代码中明确指定要转换的类型。显式类型转换包括所有的隐式类型转换。显式类型转换包括所有的隐式类型转换。2显式类型转换显式类型转换显式类型转换需要强制转换运算符显式类型转换需要强制转换运算符(“( )”),把转换的目标类型名放在,把转换的目标类型名放在要转换的值之前的圆括号中,语法格式为:要转换的值之前的圆括号中,语法格式为:(目标数据类型目标数据类型)(源表达式源表达式);如下列代码将如下列代码将double类型的值显式转换为类型的值显式转换为int:double val = 1234.88;int i = (int)val; /将将double类类型型显显式式转换为转换为int类类型型号号要注意的是:要注意的是:当源数据的值大于目标类型的值域时,显式转换会因为当源数据的值大于目标类型的值域时,显式转换会因为数据溢出而导致转换失败;数据溢出而导致转换失败;当当float、double、decimal 等实数类型数据转换为等实数类型数据转换为int等整型时,是向等整型时,是向下取整,将舍去小数部分,如上述代码中的下取整,将舍去小数部分,如上述代码中的int i = (int)val 执行后,执行后,i结果结果为为1234。3通过系统提供的方法进行数据类型转换通过系统提供的方法进行数据类型转换有时通过显式转换和隐式转换都无法将一种数据类型转换为另一种数有时通过显式转换和隐式转换都无法将一种数据类型转换为另一种数据类型,例如将数值类型和字符串类型互相转换。据类型,例如将数值类型和字符串类型互相转换。C#中预定义的数据类型封装了一些数据类型转换方法,还专门定义中预定义的数据类型封装了一些数据类型转换方法,还专门定义了一个了一个Convert类(转换类)用来进行不同类型之间的强制转换。类(转换类)用来进行不同类型之间的强制转换。(1)ToString()方法方法int i=200;string s=i.ToString(); /字符串类型变量字符串类型变量s的值就是的值就是200(2)Parse()方法方法数据类型数据类型.Parse(字符串类型的值字符串类型的值);int i = int.Parse(100); /将字符串将字符串“100”转换为转换为int值值double d= double.Parse(123.455); /将字符串将字符串“123.455”转换为转换为double 值值3通过系统提供的方法进行数据类型转换通过系统提供的方法进行数据类型转换(3)通过)通过Convert类进行转换类进行转换语法格式为:语法格式为:数据类型数据类型 变量名变量名 = Convert.To数据类型数据类型(变量名变量名);如下列代码:如下列代码:int i = Convert.ToInt32(A); /将字符将字符“A”转换为转换为ASCII值并赋予值并赋予i4装箱与拆箱装箱与拆箱装箱转换是将值类型(如装箱转换是将值类型(如int)转换成)转换成object或者接口类型的过程,当或者接口类型的过程,当对值类型进行装箱时,会将该值包装为对值类型进行装箱时,会将该值包装为object类型,再将包装后的对象类型,再将包装后的对象存储在堆上。装箱转换是隐式的。存储在堆上。装箱转换是隐式的。拆箱转换是装箱转换的逆过程,是将引用类型转换为值类型的过程,拆箱转换是装箱转换的逆过程,是将引用类型转换为值类型的过程,或者是将接口类型转换为执行该接口的值类型的过程。拆箱转换必须是或者是将接口类型转换为执行该接口的值类型的过程。拆箱转换必须是显式的。显式的。【实例实例3-5】装箱与拆箱。装箱与拆箱。实实例描述:例描述:创建一个控制台应用程序,展示int数据类型的装箱转换与拆箱转换。static void Main(string args) int intData = 123; object objData = intData; /装箱操作,隐式类型转换 Console.WriteLine(装箱操作:intData为0, object为1, intData, objData); intData = (int)objData; /拆箱操作,显式类型转换 Console.WriteLine(拆箱操作:object为0, intData为1, objData, intData);Math类是用于数学计算的非常重要的一个类,是类是用于数学计算的非常重要的一个类,是System命名空间中命名空间中的一个静态类,用来为通用数学函数提供常数和静态方法,这些方法可的一个静态类,用来为通用数学函数提供常数和静态方法,这些方法可通过通过“Math.方法名方法名(参数参数)”的格式来调用,的格式来调用, 实实例描述:例描述:创建一个控制台应用程序,用户输入一个整数,计算该数的三次方、平方根(三位小数),并计算以该数为半径的圆的面积,分别输出保留两位小数的面积、四舍五入取整后的面积。【实例实例3-6】Math类应用。类应用。 DateTime(日期时间)是一种重要的结构类型,(日期时间)是一种重要的结构类型,DateTime结构类型结构类型用于表示日期时间,并提供日期时间的有关计算方法。用于表示日期时间,并提供日期时间的有关计算方法。 所表示的范围是从所表示的范围是从0001年年1月月1日日0点到点到 9999年年12月月31日日24点。点。 声明语法格式为:声明语法格式为:DateTime 变量名变量名 = new DateTime(年,月,日,时,分,秒年,月,日,时,分,秒); DateTime dt1 = new DateTime(2019,8,5); /2019年年8月月5日零时零分零秒日零时零分零秒DateTime dt2 = new DateTime(2019,8,5,12,36,45); /2019年年8月月5日日12时时36分分45秒秒1DateTime结构结构1DateTime结构结构DateTime dt = new DateTime(2019,8,5); Console.WriteLine(我的出生日期为:0年1月2日, dt.Year, dt.Month, dt.Day);1DateTime结构结构 TimeSpan结构表示一个时间间隔,两个结构表示一个时间间隔,两个DateTime值的差值即为值的差值即为TimeSpan值。值。 TimeSpan 实例的值为时间间隔的刻度值,其主要属性有:实例的值为时间间隔的刻度值,其主要属性有:Days、TotalDays、Hours、TotalHours、Minutes、TotalMinutes、Seconds、TotalSeconds、Ticks。2TimeSpan结构结构实实例描述:例描述:创建一个控制台应用程序,实现下列功能:(1)定义一个DateTime结构变量,赋其值为个人的出生日期,然后输出年、月、日,并判断是否为闰年。(2)获取当前系统日期和时间,然后输出年、月、日、时、分、秒,及星期几。(3)根据当前系统时间,计算个人的年龄。【实例实例3-7】DateTime结构类型应用。结构类型应用。static void Main(string args) DateTime dt = new DateTime(2001, 12, 25); /定义个人出生日期的变量 DateTime dtNow = DateTime.Now; /定义dtNow值为当前系统日期时间 Console.WriteLine(我的出生日期:0, dt); /整体输出 Console.WriteLine(我的出生日期为:0年1月2日,该年是否为闰年:3, dt.Year, dt.Month, dt.Day, DateTime.IsLeapYear(dt.Year); /分项输出个人出生日期、是否闰年 Console.WriteLine(当前系统日期时间:0, dtNow); /整体输出 Console.WriteLine(当前系统日期时间为:0年1月2日3时4分5秒,今天是:6, dtNow.Year, dtNow.Month, dtNow.Day, dtNow.Hour, dtNow.Minute, dtNow.Second, dtNow.DayOfWeek); /分项输出当前系统日期时间、星期几 Console.WriteLine(当前日期与个人出生日期的相距时间:0, dtNow - dt); Console.WriteLine(个人年龄:0, (dtNow.Year - dt.Year); /计算年龄 Console.WriteLine(个人年龄(天):0, (dtNow - dt).Days); /计算年龄(天数)DateTime是一个包含日期、时是一个包含日期、时间的类型,通过实例方法间的类型,通过实例方法ToString()转换为字符串时,可转换为字符串时,可根据传入给根据传入给Tostring()的格式化的格式化字符串参数转换为多种字符串字符串参数转换为多种字符串格式,程序员通过格式化字符格式,程序员通过格式化字符串可自由组合日期时间格式。串可自由组合日期时间格式。3DateTime结构的格式化字符串结构的格式化字符串实实例描述:例描述:创建一个控制台应用程序,先输出系统当前的日期和时间,并使用DateTime结构格式化字符串实现下列功能(1)输出长日期。(2)输出长日期和长时间。(3)用年、月、日、时、分、秒格式化字符串输出对应部分的时间值。(4)输出完整的周几名称。【实例实例3-8】DateTime结构类型的格式化字符串应用。结构类型的格式化字符串应用。static void Main(string args) DateTime dtNow = DateTime.Now; /定义dtNow并获取当前系统日期时间 Console.WriteLine(当前系统日期时间:0, dtNow.ToString(); /直接转换为字符串 Console.WriteLine(长日期格式: + dtNow.ToString(D); /长日期 Console.WriteLine(长日期长时间格式: + dtNow.ToString(F); /长日期长时间 Console.WriteLine(分项组合日期时间: + dtNow.ToString(yyyy年MM月dd日HH时mm分ss秒); /分项格式化,凡不属于规定格式化字符串的都按原样输出,如其中的“年”、“月”等 Console.WriteLine(星期几: + dtNow.ToString(dddd); /完整的星期几 【实例实例3-8】DateTime结构类型的格式化字符串应用。结构类型的格式化字符串应用。随机数的使用很普遍,随机数的使用很普遍,System.Random类用于生成随机数(实际上是类用于生成随机数(实际上是伪随机数)。伪随机数)。Random类的有下列两种构造函数:类的有下列两种构造函数:New Random():以触发那刻的系统时间作为种子。以触发那刻的系统时间作为种子。New Random(Int32):以用户指定的以用户指定的Int32参数值作为种子。参数值作为种子。实实例描述:例描述:创建一个控制台应用程序,生成一个随机整数、一个20的正整数、一个60且80的正整数、一个浮点数。【实例实例3-9】用用Random类生成随机数。类生成随机数。static void Main(string args) Random rad = new Random(); /声明一个Random实例 Console.WriteLine(随机整数:0, rad.Next(); /产生一个随机正整数 Console.WriteLine(20正整数:0, rad.Next(21); /产生一个20的正整数 Console.WriteLine(60且80的正整数:0, rad.Next(60,81); /产生一个60且80的正整数 Console.WriteLine(随机浮点数:0, rad.NextDouble(); /产生一个0.01.0的浮点数常量和变量都是用来存储数据的容器,在定义时常量和变量都是用来存储数据的容器,在定义时都需要指明数据类型,它们唯一的区别是:都需要指明数据类型,它们唯一的区别是:l 变量(变量(Variable)中所存放的值是允许改变的)中所存放的值是允许改变的.l 常量(常量(Constant)中存放的值不允许改变。)中存放的值不允许改变。1直接常量直接常量直接常量是直接在表达式中引用的具体的数值或字符串等。如:直接常量是直接在表达式中引用的具体的数值或字符串等。如:int a=5;a=a+200; /200为直接常量为直接常量float f1=1.234e6; /浮点数直接常量浮点数直接常量2符号常量符号常量符号常量需要使用符号常量需要使用const 关键字来定义,具体的语法形式如下:关键字来定义,具体的语法形式如下:const 数据类型数据类型 常量名常量名 = 值值;const double PI=3.14159;常量是固定值,程序执行期间不会改变。如常量是固定值,程序执行期间不会改变。如Math类中预定义类中预定义的的Math.PI(圆周率)常量。(圆周率)常量。常量又可以分为直接常量和符号常量。常量又可以分为直接常量和符号常量。变量是在程序运行过程中其值可以变化的量,变量是相对于常量而言变量是在程序运行过程中其值可以变化的量,变量是相对于常量而言的。的。变量是有变量是有作用域(作用范围)的作用域(作用范围)的,作用域定义了变量的有效范围和生,作用域定义了变量的有效范围和生存周期。存周期。C#程序中的一个块就定义了一个作用域,作用域内定义的变量程序中的一个块就定义了一个作用域,作用域内定义的变量对于作用域外的代码是不可见的,因此也是无效的。一个变量的生命周对于作用域外的代码是不可见的,因此也是无效的。一个变量的生命周期被限制在其自身的作用域内。期被限制在其自身的作用域内。int year = int.Parse(Console.ReadLine(); if (year % 4 = 0) if (year % 100 = 0) int a=5; Console.WriteLine(yes); int a=6; 【实例实例3-10】变量与常量。变量与常量。实实例描述:例描述:创建一个控制台应用程序,用自定义的常量表示圆周率(8位小数),根据用户输入的半径r,计算圆的周长和面积(三位小数)。实实例分析:例分析:在程序中多次使用的常量需要用符号常量,符号常量用const 关键字定义。本例中的自定义用符号常量,半径、周长、面积等用变量。static void Main(string args) const double PI = 3.14159265; /声明符号常量PI double r, C, S; /定义半径、周长、面积变量r、C、S Console.Write(请输入半径r:); r = double.Parse(Console.ReadLine(); /输入半径 C = 2 * PI * r; /计算周长并赋予C变量 S = PI * r * r; /计算面积并赋予S变量 Console.WriteLine(半径r=0,周长C=1:f3,面积S=2:f3, r, C, S); /输出,周长和面积保留3位小数【实例实例3-10】变量与常量。变量与常量。