郑州轻工业大学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<stdio.h>
main()
{
int a;
switch(a){
  case 1:printf("2");
  default:  printf("3");
}
}
#include<stdio.h>
main()
{
int a;
if(a==1){
  printf("2");
}
else{
  printf("3")
}
}

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

1036:某年某月有多少天

  • 题目描述
    给你一个年份和月份,求该月有多少天
  • 输入
    一个年份(正整数),一个月份(1-12),中间有一个空格隔开
  • 输出
    该月的天数,单独占一行。
  • 参考代码:
#include<stdio.h>
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子句可以省略不用。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容