郑州轻工业大学oj题解(c语言)1036:某年某月有多少天 switch语句经典例题

经过前面题目的洗礼,相信大家对if语句已经有一个大概的了解了。如果还没能熟练掌握if语句的建议先选择以往的文章进行学习
那么这期,不妨让我们来学习一个因果类语法的另一种表达,switch语句。
首先,让我们先来看一下switch语句的基本构造:

switch(表达式){ 
    case 常量表达式1:  语句1;
    case 常量表达式2:  语句2;
    … 
    case 常量表达式n:  语句n;
    default:  语句n+1;
}
  • 其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

简单点来说,switch()括号内填的是要判断的参数。而case后则在表达式内进行判断,例如switch(a)里 case 2 的意思等同于if(a==2),后面语句1则是这个判断成立后,要输出的值。而default的作用和if语句中的else一样。

下面来看例子:
#include
main()
{
int a;
switch(a){
  case 1:printf("2");
  default:  printf("3");
}
}
#include
main()
{
int a;
if(a==1){
  printf("2");
}
else{
  printf("3")
}
}

以上两个代码要表达的意义是一样的。
下面我们根据实际例题来使用和学习这一语句的运用。

1036:某年某月有多少天

  • 题目描述
    给你一个年份和月份,求该月有多少天
  • 输入
    一个年份(正整数),一个月份(1-12),中间有一个空格隔开
  • 输出
    该月的天数,单独占一行。
  • 参考代码:
#include
main()
{
    int a,b,c;
    scanf("%d %d",&a,&b);
    switch(b)
    {
        case 4:
        case 6:
        case 9:
        case 11: c=30;break;
        case 2:
              if(a%4==0&&a%100!=0||a%400==0)
              c=29;
              else
              c=28;
              break;
      default:c= 31;      
    }   
    printf("%d",c);
} 
  • 代码解析:
    首先我们看到题目要求判断的是某年某月有多少天。然后我们先直接想,这里面所需要判断的条件在哪里。首先是月份:4.6.9.11月是小月,是30天,并且不会随着年份变化,我们先列出来。接着是1.3.5.7.8.10.12月是大月,是31天,也不会随着年份变化,我们也先列出来,最后还有一个比较特殊的是2月,它会随着年份的改变而改变,平年28天,闰年29天,所以我们在2月分要分两个判断进行。
    表格大致如下:

4月 6月 9月 11月 : 30天
1月 3月 5月 7月 8月 10月 12月: 31天
2月: 平年:28天 闰年:29天

我们可以看到,这里面需要判断的条件是非常多的, 如果用if语句写的话,代码量会非常的多,而且容易乱,特别是2月需要判断平年和闰年,会用到if的嵌套,容易导致判断的重复和混乱,所以,在这道题里,更适合使用switch语句。

  • 由于这里的判断主要条件是月份,所以我们把定义的b作为switch的主要判断语句。因为4.6.9.11的天数都是30天,所以把这几个条件放在一起判断,当其符合其中一个时,c=30,并且break; 退出判断。然后在 b=2的时候,我们要在这里判断闰年平年。把if的判断放到case 2:里面运行。然后除了以上月份外,其他月份都为31天,所以在最后加上default:c=31; 即可。

要注意的是,switch语句中,每执行完一段语句都要在后面加上break,表明退出整个switch语句。

  • 在使用switch语句时还应注意以下几点:
    1.在case后的各常量表达式的值不能相同,否则会出现错误。
    2.在case后,允许有多个语句,可以不用{}括起来。
    3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
    4.default子句可以省略不用。

你可能感兴趣的:(郑州轻工业大学oj题解(c语言)1036:某年某月有多少天 switch语句经典例题)