switch语句中break的巧用

  大家都知道,break的作用就是终止它所在的switch语句后循环语句的执行。在这里呢,我们不去探讨break在循环里的终止作用,也不去回忆在循环里是跳出本层循环,不去研究它与continue或者return的区别。在这里,我们简简单单的谈一下,它在switch语句中的利用。

  有这样一道编程题目:输入某年某月某日三个值,判断这是这一年的第几天。一般的情况,我们会这样写代码:

#include<stdio.h>
void main()
{
    int year,month,day,num;
    printf("请任意输入年月日:");
    scanf("%d,%d,%d",&year,&month,&day);
    switch(month)
    {
        case 1:num=day;
        break ;
        case 2:num=31+day;
        break;
        case 3:num=day+28+31;
        break;
        case 4:num=day+28+31+30;
        break;
        case 5:num=day+28+31+30+31;
        break;
        case 6:num=day+28+31+30+31+30;
        break;
        case 7:num=day+28+31+30+31+30+31;
        break;
        case 8:num=day+28+31+30+31+30+31+31;
        break;
        case 9:num=day+28+31+30+31+30+31+31+30;
        break;
        case 10:num=day+28+31+30+31+30+31+31+30+31;
        break;
        case 11:num=day+28+31+30+31+30+31+31+30+31+30;
        break;
        case 12:num=day+28+31+30+31+30+31+31+30+31+30+31;
        break;
    }
    if((year%4==0&&year%100!=0)||(year%400==0))
        {
        if(num>31+28)
        num=num+1;
        }
        printf("输出的年月日为这一年的第%d天\n",num);

}

code1

  上述代码的基本思想就是先不考虑闰年和平年,以月为switch执行的判断式,逐月累加,得到结果,最后再判断闰年,天数加1.上述代码呢,也无所谓不好,但是case语句下,越到后面重复越多,累加效果月明显。那么,我们就可以这样考虑,放弃break的跳出功能,每一月都是在上一个月的基础上,加上上一月对应的天数。这样,我们便得到的下面的代码:

#include <stdio.h>
void main()
{
    int year,month,date,day = 0;
    printf("请输入年月日,用逗号分隔:");
    scanf("%d,%d,%d",&year,&month,&date); 

    switch(month)
    {
        case 12:
            day += 30;
        case 11:
            day += 31;
        case 10:
            day += 30;
        case 9:
            day += 31;
        case 8:
            day += 31;
        case 7:
            day += 30;
        case 6:
            day += 31;
        case 5:
            day += 30;
        case 4:
            day += 31;
        case 3:
            day += 28;
        case 2:
            day += 31;
        case 1:
            day += date;
    } 

    if(month > 2)
    {
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        {
            day += 1;
        }
    }

    printf("这是该年的第%d天\n",day);
}
 

Code2

  代码相比上面的,简洁不少。而且,巧用break也是你的代码较之他人有不同之处。这样的小技巧,在我们平时的代码中,应该多思考思考。

时间: 2024-08-01 20:02:40

switch语句中break的巧用的相关文章

java7 语法糖 之 switch 语句中的string

Jdk7新增的switch 语句中常量可以string类型, 例如: @Test public void test_1(){ String string = "hello"; switch (string) { case "hello": System.out.println(string); break; default: throw new IllegalArgumentException("非法参数"); } } 语法糖的背后,其实用的对待

java中switch语句中的defaul条件的位置

在java中switch语句中,每个case分支就是一个入口,如果都没有满足条件,那么将会走到default分支中.那么这个default分支的位置会不会影响到执行的流程呢? package com.app.statement; import java.util.Scanner; /**  * Created by charles on 2015/7/12.  */ public class SwitchTest {     public static void main(String[] ar

java7 switch语句中使用字符串的背后原理

先看下代码及反编译后的代码: /**  * @author doctor  *  * @time 2015年3月28日 下午3:26:06  */ public class StringForSwitch { @Rule public ExpectedException ex = ExpectedException.none(); @Test public void test_string_switch() { String result=""; switch ("docto

循环语句中break 与 continue的区别

循环语句中break 与 continue的区别 总结: 1 break; while循环break是用于永久终止循环.即不执行本次循环中break后面的语句,直接跳出循环. 2continue; while循环continue是用于终止本次循环.即本次循环中continue后面的代码不执行,进行下一次循环的入口判断. #include<stdio.h> //break; int main() { int i = 0; while (i <= 10) { if (i == 5) brea

C语言中switch...case语句中break的重要性

在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf("apple"); break; case 2:printf("banana"); break; case 3:printf("orange"); break; case 4:printf("pear"); break; cas

1.3.1 switch 语句中的 String

switch语句是一种高效的多路语句,可以省掉很多繁杂的嵌套if判断: 在Java 6及之前,case语句中的常量只能是byte.char.short和int(也可以是对应的封装类)或枚举常量,在Java 7规范中增加了String,毕竟它也是常量类型: Demo: public class CoinSwitchString { public static void main(String[] args) { printDay("Sunday"); printDay("Tue

swift switch语句中的标签语句

当我们在遍历中使用switch语句时有时需要终止整个遍历的进行而不是switch语句,那么标签语句的实现就是很有必要的 //可以使用标签来标记一个循环体或者switch代码块,当使用break或者continue时带上这个标签,可以控制该标签代表对象的终端或者执行,适合复杂真的控制流程 /* 要求在遇到异常数据时直接终止循环 */ var score = [96,83,43,101,66,70,-5,99] First:for s in score {//定义标签First switch s/1

C++中switch 语句中的变量声明和

switch 内部的变量定义: 1 int i = 1; 2 switch(i) 3 { 4 case 0: 5 string str; //error 6 int val1 = 0; //error 7 int val2; //right 8 int val3; val3 = 0; //right 9 case 1: 10 val2 = 9; 11 cout << val2 << endl; 12 } <C++ Primer> P163: 如果在某处一个带有初始值的变

9、循环语句中break和continue的使用

回顾bash编程之循环控制:for varName in LIST; do循环体done while CONDITION; do循环体done until CONDITION; do循环体done 下面学习循环控制:continue: 提前结束本次循环而开始评估下一轮:break [n]: 跳出当前循环,去执行本次循环体外的语句,n控制跳出底基层循环,默认是第一层 练习:求100以内所有偶数之和:declare -i evenSum=0declare -i i=1 while [ $i -le