C++第3次实验(基础班)—选择结构程序设计(参考答案)-项目2:本月有几天

【项目:本月有几天?】

编程序,输入年份和月份,输出本月有多少天。合理选择分支语句完成设计任务。
样例输入1:2004 2
输出结果1:本月29天
样例输入2:2010 4
输出结果2:本月30天


参考解答:

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include<iostream>  
  2. using namespace std;   
  3. int main()    
  4. {    
  5.     int  year, month, days;    
  6.     cout << "请输入年、月: ";  
  7.     cin >> year >> month;  
  8.     switch(month)  
  9.     {  
  10.     case 1:  
  11.     case 3:  
  12.     case 5:  
  13.     case 7:  
  14.     case 8:  
  15.     case 10:  
  16.     case 12:   
  17.         days = 31;   
  18.         break;  
  19.     case 4:  
  20.     case 6:  
  21.     case 9:  
  22.     case 11:  
  23.         days = 30;  
  24.         break;  
  25.     case 2:  
  26.         if(year%4==0 && year%100!=0 ||year%400==0)  
  27.             days = 29;  
  28.         else  
  29.             days =28;  
  30.     }  
  31.     cout<<year<<"年"<<month<<"月共有"<<days<<"天。"<<endl;  
  32.     return 0;    
  33. }    

有同学写出的代码如下。其缺点之一在于将程序写得太长了,不够简洁,再者,即使输入的月分不是2月,也要判断是否闰年,是不是做了多余的事?

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include<iostream>  
  2. using namespace std;   
  3. int main()    
  4. {    
  5.     int  year, month, days;    
  6.     cout << "请输入年、月: ";  
  7.     cin >> year >> month;  
  8.     if(year%4==0 && year%100!=0 ||year%400==0)//闰年时的处理  
  9.     {  
  10.         switch(month)  
  11.         {  
  12.         case 1:  
  13.         case 3:  
  14.         case 5:  
  15.         case 7:  
  16.         case 8:  
  17.         case 10:  
  18.         case 12:   
  19.             days = 31;   
  20.             break;  
  21.         case 4:  
  22.         case 6:  
  23.         case 9:  
  24.         case 11:  
  25.             days = 30;  
  26.             break;  
  27.         case 2:  
  28.             days = 29;  
  29.               
  30.         }  
  31.     }  
  32.     else   //非闰年  
  33.     {  
  34.         switch(month)  
  35.         {  
  36.         case 1:  
  37.         case 3:  
  38.         case 5:  
  39.         case 7:  
  40.         case 8:  
  41.         case 10:  
  42.         case 12:   
  43.             days = 31;   
  44.             break;  
  45.         case 4:  
  46.         case 6:  
  47.         case 9:  
  48.         case 11:  
  49.         case 12:  
  50.             days = 30;  
  51.             break;  
  52.         case 2:  
  53.             days =28;  
  54.         }  
  55.     }  
  56.     cout<<year<<"年"<<month<<"月共有"<<days<<"天。"<<endl;  
  57.     return 0;    
  58. }    

有同学的解答如下:

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>  
  2. using namespace std;  
  3. int main ()  
  4. {  
  5.     int year,month;  
  6.     cout<<"                     您正在使用的是日历表"<<endl;  
  7.     cout<<"请输入年份:"<<endl;  
  8.     cin>>year;  
  9.     cout<<"请输入月份:"<<endl;  
  10.     cin>>month;  
  11.     if((year%4==0  &&  year%100!=0)||(year%400==0))  
  12.     {  
  13.         if(month==2)  
  14.             cout<<"本月有29天";  
  15.         if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)  
  16.             cout<<"本月有31天";  
  17.         if(month==4 || month==6 || month==9 || month==11)  
  18.             cout<<"本月有30天";  
  19.     }  
  20.     else  
  21.     {  
  22.         if(month==2)  
  23.             cout<<"本月有28天";  
  24.         if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)  
  25.             cout<<"本月有31天";  
  26.         if(month==4 || month==6 || month==9 || month==11)  
  27.             cout<<"本月有30天";  
  28.     }  
  29.     return 0;  
  30. }  
这种思路不错,但存在的问题是:(1)即使不是2月,也要判断闰年,多余了;(2)即使已经是2月了,并且进行了正确的赋值,一些比较仍然要做,用不着。

据此,改进的程序是:

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>  
  2. using namespace std;  
  3. int main ()  
  4. {  
  5.     int year,month,days;  
  6.     cout<<"                     您正在使用的是日历表"<<endl;  
  7.     cout<<"请输入年份:"<<endl;  
  8.     cin>>year;  
  9.     cout<<"请输入月份:"<<endl;  
  10.     cin>>month;  
  11.     if(month==2)  
  12.     {  
  13.         if((year%4==0  &&  year%100!=0)||(year%400==0))   
  14.             days=29;  
  15.         else   
  16.             days=28;  
  17.     }  
  18.     else  
  19.     {  
  20.         if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)  
  21.             days=31;  
  22.         else  
  23.         {  
  24.             if(month==4 || month==6 || month==9 || month==11)  
  25.                 days=30;  
  26.         }  
  27.     }  
  28.     cout<<"本月有"<<days<<"天"<<endl;  
  29.     return 0;  
  30. }  

猜你喜欢

转载自blog.csdn.net/macrohui2017/article/details/70331972