目录
程序的核心
一、对象
1、由类建模而成,是消息、数据和行为的组合
2、可以接收和发送消息,并利用消息进行彼此的交互。消息要包含传送给对象接收的信息
3、类的实例化:把类转换为对象的过程叫类的实例化。
4、对象的特性
(1) 对象有状态:对象的状态由对象的各种属性和相应值构成
(2) 对象可以显示行为(即方法),对象的行为使对象可以完成相应世界级
(3) 对象一个唯一的身份
5、类与对象的关系
(1) 类:将对象进行逻辑上的分类后,描述它们具有的共同特征。相当于一个模型
(2) 对象:由模型产生的,具有它所属的类所具有的一切特征
6、小白理解
(1) 某农场游戏中储存在仓库中的物体有若干种,每种物体都有它自己的属性。
(2) 根据仓库中物体的属性,将它们分为三大类:农具类、收获物类、奖励类
(3) 农具类脚本:描述所有农具共有的属性(也可以再细分更小的类)
(4) 由农具类创建出来的某个具体的农具(如锄头)就是对象,它具有工具类描述的所有属性
(5) 创建出锄头之后,你还可以给锄头赋予其他的属性
二、类
1、类由成员变量和成员方法组成。
(1) 成员变量可以用来存储对象的属性值,而成员方法用于定义对象的行为和操作。
(2) 成员变量也可以称为类的属性,而成员方法可以称为类的方法。
(3) 通过类中的成员变量和成员方法,可以描述出对象的特征和功能。
(4) 在C#中,成员变量和成员方法需要在类中进行定义,并且可以通过对象访问和使用。
1、字段
(1) 属性在类的声明中用变量表示,这样的变量称为字段(类中用于描述对象属性的变量)
(2) 在类内部声明,但在方法声明体之外
2、常见的访问权限
(1) private :只允许在类的内部使用
(2) public :类的外部也可以使用
(3) protected :在派生类中使用
3、方法(Method):C#中,所有的变量和方法都存在于类中
4、类的简单实例
(1) 实例和解析
(2) 使用 Hello 类创建一个对象
5、使用类中的方法:
(1) 使用类中的方法之前需要创建一个由这个类产生的对象,再由这个对象使用这个类
(2) 例如:使用 Hello 类中的displayMessage方法
Hello myHello = new Hello();
myHello.displayMessage();
6、通过类名 + . 直接使用的方法
(1) 该方法前有一个关键字static
(2) 只有静态的方法可以直接通过类名调用
(3) 例如Hello类中的 displayMessage 方法所调用的Console类,就是一个静态类
(4) Console类是系统自带的一个静态方法
重点
1、面向对象的程序:由各种各样的类、对象和方法组成
2、程序的核心:类和方法
3、对象的共同点:属性、行为、事件
4、调用某一个类的方法有两种
① 创建对象后才能调用
Hello myHello = new Hello();
myHello.displayMessage();//调用的是myHello这个对象所从属的Hello类中的方法displayMessage
② 直接调用(限静态方法)
Console.WriteLine("Hello");//调用Console类中的WriteLine方法
三、命名空间(namespace)
1、标识作用。组织和重用代码的编译单元,避免命名的重复等
2、简单理解:在类名前再加一个名字,以与其他类相区别
3、规定了标识符的可见范围
4、实例:Mis.Hello 类中的 Hello 类只在Mis这个命名空间中可见,
若在另一个命名空间看到Hello类,则看到的这个Hello类与Mis中的Hello类不是同一种
5、小白理解:
(1) 现有A、B、C、D 四个命名空间,每个命名空间中都有一个名字为 example 的类
现有赵钱孙李四个家庭,每个家庭都有一个叫小花的女儿
(2) 为区分分别位于四个命名空间中的这四个类,给example添加"A."……这样的前缀
为区分这四个小花,你依次称她们为:赵小花、钱小花……
(3) 这四个小花不是同一个人,她们有自己的特征
6、引用命名空间
(1) 未引用时:System.Console.WriteLine("Hello");
(2) 使用 Using.System,在后续使用 Console类时,直接写为:Console.WriteLine("Hello");
7、了解
(1) 在每一个新建的C#工程中,系统都会自动把工程中的文件放进一个新的命名空间中
(2) 这个命名空间的名字一般默认为项目的名称
第一个示例
一、初步认识Visual Studio
1、启动Visual Studio,新建项目
2、 编辑
3、执行不调试。可以输出"HelloWorld"
4、打开解决方案资源管理器
5、可执行文件地址:\vs\Example01\bin\Debug
6、两个常见的静态类
(1) Console类:控制台类
(2) Convert类:转换类
7、Write和WriteLine的区别:WriteLine可以换行而Write不可以
二、控制台的输入和输出
1、C#中,输入和输出操作依靠Console类中的方法(都是静态的,无需创建对象)完成
2、实例:在控制台分两行输入两个整数数字(输入),在第三行显示它们的和(输出)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Example01
{
internal class Program
{
static void Main(string[] args)
{
//从控制台读取一行输入,并将其赋值给字符串变量s
string s = Console.ReadLine();
//字符串s转换为一个32位(四个字节)的整数
int x = Convert.ToInt32(s);
s = Console.ReadLine();
int y = Convert.ToInt32(s);
int z = x + y;
Console.WriteLine(z);
}
}
}
2、输入的每行中含有多个数据(用空格分割)
(1) 实例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Example01
{
internal class Program
{
static void Main(string[] args)
{
//在一行中输入多个数据
string s2 = Console.ReadLine();
string[] ss2 = s2.Split( ' ' );
double[] a = new double[ss2.Length];
double sum = 0;
for ( int i = 0; i < ss2.Length; i++)
{
a[i] = Convert.ToDouble(ss2[i]);
sum = sum+ a[i];
}
Console.WriteLine(sum);
}
}
}
(2) 实例解析
string[] ss2 = s2.Split( ' ' );
将字符串 s2 以空格字符(' ')为分隔符拆分成一个字符串数组
并将其存储在字符串数组 ss2 中。每个子字符串都将作为数组的一个元素
double[] a = new double[ss2.Length];
创建一个与 ss2 数组长度相同的新的双精度浮点数数组 a,用于稍后存储转换后的双精度浮点数值
数组中的每个元素都代表来自 ss2 数组的一个转换后的双精度浮点数值。
double 和float
双精度浮点数(double)是一种数据类型,用于表示带有小数点的数值,并且具有更高的精度和范围。它可以存储更大范围的数值和更多的小数位数。在C#中,双精度浮点数的关键字是 double
。
单精度浮点数(float)也可以用来表示带有小数的数值,但它的精度和范围相对较低。单精度浮点数的关键字是 float
。
在字符串转换为数字时分别使用 Convert.ToDouble()
和 Convert.ToSingle()
WriteLine 和 Write
WriteLine 输出完成后会跟一个换行符
3、快捷键:按住Ctrl键,然后按下K键,再按下C键。会注释选中的多行代码
4、带格式的输出
(1) 花括号{}内的数字 0 和 1 代表占位符。
(2) 在占位符位置插入相应的变量值可以动态生成字符串
(3) 使用占位符时,第一个花括号内的数字通常是从 0 开始的连续递增的整数
(4) 注意观察步骤3(练习)中 "\n"的结果
3、练习 1
int a = 23;
int b = 34;
Console.Write("a + b");
Console.Write(" ");
Console.WriteLine(a);
Console.Write(a + b);
Console.Write("\n");
Console.Write("A={0},B={1},A+B={2}",a,b,a+b);
练习 2:
using System;
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
double a = Convert.ToDouble(s);
s= Console.ReadLine();
double b = Convert.ToDouble(s);
Console.WriteLine("{0}+{1}={2}" ,a, b,a+b);
}
}
}
练习3:一行输入5个整数,分别求其除以 3 的余数
Console.WriteLine("请输入 5 个整数,以空格分隔,以回车结束");
string s = Console.ReadLine();
string[] sSplit = s.Split(' ');
for (int i = 0; i < sSplit.Length; i++)
{
//将字符串类型的数组元素sSplit[i]转换为32位整数类型,并将结果赋值给变量a
int a = Convert.ToInt32(sSplit[i]);
Console.Write((a%3).ToString()+" ");//余数间以空格间隔
}
Console.WriteLine();//换行
重点
控制台的输入和输出:可以分别通过Console类中的Read方法和Write方法实现
Console.WriteLine:输出指定对象的字符串,并在文本末尾添加换行符
使下一个输出位于新的一行。
Console.ReadLine:读取的是一整行文本,包括换行符。
如果用户输入了多个单词,它们将作为一个字符串返回,中间用空格分隔
Split:拆分字符串。它接受一个分隔符作为参数,并返回一个字符串数组,
字符串组包含了按照指定分隔符拆分后的子字符串。
是C#的内置方法,调用方法时,不需要先创建对象,
可以直接通过类名加方法名的形式进行调用
Convet:将一个数据类型转换为另一个数据类型。
是C#的内置方法,调用方法时,不需要先创建对象,
可以直接通过类名加方法名的形式进行调用
int number = Convert.ToInt32("123");
string line = "Hello World"; //创建一个字符串对象line,并赋初始值
string[] words = line.Split(' ');//拆分字符串,并将拆分结果存储在word这个数组中
练习4
int number = Convert.ToInt32("123"); //转换
string line = "Hello World";
string[] words = line.Split(' ');//拆分
Console.WriteLine("{0},{1}", words[0], line[8]);//输出
控制台显示words数组中的索引值为0的元素:Hello,和line中的第9个字符:r
常量和变量
一、常量
1、常量是在程序中固定不变的值,它的值在定义后不能被改变。
2、在C#中,常量使用关键字"const"来声明,且必须在声明时进行初始化。
const double PI = 3.1415926;
3、用户定义的类型不能用const
4、只读变量ReadOnly
(1) 在声明时被赋值,并且只能在声明时或者构造函数中进行赋值的变量。
(2) 一旦赋值后,就无法再次更改其值
(3) 通常在以下情况被使用
① 在类或结构体中,用于存储不希望被修改的常量值。
例如,如果你有一个类表示圆,你可以声明一个只读变量来存储圆的周长或面积,因为这些值在创建圆时就已经确定了,且不会再改变。
② 在多线程编程中,用于确保并发访问的安全性。
若一个变量被多个线程访问,但其值不应该被修改,可以声明它为只读变量,以避免并发访问问题
③ 在代码中使用常量值。只读变量可以用于保存在运行时确定的常量值,而不是直接使用硬编码
这样,若常量值需要更改,只需在一个地方修改只读变量的值,而不需要在整个代码中搜索和替换
5、实例
public const month = 12;
当编译器遇到代码中引用month
的地方时,直接将其替换为字面值12。
这个替换发生在编译时期,而不是在运行时期
例如
int numberOfMonths = month + 1;
在编译时,编译器会将这个语句替换为:
int numberOfMonths = 12 + 1;
所以在运行时,变量numberOfMonths
的值将为13,因为在编译时month
已经被替换为12。
编译器将常量替换为字面值提高了程序的执行效率。
二、变量
1、概述
(1) 变量是用于存储和操作数据的一种标识符。
(2) 变量可以是不同的数据类型,如整数、浮点数、布尔值、字符、字符串等。
(3) 通过声明变量,并为其分配一个名称,我们可以在程序中使用它来存储和引用数据。
(4) 变量通常由两部分组成:变量类型和变量名称。
变量类型确定了存储在变量中的数据类型,而变量名称是用于引用和操作该变量的标识符。
(5) 通过使用关键字(如int、float、bool等)和变量名称,可以声明一个变量。
(6) 示例
int myVar = 10;
① int是变量类型,myVar是变量名称,而10是变量的初始值。
② 通过这种方式,我们可以通过变量名称myVar在程序中引用和操作存储在其中的整数值。
(7) 在C#中,变量需要先声明后使用。
2、变量的初始化
(1) 变量的初始化是指为变量分配初始值。
(2) 在声明变量时,可以选择提供一个初始值,也可以在后续的代码中给变量赋值。
(3) 如果没有明确提供初始值,则变量的初始值将根据其类型自动确定。
(4) 初始化的作用
① 给变量赋予一个初始值,确保变量在第一次使用之前具有一个定义的值。
② 初始化可以帮助我们避免使用未初始化的变量而导致的错误。
(5) 初始化示例
int myNumber = 10; // 初始化一个整数变量myNumber,赋值为10
string myString = "Hello"; // 初始化一个字符串变量myString,赋值为"Hello"
bool myBool; // 声明一个布尔变量myBool,但未提供初始值,它的初始值将是默认的false
在后续的代码中,也可以对已经声明并初始化的变量进行重新赋值,例如:
myNumber = 20; // 将myNumber的值更改为20
myString = "World"; // 将myString的值更改为"World"
(5) 示例
① 在使用变量之前,应该给它一个初始值
② 实例 1
3、表达式
由操作数和运算符组成的,并且会产生一个值。
(1) 常见的表达式类型
算术表达式:用于进行数值计算,包括加法、减法、乘法、除法等。如:x + y, 3 * (a - b), c / d
逻辑表达式:用于进行逻辑判断,返回布尔类型的值(true或false)。 如:a > b, x == y, !(x && y)
条件表达式:根据条件进行不同的计算或返回不同的值。
如:x > y ? x : y,表示如果 x 大于 y,则返回 x,否则返回 y。
函数调用表达式:调用函数并传递参数进行计算,返回函数的返回值。
如:sum(a, b),表示调用名为 sum 的函数,并传递参数 a 和 b
赋值表达式:将值赋给变量,实现存储和更新数据的功能
赋值表达式使用等号将右边的值存储到左边的变量中
比较表达式:
(2) 整数除法的规则:整数除以整数得到的结果仍然是整数
(3) 浮点数除法
int y = 90;
double x = y/20.0;
(4) 布尔表达式
bool k = a>b;
将逻辑表达式" a>b "的结果赋给布尔变量 k
若 a 大于 b ,则这个结果为 true ,否则结果为 false
即:变量 k 的值可能是 true 或 false ,这取决于 a 和 b 的值
4、变量的类型
(1) 值类型:
① 在自己的内存中存储数据的数据类型(变量本身直接包含了数据的值)
② 任何值类型的声明都是直接:关键字+标识符
关键字往往指定变量的类型。如下面的关键字 string 指明了变量的类型
string a = "这是声明并初始化字符串变量";
使用关键字var时,由系统自动判断变量类型
③ 值类型的变量在声明时会直接分配内存空间,并将初始值赋给该变量
④ 但在使用值类型变量之前,建议给它赋予一个明确的初值,以避免出现未定义的行为
(2) 引用类型:
① 在变量中只是存储内存位置或指针
② 通过引用才能找到真正的数据,包括字符串,数组、类、委托等
5、变量的声明
(1) 值变量的声明
(2) 引用类型的变量的声明
① 引用类型的变量是存储在堆内存中的对象的引用,而不是直接存储值本身。例如:
string myString;
`myString`是一个引用类型的变量,它可以引用一个字符串对象。
int[] myArray;
`myArray`是一个引用类型的变量,它可以引用一个整数类型的数组对象。
MyClass myObject;
`myObject`是一个引用类型的变量,它可以引用一个自定义的`MyClass`类的对象。
② 这些引用类型的变量不仅占用自己的内存,还需要额外的内存来存储实际的对象。
③ 通过这些变量,我们可以访问和操作堆内存中的对象。
值类型
一、简单类型
二、枚举类型
1、常识
(1) 枚举类型是一种自定义的类型,用于列举所有可能的取值。
(2) 枚举类型的基础类型必须是八个整数类型之一,如果没有显式声明,默认为int。
(3) 枚举成员是枚举的命名常量,每个成员都有一个与之关联的常数值。
(4) 枚举成员的值可以手动指定,如果没有指定,则默认为前一个成员的值加1
2、简单的枚举实例
3、给枚举成员赋值
三、结构类型
1、常识
(1) 结构使用关键字struct定义。表示可以包含数据成员和函数成员的数据结构
(2) 结构类型与类类型相似,但是结构是值类型,符合值类型的特征:
① 结构类型不需要使用new运算符进行实例化,可以直接实例化
② 结构类型的赋值会复制所有数据,对副本的修改不影响原始副本的数据
(3) 除非字段被声明成静态或常数,否则,结构类型的字段不能直接进行初始化,
(4) 不能声明默认的构造函数
2、简单示例
using System;
namespace Example02
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你们的名字,以空格分隔,按回车结束");
string yourName = Console.ReadLine();
string[] yourNames = yourName.Split(' ');
string x = "A队";
int count = 1;
for (int i = 0; i < yourNames.Length; i++)
{
string yName = yourNames[i];
structA name = new structA(x, count, yName);
count++;
}
Console.WriteLine();
}
//在结构体中,A 是结构体的名称,而在其他地方,A 是类型的名称
struct structA
{
public string x;//不能直接对其赋值
public int y;
public static string str = null;//静态变量可以初始化
public structA(string x, int y, string str)//带参数的构造函数
{
this.x = x;
this.y = y;
Console.WriteLine("{0},{1},{2}", x, y, str);
}
}
}
}
优化后(将 x 定义为一个结构体的共享属性)
using System;
namespace Example02
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你们的名字,以空格分隔,按回车结束");
string yourName = Console.ReadLine();
string[] yourNames = yourName.Split(' ');
int count = 1;
for (int i = 0; i < yourNames.Length; i++)
{
string yName = yourNames[i];
structA name = new structA(count, yName);
count++;
}
Console.WriteLine();
}
struct structA
{
public static string x = "A组";
public int y;
public string str;
public structA(int y, string str)
{
this.y = y;
this.str = str;
Console.WriteLine("{0},{1},{2}", x, y, str);
}
}
}
}
字符和字符串
一、字符
字符常量通常使用单引号(')表示。在C#中,字符常量是表示一个单个字符的常量。
例如,以下是使用单引号表示字符常量的示例:
char letter = 'A';
char digit = '5';
char specialChar = '$';
在上面的示例中,变量letter
保存着字符'A',变量digit
保存着字符'5',变量specialChar
保存着字符'$'。
注意,字符常量必须用单引号括起来。如果你使用双引号,则表示的是字符串常量。
string word = "Hello"; // 双引号表示字符串常量
char character = 'H'; // 单引号表示字符常量
二、字符串
string str1 = "中国,";
string str2 = "你好!";
string str3 = str1 + str2;
char c = str3[0];
Console.WriteLine("{0}{1}", str3, c);
如果在"{0}{1}"两个花括号之间加上逗号,这个逗号将会被视为普通字符,而不是占位符的一部分。在输出时,逗号会被直接显示出来。
示例代码:
string str1 = "Hello";
string str2 = "World";
string formattedString = "{0},{1}";
Console.WriteLine(formattedString, str1, str2);
输出结果为: Hello,World
隐式类型
var i = 10;//隐式声明
int i = 10;//显示声明
运算符和表达式
一、运算符
1、常见运算符
(1) 算术运算符(加+、减-、乘*、除/、整除求余%)
① 在除法运算中,两个整数相除结果一定是整数,且为精确的整数
如:5/3 = 1
② 整数的求余运算(%):百分号两侧均为整型数据,运算结果是两个运算对象作除法运算的余数
(2) 关系运算符(如等于、大于、小于)
① 又称比较运算符。可以用于比较两个表达式的值是否满足某种关系
② 关系运算得出的结果是一个bool值(true或者false)
③ 常用的关系运算符示例
x = 5
y = 7
print(x == y) # False,因为 x 不等于 y
print(x != y) # True,因为 x 不等于 y
print(x > y) # False,因为 x 不大于 y
print(x < y) # True,因为 x 小于 y
print(x >= y) # False,因为 x 不大于等于 y
print(x <= y) # True,因为 x 小于等于 y
(3) 逻辑运算符
① 将多个条件结合起来进行逻辑运算时使用
② 常用的逻辑运算符有三个:与运算符(&&)、或运算符(||)、非运算符(!)
③ 常用的逻辑运算符示例
与运算符(&&)
将两个条件连接起来,只有当两个条件都为真时,整个条件表达式才为真。
例如,a > 5 && b < 10
表示当 a
大于5且 b
小于10时,条件为真。
或运算符(||)
将两个条件连接起来,只要其中一个条件为真,整个条件表达式就为真。
例如,a > 5 || b < 10
表示当 a
大于5或者 b
小于10时,条件为真。
非运算符(!)
用于取反一个条件的结果,如果条件为真,则取反后为假;如果条件为假,则取反后为真。
例如,输出的文字为:a不大于5
int a = 5;
if(!(a > 5))//如果a不大于5
{
Console.WriteLine("a不大于5");
}
else
{
Console.WriteLine(a);
}
!(a > 5)
中,先判断 a>5 是为真还是为假,再用 !进行黑白颠倒
!(a > 5)
先比较a和5,再对所得的值取反。即:表示当 a
不大于5时,条件为真。
注意:! 只是用于将(a>5)的结果取反
(4) 赋值运算符
=
(5) 自增运算符和自减运算符
① 都是单目运算符
② 运算对象常为整型变量或指针变量
③ i++;先返回i
的当前值,然后再将i
的值加1。
i = 5
print(i++) # 输出:5
print(i) # 输出:6
i++
首先返回i
的当前值,也就是5,然后将i
的值加1,所以输出为5。
接下来,再次打印i
的值,由于i
的值已经自增了1,所以输出为6。
④ 当我们使用i++
,i--
,--i
和++i
时,我们通常是在操作一个变量i
的值。
i++
是一种后缀操作符,它会先使用i
的当前值,然后将i
的值加1。简单来说,它将i
的值先返回再进行自增操作。i--
与i++
相似,也是一种后缀操作符,它会先使用i
的当前值,然后将i
的值减1。简单来说,它将i
的值先返回再进行自减操作。--i
是一种前缀操作符,它会先将i
的值减1,然后再使用i
的新值。简单来说,它先进行自减操作再将i
的值返回。++i
与--i
相似,也是一种前缀操作符,它会先将i
的值加1,然后再使用i
的新值。简单来说,它先进行自增操作再将i
的值返回。
这些操作符通常用于循环和条件语句中,用来改变变量的值以控制程序的流程。
(6) 位运算符
(7)
2、规则
using System;
using System.Runtime.InteropServices.ComTypes;
namespace Example02
{
internal class Program
{
int x;
int y;
bool MyMethod()
{
int z = 10;
bool isgreat = true;
return -x * y > z && x * y < 100 || x * y > 0 && !isgreat;
/*运算顺序
-x
-x*y
-x*y>z
-x*y<100
-x*y>z && x * y < 100
x*y>0
isgreat(z)
!isgreat(z)
x*y>0 && !isgreat
-x * y > z && x * y < 100 || x * y > 0 && !isgreat;
计算函数值 > 算术运算 > 比较运算 > 逻辑与运算 > 逻辑或运算
单目运算 > 双目运算
*/
}
}
}
例如
(1) 算术运算符的优先级高于关系运算符
a+b == c;//先执行a+b,再判断a+b的值是否与c相等,如果相等,表达式的值为true
(a+b)==c;
(2) ! 的优先级高于 ==
if(!a==b){}// a的取反值与b比较
if(!(a==b)){} //a与b的比较结果取反,相当于if(a!=b)
不确定某个表达式的计算顺序时,可以使用括号来明确指定计算顺序。
单目运算:只有一个操作数参与的运算。常见的单目运算符有取反运算符"!"、负号运算符"-"、自增运算符"++"、自减运算符"--"等。
例如:
- 取反运算符 "!":
!isTrue
- 负号运算符 "-":
-x
- 自增运算符 "++":
counter++
- 自减运算符 "--":
counter--
双目运算:有两个操作数参与的运算。常见的双目运算符有加法运算符"+"、减法运算符"-"、乘法运算符"*"、除法运算符"/"、赋值运算符"="等。
例如:
- 加法运算符 "+":
x + y
- 减法运算符 "-":
x - y
- 乘法运算符 "*":
x * y
- 除法运算符 "/":
x / y
- 赋值运算符 "=":
x = y
注意1:单目运算符和双目运算符的操作数数量是不同的,因此在运算时需要注意操作数的位置和数量。
注意2:单目运算优先于双目运算
二、表达式
1、表达式:由操作符和操作数组成的符号序列,用于计算表达式的值
(1) 操作符可以是
① 算术运算符(如加+、减-、乘*、除/、整除求余%)
② 逻辑运算符(如与、或、非)
③ 关系运算符(如等于、大于、小于)
④ 赋值运算符等。
(2) 操作数可以是常量、变量、函数或其他表达式。
(3) 表达式的示例:
① 2 + 3:使用加法运算符计算2和3的和。
② x > 5:使用大于运算符判断变量x是否大于5。
③ a * b + c:先计算a和b的乘积,然后再加上c的值。
④ (x + 2) / (y - 1):先计算x加2的值,再计算y减1的值,最后将两个结果相除。
(4) 表达式可以用于
① 数学计算、逻辑判断、赋值操作等。
② 在编程中,表达式常用于计算变量的值、控制程序流程、判断条件等
2、表达式示例
(1) 关系运算表达式:
x > 5
判断变量x是否大于5。y <= 10
判断变量y是否小于等于10。a == b
判断变量a是否等于b。c != 3
判断变量c是否不等于3。
(2) 逻辑运算表达式:
x > 5 && y < 10
:判断变量x是否大于5且变量y是否小于10。a == b || c != 3
:判断变量a是否等于b或者变量c是否不等于3。!(x > 5)
:判断变量x是否不大于5。
(3) 赋值运算表达式:
x = 10
:将10赋值给x。y += 5
:将变量y的值增加5。a *= 2
:将变量a的值乘以2。b -= 3
:将变量b的值减去3。- i=j=m*n:将m*n赋值给j,再将j的值赋值给i
(4) 问号表达式(又称条件表达式)
if (x > y){z = x;}
else{z= y;}
可以写作:z = x > y ? x : y;
表示 :若x > y,则 z = x。否则,z = y
基本形式:条件 ? 表达式1 : 表达式2;
结构和枚举
一、结构和定义和使用
1、实例
namespace ConsoleApp3
{
internal class Program
{
struct StructA
{
public int age;
public string name;
}
static void Main(string[] args)
{
StructA s1;
s1.age = 18;
StructA[] ss = new StructA[50];
ss[0].age = 20;
}
}
}
二、枚举
1、实例
enum DayOfTime { Mornint, Noon, Afternoon }
static void Main(string[] args)
{
DayOfTime d1;
d1 =DayOfTime.Mornint;
}