C#入门学习——4

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();

最后补充一个变量的知识——变量的作用域

变量的作用域就是你能够使用到这个变量的范围,一般从声明它的那个括号开始到那个括号所对应结束的括号结束。在这个范围内,我们可以访问并使用变量,超出就访问不到了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值