//一、引入命名空间
using System;//告诉编译器使用System命名空间里的类型,比如:Console.WriteLine
using System.Text;//没有用到会显示灰色
//二、程序的4个结构
//1.定义命名空间namespace xx{};
//2.定义的类class xx{};
//3.定义一个叫Main的方法,一个C#可执行只有一个Main函数且必须执行,作为程序入口参数是一个字符串(string[] args),
//4.方法体
//三、关于标示符的命名(标示符是一种字符串,用来命名如变量 方法 参数)
//1.不能以数字为开头
//2.字母、下划线可以放任意位置
//3.@字符只能放首位
//4.标识符不能和关键字重复
//四、2种C#的命名规则
//1.Camel命名法(小驼峰命名)
//首个单词的首字母小写,其余单词的首字母大写(enemyHp)
//2.Pascal命名规范
//2_1.每个单词的第一个字母都大写(EnemyHp)(大驼峰命名)
//2_2.如果使用到英文单词的缩写,全部使用大写(PI HP MP)
//五、C#命名注意
//1.变量使用Camel命名,方法和类使用Pascal命名规范
//2.关键字比如:false、new、null不能被用来做变量名或者其他形式的标识符,除非以@字符开始(后续出一章写个图表)
//3.所有C#关键字全部由小写字母组成,所以C#的命名规则一定要使用,避免冲突
//六、什么是语句?什么块?
//1.以分号结束的就是语句
//2.由大括号包围起来的,就是块
namespace 学习C_的初级编程
{
//枚举类型的定义
enum WeGame {
play,//整数类型-默认为0
stop,//整数类型-默认为1
hp,
name = 101//整数类型-默认为3,赋值为101
}
//结构体的定义
struct Position {
//public float x;
//public float y;
//public float z;
//public WeGame dir;//可利用枚举类型
public string name1;
public string name2;
public string Ganame(){
return name1 +""+ name2;
}
}
//委托的定义delegate,不需要函数体
public delegate double MyDele(double pat1, double pat2);
class Program
{
static void Main(string[] args)
{
//七、输出文本的2种形式
//1.Console.WriteLine("Hello World1");//会自动换行
//2.Console.Write("Hello World1");//不会自动换行
//八、什么是格式化输出?
//Console.WriteLine("两个数相加{0}+{1}={2}",2,2,4);//打印显示2+2=4
//九、什么是值?
//Console.WriteLine("this is {1} and {0}",3,6);
//十、什么是变量?如何定义?怎么多变量赋值?
int numOne,numTwo = 10,numThree = 60;//变量类型int 变量名称
numOne = 20;//赋值
Console.WriteLine("结果={0}+{1}+{2}",numOne,numTwo,numThree);
//十一、关于类型的使用注意
//1.比如你用int类型去定义年龄的话,是浪费空间的,范围值很大,其实用byte类型0-255之间的整数,是最合适的
byte nianLin = 20;
long longNum = 1000000102030;
int intNum = 3000;
Console.WriteLine("byte:{0}\nlong:{1}\nint:{2}", nianLin, longNum, intNum);
//2.浮点数的类型默认是double类型,如果用float记得要加个f
double douBle = 3.5;
float floAt = 3.6f;
Console.WriteLine("double:{0},float:{1}", douBle, floAt);
//十二、15种属性类型(注意命名规则用驼峰命名,先随意定义一个单词比如:my、and、good然后去拼接一个首字母大写的变量比如:myBool )
bool myBool = false;//布尔
string myString = "字符串";//字符串
char myChar = 'a';//符号
Console.WriteLine("bool:{0},string:{1}", myBool, myString);
整数型(8):取值范围有限
byte(8位无符号),sbyte(8位有符号)例: byte a = 10; sbyte b = -100;
short(16位有符号),ushort(16位无符号)例:short c = -45;ushort d = 78;
int(32位有符号),uint(32位无符号)例: int e = 200;uint f=522;
long(64位有符号),ulong(64位无符号)例:long l = -789456;ulong=123124124124124565;
位:指代表这个类型的取值范围是2的多少次方,按F12 显示
有无符号:有符号,指正负各取一半;无符号,指只取正
浮点型(3):
双精度:double 例: double a =200.2;
单精度:float 例: float b = 200.2f;
精度:decimal 例: decimal c = 200.2m;
字符型:char
单引号中,有且只有一个字符 例: char d = ‘1’;
字符串:string
字符串本质是一个字符数组 例: string str = "范围广就发个我如今为何今日和居委会进入华为 ";
布尔型:bool
true/false 注:真假值true=1/false=0
对象型:object
//十三、什么是转义字符(\n "" )?@符号的作用是什么?
//1.@符号将不识别转义字符!,
//2.会对字符串定义在多行
//3.方便表示一个路径C:\xx\xx\xx
Console.WriteLine("byte:\"{0}\"\nlong:{1}\nint:{2}", nianLin, longNum, intNum);
//十四、算术运算符和注意点
//1.加减乘除+-*/
//2.比较运算符<><=>= ==
//3.条件运算符(?:),有时也称为三元操作符“?:”
int num6 = 20;
int num7 = 30;
int num8;
num8 = num6 > num7 ? 200 : 300;//如果2大于3的话 num8=200
Console.WriteLine(num8);
//4.逻辑运算符 && || !
//5.赋值运算符 += -=
//1.注意:加减乘除俩边都是整数类型的话,结果是整数,如果不能被除尽,会自动省略小数部分
int numA, numB;
numA = 27;
numB = 13;
int numZ1 = numA + numB;
int numZ2 = numA/numB;//结果会自动省略小数部分
int numZ3 = numA * numB;
Console.WriteLine("加法结果={0}\n除法的结果={1}\n乘法的结果={2}",numZ1, numZ2, numZ3);
//2.注意:如果2个类型不一致的时候,默认为类型大的操作数类型
int letNum1 = 20;
double letNum2 = 1.2;//因为变量letNum2,类型大于int
double letNum3 = letNum1 + letNum2;//letNum3就用double类型
/*
//十五、字符串类型和整数类型的转换!怎么使用用户输入的文本?
Console.WriteLine("请输入第一个数");
string strIng = Console.ReadLine();//用来接收用户的一行文本
int numInt = Convert.ToInt32(strIng);//将整数的字符串转为整数
//Console.WriteLine(numInt);
Console.WriteLine("请输入第二个数");
string strIngTwo = Console.ReadLine();//用来接收用户的一行文本
double numIntTwo = Convert.ToDouble(strIngTwo);//将小数的字符串转为小数类型的整数
//Console.WriteLine(numIntTwo);
zhen1:Console.WriteLine("两个数的合=");
double numThreeA = numInt + numIntTwo;
Console.WriteLine(numThreeA);
//十六、语句
//1.迭代语句-遍历集合,或重复执行某一代码段直到满足指定的条件,主要有do,for,foreach,in,while
//2.跳转语句-实现将执行的语句跳转到另一个代码段。主要有break,continue,default,goto,return,yield
//3.选择语句-根据一个或多个指定条件,执行不同的代码段。主要有 if,if else,switch case
//1_1.goto跳转语句
//代码加上标签,这样就可以使用goto,语句直接调到标签的地方去执行
//goto zhen1;//zhen1是在你要执行的地方zhen1:这样写
//1_2.if if else选择语句
string pdNum1 = Console.ReadLine();
int pdNum2 = Convert.ToInt32(pdNum1);
if (pdNum2 == 2)
Console.WriteLine("正确");
else {
Console.WriteLine("错误");
}
//1_3.switch case选择语句
string pdNum3 = Console.ReadLine();
int pdNum4 = Convert.ToInt32(pdNum3);
switch (pdNum4) {
case 1:
Console.WriteLine("条件1");
break;
case 2:
Console.WriteLine("条件2");
break;
default:
Console.WriteLine("不满足条件1和2");
break;
}
//1_4.while迭代语句
string pdNum3 = Console.ReadLine();
int pdNum4 = Convert.ToInt32(pdNum3);
while (pdNum4<9) {
pdNum4++;
Console.WriteLine(pdNum4);
}
//1_5.do while迭代语句
int pdNum4 = 1;
do
{
pdNum4++;
Console.WriteLine(pdNum4);//等于2,跟while迭代语句的区别就是,会先执行1次 while语句 = 1
} while (pdNum4 < 9);
*/
//十七、break,continue,default,return跳转语句的使用
//1.break结束循环
//2.continue结束本次的循环,开始下一个循环
//3.return 跳出循环
int pdNum4 = 1;
while (pdNum4<10) {
pdNum4++;
if (pdNum4 == 9) {
// break;
}
if (pdNum4 == 6)
{
continue;
}
Console.WriteLine(pdNum4);
}
//十八、显示转换(强制性转换)和隐式转换
//1.ToInt32-string字符串类型数字-转为-int类型
//2.ToString-int float double byte转字符串string类型
//3.ToDouble-string字符串类型数字-转为-double类型
byte myByte = 123;
int myInt = myByte;//小类型的数据赋值给大类型的时候,编译器会自动转换,隐式转换
myByte = (byte)myInt;//myByte = myInt;//大类型赋值给小类型,需要进行显示转换(强制性转换)就是加个括号和数据类型
string nameA = "显示转换";
int nameB = 134;
//int pdNum7 = Convert.ToInt32(nameA);
//string pdNum8 = Convert.ToString(nameB);//int float double byte转字符串类型
//十九、枚举类型
//1.枚举的使用
WeGame Hp = WeGame.hp;//枚举的赋值
if (Hp == WeGame.hp) {
Console.WriteLine("人物的血量");
}
WeGame Liuchun = WeGame.name;
int numBa = (int)Liuchun;
if(numBa == 101){
Console.WriteLine("枚举类型的默认类型是int");
}
//2.为什么要用枚举
//2_1.如果不用枚举,虽然也能表示,但是没有枚举来的更具体,更有含义
int numBb = 0;
if (numBb == 0) {
Console.WriteLine("人物的血量");
}
//二十、结构和结构体-会让程序变的更清晰
//1.什么是结构?结构体?
//如果我们要表示一个向量的话,需定义3个类型的x,y,z,这样比较麻烦,不方便管理,我们可以使用结构定义结构
//比如:通过3个float类型的变量来表示一个敌人的坐标
//float enemy1X = 34;
//float enemy1Y = 1;
//float enemy1Z = 34;
//float enemy2X = 34;
//float enemy2Y = 1;
//float enemy2Z = 34;
//2.结构体变量的使用
//Position enemy1Postiton;
//enemy1Postiton.x = 34;//使用
//Console.WriteLine(enemy1Postiton.x);
//3.枚举类型和结构类型的一起使用
//Position play1;//定义了一个Position类型的变量play1
//play1.dir = WeGame.play;//在结构体类型play1里面,赋值一个枚举类型WeGame类型下的play到dir里面
//play1.z = 100;//给机构体类型赋值
//三十、数组
//1.数组的三种声明方式
//1_1.第一种,直接定义数组,并赋值
int[] Arr = { 1, 2, 3, 4, 5, 6 };//声明数组类型 直接赋值
//Debug.Log(Arr[0]);
//1_2.第二种,定义数组的长度,没赋值
int[] Arr_a = new int[6];//数组长度为6,默认值为0
//Debug.Log(Arr_a[0]);
//也可以这样写
int[] Arr_b;
Arr_b = new int[8];
//1_3.第三种,定义数组的长度,有赋值
int[] Arr_c = new int[4] { 1, 2, 3, 4 };
Console.WriteLine(Arr_c[0]);
//三十一、数组的遍历
//1.for循环-如果不知道索引值的话,就用这个
int[] arrNum1 = { 11, 12, 14, 16, 18, 19, 20 };
for (int i = 0; i < arrNum1.Length; i++) {
Console.WriteLine(arrNum1[i]);
}
//2.foreach循环-单纯遍历的话就用这个
foreach (int arrNum2 in arrNum1) {
Console.WriteLine(arrNum2);
}
//三十二、字符串的处理
//1.字符串的遍历
string arrNum3 = "我的世界啊!";
for (int i = 0; i < arrNum3.Length; i++) {
Console.WriteLine(arrNum3[i]);
}
//2.ToLower、ToUpper、Trim
string myNum4 = "www.baidu.COM";
string myNum5 = myNum4.ToLower();//大写转小写
string myNum6 = myNum5.ToUpper();//小写转大写
string myNum7 = myNum4.Trim(); //去掉字符串前后的空格
string myNum8 = myNum5.TrimStart();
string myNum9 = myNum5.TrimEnd();
string[] myNum10 = myNum4.Split('.');//将字符串拆分
foreach (string myNum11 in myNum10) {
Console.WriteLine(myNum11);
}
//三十三、函数
//1.函数的定义,注意,函数不能写在函数里面,只能写类里面
//2.return的返回值-在第二个方法里面,获取到了第一个方法的值
int myHe2 = move(2, 3);
Console.WriteLine(myHe2);
//3.参数数组和数组参数
int sumOne = Plus(23, 4, 56, 7, 888);//参数数组
int sumTwo = Sum(new int[]{ 1,2,3,45,6});//数组参数
Console.WriteLine(sumOne);
//4.结构函数
//5.注意:Position里面的所有值必须全部赋值
Position goName;//Position里面的所有值必须全部赋值,也就是Position里面声明的2个变量name1、name2如果有多个变量,那么其他变量也要赋值,赋值了才可以执行goName.Ganame()这个,不然会报错
goName.name1 = "小1";
goName.name2 = "小2";
Console.WriteLine("我们的名字是" + goName.Ganame());
//三十四、函数的重加载
//1.什么是函数的重加载?
//函数名相同,参数不同
int res1 = Funone(2);
double res2 = Funone(2.6);
Console.WriteLine(res1);
Console.WriteLine(res2);
//三十五、委托的使用
MyDele de;//利用委托类型,声明了一个新的变量
de = Mulit;//赋值
Console.WriteLine(de(2,4));//使用
de = Divi;
Console.WriteLine(de(2, 4));
}
static double Mulit(double pat1, double pat2) {
var res = pat1 * pat2;
return res;
}
static double Divi(double pat1, double pat2)
{
var res = pat1/pat2;
return res;
}
static int Funone(int num) {
Console.WriteLine("int类型");
var b = num + 20;
return b;
}
static double Funone(double num)
{
Console.WriteLine("double类型");
var b = num + 20;
return b;
}
static int Plus(params int[] array)//参数数组
{
int sum = 0;
for (int i = 0; i < array.Length; i++) {
sum += array[i];
}
return sum;
}
static int Sum(int[] array)//数组参数
{
int sum = 0;
for (int i = 0; i < array.Length; i++)
{
sum += array[i];
}
return sum;
}
static int move(int num1 ,int num2)//void表示空的返回值-是没有返回值的-所以要改成int类型
{
int myHe1 = num1 + num2;
return myHe1;//如果不返回myHe1,用void也可以
}
}
}