学习笔记(一)

目录

程序的核心

一、对象

二、类

三、命名空间(namespace)

第一个示例

一、初步认识Visual Studio

二、控制台的输入和输出

常量和变量

一、常量

二、变量

1、概述

2、变量的初始化

3、表达式

4、变量的类型

5、变量的声明

值类型

一、简单类型

二、枚举类型

三、结构类型

字符和字符串

一、字符

二、字符串

隐式类型

运算符和表达式

一、运算符

1、常见运算符

二、表达式

结构和枚举

一、结构和定义和使用

二、枚举


程序的核心

一、对象

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值