笔记与心得:黑马程序员C#40课基础知识集合(三)
21、while
while(条件) //条件叫:循环条件 { 要循环执行的N条程序; //循环体 }执行过程:
1.先判断循环条件,如果条件为ture,则转向2,如果条件为false,则转向3
2.执行循环体,循环体执行完后,转向1
3.跳出循环,循环结束
int i = 0; while (i < 5) { Console.WriteLine("下次考试一定要细心!"); i++; } Console.ReadKey();
22、复习-作业讲解
int i = 0; while (i < 100) { Console.WriteLine("欢迎来到传播智客学习!"); i++; } Console.ReadKey();2.输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩
Console.WriteLine("请输入你们班有多少人?"); int count=Convert.ToInt32(Console.ReadLine()); int score=0;//存用户输入的分数 int i=0; int sum = 0;//用于存总成绩 while (i<count) { Console.WriteLine("请输入第{0}个学生的成绩",i+1); score = Convert.ToInt32(Console.ReadLine()); sum = sum + score; //sum+=score; i++; } Console.WriteLine("本班共有{0}人,总成绩为{1}分,平均成绩为{2}分",count,sum,sum/count); Console.ReadKey();3.老师问学生,这道题你会做了吗?如果学生答"会了(y)",则可以放学,如果学生不会做(n),则老师再讲一遍,再问学生是否会做了......
-知道学生会了为止,才可以放学.
-直到学生会或老师给他讲了10遍还不会,都要放学
Console.WriteLine("这道题你会做了吗?(y/n)"); string answer=Console.ReadLine(); int i = 0; int b = 0; while(answer != "y" && answer != "n"&&b<1) { Console.WriteLine("输入错误!请重新输入!这道题你会做了吗?(y/n)"); answer = Console.ReadLine(); b++; } while(answer=="n" && i<10) { Console.WriteLine("老师讲一遍题!"); i++; Console.WriteLine("这道题你会做了吗?(y/n)"); answer = Console.ReadLine(); } Console.WriteLine("你可以放学了!"); Console.ReadKey();
4.2006年培养了学院8万人,每年增长25%,请问按此增长速度,到哪一年培训学员的人数将达到20万人?
int year = 2006; double stu = 80000; while(stu<=200000) { stu = stu * 1.25; //计算人数增加25%的值 year++; } Console.WriteLine("到{0}年后人数达到20万",year); Console.ReadKey();
语法:
do {循环体} while(条件);执行过程:
1.执行循环体,执行完循环体转向2
2.判断条件是否成立,如果条件为ture,则转向1.如果条件为false,则转向3
3.跳出循环,循环结束
假如循环提交一开始就不成立,对于while循环,一次都不会执行,对于to-while循环体一般至少会执行一次
while:先判断,后执行
do-while:先执行,后判断
string answer; do { Console.WriteLine("小兰表演一遍舞蹈!"); Console.WriteLine("老师你满意吗?(y/n)"); answer = Console.ReadLine(); } while (answer == "n"); Console.WriteLine("跳得不错了,回家好好休息!"); Console.ReadKey();
检测异常
try { } catch { }如果try中的代码没有出异常,则不会执行catch中的代码
如果try中的代码出现异常,则程序立即跳到catch中
Console.WriteLine("请输入张三的分数?"); try { int seore = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("in try"); } catch { Console.WriteLine("in catch"); } Console.ReadKey(); string answer; do { Console.WriteLine("小兰表演一遍舞蹈!"); Console.WriteLine("老师你满意吗?(y/n)"); answer = Console.ReadLine(); while (answer != "y" || answer != "n") { Console.WriteLine("输入错误"); } } while (answer == "n"); Console.WriteLine("跳得不错了,回家好好休息!"); Console.ReadKey();24、p61练习
int sum = 0; int i = 1; while (i <= 100) { sum = sum + i; i++; }2.要求用户输入用户名和密码,只要不是admin/888888,就一直提示用户名或密码错误,请重新输入
string userNmae; string password; bool flag=false; do { Console.WriteLine("请输入用户名?"); userNmae = Console.ReadLine(); Console.WriteLine("请输入密码"); password = Console.ReadLine(); if (userNmae != "admin" || password != "88888") { Console.WriteLine("用户名或密码错误,请重新输入!"); flag = true; } } while (flag); Console.WriteLine("登陆成功!");3.不断要求用户输入学生姓名,输入q结束
string input; do { Console.WriteLine("请输入用户姓名?"); input = Console.ReadLine(); } while (input != "q"); Console.WriteLine("程序结束.");4.不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序结束
int input; bool flag = false; { try { Console.WriteLine("请输入一个数字"); input = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("{0}的两倍是{1}", input, input * 2); flag = true; } catch { flag = false; } }while(flag) string input; int number; Console.WriteLine("请出入一个数字(q结束)"); input = Console.ReadLine(); while (input != "q") { number=Convert.ToInt32(input); Console.WriteLine("{0}的两倍是{1}",number,number*2); Console.WriteLine("请出入一个数字(q结束)"); input = Console.ReadLine(); }5.不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值
int max = 0; string input=""; int number; do { try { Console.WriteLine("请输入一个数?"); input = Console.ReadLine(); number=Convert.ToInt32(input); if(number>max) { max = number; } } catch { if (input!="end") { Console.WriteLine("输入了非法数据!"); input = "end"; } } }while(input!="end"); Console.WriteLine("你输入的最大值是"+max); Console.ReadKey();25、调试
单步运行
观察变量
26、for
语法:
for(表达式1;表达式2;表达式3;) { 循环体 }执行过程:
第1步 计算表达式1,转向第2步
第2步 计算表达式2(循环条件),如果表达式2的值为ture转向第3步.如果表达式2的值为false,转向第步
第3步 执行循环体,转向第4步
第4步 执行表达式3,转向第2步
第5步 循环结束
int i = 0; //相当于表达式1 while (i < 100) //循环条件,相当于表达式2 { Console.WriteLine("下次我一定细心!"); i++;//相当于表达式3 }一般情况下,表达式1用于定义循环变量和对循环变量赋初值
表达式2:循环条件
表达式3:用于改变循环变量的值
for (int i = 0; i < 100; i++) { Console.WriteLine("下次我一定要细心!"+i); }1.求1-100间的所有偶数和?
int sum = 0; for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { sum = sum + i; } } Console.WriteLine("1-100的所有偶数" + sum); Console.ReadKey();2.找出100-999间的水仙花数?
for (int i = 100; i <= 999; i++) { int ge = i % 10; int shi = i / 10 % 10; int bai = i / 100; if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai) { Console.WriteLine(i); } }*死循环
for (; ; ) { Console.WriteLine("死循环!"); }
for(int i = 1;i<=9;i++) { for (int a = 1; a <=9; a++) { Console.Write("{0}X{1}={2:00} ",i,a,i*a); } Console.WriteLine(); }2.输出九九乘法表(三角形)
for(int i = 1;i<=9;i++) { for (int a = 1; a <=i; a++) { Console.Write("{0}X{1}={2:00} ",i,a,i*a); } Console.WriteLine(); }3.根据6可以输出一下加法表:
0+6=6
1+5=6
2+4=6
3+3=6
4+2=6
5+1=6
6+0=6
Console.WriteLine("请输入一个值!"); bool flag = false; int a = 0; while (flag == false) { try { a = Convert.ToInt32(Console.ReadLine()); flag = true; } catch { Console.WriteLine("你刚刚输入的不是数字"); flag = false; } } for (int b = 0; b <= a; b++) { Console.WriteLine("{0}+{1}={2}", b, a - b, a); } Console.ReadKey();*判断输入的是否为数字
Console.WriteLine("请输入一个值"); bool flag = false; int a = 0; while (flag == false) { try { a = Convert.ToInt32(Console.ReadLine()); flag = true; } catch { Console.WriteLine("你输入的有误,请重新输入"); flag = false; } } Console.WriteLine("你刚才输入的值是:{0}", a); Console.ReadKey();
28、breakcontinue
int age = 0; int sum = 0; for (int i = 0; i < 5; i++) { Console.WriteLine("请输入第{0}个人的年龄", i + 1); try { age = Convert.ToInt32(Console.ReadLine()); if (age < 0 || age >= 100) { Console.WriteLine("年龄不合法!"); break; } sum = sum + age; } catch { Console.WriteLine("你输入的不是数字,程序终止!"); break; } } Console.WriteLine("这五个人的平均年龄是{0}", sum / 5); Console.ReadKey();//练习2:在while中用break实现要求用户一直输入用户名和密码,只要不是admin/888888就一直提示要求重新输入,如果正确则提登陆成功.
string userName, passWord; while (true) { Console.WriteLine("请输入用户名"); userName = Console.ReadLine(); Console.WriteLine("请输入密码"); passWord = Console.ReadLine(); if (userName == "admin" && passWord == "888888") { break; } Console.WriteLine("你输入的用户名或密码错误,请重新输入!"); } Console.WriteLine("登陆成功"); Console.ReadKey();//练习3:1-100之间的整数相加,得到累加值大于20的当前数
int sum=0; int i = 0; for (i = 1; i <= 100; i++) { sum += i; if (sum>=20) { break; } } Console.WriteLine(i); Console.ReadKey();break:
1.可以用于switch-case判断中,用于跳出switch
2.用在循环中,用于立即跳出(终止)循环
注意:用于循环中,跳出的是break所在的循环
continue
用于循环中,程序一旦执行到continue语句,立即结束本次循环(就是不再执行循环体中的continue下面的语句),直接进行下一次循环.(do-while/while直接进行下一次循环条件的判断.如果条件成立.则再次进入循环.对于for循环,先执行表达式三,再判断循环条件是否成立!)
//练习一:用while continue实现计算1到100之间的除了能被7整除之外所有整数的和.
int i = 0; int sum = 0; while (i <= 100) { i++; if (i % 7 == 0) { sum = i + sum; } } Console.WriteLine("和为{0}",sum); Console.ReadKey(); int i = 0; int sum = 0; while (i<100) { if (i % 7 == 0) { i++; continue; } sum = i + sum; i++; } Console.WriteLine("和为{0}", sum); Console.ReadKey();三元表达式
表1?表2:表3
执行过程:首先计算表达式1,表达式1应该是一个能够计算成bool类型的值,如果表达式1的值为true,则表达式2的值作为整个表达式的值,如果表1的值为false,则表达式3的值做为整个表达式的值.
表达式2和表达式3的类型一定要相同(相兼)
int a = 10; int b = 20; if (a > b) { Console.WriteLine(a); } else { Console.WriteLine(b); } int max = a > b ? a : b; Console.WriteLine(max); Console.WriteLine(a > b ? a : b); Console.ReadKey();顺序结构:语句顺序执行
分支结构:语句在满足条件下执行
if,if-else,switch-case,表1?表2:表3
循环结构:语句在满足条件下循环执行多次
while,do-while,for
跳转语句
brak,continue,goto
goto语法
goto 标签
标签:
goto myLabel; Console.WriteLine("a"); Console.WriteLine("b"); myLabel: Console.WriteLine("c"); Console.ReadKey();
语法:
const 类型 常量名 = 常量值
在定义时赋值,在其他地方不允许赋值
const double PI = 3.14; Console.ReadKey();枚举:
让我们定义一种枚举类型并且在定义这种类型时,我们要制定这个类型的所有值
语法:
enum 自己起的;类型名称{值1,值2,值3....值n};
枚举的定义,一般和类定义在同一个级别,这样,在同一个命名空间下的类就都可以使用这个枚举了
enum Gender { 男, 女 }枚举的作用:
1.限制用户不能随意复赋值,只能在定义枚举时列举的值中选择
2.不需要死记每个值是什么,只需要选择相应的值
注意:定义枚举时,值不能是int类型
枚举类型的变量都可以强制转换成一个int类型
枚举的值在定义时是有一个默认编号的,编号从0开始.
Gender sex; sex = Gender.男; Console.WriteLine((int)sex); Console.ReadKey();如果把一个字符串转换成枚举类型:
(自枚)(Enum.Parse(typeof(自枚),"带转换的字符")
30、结构
1.比如我们上课讲的为了存储一个人的信息,要声明一组变量,当我们要存储N个人的信息时,就要申明n组变量,麻烦
2.存储一个人信息的这几个变量间没有关系,容易记乱语法:
访问修饰符 struct 结构名
{ 定义结构成员 } enum Gender { 男, 女, } public struct person //定义了一个叫Person的结构 { public string name; //结构的成员 public Gender sex; //结构的成员 public int age; //结构的成员 } class Program { static void Main(string[] args) { person onePerson; onePerson.name = "zhangsan"; onePerson.age = 20; onePerson.sex = Gender.男; Console.WriteLine("我叫{0},我今年{1},我是{2}性",onePerson.name,onePerson.age,onePerson.sex); person secPerson; secPerson.name = "lisi"; secPerson.age = 26; secPerson.sex = Gender.男; Console.WriteLine("我叫{0},我今年{1},我是{2}性",secPerson.name,secPerson.age,secPerson.sex); Console.ReadKey();