说在前面的废话:
很久以前就关注了泰课在线,因为是学习Unity3D的,所以在找视频教程的时候找到了siki老师的《黑暗之光》教程,从那以后就很喜欢siki老师的课程。(绝对不是在打广告!!)
后来心知肚明地告诉自己基础学得一塌糊涂,所以决定从最基本的开始抓起。好在siki老师不仅有Unity3D的课程,也有C#基础教程,所以从那时起,我手里就捏着siki老师的教程,可笑的是竟然没有下定决心学起,平白无故地浪费了那么多的时间。
2016年,差不多是在新一年的开端吧,我想:还等什么呢?难道还有契机让我等待吗?
没有了,从现在开始,最坏的结果也不过是大器晚成!
2016年1月14日,正式开始学习编程,因为以前玩了三年的编程了,自己什么都不会!没脸说自己学过编程!乖乖从头开始学吧!
既然是从头学起,那理所当然的要从最简单的说起:
命名:
C#中有两种命名方式,一种叫驼峰命名法,另一种叫Pascal命名法。
驼峰命名法的要求是:第一个单词的所有字母全部小写,后面的所有单词首字母大写,其余字母小写;
如:
String myPhone = "IPhone5S"; //定义字符串:我的手机
int enemyAge = 300; //定义整型数值:敌人的年龄
Pascal命名法的要求则是:组成标识符的所有单词首字母都要大写,其他字母一律小写;而当该标识符是英文单词的缩写时,则所有字母都要大写(这个类似于常量的定义方法);
如:
class EnemyMove{}; //定义一个敌人移动的类
class PlayerShoot{}; //定义一个玩家射击的类
class OpenDoor{}; //定义一个开门的类
class HP{}; //定义一个血量的类
static void GameStart(){}; //定义一个游戏开始的方法
static void ClickButton(){}; //定义一个点击按钮的方法
以上就是两种命名方法的实例,但是我们也可以看到实例中命名不太一样,为什么会这样呢?
那是因为我们在C#编程中用驼峰命名法来定义变量,用Pascal命名法来定义类和方法,所以上面这种故意为之的命名就可以得到解释:为什么我两种命名方法运用在不同类型的对象中(变量、类、方法)。
在这里要说一点:定义标识符的时候一定要注意避开关键字,像class、string、using、int、static、void等都是关键字。
只要我们遵守命名规范,一般不会与关键字冲突,因为关键字一般都是所有字母全部小写,而无论是驼峰命名法还是Pascal命名法里面都包含了大写。
因此,我们平时命名时一个变量只用一个单词来表示而且所有字母都小写其实是一种不太严谨的做法。
接下来说说语句和块:
其实我们所编写的代码都是一个个程序指令,我们把它们称为语句;
我们常见的语句有:
int studentAge=23;
float iphonePrice=2599.00f;
studentID = student1.studentID;
Console.WriteLine("程序猿,你好!");
这种我们常写的代码其实就叫做语句,语句最终以;结束。
块有什么呢?
我的理解是:块是语句的集合。我们有时候说代码块,代码块,应该就是指这个东西。
{
int studentAge=23;
float iphonePrice=2599.00f;
studentID = student1.studentID;
}
对于一个块来说,它包含0条或多条语句,它以{开始,以}结束。C#就是块结构语言。
如:
if(i>3)
{ i++; j+=2; c=i+j; }
这是一个我们非常熟悉的很简单的代码段,我们不讨论它的意义,单单从形式上看,它算得上是C#中最常见的一种结构了,可以说,几乎C#的所有代码都是在花括号中的(引入命名空间除外)。
我们看花括号包括它里面的语句,这就是一个块嘛!所以我们说C#就是一种块结构语言,同时JAVA也一样,是块结构语言的一种。
我们今天学习的第一个方法就是Write()方法,还有它的弟弟WriteLine()方法。
Console.Write("程序猿,你好!");
很明显会在控制台输出“程序猿,你好!”这几个字。
Ctrl+F5运行会使程序运行后暂停,按任意键才会结束执行。
再来看看它的弟弟:WriteLine()方法。
Console.WriteLine("程序猿,你好!");
我们比较一下,Write()方法和WriteLine()方法都是在控制台中输出一个字符串,但Write()方法输出一个字符串后就紧接着在其后面执行其他操作,而WriteLine()方法则是在输出一个字符串后换一行,然后再执行后续操作。
与Write()方法和WriteLine()方法类似的还有Read()方法和ReadLine()方法0。
从字面上就可以看出一个是读,一个是写,也就是说一个是展示数据,另一个是获取数据。
我们刚才介绍Write()方法和WriteLine()方法的时候运行是怎么运行的?
是通过键盘组合键Ctrl+F5运行的吧?Ctrl+F5运行有什么效果呢?就是会使程序运行后暂停,等键盘按下任意键的时候才继续运行(鼠标不行,只能是键盘任意键!)。
我们再来看看一个Write()方法加上一个Read()方法有什么效果呢?
Console.Write("程序猿,你好!");
Console.Read();
这次我们直接点击“运行”按钮或者直接按 F5运行程序:
与上面作比较,没有了那句“请按任意键继续…”但是程序依然暂停下来了,这是因为Read()这个方法就是一个请求输入的方法,没有从键盘输入内容,这个方法会永远等下去,所以程序暂停了。
同理,ReadLine()方法的含义就是在下一行输入内容。
那Read()方法和ReadKey()方法有什么区别呢?
Read()方法只能获取按下的那个键而ReadKey()方法不仅可以读写到这个键,还能顺便把它打印在控制台上:
Console.Write("程序猿,你好!");
Console.ReadKey();
Console.ReadLine();
以上讲的是控制台中Write()方法以及它周边的几个方法。
那么就Write()方法而言,我们知道它是一个输出方法。但是要明白一个输出方法有多种输出的形式。我们只说Write()方法和WriteLine()方法。
这是一种输出形式:
Console.Write("程序猿,你好!");
这是一种直接将一个字符串原原本本输出的形式,但这样能满足我们的需要吗?我们来设想这样一个情景,我们顺便来写个小小的程序:
有三个小朋友:小明、小红、小刚,他们在同一个班级里,寒假前期末考试成绩下来了,分别是语文、数学和英语,老师想统计一下他们三个的成绩情况,包括总成绩和三个科目的平均成绩,并且在控制台上打印出来。
给了我们九个成绩后,我们怎么让它们的结果显示出来呢?直接用下面这个语句吗?
Console.WriteLine("小明的总成绩为270,小红的总成绩为285,小刚的总成绩为250");
如果用这上面的语句的话,那要计算机也没用了,已经知道最终结果了,我还用控制台再去输出一遍干什么呢?人脑已经算好了,怎么体现这个计算和打印的过程是电脑来完成的呢?
那有人会说了:Write()方法里面需要知道确切的值,不知道值我怎么输出呢?
那么这个值是确定会给的,但不是把具体的值给编程者看到,然后编程者看到后把这个值输进去,而是把这个值直接给电脑,让电脑去取!
请看:
//定义小明的三个科目的成绩
byte mathOfMing = 95;
byte englishOfMing = 90;
byte chineseOfMing = 85;
//定义小红的三个科目的成绩
byte mathOfHong = 98;
byte englishOfHong = 95;
byte chineseOfHong = 92;
//定义小刚的三个科目的成绩
byte mathOfGang = 90;
byte englishOfGang = 80;
byte chineseOfGang = 80;
//计算出三个人的总成绩
Console.WriteLine("小明的总成绩为{0},小红的总成绩为{1},小刚的总成绩为{2}",mathOfMing+englishOfMing+chineseOfMing,mathOfHong+englishOfHong+chineseOfHong,mathOfGang+englishOfGang+chineseOfGang);
//计算出三个科目的平均成绩
Console.WriteLine("数学的平均成绩为{0},英语的平均成绩为{1},语文的平均成绩为{2}",(mathOfGang+mathOfHong+mathOfMing)/3,(englishOfGang+englishOfHong+englishOfMing)/3,(chineseOfGang+chineseOfHong+chineseOfMing)/3);
Console.ReadLine();
我们看在WriteLine()方法中我并没有去人为地填写270、285、250、94、88、85这些数字,他们是计算机计算好之后填上去的。(由于精度的关系,计算后的数值并不是百分百精确)
注意看WriteLine()方法括号里面的内容:
Console.WriteLine("小明的总成绩为{0},小红的总成绩为{1},小刚的总成绩为{2}",mathOfMing+englishOfMing+chineseOfMing,mathOfHong+englishOfHong+chineseOfHong,mathOfGang+englishOfGang+chineseOfGang);
这种输出形式叫做格式化输出,因为它是按照一定的格式输出的。
引号里面的{0}、{1}、{2}、{3}、{4}等分别对应后面第0个、第1个、第2个、第3个、第4个值,这就是它所遵照的格式。
这样的话我们就不需要对这几个{0}、{1}、{2}、{3}、{4}的具体值进行操作了,只要给我原始数据,我就能把计算后的结果填到每一个需要的空缺里。
值得注意的是:这里的{0}、{1}、{2}、{3}、{4}位置不是固定的,它的顺序还可以是{0}、{3}、{4}、{2}、{1},它们会根据花括号中的数字到后面去找相应的值,因此后面的具体值的顺序不可以随意变动,要前后参考后才能设定。
这就是Write()和WriteLine()方法中的格式化输出。
接下来说的就是C#中的几种简单类型:整型数值类型、小数数值类型、非数值类型
整型数值类型:byte、int、long
小数数值类型:float、double、decimal
非数值类型:char、bool、string。
这里值得注意的是:
1.在小数数值类型中,默认的类型是double。
比如:23.5,这种情况下它不是float类型的,而是double类型的,只有23.5f才表示float类型的23.5。
2.bool类型的变量赋值为小写true和false,不是大写True或False,因为大写的不识别。
至于每一种类型的长度范围,用到极限值的时候查询一下就可以了。
最后我们来总结一下今天学习了哪些内容:
(1).两种命名方法:驼峰命名法和Pascal命名法;
(2).语句和块的区别和联系;
(3).Write()方法、WriteLine()方法、Read()方法、ReadLine()方法;
(4).格式化输出形式;
(5).C#中的几种简单类型:整型数值类型、小数数值类型、非数值类型
今天就先记录到这里,有什么不正确的地方请大家抱着一语惊醒梦中人的想法为在下纠正,感激不尽!