《学习情景2控制流程.ppt》由会员分享,可在线阅读,更多相关《学习情景2控制流程.ppt(61页珍藏版)》请在三一办公上搜索。
1、,学习情景2编程基础,本章任务,实现输出学员信息。实现学员成绩计算。实现根据时间不同问好。实现打印直角三角形。实现考试管理系统学生类与教师类的设计。优化考试管理系统学生类与教师类的设计。,本章目标,掌握Consloe类进行控制台输入输出。掌握逻辑运算符。掌握C#中的条件判断语句。掌握C#循环语句。掌握类的封装与构造方法的编写。理解类的继承。掌握方法重载、重写。,C#中的变量2-1,回顾:Java 中常用的数据类型有哪些?,C#中的变量2-2,变量命名规则:组成:52个字母(A-Z,a-z),10个数字(0-9),下划线(_)开头:字母或下划线不能是关键字,C#变量命名编码规范Camel 命名法
2、:首个单词的首字母小写,其余单词的首字母大写。例如 myName,C#中的注释,回顾:Java 中的注释有哪些?,Console 类,向控制台输出:Console.WriteLine()方法输出后换行Console.Write()方法输出后不换行从控制台读入:Console.ReadLine();返回值为string类型,Console.WriteLine(Hello MyC#.NET);Console.ReadLine();,示例1中的核心代码:,控制台类,向控制台输出,Console.WriteLine();/相当于换行,向控制台输出的几种方式,Console.WriteLine(要输出的
3、值);/输出一个值,Console.WriteLine(格式字符串,变量列表);,Console.WriteLine(Hello MyC#.NET);,string course=C#;Console.WriteLine(course);Console.WriteLine(我的课程名称是:+course);Console.WriteLine(我的课程名称是:0,course);,与 Java 用法相同,示例代码分析,示例关键代码回顾:,static void Main(string args)string course=C#;/课程名称 Console.WriteLine(我的课程名称是:0,
4、course);Console.ReadLine();,0:占位符依次使用0、1、2与变量列表中的变量对应可以在字符串中使用 n、t 来控制换行或制表,格式字符串,变量列表,从控制台输入,读取一行,返回一个字符串 string 类型,读取整数,string name=Console.ReadLine();int age=int.Parse(Console.ReadLine();,Console.ReadLine();,int.Parse(Console.ReadLine();,表示将字符串转换为整数,简单综合应用,输入2名学员的信息,包括姓名、年龄,输出到控制台要求:两种方式输出第一种,使用+
5、连接输出第一个学员的信息第二种,使用格式字符串输出第二个学员的信息,综合应用示例代码分析,/输入第一个学员信息Console.WriteLine(请输入第一个学员的姓名:);name1=Console.ReadLine();Console.WriteLine(请输入第一个学员的年龄:);age1=int.Parse(Console.ReadLine();/输入第二个学员信息/输出学员信息Console.WriteLine(第一个学员的姓名+name1+,年龄+age1+岁);Console.WriteLine(第二个学员的姓名0,年龄1岁,name2,age2);,+连接输出,格式字符串输出,
6、示例3关键代码回顾:,输入,小结,static void Main(string args)int num1;int num2;num1=int.Parse(Console.ReadLine();num2=int.Parse(Console.ReadLine();Console.WriteLine(0+1=2,num1,num2,num1+num2);,输入2个整数,输出两个数的和,C#中的条件判断,C#与 Java 中的条件判断语句对比:,嵌套 if 语法,if(表达式1)if(表达式2)/表达式2为真时执行 else/表达式2为假时执行 else/表达式1为假时执行,嵌套 if:if 块中
7、又嵌入 if,switch 结构对比,Java 与 C#中的 switch 语句对比,switch(int/char表达式)case 常量表达式1:语句1;break;/可以没有 case 常量表达式2:语句2;break;/可以没有 default:语句n;,Java,switch(int/char/string表达式)case 常量表达式1:语句1;break;/必须有 case 常量表达式2:语句2;break;/必须有 default:语句n;break;/必须有,C#,使用 switch 示例,输入一个时间(整数)在6-10点之间,输出“上午好”在11-13点之间,输出“中午好”在1
8、4-18点之间,输出“下午好”其他情况输出“休息时间”,关键代码,static void Main(string args)Console.WriteLine(请输入当前的时间:);string time=Console.ReadLine();/接受输入 switch(time)/根据时间输出 case 6:case 7:case 8:case 9:case 10:Console.WriteLine(上午好);break;case 11:case 12:case 13:Console.WriteLine(中午好);break;case 14:case 15:case 16:case 17:ca
9、se 18:Console.WriteLine(下午好);break;default:Console.WriteLine(休息时间);break;,输出结果,C#中的 switch 结构小结,条件判断的表达式类型 整型或字符串break 语句的要求:每个 case 都有 breakdefault 也要有 break特殊情况:,/示例6中的代码string time;switch(time)case 6:case 7:case 8:case 9:case 10:Console.WriteLine(上午好);break;/default:Console.WriteLine(休息时间);break;
10、,case 中没有其他语句时,不需要break语句,小结,输入一个时间如果是6点输出“该起床了”如果是12点输出“该吃饭了”否则输出“该睡觉了”使用 switch 语句实现,string time=Console.ReadLine();/输入时间switch(time)/判断 case 6:Console.WriteLine(该起床了);break;case 12:Console.WriteLine(该吃饭了);break;default:Console.WriteLine(该睡觉了);break;,总结,怎样向控制台输出信息?怎样从控制台读入信息?C#和 Java 中的 switch 语句有
11、什么不同?,C#中的循环迭代,回顾:Java 中的循环语句有哪些?执行过程怎样?,foreach 循环结构,foreach循环一般用于遍历整个集合或数组,foreach(元素类型 变量名 in 集合或者数组名)/语句,输入一个字符串,输出其中的每个字符,关键代码分析,static void Main(string args)Console.WriteLine(请输入一个字符串:);/输入提示/从控制台读入字符串 string line=Console.ReadLine();/循环输出字符串中的字符 foreach(char c in line)Console.WriteLine(c);Cons
12、ole.ReadLine();,依次循环字符串中的每个字符,二重循环,某次程序大赛,3个班级各4名学员参赛,计算每个班参赛学员的平均分,共3个班级,循环3次计算每个班的平均分每班4名学员,循环4次累加总分,需要使用二重循环实现,for、while、do-while、foreach 语句可以相互嵌套,关键代码,/外层循环控制逐个计算每个班级的平均分for(i=0;i 3;i+)sum=0;/总分计数清零 Console.WriteLine(n请输入第0个班的成绩,i+1);/内层循环计算每个班级的总分 for(j=0;j 4;j+)Console.Write(第0个学员的成绩:,j+1);sco
13、re=int.Parse(Console.ReadLine();sum=sum+score;average=sum/4;Console.WriteLine(第0个班的平均分为:1分,i+1,average);,内层循环结束后,才执行外层循环的语句,二重循环进阶,用*打印一个直角三角形图案,二重循环:外层控制行数,内层打印每行的*图形特点:每行的*个数与行数相等,关键代码,int rows=5;/打印的行数int i,j;/循环变量/外层循环控制打印的行数for(i=1;i=rows;i+)/内层循环控制每行打印*的个数 for(j=1;j=i;j+)Console.Write(*);Conso
14、le.Write(n);,内层循环的结束条件与外层循环变量有关,流程控制进阶,回顾:在循环结构中,continue 和 break怎样跳转?,for()continue;,for()break;,跳出循环结构,跳到下次循环,在二重循环中会怎样呢?,流程控制进阶continue,下面红色框中代码的作用是什么?,int count=0;for(i=0;i 3;i+)/提示输入成绩 for(j=0;j 4;j+)Console.Write(第0个学员的成绩:,j+1);score=int.Parse(Console.ReadLine();sum=sum+score;if(score 85)conti
15、nue;count+;/计算平均分并输出,continue 跳出本次循环,继续下一次循环,统计成绩在85分以上的学员人数,流程控制进阶break,5个专卖店促销,每个专卖店每人限购3件衣服,可以随时选择离开,离店时要结账,for(i=0;i5;i+)/每次进一个专卖店 for(j=0;j3;j+)/每个店限购3件 if(离开这家店)break;选购一件衣服 结账,关键代码回顾,for(i=0;i 5;i+)/外层循环控制依次进入下一个专卖店 Console.WriteLine(n欢迎光临第0家专卖店,i+1);for(j=0;j 3;j+)/内层循环一次买一件衣服 Console.Write(
16、要离开吗?y/n);choice=Console.ReadLine();if(choice=y)/如果离开,就跳出,结账,进入下一个店 break;Console.WriteLine(买了一件衣服);count+;/买一件衣服 Console.WriteLine(离店结账);,break 跳出内层循环,choice=y,流程控制进阶,for()for()continue;,for()for()break;,跳出本层循环,继续执行外层循环,跳出本次循环,继续下一次循环,break 和 continue 用在二重循环中:,小结,在控制台打印出如下图案(9行9列):,提示:使用二重循环,static
17、 void Main(string args)int i,j;/循环变量 for(i=1;i=9;i+)/外层循环控制行数 for(j=1;j=9;j+)/内层循环控制每行打印的*数 Console.Write(*t);Console.WriteLine();/换行 Console.ReadLine();,总结,C#中的循环结构有哪些?break 和 continue 用在内层循环时跳转到哪里?二重循环实现冒泡排序,循环的中止条件是什么?,对象,对象是人们要进行研究的任何事物,回顾Java的对象,描述汽车的特征和行为,有各自不同的状态,类和对象,小汽车,类的实例化,是由类具体化对象,类,产地,
18、车体颜色,行驶,刹车,归纳一组相似对象的共性,对象,属性,方法,类描述一组相似对象的共性,类和对象的应用,类和对象的简单应用,/Car ferrari=New Car();ferrari.Run();/,类,对象,实例化对象,调用方法,类和类的成员,public class Student int age=26;/姓名 private string name;public string Name get return name;set name=value;/问候 public void SayHi(),类的成员,字段,属性,方法,类名,公有成员和私有成员,class student priv
19、ate string name;/姓名 public int age;/年龄 public string idNumber;/身份证号static void Main(string args)student myStudent=new student();myStudent.name=张三;myStudent.age=20;,私有成员,公有成员,实例化一个对象,可以访问,无法访问编译错误,在类中使用属性,private int age;/年龄public int Age get return age;set if(value 0,myStudent.Age=-20;/打印myStudent.A
20、ge=40;/打印,没有访问age,公开Age,录入非法数据,打印私有变量age,不公开age,通过公有Age访问和约束私有字段age,什么是属性,C#不直接访问类的数据通过访问器访问(get,set),class Student/姓名 private string name;public string Name get return name;set name=value;,返回name,get用于获取相应字段的值,set用于设置字段的值,只有get时:只读属性,只有set时:只写属性,get和set都存在:读写属性,属性的类型和字段类型必须一致。,给name赋值,属性的特点,private
21、 int age;/年龄public int Age get return age;set if(value 0,控制私有字段的可访问性,保护内部数据的安全,建议类内部敏感字段使用属性来控制访问,类型可以是各种数据类型,如:对象、数组等等,小结,编写考试管理系统中的Student类包含的属性年龄(0-100)不符合的设为18姓名(只读属性)爱好(读写)给属性赋值并打印出来,在类中使用方法,方法是类或对象的行为对象需要做某些事情,在类中添加方法回顾方法的定义,访问修饰符 返回类型 方法名(参数列表)/方法的主体,通过return返回值,如果返回类型是void,方法是否需要返回值?,第一学期我们学
22、习了几种参数传递方式?,方法的参数,回顾:参数传递使用值传递,参数值的更改不能保留。使用 ref 可以将参数值的更改保留out 类型参数,private static void AddScore(ref int score,out int scoreResult)if(score 50,都可以输出结果,ref侧重修改,out侧重输出,不能写成AddScore(out int scoreResult),为什么要重载,public int Sum(int para1,int para2)return para1+para2;,整形参数,返回值整型,如果想让两个string型、两个double型相加
23、,怎么做?,编写两个不同名字的方法,这样我们在进行调用时要先判断是什么类型,能否不判断直接就能相加呢?,方法的重载,同一个类中添加几个名字相同,参数与返回值不同的方法,public string Sum(string para1,string para2)return para1+para2;,public double Sum(double para1,double para2)return para1+para2;,调用时只要传递参数即可,无需判断类型,重载的方式,class Add public string Sum(string para1,string para2)public in
24、t Sum(int para1,int para2),基于不同类型参数的重载,class Add public int Sum(int para1,int para2)public int Sum(int para1,int para2,int para3),相同类型不同参数个数的重载,不允许重载方法仅仅是返回值不同,生活中的继承,卡车和巴士都是汽车,汽车,他们共有的特征来自汽车,有什么共同特征呢?,卡车,公共汽车,父类和子类,在C#中,一个类可以继承另一个类,Person,子类继承父类,父类派生子类,学员和老师类都继承Person,Student,Teacher,子类,父类,Student类
25、继承Person类Person类派生Student类,子类又叫派生类父类又叫基类,class Student:Person,继承概述,继承需要符合的关系:is-a,Student is a Person,子类继承父类的成员子类可以有自己的成员,继承父类的成员,自己特有的成员,继承是面向对象的一个重要特性,继承在类图中的表示,继承的实际应用1,班上所有的人都做自我介绍SayHi(),学员,大家好,我是某某同学,今年多少岁,喜欢什么,老师,大家好,我是某某老师,今年多少岁,工作几年了,子类中访问继承父类的公共属性,子类特有属性,继承的实际应用2,公共属性加入父类,有独自的SayHi,继承的实际应用
26、3,Teacher和Student类都继承Person,public class Student:Personpublic class Teacher:Person,public Student(string name,Genders gender,int age,string hobby,int popularity)this.Name=name;this.Age=age;this.Gender=gender;/学生类扩展的属性 this.Hobby=hobby;this.Popularity=popularity;,构造函数设置公共属性与独有属性,继承自父类的公共属性,子类扩展的属性,继承
27、的实际应用4,都有不同的SayHi方法,public void SayHi()/学生的SayHi,public void SayHi()/老师的SayHi,创建对象调用SayHi,Student zhang=new Student();Teacher jacky=new Teacher();zhang.SayHi();jacky.SayHi();,学生调用自己的SayHi,老师调用自己的SayHi,演示示例2:MySchool,base关键字,关键字base的作用调用父类的属性和方法调用父类的构造函数,public void SayHi()string message=string.Forma
28、t(大家好,我是0 同学,今年1 岁了,我喜欢2!,base.Name,base.Age,this.hobby);MessageBox.Show(message);,调用父类的属性,public Student(string name,Genders gender,int age,string hobby,int popularity):base(name,age,gender)/学生类扩展的属性 this.Hobby=hobby;this.Popularity=popularity;,this.Name=name;this.Age=age;this.Gender=gender;,调用父类的构
29、造函数,protected访问修饰符,protected访问修饰符允许子类访问,protected访问修饰符不允许其他非子类访问,父类成员,如果父类中的某个成员只允许其子类访问,public修饰,所有类都可以访问,private修饰,子类无法访问,小结,控制台程序实现汽车与卡车的继承汽车类Vehicle有一个方法vehicleRun()内容可以打印一句话卡车类Truck有一个方法truckRun()内容可以打印一句话实例化一个卡车调用汽车和卡车的方法成员要用protected修饰,汽车(Vehicle),public class Vehicle protected void vehicleRun()Console.WriteLine(汽车在行驶!);public class Truck:Vehicle protected void truckRun()Console.WriteLine(卡车在行驶!);,static void Main(string args)Truck truck=new Truck();truck.truckRun();truck.vehicleRun();,卡车(Truck),Thank You!,