欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第 二 讲 C#语言基础.docx

    • 资源ID:83278530       资源大小:139.33KB        全文页数:48页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第 二 讲 C#语言基础.docx

    第二讲C#语言基础2.1 数据类型、变量与常量一一语言中的单词2.2 运算符与表达式语言中的标点符号1、运算符 算术运算符:+、一、*、/、+、Notice: %表示求余,没有乘方运算;尽量不要在复杂的程序里面写,C#目的是使程序简单易懂。 关系运算符:>、<、>=-<=、=、!=Notice:等于及不等于的写法,与VB不同 逻辑运算符:!(逻辑非)、& (逻辑与)、| (逻辑或)、人(逻辑异或)、&& (短路 与)、| (短路或)Notice:条件逻辑运算符,也叫短路(shortcircuit)逻辑运算符&&:第一个操作数为假,则不判断第二个操作数II:第一个操作数为真,则不判断第二个操作数E.g: MyDate=d;If(d!=null)&&(d.day>31)(/do sth with d) 位运算符:&、|、A、« 赋值运算符:=、(扩展赋值运算符:+=、-=、*=、/=)Notice:当两侧的数据类型不一致时,可以适用默认类型转换或强制类型转换 (casting)原则进行处理。E.g: long 1 = 100; int i = (int)l;特例:可以将整形常量直接赋值给byte、short、char等类型变量,且不需要进 行强制类型转换,只要不超出其表数范围。E.g: byte b= 12; 合法byte b =4096;/非法 字符串连接运算符:+E.g: int i=300 + 5;String s = "heHo," + "world!”;Notice:、”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另 一个操作数转换为字符串然后再进行连接。E.g: string s = "hello'' + 300 + 5 + “号”;输出 hello,3005 号2、表达式:符合一定语法规则的运算符和操作数的序列表达式的值:对表达式中的操作数进行运算得到的结果表达式的类型:表达式的值的数据类型类型转换:(1)赋值时:当“="两侧的数据类型不一致时,可以适用默认类型转换或强制类型转换 原则进行处理。特例,可以将整型常量直接赋值给byte、short, char等类型变量,不需要进 行强制类型转换,只要不超出其表数范围。Egbyte b= 12; 合法byte b =4096; 非法(2)表达式中的类型转换当有不同种类的混合运算时:int> long float- doubleNotice:整型提升,所有的byte、short, char等转为int编程提示:字符串转成数值:double.Parse(s)、int.Parse(s)数字转成字符串:IO.ToString()、”+10Convert 类:Convert.Tolnt32(textbox 1 .Text)Convert.ToDateTime(',2009-10-01 14:00")3、运算符优先级与结合性单目 > 算术 >关系逻辑三目 赋值大部分从左至右结合2.3流程控制语句语言中的语句结构化程序设计中的三种基本流程:顺序、分支、循环1、简单语句:方法调用语句及赋值语句,没有表达式语句这一说E.g:Console.Write(4<Hello Word"); b = a>0?a:-a; d=int.Parse(s);2 + 3; 错误2、分支语句ifif(条件表达式)语句块else语句块E.g: LeapYear.csif(year%4 = 0 && year% 100 = 0)| year%400 = 0)Console.WriteLine(year+“是闰年。”); elseConsole.WriteLine(year+“不是闰年。”);小技巧:注意书写格式,特别是缩进将后面的花括号去掉,再重新输一下,就会自动排版;也可以按Ctrl+E+D (格式 文档)或Ctrl+E+F (格式化选中部分)3多分支语句switch语句Switch(expression) Case const 1:statement 1;break;Case const2:statement2;break;Case constN:statementN;break;default:Statement_default;break;Notice:与C+不同的地方:a、变量除了整型、枚举型,还可以用字符串;不能随便贯穿, 必须有break;(除非几个case连起来,中间没有别的语句)using System;public class GradeLevelpublic static void Main( )Console.Write("Input Grade Level: char grade = (char) Console.Read(); switch( char.ToUpper( grade ) ) case *A* :Console.WriteLine(grade+w is 85100");break;case 'B':Console.WriteLine(grade+M is 7084");break;case *C* :Console.WriteLine(grade+,w is 6069");break) case *D* :Console.WriteLine(grade+M is <60w);break;default :Console.WriteLine(Minput error"); break;)例子:1、设计一个屏保程序设置窗体BackColor为黑色;窗体最大化WindowState设置为Maximized;无边框FormBorderStyle 设置为 null;设置 Timer 和 Label 1Tips:运行程序后的.exe复制到c:/windows/system32,文件名改为XXX.scr文件int deltX « 10;int deltY « 8;private void timerl_Tick(object sender, System.EventArgs e)( 一this.labell.Left += deltX;this.labell.Top += deltY)if( this.labell.Top < 0 | this.labell.Top + thislabell.Height > this.Height ) deltY = -deltY;if( this.labell.Left <0 |this.labell.Left + this.labell.Width > this.Width ) deltX = -deltX;)private void Forml_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)( -Application.Exit();)2、自动出题并判分三个标签(两个显示数字,一个显示运算符):一个Textbox显示填的结果:一个列表框 (listbox),显示出的题和判断的对错,两个按钮 匈牙利命名法:btnXXX、txtXXX. IblXXint a, b;string op;int result;Random rnd = nevi Random。;a = rnd.Next( 9 ) + b = rnd.Next( 9 ) + int c = rnd.Next( 4 switch( c ) (case 0: op»"+w; case 1: op="-" case 2: op="*w; case 3: op="/w;private void btnNew_Click(object sender, System.EventArgs e) break; break; break; break;result=a+b) result=a-b; result=a*b; result=a/b;IblA.Text=a.ToString();IblB.Text=b.ToString(); lblOp.Text=op;txtAnswer.Text=MW;private void btnJudge-Click(object sender, System.EventArgs e)( 'string str = txtAnswer.Text;double d = double.Parse( str );string disp = "” + a + op + b+”="+ str +Mif( d = result ) / if( Math.Abs(d-result)< le-3 )disp +=elsedisp += MXW;IstDisp.Items.Add( disp );4、循环语句(1)循环语句功能:语句在循环条件满足的情况下,反复执行特定代码。(2)循环五要素A、初始化部分B、循环条件C、循环体部分D、迭代部分(循环改变)E,结束后 处理E.g: int s = 0;For(int i = 0;i <=100; i+)(S+=i;)Console.WriteLine(s);(3)循环语句分类A、for循环Int result =0;For(初始化部分int i = 0;循环条件i<=100;迭代部分i+) (循环体;result +=i;IB、While 循环初始化部分;int result = 0; int i = 0;While(循环条件 i< = 100)循环体;result += i;迭代部分;i+;)C、do-while循环(至少执行一次)Int result =0; int i=0;do循环体;result+=i;迭代部分;i+;while(循环条件 i<=100);5、跳转语句(1) break语句:结束循环(相当于VB中的exit do,exit fb相(2) Continue语句:进入下一次循环(3) Goto语句:跳转到某个语句标号。但是会使程序变得混乱,C#中的goto语句可以从 内层跳到外层;标号的写法:标识符加个冒号(:)(4) Try什catch语句:异常捕获实例:1、角谷猜想:给定任何一个数,如果是奇数,则对原数*3+1,得到的结果如果是 偶数则/2,依次进行下去,最终一定会的到1.using System;class 9iaogu(public static void Main(string args)for( int n=l; n<=100; m )(int a = n;while( a != 1 ) Console.Write( w " +a );if( a%2=l ) a = a*3+l; else a /« 2; )Console.WriteLine(w " +a);实例2、显示许多圆(使用循环与绘图)Random random = nevi Random。;Color getRandomolor() (return Color.FromArgb(random.Next(256),random.Next(256),random.Next(256);private void buttonl_Click(object sender, System.EventArgs e)( -Graphics g = this.CreateGraphics();int x0 = this.Width /2;int y0 = this.Height /2;for( int r=0 ; r<this.Height/2; r-H-) g.DrawEllipse(new Pen( getRandomColor(),1), x0-r,y0-r,r*2)J)g.Dispose。; )2.4数组与C语言的数组大不同1、数组的声明与分配空间数组:多个相同类型数据的组合。在C#中,数组为引用类型。(1) 一维数组的声明方式Intal;注意方括号写到变量名的前面Doublet b;Mydate c;C#语言中数组声明时不能指定其长度(数组中元素的个数)例如:int a5非法 (2)数组初始化A、动态数组初始化数组定义与为数组元素分配空间并赋值的操作分开进行。因为C#中的数组是引用型例如:int a=new int3; 初始化a =3; al=6; a2=9 赋值MyDatef dates; 对象型数组Dates=new MyDate3;datesO=new MyDate(22,7,1964);datesl=new MyDate( 1,7,1984); dates2=newMyDate(22,12,1964);B、静态初始化在定义数组的同时就为数组元素分配空间并赋值。注意:最后可以多一个逗号例如:int a=3,9,8; 也可以写成 int a= new int3,9 8. );MyDates dates=new MyDates(22,7,1964),new MyDates( 1,7,1984),new MyDates(2,12,1964);C、数组元素的默认初始化数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。数值型是0,引用类型是null例如:int a=new int5; a口中的每个元素均为03、数组元素的引用index为数组元素下标,可以使整型常量或整型表达式。例:a3, bi, c6-i数组元素下标从0开始,长度为n的数组合法下标取值范围为0n-l每个数组都有一个属性Length指明它的长度。如:a.Length指明数组a的长度(元素个数)4 foreach 语句foreach可以很方便地处理数组、集合中各元素。foreach是只读式遍历(只能取值,无法改 变)如 s int ages=new int10;foreach(int age in ages)(/)5、复制数组Array.Copy方法提供了数组元素复制功能:Int source= 1,2,3,4,5,6); 源数组Int dest= 10,9,8,7,6,5,4,3,2,1; 目的数组复制源数组中从下标0开始的source.Length个元素到目的数组,从下标0的位置开始存储Array.Copy(source,0,dest,0,source,Length);6、多维数组二维数组举例:int,a=l,2,3,4,5,6,7,8,9);可以用a.GetLength(0)获得数组的行数,a.GetLength(l)获得数组的列数7、交错数组C#中交错数组是数组的数组例如:intt=newint3;t0=new int2;tl=new int4;t2=new int3;C#中多维数组的声明和初始化应按照从高维到低维的顺序进行。如:int 口口tl= new int口4; 非法,与 C+不同实例:筛法求素数(使用bool数组)using System;public class PrimeFilterpublic static void Main( string args )int N = 100;bool a = new boolN+l;for( int i«2; i<«N; i+ ) ai«true;for( int i«2; i<N; i+ )(if(ai) for( int j=i*2; j=N; j+=i )aj»false;)for( int i=2; i<=N; i+)if( ai ) Console.Write( i + * * );实例2:排块游戏(使用按钮数组及其他)要点:按钮的数组;按钮的生成、加入、事件;按钮的Tag (表示顺序号):函数和注释的 书写只设计开始按钮:写程序先写注释,后写代码const int N = 4; 技钮的仃、到数Button, buttons = new ButtonN, N; 按钮的数组private void Forml_Load(object sender, EventArgs e)/产生所有按钮GenerateAllButtons();)private void buttonl_Click(object sender, EventArgs e) 打乱顺序Shuffle();打乱顺序 void Shuffle()多次随机交换两个按钮Random rnd = ne.i Random();for (int i = 0; i < 100; i+) (int a = rnd.Next(N);int b = rnd.Next(N)int c = rnd.Next(N);int d = rnd.Next(N);Swap(buttonsa, b, buttons。d);) )生成所有的按钮void GenerateAllButtons() (int x0 = 100, y0 = 10, w = 45, d = 50;for (int r » 0; r < N; r-H-) for (int c = 0; c < N; C+) int num « r * N + c;Button btn = new Button。;btn.Text = (num + 1).ToString();btn.Text « (num + 1).ToString();btn.Top = y0 + r * d;btn.Left « x0 + c * d;btn.Width = w;btn.Height = w;btn.Visible = true;btn.Tag = r * N + c; 这个数据用来表示它斫在行列位置注册事件btn.Click += nev, EventHandler(btn-Click);buttonsr, c = btn; 放到数组中this.Controls.Add(btn); 加到界面上buttonsN - 1, N - 1 .Visible = false; 最后一个不可见 交换两个按钮void Swap(Button btna, Button btnb) string t = btna.Text;btna.Text = btnb.Text;btnb.Text = t;bool v = btna.Visible;btna.Visible = btnb.Visible)btnb.Visible = v;)按钮点击事件处理void btn_Click(object sender/ EventArgs e)Button btn = sender as Button; 当前点中的按钮Button blank = FindHiddenButton(); 空白按由判断是否与空白块相邻,如果是,则交换if (IsNeighbor(btn> blank)Swap(btn, blank);Swap(btn, blank); blank.Focus();)判断是否完成了if (ResultIsOk()MessageBox.Show("ok");)/查找要隙藏的按钮Button FindHiddenButton()for (int r « 0; r < N; r+)for (int c » 0; c < N; C+)(if (!buttonsr, c.Visible)( return buttons", c;)return null;判断是否相邻bool IsNeighbor(Button btnA, Button btnB)int a = (int)btnA.Tag; Tag中记录是行列位置int b = (int)btnB.Tag;int rl= a /N,cl=a% N;int r2= b /N,c2=b% N;if (rl= r2&&(clc2 - 1 | |cl= c2+ 1)左右相邻|cl ««c2&&(rl= r2 1|rlr2+1)return true;return false;) V. kMI II J j return false;检查是否完成bool ResultIsOk()for (int r = 0; r < N; r+)for (int c = 0; c < N; c-H-)if (buttonsr, c.Text != (r * N + c + 1).ToString() (return false;)return true;第三讲面向对象的C#语言3.1类、字段、方法面向对象那些事儿现实中的事物抽象为类,类(class)最基本的要素:字段(field):变量;方法(method):函数例如:PersonA类-字段“ ageQ name,方法0 Getlnfo0 IsOlderThan。SayHelloVJI定义类中的字段和方法:Class Person)Public string name;Public int age;Public void SayHello() (Console.WriteLine(44Hello! My name is+name);)Public string Getlnfo() (Return "Name:"+ name+ ”,Age:"+age;)1、构造方法(constructor)构造方法的主要作用是完成对象的初始化工作。(1)构造方法的方法名与类名相同。(2)构造方法没有返回类型,也不能写void。例如:public Person(string n,int a ) (name =n;age=a;)(3)默认(default)构造方法:用户没有定义任何构造方法,则系统会自动产生一个。Public Person;(4)对象的创建:构造方法不能显式地直接调用,而是用new来调用。(5)对象的使用:对象.字段 或者 对象方法如:Console.WriteLine(p.name);p.SayHello();2、析构方法:类名()前面不能加public等修饰语如:-Person。由于C#自动进行对象的释放,所以用户一般不定义析构方法。3、方法的重载(overloading)public void SayHello()Console.WriteLine("Hello! My name is *' + name );public void SayHello( Person another ) aConsole.WriteLineC'Hellb/' + another.name+ "! My name is " + name );方法的签名:方法名及参数个数及类型构成(参数名不算)4、使用thisthis指这个对象本身,常用于:(1)访问这个对象的字段及方法(VS会智能提示)(2)区分字段与局部变量Public Person(int age,string name) (this.age=age;this.name=name;)(3)用于构造方法调用另一个构造方法,注意位置(4)public PersonO: this(O,) 没有参数的Person ()构造方法调用有年龄姓名的构造方法 ( 构造方法的其他语句使用属性、索引的示例:(属性:存储、访问字段的方法;索引:对字段内容下标访问)A、使用属性 button 1.Text:buttonLText="说你好”;含义相当于 button 1 .SetText(“说你好”);String s= button 1 .Text; 含义相当于 s=button 1 .GetText();B、使用属性 string s=,abcde),;求出长度:s.Length;含义上相当于s.GetLength();使用索引slrings="bcde”;求出第0个字符:s0,含义上相当于s.Gel(0)1、属性(property)的书写(对字段的get/set访问)private string _name;public string Name (getreturn _name;_name=value;)在C#3以上版本中可以简写为:public string Nameset;get;2、对属性进行访问E.g:Person p=new Person();p.Name=,Li Ming”;Console. WriteLine(p.Name);编译器产生的方法是:Void set_Name(string value);string get_Name();3、属性与字段的比较由于属性实际上是方法,所以属性可以具有优点:(1)可以只读或只写:只有get或set (字段无法做到)(2)可以进行有效性检查:if“(字段是变量,无法做到有效性检查)(3)可以是计算得到的数 public string Infogetreturn "Name:"+Name+”,Age:"+Age;)灵活(4)可以定义抽象属性4、索引器(Indexer)修饰符类型名this参数列表一定意义上口也是一种方法,口当方法名/ get (/5、使用索引:对象名参数 编译器自动产生两个方法,以供调用:T get_Item(P);Void set_Item(P,T value);6、属性和索引的比较属性索引器通过名称标识通过参数列在进行标欣 % 通过简单名称来访问通过口运算符来访问1 可以用static修饰不能用static修饰y -属性的get访问器没有 参数索引的get访问器具有与索引相同的参2 列表in除value参数外,索引的set访问器还引相同的参数列表属性的set访问器包含 陷式value参数实例:用索引获取一个记录中的各项using System;class IndexerRecordprivate string data = new string 6)private string keys = -Author", -Publisher", "Title",-Subject", MISBNW, -Comments"注:程序中用了两种方法来索引:一是整数作下标,二是字符串(关键词名)作下标public string this int idx setif( idx >= 0 && idx < data.Length ) data idx = value;get(if( idx >= 0 && idx < data.Length ) return data idx ;return null;)public string this string key (set(int idx = FindKey( key );this idx = value;return this FindKey(key);)private int FindKey( string key ) for( int i=0; i<keys.Length; i+) if( keysi = key ) return i;for( int i<keys.Length; i+) if( keysi = key ) return i;return -1;)static void Main() IndexerRecord record = new IndexerRecord();record 0 = "马克吐温”;record 1 = "Crox出版公司”; record 2 ="汤姆-米亚市险记”; Console.WriteLine( record "Title"); Console.WriteLine( record *Author"); Console.WriteLine( record "Publisher");)第四讲c#语言高级特性4.1 委托(delegate)函数也能当变量委托实际是个函数指针,也就是对函数原型的一种包装。函数作为变量进行调用。类型(引用类型)更安全;功能更强大,有多播功能,多个函数可以+=加到一个delegate 里面,从而实现一次调用多个函数的功能。1、(1)委托的声明Public delegate double MyDelegate( double x);(2)委托的实例化MyDelegated d2 = new MyDelegate(obj.myMethod);(3)委托的调用委托变量名(参数列表):d2(8.9)2、C#4.0以上版本定义了很多委托(1) Action<Tl,T2>带参数,返回值为void(2) Func<Tl,T2,Tresult>;带多个参数,有返回结果如:new Func<double,double>(Math.Sin); 参数 double,返回值也为 double3、委托的合并多播 M ultiCastDelegate一个委托实例可以“包含”多个函数:调用委托,就是调用其中多个函数:多个函数间的先 后顺序是没有意义的,返回值也就没有太多意义。运算符+、一、+=、-=:动态地增减其中的函数,提高程序的灵活性。4、委托的转换与相等委托也是一种类型,委托的转换按声明的名称判断。如:delegate void D(int a);与delegate void E(int a);不能互相转换或加减。委托的相等:按内容(即其中“包含的函数”)来判断,有点像两个字符串的“相等” 与否的判断。实例:求函数积分using System;delegate double Fun( double x );public class Delegatelntegral public static void Main() Fun fun = new Fun(Math.Sin);double d = Integral( fun, 0, Math.PI/2, le-4 );Console.WriteLine( d );Fun fun2 = new Fun( Linear );double d2 = Integral( fun2, 0, 2, le-3 );Console.WriteLine( d2 );Rnd rnd » new Rnd();double d3 = Integral( new Fun(rnd.Num), 0, 1, 0.01 );Console.WriteLine( d3 );static double Linear( double a ) (return a*2+l;)class Rnd Random r = new Random();public double Num( double x ) (return r.NextDouble();)static double Integral(Fun f, double a, double b, double eps)/ 积分计算 (int n,k;double fa,fb,h,tlJp,sJxJt=0;fa=f(a); fb=f(b);/迭代初值n=l:/迭代初值n«l;h=b-a;tl=h*(fa+fb)/2.0;p«double.MaxValue;/迭代计算while (p>=eps)(s=0.0;for (k=0;k<=n-l;k+)(x=a+(k+0.5)*h) s«s+f(x)t=(tl+h*s)/2.0;p=Math.Abs(tl-t);tl«t;n=n+n;h=h/2.0;return t;示例:函数绘图nanespace TestwinIII <summary>III Summary descripticxi for Forml.Ill /summary)public class Forml : System.Windows.Forms.Form private System.Windows.Forms.Button buttonl;III <summary>III Required designer variable.Ill </summary>private System.ComponentModel.Container components = null;public Forml() / Required for Windows Form D

    注意事项

    本文(第 二 讲 C#语言基础.docx)为本站会员(文***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开