2存储数值
本章演示如何在C#程序中存储各种类型的数据。
2.1 创建变量
2.2 读取输入
2.3 使用数组
2.4 转换数据类型
2.5 固定常数
2.6 小结
2.1 创建变量
“变量”就像C#程序中的容器,其中数据值可以存储在计算机内存中。可以使用变量名称来引用存储的值。
程序员可以为变量选择任何名称,只要它遵循C#命名约定–所选名称只能包含字母,数字和下划线字符,但必须以字母,下划线或@字符开头。 另外,必须避免使用C#关键字。选择有意义的名称以使代码更易理解是一种很好的做法。
要在程序中创建新变量,必须对其进行“声明”,并指定数据类型和选择的名称。变量声明具有以下语法:
数据类型 变量名 ;
可以使用以下语法在一个声明中创建具有相同数据类型的多个变量:
数据类型 变量名1,变量名2,变量名3;
下表列出了最常见的C#数据类型以及简要说明和示例内容。
数据类型 | 说明 |
int | 整数,例如:100 |
char | 单个字符,例如:’A’ |
float | 7位精度的浮点数 |
double | 15位精度的浮点数 |
decimal | 28位精度的浮点数 |
bool | 布尔值true或false |
string | 一串字符,例如 :“easycsharp” |
变量声明必须出现在可执行语句之前–因此它们可在语句中引用。
在C#中名称区分大小写–因此,名称为num,Num和NUM的变量被视为三个单独的变量。传统上,C#变量名以所有小写字符创建。
char数据类型的字符值必须用单引号引起来,但是string类型的字符串必须用双引号引起来。
首选decimal数据类型用于存储货币值。
当将值分配给变量时,可以说它已被“初始化”。可以在其声明时初始化变量。 可以使用WriteLine()方法显示存储在任何初始化变量中的值,该方法在此处用于显示“ Hello World!”问候:
Variables
1.打开Visual Studio 2019,然后新建一个控制台应用并将其命名为“Variables”
2.将光标放在Main()方法的{}大括号之间,然后键入此代码以命名控制台
Console.Title = “Variables” ;
3.接下来,精确键入这些语句以声明和初始化常见C#数据类型的变量
char letter = ‘A’ ; // Declared then initialized. int number = 100 ; // Declared then initialized. float body = 98.6f ; // Declared and initialized. double pi = 3.14159 ; // Declared and initialized. decimal sum = 1000.00m ; // Declared and initialized. bool flag = false ; // Declared and initialized. string text = “C# Is Fun” ; // Declared and initialized.
4.现在,插入语句以显示每个存储的值
Console.WriteLine( “char letter:\t” + letter ) ; Console.WriteLine( “int number:\t” + number ) ; Console.WriteLine( “float body:\t” + body ) ; Console.WriteLine( “double pi:\t” + pi ) ; Console.WriteLine( “decimal sum:\t” + sum ) ; Console.WriteLine( “bool flag:\t” + flag ) ; Console.WriteLine( “string text:\t” + text ) ; Console.ReadKey( ) ;
5.点击Start按钮运行应用程序以查看储存值。
给float增加f后缀,给decimal增加m后缀,以将它们与double值区分开。
字符串中包含\ t是一个“转义字符”,在输出中打印一个制表符。+符号是一个“连接”运算符,它将存储的值添加到字符串中以进行输出。
2.2 读取输入
为了与用户进行交互,C#程序通常会要求用户输入一些值。 ReadLine()方法是ReadKey()方法的辅助方法,可用于读取用户输入。 当用户按下Enter键以完成一行时,可以通过ReadLine()方法将控制台中的用户输入分配给字符串变量。
重要的是要认识到ReadLine()方法始终将输入读取为字符串值。
请求用户输入时,最好提示用户而不是在请求后添加换行符。 使用Console.Write()方法可以轻松实现:
Input
1.打开Visual Studio 2019,然后新建一个控制台应用并将其命名为“Input”
2.将光标放在Main()方法的{}大括号之间,然后键入此代码以命名控制台
Console.Title = “Input” ;
3.接下来,精确键入这些语句以请求用户输入并将其分配给变量
Console.Write( “Please Enter Your Name: “ ) ; string name = Console.ReadLine( ) ;
4.现在,添加语句以显示包含已存储的用户输入值的消息
Console.WriteLine( “Welcome ” + name + “!” ) ; Console.ReadKey( ) ;
5.点击Start按钮或按F5运行应用程序可以看到存储在输出中显示的用户输入值
用户输入的数字值将作为字符分配给字符串变量-因此无法对其进行算术运算。
请注意,此处如何使用两个+串联运算符将输入插入到字符串中。
当您要求用户输入数字值时,有必要将ReadLine()方法读取的string值转换为数字数据类型。 System.Convert类为此提供了许多有用的方法,包括:
方法 | 返回 |
Convert.ToInt32( ) | 32位整数 |
Convert.ToDouble( ) | 双精度浮点值 |
Convert.ToDecimal( ) | 十进制值 |
还有一个有用的Convert.ToString()方法可将值转换为字符串类型。
仅需在适当方法的括号内指定由ReadLine()方法读取的字符串值:
Conversion
1.打开Visual Studio 2019,然后新建一个控制台应用并将其命名“Conversion”
2.输入以下语句以请求用户输入以进行转换并分配给两个变量
Console.Write( “Please Enter A Number: “ ) ; * double num = Convert.ToDouble( Console.ReadLine( ) ) ; Console.Write( “Now Enter Another Number: “ ) ; double sum=num + Convert.ToDouble( Console.ReadLine( ) ) ;
3.现在,添加语句以显示一条消息,其中包含用户输入值的总和
4.点击Start按钮或F5运行应用程序,然后输入两个数值可以看到转换后的输入值已添加到输出中
在这里,第二个输入的数字在添加第一个输入的数字之前被转换为数值。
2.3 使用数组
数组是可以存储多个数据的变量–与常规变量不同,常规变量只能存储一个数据。数据按顺序存储在从零开始编号的数组“元素”中。因此,第一个值存储在元素0中,第二个值存储在元素1中,依此类推。
通过声明数据类型来声明一个数组,后缀以[]方括号表示一个数组。
在使用new关键字指定元素大小来创建数组“实例”之前,并不会初始化内存中的数组变量,如下所示:
数据类型[ ] 数组名=new 数据类型[大小]
然后可以将值分别分配给每个可用元素:
数组名[下标]=数值;
数组编号从零开始-因此,六个元素的数组中的最后一个元素是5,而不是6。 该编号称为“从零开始的索引”。
数组名[0]
数组的元素统称为“索引”。数组可以有多个索引–表示多个维度,而不是常规数组的单个维度。具有三个索引或更多索引的多维数组并不常见,但是二维数组可用于存储基于网格的信息(例如坐标)。
您只能将数据存储在数组声明中指定的数据类型的数组元素内。
要创建多维数组,声明中数据类型后面的[]方括号必须为每个其他索引包含一个逗号。 同样,每个索引的大小必须指定为以逗号分隔的列表,如下所示:
数据类型[ , ] 数组名=new 数据类型[大小,大小];
然后可以将值分别分配给每个可用元素:
数组名[下标1,下标2]=数值;
特殊的foreach循环构造使您可以轻松地遍历数组的所有元素–有关详细信息,请参见此处。
另外,也可以初始化多维数组,并通过声明逗号分隔列表中每个索引的值来声明每个元素的值,该列表以大括号分组-用大括号括起来的逗号分隔组:
数据类型[ , ] 数组名=new 数据类型[大小]
{{数值1,数值2,数值3},{数值1,数值2,数值3}};
指定值的数量必须与指定的数组大小完全匹配,以避免发生错误。
可以使用数组名称引用任何单个元素的值,后跟方括号,其中包含每个索引的元素编号。 例如,要引用第二个索引的第一个元素内的值:
数组名[1,0]
Array
1.打开Visual Studio 2019,然后新建一个控制台应用并将其命名“Arrays”
2.接下来,键入此语句以创建一个字符串数组
string [ ] cars = new string[ 3 ] { “BMW”, ”Ford”, ”Opel” } ;
3.现在,输入这段代码创建一个2维数组
int [ , ] coords = new int[ 2, 3 ] { { 1, 2, 3 } , { 4, 5, 6 } } ;
4.添加语句以显示包含存储的数组元素值的输出
Console.WriteLine( “Second Car: ” + cars[ 1 ] ) ; Console.WriteLine( “X1,Y1: ” + coords[ 0, 0 ] ) ; Console.WriteLine( “X2,Y3: ” + coords[ 1, 2 ] ) ; Console.ReadKey( ) ;
5.点击Start按钮或F5运行应用程序可以看到存储在数组中的值
2.4 转换数据类型
通过将变量中存储的值转换为其他类型,可以将其转换(强制)为其他数据类型的变量。 此过程称为“转换”,并且可以是隐式或显式的。
转换也称为“类型转换”。
- 将数字从较小的精度数据类型转换为较大的精度数据类型时,C#以类型安全的方式自动执行隐式转换。 例如,当将int加到double上时。
- 另一方面,显式强制转换要求在语句中包含强制转换运算符,以指定应将值强制转换为什么样的数据类型。新数据类型必须在包含要转换的数据的变量名称之前的括号中指定,因此其语法如下所示:
变量名=(数据类型)变量名
这是C编程语言中也可以找到的传统转换形式。通常必须进行强制转换以准确存储算术运算的结果以防止数据丢失。一个整数除以另一个整数将始终产生整数结果,该结果可能会被截断。 例如,整数除法7/2会产生3的截断整数结果。
要存储准确的浮点结果,需要将结果转换为合适的数据类型,例如double,如下所示:
double sum = ( double ) 7 / 2 ; // Sum is 3.5
一个整数除以另一个整数的结果将被截断,而不是四舍五入-因此9.9的结果将变为9。
应该注意的是,在执行算术运算/ 2的除法之前,运算符优先级将第一个操作数7转换为指定的数据类型,因此有效的声明是:
double sum = ( double ) ( 7 ) / 2 ; // Sum is 3.5
将表达式括起来为(7/2)将首先对整数执行算术运算,因此整数结果在被强制转换为float变量之前将被截断–这不是期望的效果!
double sum = ( double ) ( 7 / 2 ) ; // Sum is 3.0
单个字符值可以有效地显式转换为int数据类型,以显示其ASCII码值。 同样,可以颠倒该过程以显示整数的字符值。
Cast
1.打开Visual Studio 2019,然后新建一个控制台应用并将其命名“Cast”
2.输入以下语句以创建和初始化整数变量和双精度浮点变量
double num = 10.5 ; int integer = 2 ;
3.接下来,添加语句以将整数值隐式转换为双精度值,并显示结果
num = num + integer ; Console.WriteLine( “Implicit Cast: ” + num ) ;
4.现在,将整数除法的结果显式转换为双精度值,并显示该结果
num = ( double ) 7 / integer ; Console.WriteLine( “Explicit Cast: ” + num ) ;
5.将整数值转换为char数据类型并显示其ASCII等效字符
char letter = ( char ) 65 ; Console.WriteLine( “Cast Integer: ” + letter ) ;
6.将字符值转换为int数据类型并显示其ASCII等效代码号
int ascii = ( int ) ‘A’ ; Console.WriteLine( “Cast Letter: ” + ascii ) ; Console.ReadKey( ) ;
7.点击Start按钮或F5运行应用程序可以看到转换为其它数据类型的值
删除步骤4中的(double)强制转换,以查看结果被截断了。、
ASCII(发音为“ askee”)是美国信息交换标准代码,它是纯文本的公认标准。 在ASCII中,字符在0-127范围内以数字表示。 大写字母“ A”为65,因此整数值将转换为int变量。
2.5 固定常数
变量声明使用关键字(例如string,int或double)显式指定其允许的数据类型,以确保程序不会意外分配不适当的数据。在肯定不会发生这种情况的地方,可以在声明变量时使用var(变量)关键字,根据其初始值的数据类型隐式指定其数据类型。 在这种情况下,C#编译器将自动确定适当的数据类型。var关键字对于存储标准C#数字,布尔值或字符串数据类型以外的值最有用。使用var关键字进行的所有变量声明都必须分配一个初始值,以立即确定该变量的数据类型。
使用var关键字声明变量可以降低程序代码的可读性,因为它不指示数据类型。
可以通过在变量名上加点后缀GetType()方法来显示任何变量的数据类型。 例如,当num变量是双精度数据类型时,调用num.GetType()将返回System.Double结果。
当不打算更改存储值时,可以创建一个“常量”容器来保护它免受更改。它的声明与变量的声明相似,但是以const关键字开头。使用const关键字进行的所有声明都必须分配一个初始值,以立即固定其常量值。
可以使用enum关键字在一个枚举列表中指定标识符名称来定义多个常量值。这将创建一个数据类型,该数据类型由{}括号内的逗号分隔的命名常量列表组成。枚举列表具有一个基础的默认int值,该值从零开始对列表名称进行编号,就像数组中的元素一样。列表中的任何名称都可以通过在列表名称后加点后缀来引用,并通过强制转换显示其基础值。
枚举列表不能在任何方法块中声明,因此必须在Main()方法外部声明。
C#枚举类提供了几种使用枚举列表的方法。其中许多方法要求将列表的数据类型作为参数,因此可以通过将列表名称指定为typeof()方法的参数,将其有效地分配给var变量。枚举类的GetName()方法可以在指定的索引位置显示名称,IsDefined()方法可以用于测试列表是否包含指定的名称。枚举列表声明必须直接写在程序名称空间中或类块中。
Constant
1.打开Visual Studio 2019,然后新建一个控制台应用并将其命名“Constant”
2.在Main()方法块之前的class块中键入此语句,以创建一个枚举器列表
enum Days { Sat, Sun, Mon, Tue, Wed, Thu, Fri } ;
3.现在,将注意力转移到Main()方法上,然后声明并初始化一个常量和一个变量
const double pi = 3.14159265358979 ; var daysType = typeof( Days ) ;
4.接下来,添加语句以显示常量的数据类型并将其值用于输出
Console.WriteLine( “Pi Type: ” + pi.GetType( ) ) ; Console.WriteLine( “Circumference: ” + ( pi * 3 ) ) ;
5.然后,添加语句以显示枚举列表中第一项的名称和索引位置
Console.WriteLine( “\nFirst Name: ” + Days.Sat ) ; Console.WriteLine( “1st Index: ” + ( int ) Days.Sat ) ;
6.最后,添加语句以在第二个索引位置显示名称并查询枚举数列表
string name = Enum.GetName( daysType , 1 ) ; Console.WriteLine( “\n2nd Index: ” + name ) ; bool flag = Enum.IsDefined( daysType , “Mon” ) ; Console.WriteLine( “Contains Mon?: ” + flag ) ; Console.ReadKey( ) ;
7.点击Start按钮或F5键运行应用成语可以看到运行中的常数值
枚举列表包含名称,而不是字符串,因此它们不必用引号引起来,但是名称必须作为字符串参数提供给IsDefined()方法。
您可能需要避免使用var关键字,以确保使用可变数据类型。 例如,使用var id = getID()这行代码; 分配的值(因此是可变数据类型)可以是数字或字符串。
2.6 小结
- 变量将数据值存储在计算机内存中,并且可以使用该变量的名称来引用该值。
- 变量声明必须指定其可能包含的数据类型,以及程序员指定的有效名称。
- 常见的C#数据类型包括int,char,float,double,decimal,bool和string。
- 必须先声明变量,然后才能引用它们。
- 给变量赋值时,将对其进行初始化。
- Console.ReadLine( )方法可用于将用户输入的值分配给变量。
- Console.WriteLine( )方法在其输出之后添加换行符,但Console.Write( )方法不添加换行符。
- System.Convert类提供了许多将字符串值转换为数字数据类型的有用方法。
- 数组变量可以在基于零的索引的顺序元素中存储多个数据项。
- 数组声明必须指定其可能包含的数据类型,后跟[]和程序员指定的名称。
- 在使用new关键字指定数据类型和元素大小创建数组实例之前,不会初始化数组。
- 可以使用数组名称和元素将值分配给单个数组元素索引号。
- 数组声明可以将其值分配给所有数组元素,以逗号分隔的{}括号内的值列表。
- 数组可以具有多个索引,以表示多个维,其中每个索引都用逗号分隔。
- 强制转换是一种数据类型到另一种数据类型的转换。
- 隐式转换由C#自动执行。
- 通过在语句中包含强制转换运算符来执行显式强制转换,以指定所需的新数据类型。
大博客-编程实战干货分享
原文链接:https://www.daboke.com/program/easycsharpch2.html
B 站配套视频教程:https://www.bilibili.com/video/BV1s5411j7sZ
教材和源码下载:https://pan.baidu.com/s/1Zmvq3QSU1vkWuTcL-6c5CA 提取码:0dx7
更新啊!
这段时间忙着考试,博客和B站都更新少了,惭愧惭愧。
文章不错支持一下
学习了,给朋友看看