1、北京传智播客教育 ,C#编程基础,讲师:杨中科,.Net开发环境(*了解),.Net Framework,C#,VB.Net,F#,开发工具:Visual Studio,C Sharp,IronPython,使用.Net开发的程序必须运行在安装了.Net的机器上。 .Net的各个版本;.Net向下兼容的实现。,第一个C#程序,创建第一个控制台程序并且调试运行。 为什么要从控制台程序开始?不要把精力放到表现层,而是把精力放到写代码上。无论控制台还是Winform还是ASP.Net最难的是写代码,而不是拖控件。 唯一需要学的三条控制台指令:Console.WriteLine:打印输出、Consol
2、e.ReadLine:从控制台读入一行、Console.ReadKey:控制台暂停。至于Console.是什么意思不用管。1+1=2的例子 占位符是个什么玩意儿?0的个数必须和参数的个数一样,是一一对应的关系。序号从0开始在后面学习String.Format的时候还会用到这个类。,VS开发环境介绍,解决方案管理器:解决方案、工程、文件 拖动视图、关闭/打开视图、重置窗口布局 C#源文件一般以cs结尾。即使没有VS也能用记事本打开 C#程序的入口是Main函数,在Main中写代码就行,暂时不用关心其他部分是什么意思 错误列表。见到编译错误不用慌。错误排除演示。常见错误:结尾没有分号,大小写错误。
3、 显示代码行号。工具选项文本编辑器C#显示行号 修改文本编辑器字体。,VS开发环境介绍2,设置启动项目,将当前项目自动设置为启动项目,如果运行结果很奇怪,看看是不是没有设置启动项目。 一个解决方案包含多个项目,同时只能打开一个解决方案;在解决方案上点击右键属性启动项目,“当前选定内容”是把当前编辑器所在的项目为启动项目,但启动项目就是右键设定启动项目设置的,多启动项目可以让多个项目同时启动,适合于开发客户端、服务器的程序,C#语法,从上到下一条条的依次执行。过去的就让他过去吧,不会返回头执行:int i1=3;int i2=5;int i3=i1+i2;i1=9;。 大小写敏感。String和
4、string 都行是另外一个问题。 函数参数用()包围。错误:string s2 = Console.ReadLine; Console.WriteLine=3,区分方法和属性,看图标颜色。 两句代码之间用分号(;)分割(易错:全角问题) 注释:单行注释、多行注释。批量注释、反注释。用VisualStudio的批量反注释:快捷键、工具栏图标两种方式。,变量,把变量看成放数据的容器。 定义变量的方式:类型 变量名; int i3;变量只是容器,必须放进去值才有意义,否则就是一个“杯具”。 string s1=null和string s1不一样。 变量的类型:不同类型的容器放不同的东西。不能在in
5、t类型的变量中放字符串。 变量不能放和变量类型不兼容的数据。 变量的名字不能重名(不严格)/int i3 = 33;/定义一个变量i3,赋值为33i3 = 33;/为已有变量i3赋值为33 变量只能声明一次,但是可以多次使用。 int i1=5;int i1=6;不可以。但是int i1=5;i1=6;是 可以的。 问题 int i=10;Console.WriteLine(“i“); Console.WriteLine(i);,常用基本数据类型,string、int 、char 、bool long等。bool的取值:true、false。int的表示范围。long有多long 为什么输出“
6、要用转义符“,因为编译器默认是遇到“开始字符串,再遇到“是结束字符串,但是如果遇到前面有的“就不把它当成有字符串起始意义的“。表示不要把后的“当成字符串的开始或者结尾 为什么要有转义符,就是要在程序中输出回车等特殊的字符,不能直接在字符串中打回车,所以必须转移。“n“回车。string:“ab“、“abnb“、“c:a.txt“、“c:a.txt“(推荐)。表示字符串中的不当成转义符。还可以定义多行文本。“一命偿一命 “中是告诉编译器不要把这个“当成字符串的结束。 是不把当成转义符。不是万能的,不能解决字符串中有双引号的问题,如果有双引号还是用转义符 a是char,“a”是string。 st
7、ring s = Console.ReadLine(); 难点:问题: String str=Console.ReadLine(); Console.WriteLine(str); 用户输入anb,输出什么?转义符只针对在代码中直接写出的字符串,对于程序中读取出来没有这个问题。n是给编译器看的。把“河蟹”翻译成“和谐” 简单的类型转换:Convert.ToString()、ToString()、Convert.ToInt32() 。即可用中间变量,也可以不用。int i = Convert.ToInt32(Console.ReadLine();,变量的命名,命名规则:第一个字符必须是字母或者下
8、划线(_),其后的字符可以是任意个数字、字母、下划线。不能全部使用C#的关键字,比如class、namespace、new、void等。判断方式:VS中亮蓝色的就是关键字。 这也是类、函数等的命名规则。还可以使用中文变量名(类名、函数名),不推荐。 潜规则:C#中建议变量的开头用小写。专业的程序员一定要注意大小写的问题!和“命名规则”不一样不是强制性的规定 变量在声明后才能使用 变量的声明:int i;int x,y;int i=3;变量使用之前必须赋值。,运算符、表达式,+、-、*(乘)、/(除)、%(求余) +可以用作字符串连接,其他不可以。 +(自增)、-(自减) (*)运算符优先级:i
9、1+i2*i3、(i1+i2)*i3。不要变态,括号是王道。 变量可以和字面量混合运算。 练习:让用户输入两个数,打印出两个数的和。,赋值,赋值运算符=,让左边变量的值等于右边的计算结果。这就能解释令人不解的i=i+1; (*)+=、-=、*=、/=。 i2=i1+;i2=+i1;(了解)。-同理。 习题:int a=10;a+;a=a+a;Console.WriteLine(“0“,a);执行结果是什么? int i=10;int j=i;i=5;j=? int x=10;x+y=80;Console.WriteLine(y); x + y = 80; /左边的必须是变量!不能是常量,不能是
10、表达式 习题(重点,难点):交换两个变量的值。易错!,布尔运算,相等判断:=,不要和=混淆。WriteLine(“0“,i=1);WriteLine(“0“,i=1);的区别。Console.WriteLine(“0“,i=1);/C#中赋值表达式也有值,它的值表示为赋值后变量的值 不等判断:!= 大小比较:、= 取反:! 组合运算:&(并且)、|(或者)。 & 并且:只有两边都为true的时候,表达式的值才为true,否则是false; |或者:两边只要有一个为true的时候,表达式的值就是true,否则是false; &、|是短路运算,试验。,if,if(i1) ,if(i1) else
11、,if(i100) else if(i10) else ,单句的时候大括号可以省略,但是不建议省略,演示说明why。if()else if()和if()if()是不一样的。,if语句的嵌套,if(i100|i10) ,if(i100&j10) ,if(i0&j0)|(i0&j0) ,易错代码: if(i10); Console.WriteLine(“是“); ,课上练习,学编程不是看书,不是听老师讲,而是自己动手写。 作业1:提示用户输入密码,如果密码是“888888”则提示正确,否则提示错误。 作业2:提示用户输入密码,如果密码是“888888”则提示正确,否则要求再输入一次,如果密码是“8
12、88888”则提示正确,否则提示错误。 作业3:提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“888888”,则提示正确,否则提示错误,如果用户名不是admin还提示用户用户名不存在。 注意:变量命名要用有意义的变量名,不要x、y、z。,switch case,类似于if.else.else if.else,但是是离散值的判断。 switch一般都可以用if重写,但是if不一定能用switch重写 不要忘了break。C#中的break不写是不行的,除了合并case的情况,switch(i) case 1: / break; case 2: / break;,s
13、witch(i) case 1: / break; case 2: / break; default: break;,case中的值必须是常量,不能是变量、表达式。 switch(i) case a: / break;,switch(i) case 1: case 2: / break;,被判定的值进入满足条件的分支执行,while循环,while(i100) /打印ii+; 只要while后小括号中的表达式为true,就不断执行大括号中的代码 while(不是终点) 跑 ,do /打印ii+; while(i100) 先做如果满足则再来一次,直至while表达式为false。至少被执行一次。
14、(*) 易错while(i0); ,练习1:用while计算1到100之间整数的和;(有更好的数学解法) 练习2:要求用户输入用户名和密码,只要不是admin、888888就一直提示要求重新输入。 练习3:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。 练习4:不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值。设一个变量int max,初始值为0,用户每输入一次就把用户输入的和max比较一下,如果输入的比max大,则让max等于用户输入。陷阱:判断end是在之前还是之后。,循环的中断,bre
15、ak:立即终止整个循环。 continue:立即终止当前循环步骤,进行下一次循环步骤。 练习1:用 while continue实现计算1到100之间的除了能被7整除之外所有整数的和。 练习2:用while break实现要求用户输入用户名和密码,只要不是admin、888888就一直提示要求重新输入。return,for循环,for(code1;code2;code3)。code1:循环的初始化代码,只在循环开始之前运行一次;code2,bool类型的表达式,每次循环完成前都判断一下是否为true,只有为true才会进行本次循环;code3在每次循环之后执行一次。 for的三段都可以省略,但
16、是不能丢了“;”。 break、continue同样可以应用于for。 for和while代码之间都可以互相转换,究竟用哪种方式则取决于一些惯用用法和个人习惯,不用记,代码写多了自然就有感觉,for(int i=0;i10;i+) ,for(int i=100;i0;i-) ,for中终止条件注意是还是=。只要想好了想要的最后一个数是什么、第一个数是什么即可 用 for实现计算1到100之间所有整数的和。用 for实现计算200到300之间所有整数的和。,枚举,确定数量、确定值的几个取值:东西南北、男女、上中下。,enum Gendermale,female enum QQStatusonli
17、ne,offline,hidden,枚举的用法,QQStatus status = QQStatus.online; 和用字符串比起来,用枚举的好处就是限定了变量的取值范围,程序处理起来更方便。,数组,保存多个值。几乎任意类型都可以声明数组。,int nums = 5,3,8,int nums = new int3,int nums = new int35,3,8/个数和声明数必须一致 int nums = new int55,3,8/错误 使用索引器访问指定编号位置的元素,访问数组元素:nums0、nums1。索引从0开始。取到的元素的类型就是数组元素的类型。还可以对数组元素进行赋值,练习1
18、:从一个整数数组中取出最大的整数 练习2:计算一个整数数组的所有元素的和。 练习6:将一个字符串数组的元素的顺序进行反转。“3“,“a“,“8“,“haha“ “haha“,“8“,“a“,“3“。第i个和第length-i-1个进行交换。 联系7:连接两个int数组为新数组。 练习3:将一个字符串数组“3“,“a“,“8“,“haha“输出为|分割的字符串,“3|a|8|haha“ 练习4:将一个整数数组的每一个元素进行如下的处理:如果元素是正数则将这个位置的元素的值加1,如果元素是负数则将这个位置的元素的值减1。 练习5:有一个整数数组,请声明一个字符串数组,将整数数组中的每一个元素的值转换为字符串保存到字符串数组中。string strs = new stringvalues.Length;,