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