《C#入门基础资料(共49页).doc》由会员分享,可在线阅读,更多相关《C#入门基础资料(共49页).doc(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上一、C#语言语法基础C#中的关键字关键字,是一些被C#规定了用途的重要单词。在VisualStudio的开发环境中,关键字被标识为蓝色,下图代码中,用红方框圈出的单词就是关键字。关键字class,这个关键字的用途是声明类。比如上面例子中,类名叫做Program。关键字namespace,这个关键字的用途是声明“命名空间”。比如上面例子中,命名空间叫做MyApp1。关键字using,这个关键字的用途是导入命名空间。比如这句:usingSystem.Text;作用是导入System.Text命名空间中的类。关键字static(静态的)、void(无返回值)、string(
2、字符串类型)。常常在Main()方法的声明中看到:staticvoidMain(string args)Main() 方法是 C# 中的特殊方法,是程序的入口,就是说,如果没有 Main ()方法,程序就无法启动。注意:你会发现,所有关键字都是由小写字母组成的,C#语言中,大小写是严格区分的。C#的注释注释,是代码中的一些“说明性文字”。注释本身不会参与程序的编译和运行,仅仅供程序员阅读。注释分为:单行注释、多行注释、文档注释。单行注释的符号是2条斜线(请注意斜线的方向),2条斜线右侧的内容就是注释,左侧的代码不会受影响。多行注释以“/*”开始,以“*/”结束,之间的内容就是注释,可以包含多行
3、。文档注释写在类、方法或属性(以后会学到)的前面,它的符号是3条斜线“/”。注意:代码中的Console.WriteLine()与之前的Console.Write()不同,后者不换行,而前者会在打印之后换行。C#的常量常量,顾名思义,就是“不会改变的量”。我们平时书写的数字(比如12.85)、字符(比如F)、字符串(比如谢谢),它们都属于“字面常量”。有一些常量既重要又容易出错,比如圆周率的值为3.,所以,我们常常会使用自定义常量。请看下面的代码:需要解释2个关键字:const关键字,表明PI是一个常量;double关键字,表明PI的类型为“双精度浮点型”(一种精度很高的数字类型)。你会发现,
4、这段代码中使用了2次圆周率(周长、面积),但是因为使用自定义常量,所以字面常量3.只书写了一次。这样做避免了重复书写导致的错误。运行效果:还有一点要特别注意:常量在声明时赋值,之后是不能修改的。C#的变量上一节我们学习了常量,但编程中使用最多的是变量,这一节我们学习变量。变量能够存储数据,并且与常量不同,变量存储的数据可以修改。比如今年18岁,明年可以变成19岁。使用变量分为3步:声明、赋值、使用。声明变量的语法:数据类型变量名;给变量赋值的语法:变量名=值;请阅读下面的代码:运行结果如此:变量的声明和赋值可以同时完成,上面代码Main()方法中的前两行可以改写为:int age=18;/声明
5、并赋值算法交换上次我们学习了变量。这次我们将了解,怎样将2个变量的值交换。交换2个变量的值,就如同交换两只杯子中的饮料:一杯满满的牛奶和一杯满满的咖啡,怎样才能互换呢?变量的交换也如此。两个变量的交换也需要一只“空杯子”,就是中间变量:string a=振刚;/第一个变量string b=文峰;/第二个变量string temp;/中间变量/第一步:将变量a赋值给中间变量temp=a;/如同牛奶倒入空杯/第二步:将变量b赋值给变量aa=b;/如同咖啡倒入牛奶杯/第三步:将中间变量赋值给变量bb=temp;/如同空杯中的牛奶倒入咖啡杯/此时交换完成,变量a存储了“文峰”,b存储了“振刚”上面三个
6、步骤就能交换2个变量,你学会了吗?这种解决实际问题的步骤就叫做“算法”,交换就是最常用的一种算法。任务声明2个变量保存男孩女孩名字,但是弄反了,编写代码交换回来:1.在第14行输入temp = boy;2.在第15行输入boy = girl;3.在第16行输入girl = temp;运行结果:编程练习假设a、b两个变量交换值,需要先声明一个中间变量temp,用temp临时存储其中变量a的值,再将变量b的值赋值给a,最后将temp赋值给b。任务这段程序中有 2 个变量,分别存储了“今天的午饭”和“明天的午饭”。现在想要“今天吃小鸡炖蘑菇,明天吃鱼香肉丝”,请在代码中补充变量交换的代码。?不会了怎
7、么办 /交换today和tomorrow的值 string temp;/中间变量 temp = today;/今天的午饭赋值给temp today = tomorrow;/明天的午饭赋值给今天 tomorrow = temp;/temp赋值给明天using System;using System.Collections.Generic;using System.Text;namespace Test class Program static void Main(string args) string today;/今天的午饭 string tomorrow;/明天的午饭 today = 鱼香肉
8、丝; tomorrow = 小鸡炖蘑菇; string temp;/中间变量 temp = today;/今天的午饭赋值给temp today = tomorrow;/明天的午饭赋值给今天 tomorrow = temp;/请在这里补充代码,实现变量today和tomorrow的交换 /打印 Console.WriteLine(我今天吃0,明天吃1。,today,tomorrow); C#的数据类型我们知道声明变量需要写出数据类型,我们今天要学习的是最常用的几种类型。字符类型char,存储用 (单引号)括起来的一个字符,例如:char sex=男;/存储性别字符串类型string,存储用“”(
9、双引号)括起来的一串字符,例如:string address=北京市宣武区牛街北口;/存储地址整数类型int,存储整数,例如:int age=23;/存储年龄双精度浮点型double,存储小数,例如:double salary=7991.63;/存储工资以上四种是最常用的数据类型,其他常用类型,我们会随着课程深入慢慢介绍。需要注意的是,某种类型的变量,只能存储这种类型的数据,否则,可能会出错。C#的类型转换上一节我们学习了4种数据类型,也提到每种类型的变量只能存这种类型的数据。可是,有时候真的需要把不同类型的值放在一起运算,比如这种:3.5+8 这时候怎么办呢?有下面2种情况:自动类型转换:2
10、种不同类型的数据运算,低精度类型会自动转换为较高精度的类型。以3.5+8为例,显然数字8的精度较低(int),而3.5的精度较高(double),所以,8会自动转换为double型,即转换为3.5+8.0进行运算,结果为11.5。请看这个例子:doubled=2;2的精度显然低于变量d的精度,所以2会自动转换为2.0然后赋值给d。再看这个例子:inti=3.0;变量i的精度低于3.0,但是由于i已经声明为int型的变量,变量的值可以变,但变量的类型可不能变来变去的,所以这条命令会出错的。强制类型转换:无法自动转换为我们需要的类型,可以用强制类型转换,比如上例可以这样完成:int i=(int)
11、3.0;数字前面的(int)表示转换的目标类型为int,3.0会被强制转换为3。需要注意,double 型强制转换为int型将失去小数部分,比如(int)2.8,我们得到的将是2。C#标识符的命名规则程序中的变量名、常量名、类名、方法名,都叫做标识符。C#有一套标识符的命名规则,如果命名时不遵守规则,就会出错。这套规则简单说有下面三条:标识符只能由英文字母、数字和下划线组成,不能包含空格和其他字符。错误的标识符声明:string$user;/错在使用了其他字符变量名不能用数字开头。错误的标识符声明:double6h;/错在用数字开头不能用关键字当变量名。错误的标识符声明:charstatic
12、;/错在用关键字static做变量名C#的算术运算符(一)计算机程序,当然少不了“计算”,要计算就必须了解运算符。今天,我们先学习算术运算符中的加、减、乘、除。加:+。加号有2个用途:当用加号连接两个数字时,会计算出这两个数字的和。比如:Console.WriteLine(9+2.2);/输出11.2另一种情况,当加号两边包含字符串的时候,会把两边的表达式连接成新的字符串。比如:Console.WriteLine(9+2.2);/输出92.2,因为2.2是字符串,所以9也被转换为9,+起的作用是连接字符串减:-。减号的作用就是减法。比如:Console.WriteLine(15-23);/输出
13、-8乘:*。乘号的作用是求2数的乘积。比如:Console.WriteLine(0.8*3);/输出2.4除:/。除号的作用是求2数相除的商。比如:Console.WriteLine(2/0.5);/输出4.0但是,2个整数相除,结果仅保留整数部分,小数部分会被舍去。Console.WriteLine(5/10);/输出0C#的算术运算符(二)这一节我们学习取余运算符。C#中的取余运算符就是%。上一节学习的除号,作用是求2个数字相除的商,而取余运算符%的作用是求两个数字相除的余数。比如:Console.WriteLine(19/5);/求19除以5的商,输出3Console.WriteLine
14、(19%5);/求19除以5的余数,输出4(商3余4)编程中,%常常用来检查一个数字是否能被另一个数字整除。比如下面的代码片段:int number = 29;Console.WriteLine(number%2);/求number除以2的余数如果输出0,表示没有余数,即number能够被2整除(是偶数);如果输出1,表示有余数,即number不能被2整除(是奇数)。C#的算术运算符(三)这一节学习两个特别的运算符+和-。+,叫做自加运算符。比如你今年18岁,明年长了一岁,用代码写出来是这样:int age=18;/今年18岁age=age+1;/明年,在今年的年龄上加1岁也可以写成这样:in
15、t age=18;/今年18岁age+;/明年,在今年的年龄上加1岁age+;与age=age+1;作用相同,都是变量的值+1。-,叫做自减运算符。同理,你今年18岁,用了XX护肤水以后,明年变成17岁了,可以这样写:int age=18;/今年18岁age-;/等同于 age=age-1;另外,age+;与age-;也可以写作+age;或-age;但请注意:如果与其他运算在同一语句中,+写在变量前面或后面,算法不一样,请看下例:Console.WriteLine(age+);作用等同于下面两句:Console.WriteLine(age);/先打印age=age+1;/后自加Console.
16、WriteLine(+age);作用等同于下面两句:age=age+1;/先自加Console.WriteLine(age);/后打印你看,运算顺序不一样吧,所以输出的结果也不会相同。C#的比较运算符比较数字大小,或者比较数字相等的运算符是比较运算符。C#中的比较运算符有:注意:表示两个值相等的“等于”是由2个“=”组成的。比较运算的结果,都是布尔类型(bool),bool类型我们是第一次提到,它表示逻辑上的真(成立)与假(不成立)。真与假用关键字true和false表示。上面程序中, x=y 不成立会返回 false , x 0);/条件表达式为true,输出TrueConsole.Writ
17、eLine(!(1 0);/用逻辑非对条件表达式取反,输出False逻辑与用来判断 2 个bool类型表达式是否同时为true。请看下面的代码:int x = 5, y = 2;/同时声明2个int型变量并赋值Console.WriteLine(x3 & y3);/判断x3和y3是否同时为true,由于y3为false,所以整个表达式为false只有当&两边的表达式均为true时,整个表达式才为true;若任意一个表达式为false,整个表达式即为false。逻辑或用来判断2个bool类型表达式中是否有一个为true。请看下面的代码:int x = 5, y = 2;/同时声明2个int型变量
18、并赋值Console.WriteLine(x3 | y3);/判断x3和y3是否有一个为true,由于x3为true,所以整个表达式为true只要|两边的表达式有一个为true,整个表达式即为true;若两边的表达式均为false,整个表达式为false。对比一下,就是说: & 运算符,两边同真才算真,一边为假就算假; | 运算符,一边为真即为真,两边同假才是假。任务逻辑运算符不容易吧?做道题看看自己懂了没有。请在第11-13行的括号里填上不同的逻辑运算符,实现如下的输出效果:C#的逻辑运算符(二)作为对上一节学习的巩固,这一节我们通过几个示例熟悉逻辑运算符的应用。第一个示例是关于逻辑与,比如
19、小张想结婚,未来丈母娘开出的条件是:存款必须过10万,必须有房子,这两条少一条都不行。既然2个条件都是“必须”做到,那就需要同时满足,适合用逻辑与连接:运行结果为:False下一个示例是关于逻辑或,比如丽丽选择男朋友的标准,要么是“工程师”,要么是“运动员”,二者居其一即可:运行结果为:TrueC#的赋值运算符前面,我们已经学过一个赋值运算符“=”,这次我们学习一下其他的赋值运算符:加赋值“+=”:先加后赋值。请看下面的例子:int x=5;x += 2;/这句等同于x=x+2;执行后,x的值为7减赋值“-=”:先减后赋值。请看下面的例子:int x=5;x -= 2;/这句等同于x=x-2;
20、执行后,x的值为3乘赋值“*=”:先乘后赋值。请看下面的例子:int x=5;x *= 2;/这句等同于x=x*2;执行后,x的值为10除赋值“/=”:先除后赋值。请看下面的例子:int x=5;x /= 2;/这句等同于x=x/2;执行后,x的值为2取余赋值“%=”:先取余后赋值。请看下面的例子:int x=5;x %= 2;/这句等同于x=x%2;执行后,x的值为1与其他运算符从左向右计算不同,赋值运算符从右向左计算。C#的运算符优先级前面我们学习了那么多运算符,如果编程中同时使用了多个运算符,到底哪一个会先运算呢?这就是优先级的问题。C#运算符的优先级请参考下面的顺序:括号。学数学的时候
21、我们就知道,要先计算括号里面的内容。C#语言也是一样,如果有多层括号,要从里向外计算。括号优先级最高。一元运算符。有些运算符两边有2个操作数,比如2+3、6%5等等,这些叫做二元运算符。只有一个操作数的叫做一元运算符,它们的优先级高于二元运算符。一元运算符包括:+(自加) 、 -(自减) 、 !(逻辑非)。*(乘)、/(除)、%(取余)。+(加)、-(减)。(大于)、=(大于等于)、 10 & (2 % 2 * 2 + 2) 2;Console.WriteLine(b);分析:首先计算优先级最高的括号,(15-8)得到7,(2%2*2+2)则需要先计算%和*,后算+,结果是2,表达式就变成了:
22、bool b=20-7*210&22;接下来优先级最高的是7*2,然后是减法,变成:bool b=610&22;继续计算两个大于号,得到:bool b=false&false;最后的结果当然是false:二、条件结构用流程图描述程序逻辑流程图是程序步骤的图形化表示方法。流程图中包括如下符号:以上图形中,流程线用来连接相邻的两个步骤;每一个程序都有且仅有一个开始和结束。以下流程图描述的是,求2个浮点数的和,后边是用C#实现:判断和分支走到岔路口,需要选择方向。编写程序也会遇到判断和分支。请看下面的流程图,判断手机账户余额是否不足10元,如果不足给出提示:这个程序在“balance10”这个步骤出
23、现了分支,“balance= price) Console.WriteLine(这月工资够买手机!); else Console.WriteLine(这月工资不够买手机!); 例如下using System;using System.Collections.Generic;using System.Text;namespace Test class Program static void Main(string args) double price = 4388;/手机的售价 double salary = 4978.67;/本月实发工资 if (salary = price) Console
24、.WriteLine(这月工资够买手机!); else Console.WriteLine(这月工资不够买手机!); 嵌套的if结构程序开发中,往往需要先判断一个条件是否成立,再判断另一个条件。比如下面的例子:验证账号是否为“admin”,如果不是则提示错误;如果是,则验证密码是否为“bj2022”:用C#实现如下:外层的if(userName = admin)会被首先判断,如果为false,就会输出“用户名错误!”;如果为true,再判断内层的if(password = bj2022)。多重if结构如果,有多个条件,其中只有一个成立,应该怎样判断呢?比如小明考试,90分以上奖励一台手机,80
25、-89分奖励一个滑板,60-79分奖励一个烧饼,60以下没有奖励,0-100的分数被划分为4档,需要做3次条件判断。如果用上一节学习的嵌套if结构完成,3层if的嵌套会使程序变得很复杂。本节我们使用多重 if 结构实现,它的基本语法为:程序运行时,将从上到下依次判断条件,若某个条件为true,则执行对应的分支,并且停止后面条件的判断。比如下面的代码,将输出“奖励一个烧饼”:else与if的匹配if.else条件结构中,如果某个分支只包含一条命令,那么是可以省略大括号的。比如上一节的练习,可以简化为:请注意,如果分支中包含2条以上的命令,是不能省略的。如果if和else比较多,又省略了,怎么判断
26、那一个if和哪一个else是一对呢?请看下面的代码:当出现多个if和else,又没有来界定范围时,请参考下面2条原则:每一个else与前面离它最近的if配对。按照这个原则,上面示例代码的两个else都与第二个if配对,这显然是不可能的,于是又有了第二个原则。多个else都与同一个if相近时,最内层的else优先配对。这样,第一个else处于内层,就与第二个if优先配对,第二个else只能与第一个if配对。上面的示例代码会输出“C”。根据这两个原则,上面的代码等同于如下的规范代码:编写条件结构时,尽可能加上 可以省掉不必要的错误和麻烦。编程练习多重 if 结构包含多个条件,每个条件对应一个分支。
27、运行时,从上到下依次判断每一个条件,当某个条件为 true ,就执行对应的分支,并且不再验证其他的条件;若所有的条件均为 false ,则执行最后的 else 分支。任务某银行营业部开展“储蓄赠礼”活动,存款达到或超过 元的送一台微波炉;存款不到 元但是达到 50000 元的送一套茶具;存款不到 50000 元但是达到 10000 元的送一袋大米;如果不到 10000 元则没有礼品。请补充代码,用多重 if 结构实现上述功能。?不会了怎么办 if (money = ) Console.WriteLine(送一台微波炉); else if(money=50000) Console.WriteLi
28、ne(送一套茶具); else if(money=10000) Console.WriteLine(送一袋大米); else Console.WriteLine(没有礼品); using System;using System.Collections.Generic;using System.Text;namespace Test class Program static void Main(string args) double money = 60000.00;/存款金额 if (money = ) Console.WriteLine(送一台微波炉); else if(money=5000
29、0) Console.WriteLine(送一套茶具); else if(money=10000) Console.WriteLine(送一袋大米); else Console.WriteLine(没有礼品); /请在这里补充多重条件判断 C#的条件运算符C#提供了一种条件运算符,能够代替简单的 if.else 结构。这种条件运算符的语法如下:条件表达式 ? 分支1 : 分支2?:就是条件运算符,可以看到它有3个操作数,所以又被称为三元运算符。它的运算逻辑是:当条件表达式为true时,执行分支1;当条件表达式为false时,执行分支2。下面的例子中,根据年龄的大小,输出“成年人”或“未成年人”
30、:因为age=17,所以条件表达式age=18的值为false,返回“未成年人”。C#的switch结构if.else之外,C#中还有一种switch条件结构,可以用来对变量进行多个分支的等值判断。语法如下:(变量)与每一个case后面的常量进行等值比较,如果相等,就执行对应的分支。执行分支以后,break关键字会使switch结构中止,不会再判断后面的常量。如果变量与所有的常量都不相同,则执行default后面的分支。下面的代码,根据运算符完成了四则运算中的一项:上面的代码,因为变量oper的值与case* 匹配,所以会输出乘积“18”。switch中的(变量)只能是3种类型:整型(如int
31、)、字符型(char)、字符串类型(string)。三、循环结构循环流程图和while循环程序连续的重复一个步骤称为“循环”。循环可以简化我们的代码,减少冗余。例如,打印 1-10 的整数,我们可以写 10 条打印语句,也可以这样:这个循环结构,会首先判断 x=10 ,条件为真时执行循环体(“输出x”和“x+”),之后,再次判断条件 x=10 ,若条件为真则继续执行循环体.若条件为假,则结束循环。简单的说,循环是由循环体(需要重复执行的命令)和循环条件组成的。运行时,先判断循环条件,若条件为true,就执行循环体一次,然后再判断条件.当条件为false时,结束循环。上面的流程图,当变量 x 累
32、加到 11 时,循环条件为false,循环就会结束。C#中,可以用while循环结构来实现:对比代码和流程图可知,while循环结构中,循环条件写在 () 中,循环体写在 中。运行结果:算法求和这一节,我们学习用循环累加的方式求和。上一节,我们曾经循环打印过 1-10 的整数,如果声明一个变量,在打印的过程中,把每一个数字都累加到变量里面,就可以得到 1-10 的和。求和算法的基本步骤:声明变量 sum 用来存储“和”。 sum 的初始值赋为 0 。循环,用变量 x 访问每一个数字,用 sum+=x 的方式累加。(即 sum=sum+x; )循环结束后, sum 中存储的即是和。运行结果如下:
33、for循环前面已经学习了while循环,C#中还有一种非常有用的for循环,特别适合于“已知循环次数”的循环。比如,循环打印3次“我能行!”,用while循环可以这样写:而用for循环这样写:可以看出来,while循环有的变量声明、循环条件、变量自加,for循环一个也不缺,但是for循环把这些跟循环次数有关的元素都放在 ( ; ; ) 中,使得中的循环体更加纯粹,程序结构更加清晰。* for循环 ( ; ; ) 中的两个分号是不能缺少的。for循环运行时,首先进行变量声明和赋值;接下来判断循环条件,若条件为true,则执行循环体一次,若条件为false,则结束循环;执行循环体后,进行变量自加。
34、然后会进入下一次循环。dowhile循环C#中,do.while循环也是一种常用的循环结构。循环结构各部分运行顺序如下:从上面的示意可以看出,do.while循环第一次执行循环体是没有经过条件判断的,也就是说会无条件的执行一次循环体,此后的逻辑顺序就与while循环相同了先判断条件,条件为true再执行循环体一次。请看下面的例子:尽管循环条件始终为false,但由于do.while循环第一次执行循环体不判断条件,所以循环体还是执行了一次。运行结果为:我们已经学习了C#中最常用的三种循环结构,下面我们小小总结一下:编程练习for 循环的特点,是把与循环有关的内容都放在(计数变量初始化;循环条件;
35、变量自加)里面,使得程序结构清楚,适合于已知循环次数的循环。任务请在第 11 行完善 for 循环结构,使得程序能够打印6行“ Yeah! ”?不会了怎么办for (int a = 1; a = 6; a+)using System;using System.Collections.Generic;using System.Text;namespace Test class Program static void Main(string args) for ( )/请填写for循环结构 Console.WriteLine(Yeah!); continue循环中可以应用continue关键字中止
36、一次循环,直接进入下一次。请看下面的例子:当程序执行到到continue;的时候,会立即停止本次循环体,直接进入下一次循环。所以,第三行输出比其他行少一些:所以,可以使用continue关键字,在循环中剔除一些特殊的数据。break前面学习switch结构时,我们曾经遇到过break关键字,break在switch结构的作用是“跳出switch结构”。break关键字还可以用在循环中,作用是“结束循环”。下面的循环代码中,当 x=3 的时候会执行break:运行结果:对比代码和运行结果可知,当执行到break,循环结束(尽管此时循环条件仍然为true)。利用break关键字和true关键字,我
37、们可以用另一种方式编写循环,下面的代码是输出1-5的整数:运行结果:嵌套循环在一个循环体中包含另一个循环,称为“嵌套循环”。当2个循环嵌套的时候,外层循环体执行一次,内层循环体执行 n 次( n 是内层循环的次数)。请看下面的例子:运行结果:比较代码和运行结果,我们发现,内层循环体执行 3 次,外层循环体执行 1 次。这就有点像钟表上的时针和分针时针走一格,分针走一圈。下面一段代码打印了一个矩形:运行效果:请思考一下,哪一个变量决定了每一行的循环次数, x 还是 y ?编程练习嵌套循环至少包含 2 层循环,外层的循环体执行一次,内层的循环体则执行 n 次,内层体被执行的总次数 = 内层循环次数 * 外层循环次数。任务要输入如下图所示图形,请用嵌套的 for 循环实现。?不会了怎么办首先,外层循环应当循环 7 次( 7 行);内层循环也应该循环 7 次(每行 7 列);内层循环后面换行。每一个字符输出时,检查是不是处于对角线的位置,如果在对角线上,就输出英文字母“O”,否则输出“.”。从左上到右下的对角线的特点是:行数=列数从右上到左下的对角线的特点是:行数+列数=8 for (int x = 1; x = 7; x+)/循环7行
限制150内