A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© springD 中级黑马   /  2015-11-24 13:32  /  821 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 springD 于 2015-11-24 13:39 编辑

输入一个年份求闰年,我自己的思路和谭浩强老师C语言课本的思路不太一样,但我觉得我的思路也是对的,请大家指点。我的思路:


课本思路:


我的code:

#include <stdio.h>
int main()
{
    int year;
      printf("请输入一个年份\n");
    scanf("%d",&year);
    //能被400整除的年份为闰年
    if(year%400==0)
       printf("%d 是闰年\n ",year);
    else
       {
        if(year%100!=0)
          {
            //不能被400整除,不能被100整除,但能被4整除的年份为闰年
            if(year%4==0)
                printf("%d 是闰年\n",year);
            //不能被400整除,不能被100整除,也不能被4整除的年份不是闰年
            else
                printf("%d 不是闰年\n",year);
           }
          //不能被400整除,能被100
         else
          printf("%d 不是闰年\n",year);
        }
}



谭老师code:
#include <stdio.h>
int main()
{
    // 利用if(1)恒真,f(0)恒假,因此定义一个value
    int year,value;
    printf("请输入一个年份\n");
    scanf("%d",&year);
    //不能被4整除的年份不是闰年
    if(year%4!=0)
       value = 0;
    else
      {
        //能被4整除,不能被100整除的年份是闰年
        if(year%100!=0)
            value = 1;
        else
          {
           //能被4整除,能被100整除,能被400整除的年份是闰年
           if(year%400==0)
               value = 1;
           //能被4整除,能被100整除,不能被400整除的年份不是闰年
           else
               value = 0;
          }
      }
    //value=1为真,value=0为假
    if(value)
        //为便于显示,此处不加"\n"
        printf("%d是",year);
    else
        printf("%d不是",year);
    //接上一部分输出
    printf("闰年");
}


请问我的算法是否正确,我运行起来没有问题。


5 个回复

倒序浏览
代码倒是没问题
但是 if(year%400==0)  你这句话的右括号是中文的有括号..........
回复 使用道具 举报
不错!!!!!!!!!!!!!!!!!
回复 使用道具 举报
我来敲个代码,可以循环执行。
#include <stdio.h>
int main()
{     int year;      while(1)
{     printf("请输入一个年份\n");
}     scanf("%d",&year);      if(0==year%400){     printf("%d 是闰年\n ",year);
}     else if(0!=year%100&&0==year%4)
{     printf("%d 是闰年\n ",year);
}     else
{     printf("%d 不是闰年\n",year);

}
}     return 0;
}


回复 使用道具 举报
1.通常情况下
  课本思路:  被4整除 -> 不被100整除 结束
  你的思路      不被400整除 ->  不被100整除  ->  被4整除   结束

  你过于关注特例 被400整除的情况了。
  1. #include <stdio.h>

  2. int y_4,y_100,y_400;
  3. int t_4,t_100,t_400;

  4. int main()
  5. {
  6.     //楼主思路
  7.     for(int i=1;i<=400;i++)
  8.     {
  9.         y_400++;
  10.         // 被400整除,闰年  结束本轮循环
  11.         if( i % 400 != 0)
  12.         {
  13.             y_100++;
  14.             //被100整除,非闰年  结束本轮循环
  15.             if(i % 100 != 0)
  16.             {
  17.                 y_4++;
  18.                 if( i % 4 ==0)
  19.                 {
  20.                 }
  21.             }
  22.         }
  23.     }

  24.     //课本思路
  25.     for(int i = 1;i<= 400;i++)
  26.     {
  27.         t_4++;
  28.         //不能被4整除,非闰年,结束本轮循环
  29.         if( i % 4 == 0)
  30.         {
  31.             t_100++;
  32.             // 被4整除,不被100整除,闰年,结束本轮
  33.             if(i % 100 == 0)
  34.             {
  35.                 t_400++;
  36.                 if(i % 400 == 0)
  37.                 {
  38.                 }
  39.             }
  40.         }
  41.     }

  42.     printf("y_4 = %d , y_100 = %d, y_400 = %d\n",y_4,y_100,y_400);
  43.     printf("t_4 = %d , t_100 = %d, t_400 = %d\n",t_4,t_100,t_400);
  44. }

复制代码


打印结果:
y_4 = 396 , y_100 = 399, y_400 = 400
t_4 = 400 , t_100 = 100, t_400 = 4
回复 使用道具 举报
我感觉效率不高。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马