C#从入门到精通(2)

发布于:2025-03-24 ⋅ 阅读:(30) ⋅ 点赞:(0)

目录

第六章 逻辑结构

(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#的界面设计。 


网站公告

今日签到

点亮在社区的每一天
去签到