4,5两篇内容可能稍微有点难度,我尽可能写好
选择结构
if else-if
if(判断条件){
要执行的代码
}
else if(判断条件){
要执行的代码
}
...
else{
要执行的代码
}
执行过程:程序首先判断第一个if所带的小括号中的判断条件,如果条件成立,也就是返回一个true,则执行if所带大括号中的代码,执行完成后,立刻跳出if else-if结构。如果第一个if所带的判断条件不成立,也就是返回一个false,则继续向下进行判断,依次的判断每一个if的判断条件,如果成立,就执行该if所带大括号中的代码,如果不成立,则继续向下判断。如果每个if所带的判断条件都不成立,就看当前这个if else-if结构中是否存在else,如果有,则执行else中所带的代码,如果没有,则什么都不执行。else可有可无。
switch-case
switch
(变量或者表达式的值){
case 值1:要执行的代码;
break;
case 值2:要执行的代码;
break;
...
default:要执行的代码;
break;
}
执行过程:程序执行到switch处,首先将括号中变量或者表达式的值计算出来,然后用这个值一次和每个case的值进行匹配,一旦匹配成功,则执行该case所带代码,执行完成后,遇到break,跳出swit——case结构。如果,跟每个case所带的值都不匹配,就看当前这个switch——case结构中是否存在default,如果有,则执行default中的语句,如果没有,则什么都不做。
注意:case的值,必须要和小括号里的变量或者表达式的值的类型一致。
以上两种同为选择结构,那么他们的同异点在什么地方呢?
很显然,他们的相同点就是都可以处理实现分支结构。而不同点在于,if else-if可以范围处理,switch-case多用来处理多条件的定值的判断,一般来说只能用于等值判断。
做几个练习来熟悉一下这两个语句
//3.提示用户输入年龄,如果大于等于18,告诉用户可以查看,如果小于10岁
//则告诉不许查看,如果大于等于10并且小于18,则提示用户是否继续查看,
//如果,输入的是yes,则提示用户请查看,
//否则提示推出,你放弃查看
Console.WriteLine("请输入年龄");
int age = Convert.ToInt32(Console.ReadLine());//定义一个变量用来存储年龄
if(age >= 18)//如果大于18岁,输入可以看
{
Console.WriteLine("看吧");
}
else if(age < 10)//如果小于10岁,让他gun
{
Console.WriteLine("滚蛋");
}
else//如果大于10岁,小于18岁,让用户选择是否看
{
Console.WriteLine("确定看吗");
string input = Console.ReadLine();
if(input == "yes")
{
Console.WriteLine("看吧");
}
else
{
Console.WriteLine("乖宝宝");
}
}
Console.ReadKey();
//输入一个成绩,给出评分
//90>成绩>=80如何改为定值?如何用switch-case语句
Console.WriteLine("请输入一个成绩");
int score = Convert.ToInt32(Console.ReadLine());
switch(score / 10)//把一个范围,变成一个定值
{
case 10://这里因为10和9的代码一致,所以可以省略
case 9:Console.WriteLine("a");
break;
case 8:Console.WriteLine("a");
break;
case 7:Console.WriteLine("b");
break;
case 6:Console.WriteLine("c");
break;
default:Console.WriteLine("e");
break;
}
Console.ReadKey();
//请用户输入年份,在输入月份,输出该月的天数,结合之前如何判断闰年来做
Console.WriteLine("请输入年份");
int year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入月份");
int month = Convert.ToInt32(Console.ReadLine());
if(month >= 1 && month <=12)//月份只有1-12,输错了显示不符合
{
int day = 0;//声明一个变量存储天数
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day = 31;
break;
case 4:
case 6:
case 9:
case 11:day = 30;
break;
default:
if((year % 400 == 0) || (year % 4 == 0 && year % 100 == 0))
{
day = 28;
}
else
{
day = 29;
}
break;
}
Console.WriteLine("{0}年{1}月有{2}天",year,month,day);
}
else
{
Console.WriteLine("输入的月份不符合")
}
Console.ReadKey();
思考一下,上面的代码执行过程中会发生什么报错??
这部分代码语法上是没有问题的,不会报错,但是程序运行过程中,会出现错误,不能正常运行。
这个时候我们需要对我们的代码进行异常捕获,防止代码在运行过程中出现错误。
异常捕获
try
{
可能出错的代码
}//try和catch之间不能有代码,必须紧密相连
catch
{
出现异常后执行的代码
}
执行过程:如果try中的代码没有出现异常,那么catch里的代码都不会执行,如果try中的代码出现异常,哪怕后边还有100行代码都不会执行,直接执行catch里的代码。
修改上题代码
Console.WriteLine("请输入年份");
try//此处用户输入的年份可能有误
{
int year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入月份");
try
{
int month = Convert.ToInt32(Console.ReadLine());
if (month >= 1 && month <= 12)
{
int day = 0;//声明一个变量用来储存天数
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day = 31;
break;
case 4:
case 6:
case 9:
case 11:day = 30;
break;
default:
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 == 0))
{
day = 28;
}
else
{
day = 29;
}
break;
}
Console.WriteLine("{0}年{1}月有{2}", year, month, day);
}
else
{
Console.WriteLine("输入的月份不符合");
}
}//try month
catch
{
Console.WriteLine("输入的月份有误");
}
}//try year
catch
{
Console.WriteLine("输入的年份有误");
}
Console.ReadKey();
最后补充一个变量的知识——变量的作用域
变量的作用域就是你能够使用到这个变量的范围,一般从声明它的那个括号开始到那个括号所对应结束的括号结束。在这个范围内,我们可以访问并使用变量,超出就访问不到了。