C#从入门到精通(2)

ops/2025/4/1 20:29:12/

目录

第六章 逻辑结构

(1)if语句

(2)switch语句

(3)while语句

(4)for语句

(5)跳转语句

第七章 数组

(1)一维数组

(2)二维数组

(3)不规则数组

(4)数组的基本操作

(5)数组排序算法

(6)ArrayList类

(7)哈希表

第八章 类和对象

(1)结构

(2)面向对象

(3)类

(4)属性和方法


第六章 逻辑结构

(1)if语句

1.if语句

        语法:if(表达式)  {  语句};  表达式为真时执行语句。为假时不执行。

        示例,判断一个数是否为偶数。

static void Main(string[] args) 
{int num = Convert.ToInt32(Console.ReadLine());if (num % 2 == 0){Console.WriteLine("这是个偶数");}Console.WriteLine("不是偶数");
}

2.if...else语句

        语法:if(表达式)  { 语句1 } else { 语句2 };表达式为真,执行语句1,表达式为假,执行语句2。与条件运算符效果类似。 if与else就近匹配。

        示例,判断一个数是否为偶数。

static void Main(string[] args) 
{int num = Convert.ToInt32(Console.ReadLine());if (num % 2 == 0){Console.WriteLine("这是个偶数");}else{Console.WriteLine("不是偶数");}
}//条件运算符  效果一样
string s = num % 2 == 0 ? "这是个偶数" : "不是偶数";
Console.WriteLine(s);

3.if...else if...else语句

        语法:if(表达式1)  { 语句1 }  else if (表达式2) { 语句2 }   else  {语句3};多个分支,那个表达式为真执行那个,都为假执行else中的语句。

(2)switch语句

        语法:

switch(表达式){

        case 常量表达式1:语句1;break;

        case 常量表达式2:语句2;break;

        case 常量表达式3:语句3;break;

        default: 语句4;break;}

        根据表达式匹配对应的常量表达式,执行对应的语句,没有就执行default中的语句。与if...else if...else语句效果类似,但switch可读性更强。

        表达式参数:必须为bool、char、string、整形、枚举或相应的可为null的类型。

(3)while语句

        1.while

        语法:while(表达式) {   语句   };表达式为真,就一直循环执行。为假就跳出循环。

        示例:从1累加100。

  static void Main(string[] args) {int sum = 0;int i = 1;while(i<=100){sum += i;i++;}Console.WriteLine(sum);}

          注意事项:死循环问题。表达式一直为真会陷入死循环。要注意条件判断。

        2.do...while

        语法:do{

                        }while(表达式);

        特点:先执行一次,在判断表达式是否为真。

      示例:从1累加100。

 static void Main(string[] args) {int sum = 0;int i = 1;do{sum += i;i++;} while (i <= 100);Console.WriteLine(sum);}
(4)for语句

        语法: for(表达式1;表达式2;表达式3) {  语句  };

       表达式1:通常用于初始化循环变量。

        表达式2:用于条件判断;

        表达式3:对循环变量进行操作。

    示例:从1累加100。

 static void Main(string[] args) {int sum = 0;for (int i = 0; i <= 100; i++) { sum += i;}Console.WriteLine(sum);}

        foreach语句遍历

        语法:foreach(类型   变量名 in 集合表达式)  {   语句  };

示例:输出数组值

  static void Main(string[] args) {int[] num = { 1,2,3,4,5};foreach (int i in num){Console.WriteLine(i);}}
(5)跳转语句

        1.break 跳出循环或语句。

        2.continue 跳出当前循环。

        示例:计算1-100偶数和

static void Main(string[] args) 
{int sum = 0;int i = 1;for(; i<=100;i++){if (i % 2 == 1){continue;}sum += i;}Console.WriteLine(sum);
}

        3.goto语句:转移到指定位置。(程序开发不建议使用,容易造成混乱)

    示例:从1累加100。

 static void Main(string[] args) {int sum = 0;int i = 1;Label:sum += i;i++;if (i <= 100){goto Label;}Console.WriteLine(sum);}

第七章 数组

        将相同类型的元素以整体的形式表示,并能够以简单的方式访问整体中的每个元素。

        数组——具有相同数据类型的一组元素的集合。

(1)一维数组

        定义:数组元素类型[ ]  数组名字; 例如:int[]  arr;int[] arr = new int[];

        初始化:1.单独赋值。2.使用大括号进行赋值。例如: int[] num = { 1, 2, 3, 4,5 }; 

        注意:数组下标从0开始。

        示例,输出每月的天数

 static void Main(string[] args) {int[] day = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };for(int i=0;i<day.Length;i++){Console.WriteLine((i + 1) + "月的天数是:"+day[i]);}}
(2)二维数组

        定义:数据类型[ , ] 数组名。例如:int [ , ] arr = new int [2,4];//两行四列   

                数据类型[ ][ ] 数组名。例如: int[ ][ ] arr = new int[2][ ];//不能指定列数

                arr[0] = new int[4]; arr[1] = new int[4]; 

        初始化:与一维数组相同。

        第一种定义方式只能访问总体长度。而第二种声明方式可以访问内部一维数组的长度。

        示例,二维数组行列互换。

 static void Main(string[] args){int[,] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };Console.WriteLine("-----------原始数组位置");for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){Console.Write(arr[i, j] + " ");}Console.WriteLine("\n");}Console.WriteLine("-------交换后的数组位置");int temp = 0;for (int i = 0; i < 3; i++){for (int j = 0; j < i; j++){temp = arr[i, j];arr[i, j] = arr[j, i];arr[j, i] = temp;}}for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){Console.Write(arr[i, j] + " ");}Console.WriteLine("\n");}}
(3)不规则数组

        声明:例如:int[ ][ ] arr = new int[2][ ];  arr[0] = new int [3];  arr[1] = new int [4];

        每行的数组元素不同。

(4)数组的基本操作

        一维数组的输入和输出:通过单层循环来进行输入和输出。

        二维数组的输入和输出:通过双层循环来进行输入和输出。

        遍历:使用foreach遍历数组。

        排序:使用Array类中的sort方法。

        反转:使用Array类中的Reverse方法。

        示例:

​static void Main(string[] args){int[] arr = { 1, 2, 3, 4, 5, 6};Array.Sort(arr);Array.Reverse(arr);foreach (int i in arr){Console.WriteLine(i);}}​
(5)数组排序算法

        1.冒泡排序(方法不唯一)

 static void Main(string[] args){int[] arr = { 7, 2, 3, 5, 4, 6};for (int i = 0; i < arr.Length; i++){for(int j = 1;j<arr.Length-i;j++){if (arr[j - 1] > arr[j]){int temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;}}}foreach (int item in arr){Console.WriteLine(item);}}

        2.选择排序

        基本思想是每次从未排序的部分中选择最小(或最大)的元素,放到已排序部分的末尾,直到所有元素排序完成。

 static void Main(string[] args){int[] arr = { 7, 2, 3, 5, 4, 6};for (int i = 0; i < arr.Length; i++){for(int j = i+1;j<arr.Length;j++){if (arr[i] > arr[j]){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}foreach (int item in arr){Console.WriteLine(item);}}

        初始时全为未排序。然后找到其中最小(最大)的放到最前边成为已排序部分。然后在从剩下未排序部分继续找最小(最大)的放到前方。循环操作,最后完成排序。

(6)ArrayList类

        动态添加和删除元素。

        1.创建对象 

       ArrayList  list = new ArrayList();

        2.添加元素

        list.Add( int value);——末尾添加

  list.Insert(int index, int value);——指定位置添加

        3.删除元素

        list.clear();——全删

        list.Remove(int value);——删除指定值

        list.RemoveAt(int index);——删除指定位置的值 

        list.RemoveRange(int index, int count);——删除一定范围的值

        4.查找元素

        使用ArrayList提供的Contains方法。

        list.Contains(2); 返回值为bool类型。有true,没有false。

(7)哈希表

        也称为散列表,是一种高效的数据结构,用于存储键值对(key-value pairs)。它通过哈希函数将键(key)映射到表中的某个位置,从而实现快速的插入、删除和查找操作。

        1.创建对象

          Hashtable ht = new Hashtable();   Hashtable ht = new Hashtable(int capacity);

        2.添加元素

        ht.Add(int key,int value);

        3.删除元素

        ht.Clear();——删除所有

        ht.Remove( int key)——根据键删除对应的值。

        3.遍历

        使用foreach遍历。但由于存储的是键值对。类型要用DictionaryEntry类型

示例:

  static void Main(string[] args){ Hashtable ht = new Hashtable();ht.Add(3, 3);ht.Add(2, 2);ht.Add(1, 1);foreach (DictionaryEntry item in ht){Console.WriteLine(item.Key);Console.WriteLine(item.Value);}}

        4.查找

        ht.Contains(key);——查找是否包含该键。

        ht.Contains(value);——查找是否包含该值。

      Console.WriteLine(ht.Contains(2));Console.WriteLine(ht.ContainsValue(3));

第八章 类和对象

(1)结构

        结构是一种值类型,通常用来封装一组相关的变量。使用struct关键字来声明结构。

        struct  结构名{

        代码块 };

(2)面向对象

        对象:对象是类的实例,具有类定义的属性和方法。(数据结构+方法)

        类:创建对象的蓝图或模板,描述了对象的属性和行为。

        实例化:实例化是根据类创建对象的过程。

        封装:对内部数据进行隐藏,外部不能进行操作。

        继承:继承父类的方法和属性,提高代码复用性。

        多态:对父类方法可以进行重写。

(3)类

        类:它是对一类具有共同特征的事务的抽象。是一种数据结构,主要包换数据成员和方法。

类的声明: 类修饰符  class  类名  {   } 

        示例:

 public class people{  public string m_name;public  int m_age;public  stirng m_gender;}

类修饰符:

        public——公共的。子类可以访问,外界可以访问。

        private——私有的,子类不可以访问,外界不可以访问。 

        protected——受保护的。子类可以访问,外界不可以访问。

构造函数和析构函数:

        构造函数:对对象进行初始化时使用的方法。

        析构函数:用于回收创建的对象。示例。

 public class people{public  people(string name,int age,string gender) //构造{m_name = name;m_age = age;m_gender = gender;}public  string m_name;public  int m_age;public  stirng m_gender;~people() {}//析构}

对象的创建于使用

        创建:

people people1 = new people("张三", 18, "男");people people2 = new people();

        使用:直接对属性进行操作。

  people1.m_name = "张三";people1.m_age = 18;people1.m_gender = "男";

        通过访问器进行操作。例如

  private int id = 0;public int ID{get //访问器{return id;}set //访问器{id = value;}}people1.ID = 100;int value = people1.ID;

this关键字

        C#中使用this来代表本类对象的引用。被隐式的用于引用对象的成员变量和方法。例如

 public people(string name, int age, string gender) //构造{this.m_name = name;this.m_age = age;this.m_gender = gender;}
(4)属性和方法

        属性是对实体特征的抽象,提供对类或对象的访问。

        主要用于对数据进行封装、避免非法访问和保证数据完整性。

示例。

private int age = 0;public int Age{get //访问器{return age;}set //访问器{if(vlaue>0&&value<100){age= value;}else{age = 18;}}}people1.Age= 18;int value = people1.Age;

方法

        方法就是类能够执行的操作。是有规律的、重复的操作。

        方法的声明:访问修饰符  返回类型 方法名(参数列表){方法的代码}。示例

 public int get_age()//获取年龄{return this.m_age;}public void set_age(int value)//设置年龄{this.m_age = value;}

        方法中的可变参数

        使用params。示例

 static void Main(string[] args){money m = new money();m.Add(10, 20, 30, 40);Console.WriteLine(m.sum);}public class money{public int sum = 0;public int Add(params int[] arr){for (int i = 0; i < arr.Length; i++){sum += arr[i];}return sum;}}

        交换两个数的值——使用ref。  类似于C++中的&引用。示例。

   static void swap(ref int num1,ref int num2){int temp;temp = num1;num1 = num2;num2 = temp;}static void Main(string[] args){int num1 = 1, num2 = 2;swap(ref num1, ref num2);Console.WriteLine(num1 + ", " + num2);}

        out参数

        在C#中,out关键字用于定义输出参数。它允许方法返回多个值,而不仅仅是单个返回值。与ref参数不同,out参数在传递给方法之前不需要初始化,但方法内部必须为其赋值。

        static void Add(int a,int b,out int c,out int d){c = a + b;d = a * b;}static void Main(string[] args){int a = 1;int b = 2;int c;int d;Add(a,b,out c,out d );}

        方法的重载

        重载指方法名相同,但参数个数、数据类型和顺序不同的方法。示例:

 static int sum(int num1, int num2){return num1 + num2;}static int sum(int num1,int num2,int num3){return num1+num2+num3;}static void Main(string[] args){int num1=1,num2=2,num3=3;sum(num1,num2);sum(num1,num2,num3);}

        C#的基础语法知识到此为止,后面将介绍C#的界面设计。 


http://www.ppmy.cn/ops/170394.html

相关文章

架构思维:如何设计一个支持海量数据存储的高扩展性架构_数据分片、存储、复制与一致性的原理性问题

文章目录 PRE引言1. 数据分片策略Hash取模分片一致性Hash分片Range分片分片设计原理核心设计模块分片规则定义动态分片调整路由与负载均衡 应对热点的关键技术多级分片&#xff08;Hierarchical Sharding&#xff09;副本分散策略缓存层配合 典型应用场景优缺点分析 2. 应对热点…

关于JESD204B 接口的调试

高速ADC和DAC常常用到JESD204B、JESD20C接口&#xff0c;网上相关的资料众多。此处我们主要介绍如何让JESD204B锁定&#xff0c;调试时的几个要点&#xff1a; 以AD9689 ADC为例&#xff0c;要想让JESD204B接口锁定&#xff0c;需要注意&#xff1a; 1、提供给AD9689的工作时…

Linux生产者消费者模型

Linux生产者消费者模型 Linux生产者消费者模型详解生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型基础实现生产者消费者步调调整条…

【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究

这篇文章来自于 Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilities 摘要 软件安全漏洞在现代系统中呈现泛在化趋势&#xff0c;其引发的社会影响日益显著。尽管已有多种防御技术被提出&#xff0c;基于深度学习&…

图解AI对话系统架构:一次讲透核心技术

图解AI对话系统架构&#xff1a;一次讲透核心技术 在当今AI快速发展的时代&#xff0c;智能对话系统已成为企业数字化转型的标配。本文将通过一个完整的架构图&#xff0c;为您深入解析AI对话系统的核心技术和工作原理。 一、VPC&#xff1a;安全的私有网络空间 什么是VPC&…

车载以太网网络测试 -24【SOME/IP概述】

目录 1 摘要2 车载SOME/IP 概述2.1发展背景以及应用2.1.1车载 SOME/IP 背景2.1.2 车载 SOME/IP 应用场景 2.3 什么是SOME/IP2.3.1 SOME/IP定义2.3.2 SOME/IP在协议栈中的位置 3 SOA是什么4 SOME/IP主要功能5 SOME/IP标准 1 摘要 本文主要介绍SOME/IP的背景以及在车载行业的发展…

【蓝桥杯每日一题】3.25

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x “OJ超时不是终点&#xff0c;是算法在提醒你该优化时间复杂度了&#xff01;” 目录 3.25 差分数组 一、一维差分 题目链接&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a;…

【银河麒麟系统常识】需求:安装.NET SDK

前提 网络状态正常(非离线安装)&#xff1b; 终端命令如下所示 根据不同系统的版本&#xff0c;自行选择&#xff0c;逐行执行即可&#xff1b; # 基于 Ubuntu/Debian 的银河麒麟系统 wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O…