using System;
/*-------------------结构体---------------------------------
数据类型
一 简单数据类型(系统定义好的)
int float char bool
二 复杂数据类型(自定义)
结构体:struct
类:class
枚举:enum
委托:delegate
三 权限(可以修饰字段,函数,自定义数据类型)
公开权限:public,可以在外部访问
私有权限:private,不可以在外部访问
受保护权限:protected,不可以在外部访问
四 结构体和类的区别
1、定义结构体和类语法结构都一样。关键字不一样,结构体:stuct;类:class
2、结构体和类都是由数据成员和函数成员构成
3、结构体主要是为了把数据包装到一起,以共有权限进行开放。类是把数据和函数包装到一起,数据以私有权限封装,以属性方式开放权限。
4、生成对象方式不一样,类生成对象通过new关键字+构造函数:new 构造函数。结构体生成对象:结构体类型名 对象名;
5、内存区域不一样,结构体生成的对象在栈中,类生成的对象在堆中
6、调用结构体和类对象中的成员都是通过对象打点调用
7、结构体生成对象之后,一定要对所有的数据成员赋值之后才能使用
*/
namespace 结构体
{
//封装一个结构体,用来表示三维空间中的一个点信息
struct Point
{
//一 数据成员
public float x;
public float y;
public float z;
//二 函数成员
//构造函数没有返回值(void都不需要),函数名字跟类型名字一样
//默认的构造函数是没有参数的,还存在
//构造函数只能在生成对象的时候和new一起调用
public Point(float _x,float _y,float _z)
{
x = _x;
y = _y;
z = _z;
}
/// <summary>
/// 该函数是继承下来的函数
/// </summary>
/// <returns></returns>
public override string ToString()
{
string msg = string.Format("x:{0},y:{1},z:{2}", x, y, z);
return msg;
}
public void showMsg()
{
Console.WriteLine("信息:" +ToString());
}
}
//封装一个类,用来表示三维空间中的一个点信息
class Position
{
//一 数据成员
public float x;
public float y;
public float z;
//二 函数成员
//有参的构造函数定义了之后,默认的构造函数不存在,显示的定义出来
public Position(float _x,float _y,float _z)
{
x = _x;
y = _y;
z = _z;
}
//显示把默认构造函数定义出来
public Position()
{
}
}
class Program
{
static void Main(string[] args)
{
int a = 5;
//一 结构
Point p1;//结构体对象的创建,但是没有给对象中的所有成员赋值,不能使用这些成员
//1.1 结构体赋值方式1
p1.x = 1.0f;
p1.y = 1.0f;
p1.z = 1.0f;
//1.2 结构体赋值方式2
//如下调用系统提供的默认构造函数(不带参数)赋值
Point p3 = new Point(1.0f,2.0f,3.0f);//通过调用构造函数对结构体中所有数据成员赋值
//p1数据赋值给p2(两个不同的内存,都在栈中)
Point p2 = p1;
p2.x = 3.0f;
p2.y = 4.0f;
p2.z = 5.0f;
Console.WriteLine("p1的x坐标:"+p1.x);
Console.WriteLine("p1的y坐标:" + p1.y);
Console.WriteLine("p1的z坐标:" + p1.z);
//Console.WriteLine("p3的信息:"+p3.ToString());
p3.showMsg();//在内部已经打印信息
//二 类
Position position0=null;//定义类的引用,还没有创建出对象
Position position=new Position();//类对象的创建(调用构造函数,给所有的数据成员赋值)
position.z = 100.0f;//通过对象修改数据成员
Console.WriteLine("position的x坐标:" + position.x);
Console.WriteLine("position的y坐标:" + position.y);
Console.WriteLine("position的z坐标:" + position.z);
//position0引用position对象(指向堆中同一个内存)
position0 = position;
Console.WriteLine("position0的z坐标:" + position0.z);
Console.ReadKey();
}
}
}
using System;
using System.Threading;
/*-------------------------------枚举-------------------
枚举(使用在可以有限列举出所有可能性,如血型,性别,物品品质,一年四季,一个星期每一天,AI状态,游戏状态)
1、自定义数据类型
2、值类型(栈中)
3、关键字enum
4、枚举与一个底层的整数对应,默认int,可以修改整数类型
*/
namespace 枚举
{
enum EBlood//血型
{
A,
B,
AB,
O,
Other
}
enum EGender//性别
{
M,//男
F,//女
Other=M,//枚举中值可以有相同,但是标识符不能有相同
Other1=1
}
enum EAIState//AI状态
{
Idle,//闲置状态
Follow,//跟随状态
Attack,//攻击状态
Patrol,//巡逻状态
Flee,//逃跑状态
Dead//死亡状态
}
class Program
{
static void Main(string[] args)
{
int a = 1;
EAIState aiState;//如果不赋值,默认值为枚举中的第一个值
EAIState aiState1 = EAIState.Patrol;
EAIState aiState2 = aiState1;
EAIState aiState3 = (EAIState)5;
Console.WriteLine("aiState1="+(int)aiState1);
//通过数值获取对应枚举中的名字
string name= Enum.GetName(typeof(EBlood), 2);
Console.WriteLine(name);
//获取枚举中所有的标识符
foreach (var item in Enum.GetNames(typeof(EBlood)))
{
Console.WriteLine(item);
}
//可以通过枚举实现状态机
switch (aiState1)
{
case EAIState.Idle:
break;
case EAIState.Follow:
break;
case EAIState.Attack:
break;
case EAIState.Patrol:
break;
case EAIState.Flee:
break;
case EAIState.Dead:
break;
default:
break;
}
while (true)
{
//Console.Clear();
Console.WriteLine("战斗中...");
Thread.Sleep(1000);
}
Console.ReadKey();
}
}
}
using System;
/*------------------------------------函数和数组作业---------------------
* 函数的定义
*
* 函数的调用
*/
namespace C语言函数数组作业
{
class Program
{
/// <summary>
/// 素数
/// </summary>
static bool IsPrime(int a)
{
int b = 0;
for (int i = 1; i < a; i++)
{
if (a % i == 0)
{
b++;
}
}
if (b > 2)
{
return false;
}
else
{
return true;
}
}
/// <summary>
/// 圆的面积
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
static double Area(int a)
{
double s = 3.14 * Math.Pow(a, 2);
return s;
}
/// <summary>
/// 获取字符串中的字符个数
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
static int Count(string a)
{
int b = 0;
//a.length可以获取字符串的长度
for (int i = 0; i < a.Length; i++)
{
char c = a[i];//和数组一样取字符串中的每一个字符
Console.WriteLine(a[i]);
if (c == ' ')
{
b++;
}
}
return b;
}
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="num"></param>
static void Sort(int[] num)
{
for (int i = 0; i < num.Length - 1; i++)
{
for (int j = 0; j < num.Length - i - 1; j++)
{
if (num[j] > num[j + 1])
{
int item = num[j];
num[j] = num[j + 1];
num[j + 1] = item;
}
}
}
Console.WriteLine("从小到大的顺序为");
foreach (var item in num)
{
Console.WriteLine("\t" + item);
}
Console.WriteLine("从大到小的顺序为:");
for (int i = num.Length - 1; i >= 0; i--)
{
Console.WriteLine("\t" + num[i]);
}
}
/// <summary>
/// 选择排序
/// </summary>
/// <param name="num"></param>
static void sortSelect(int[] num)
{
for (int i = 0; i < num.Length; i++)//多少趟
{
int min = num[i];//默认当前位置为最小值
int minIndex = i;//把当前位置最小值所在的下标记录下来
for (int j = 0; j < num.Length; j++)
{
//发现后面元素有比最值小
if (num[j] < min)
{
//跟新最小值
min = num[j];
//跟新最小值所在下标
minIndex = j;
}
}
//发现当前i值的位置和所在位置不一样,就交换两个位置的元素
if (i != minIndex)
{
int temp = i;
i = minIndex;
minIndex = temp;
}
}
Console.WriteLine("从小到大的顺序为");
foreach (var item in num)
{
Console.WriteLine("\t" + item);
}
Console.WriteLine("从大到小的顺序为:");
for (int i = num.Length - 1; i >= 0; i--)
{
Console.WriteLine("\t" + num[i]);
}
}
static void Main(string[] args)
{
Random I = new Random();
/* Console.WriteLine("请输入一个整数:");
int a = int.Parse(Console.ReadLine());
#region 1:写一个判断素数的函数,在主函数输入一个整数,判断其是否为素数
IsPrime(a);
if(IsPrime(a)==true)
{
console.writrLine("shisushu");
}
#endregion
#region 2:编写求圆的面积的函数,控制台输入圆半径,求出圆面积
Console.WriteLine("圆的面积为"+Area(a));
#endregion
#region 3:编写函数,要求传入一个字符串,返回该字符串空格的个数
Console.WriteLine("空字符的个数" + Count("haha h 456"));
#endregion
#region 4:把选择排序和冒泡排序分别封装成函数
Console.WriteLine("请输入" + a + "个数字");
int[] num = new int[a];
for (int i = 0; i < a; i++)
{
Console.WriteLine("请输入第" + (i + 1 )+ "个数字");
num[i] = int.Parse(Console.ReadLine());
}
Sort(num);
#endregion
*/
#region 1:创建一个3行3列的二维整型数组,通过手动赋值数组中的前两列的6个元素,然后通过键盘输入赋值后一列的3个元素,按行序优先输出数组元素;
/*int[,] num2 = new int[3, 3]
{ {1,2,0 },
{3,4,0 },
{5,6,0 }
};
for (int i = 0; i < num2.GetLength(0); i++)
{
for (int j = 0; j < num2.GetLength(1); j++)
{
if (j==2)
{
Console.WriteLine("请输入第" + (i+1) + "行" + (j+1) + "列的数字");
num2[i, j] = int.Parse(Console.ReadLine());
}
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (j==num2.GetLength(1)-1)
{
Console.Write(num2[i, j]);
}
else
{
Console.Write(num2[i, j]+",");
}
}
Console.WriteLine();
}
Console.WriteLine("--------------------------------");
for (int i = 0; i < num2.GetLength(1); i++)
{
for (int j = 0; j < num2.GetLength(0); j++)
{
if (j == num2.GetLength(0) - 1)
{
Console.Write(num2[j,i]);
}
else
{
Console.Write(num2[j,i] + ",");
}
}
Console.WriteLine();
}
Console.WriteLine("--------------------------------");
for (int i = 2; i >= 0; i--)
{
for (int j = 2; j >=0; j--)
{
if (j == 0)
{
Console.Write(num2[i, j]);
}
else
{
Console.Write(num2[i, j] + ",");
}
}
Console.WriteLine();
}
*/
#endregion
#region 2:输入矩阵的行和列,要求都大于2,从0-9之间随机生成矩阵数据,求矩阵中的最大2x2方正,打印出来。(最大2*2方阵即四个数相加值最大)
/*Console.WriteLine("请输入一个矩阵的行:");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("请输入一个矩阵的列:");
int b = int.Parse(Console.ReadLine());
int[,] num3 = new int[a,b];
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
int r = I.Next(1, 9);
num3[i, j] = r;
}
}
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
Console.Write("\t" + num3[i, j]);
}
Console.WriteLine();
}
//求最大的2*2方针
int max = 0;
int maxa = 0;
int maxb = 0;
for (int i = 0; i < a-1; i++)
{
for (int j = 0; j < b-1; j++)
{
int curValue = num3[i, j] + num3[i, j + 1] + num3[i + 1, j] + num3[i + 1, j + 1];
if (curValue>max)
{
max = curValue;
maxa = i;
maxb = j;
}
}
}
Console.WriteLine("最大的方阵在{0}行{1}列", maxa+1, maxb+1);
Console.WriteLine("生成2*2数组为:");
for (int i = maxa; i < maxa+2; i++)
{
for (int j = maxb; j < maxb+2; j++)
{
Console.Write("\t" + num3[i, j]);
}
Console.WriteLine();
}
*/
#endregion
#region 3:计算九九乘法表中各行各列的和。
/*int[][] arrC = new int[9][];
arrC[0] = new int[1];
arrC[1] = new int[2];
arrC[2] = new int[3];
arrC[3] = new int[4];
arrC[4] = new int[5];
arrC[5] = new int[6];
arrC[6] = new int[7];
arrC[7] = new int[8];
arrC[8] = new int[9];
int a = 0,b=0;
for (int i = 0; i < arrC.Length; i++)
{
for (int j = 0; j < arrC[i].Length; j++)
{
arrC[i][j] = (i + 1) * (j + 1);
}
Console.WriteLine();
}
for (int i = 0; i < arrC.Length; i++)
{
for (int j = 0; j < arrC[i].Length; j++)
{
Console.Write(arrC[i][j] + "\t");
a += arrC[i][j];
}
Console.Write("和为" + a);
Console.WriteLine();
a = 0;
}
*/
#endregion
#region 4:从键盘输入二维数组行列值,往数组中随机填充0-50之间的数字,二维数组中数据先行后列方式从大到小的顺序排列后以矩阵形式输出,并且计算两条对角线的数字之和。
/*Console.WriteLine("请输入一个矩阵的行:");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("请输入一个矩阵的列:");
int b = int.Parse(Console.ReadLine());
int[,] num4 = new int[a,b];
int[] num5 = new int[a * b];
int d = 0;
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
int r = I.Next(0,50);
num4[i, j] = r;
}
}
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
num5[d] = num4[i, j];
d += 1;
}
}
for (int i = 0; i < num5.Length; i++)
{
Console.Write("\t"+num5[i]);
}
for (int i = 0; i < num5.Length-1; i++)
{
for (int j = 0; j < num5.Length - i - 1; j++)
{
if (num5[j] > num5[j + 1])
{
int item = num5[ j];
num5[ j] = num5[ j + 1];
num5[j + 1] = item;
}
}
}
Console.WriteLine("\n排序为:" );
foreach (var item in num5)
{
Console.Write("\t" + item);
}
Console.WriteLine("\n矩阵排序为:");
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
Console.Write(num5[j]+" ");
}
Console.WriteLine();
}
*/
#endregion
Console.ReadKey();
}
}
}