要求:
输入一个日期,如“ 2017 6 15 ”,计算这一天是这一年的第几天(1月1日是第一天)并输出。假设输入的都是合法的日期,但别忘了考虑闰年的情况。
相关知识
if 语句会根据对某个条件的判断结果,将程序的流程分为两支。将程序分为多个分支的语句:
if-else 嵌套
switch 语句
if-else 嵌套
多路分支的第一种实现方法就是使用 if-else 嵌套,即在 if 分支和(或者) else 分支中再嵌套 if-else 语句。
例如:
cin >> angle; // 输入角度
if (angle % 90 == 0)
{
// if-else嵌套
if (angle % 180 == 0)
cout << "线段在X轴上" << endl;
else
cout << "线段在Y轴上" << endl;
}
else
cout << "线段在象限" << angle / 90 + 1 << endl;
该程序计算输入的角度 angle 落在哪个象限或者哪个轴上。当输入的角度是90的倍数时(angle % 90 == 0为真),有两种情况,或者在X轴上,或者在Y轴上,所以需要其它条件(angle % 180 == 0)再次判断进行区分处理。
上面程序通过 if-else 嵌套实现了三路分支。
switch 语句
另一种实现多路分支的方法是使用 switch 语句, 格式如下:
switch(<条件表达式>)
{
case <常量表达式1>:
<语句序列1>;
case <常量表达式2>:
<语句序列2>;
……
case <常量表达式n>:
<语句序列n>;
default:
<语句序列n+1>;
}
其中,switch
、case
和 default
都是 C++ 的关键字。<条件表达式>
是值为整型的表达式;每个 case
对应一个分支处理;default
分支为默认处理分支;<常量表达式1>
……<常量表达式n>
都是值为整型常量的表达式;<语句序列1>
……<语句序列n+1>
都是一组语句,可以为空。
switch 语句执行流程如下:
switch 语句执行时,首先计算<条件表达式>
得到一个整型的值,将该值与<常量表达式1>
……<常量表达式n>
的值逐个进行比较,如果与其中一个相等,则执行该常量表达式下的语句序列。
需要注意的是执行完该<常量表达式>
对应的语句序列后,还将继续执行后续分支的处理语句序列,直到 switch 语句结束或者遇到跳转指令(break
);如果测试表达式的值不与任何一个常量表达式的值相等,则执行 default 分支后面的语句。
流程图如下:
switch 语句与 break
当一个 case
分支条件得到满足时,执行完该分支的语句序列后,还将继续执行后续分支的处理语句序列。如果希望执行完一个分支后就结束整个 switch 语句,可以在每个分支语句后面都加上一条 break 语句。
break
语句是一种转移语句,只能出现在 switch 结构和循环结构中。break
语句可以跳出直接包含该 break
语句的 switch
结构或循环结构(只能跳出一层),程序控制离开该 switch 结构或循环结构,执行其后继语句。
带 break 语句的 switch 语句模式如下:
switch(<条件表达式>)
{
case <常量表达式1>