目录
第六章 逻辑结构
(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#的界面设计。