只是想学C 发表于 2014-3-23 04:22:14

看了一天的视频,写了个小程序……

#include <stdio.h>

void main()
{
        int year,month,day,leap,t=0,num;
loop:printf("please input the date(XXXX/XX/XX):");
       scanf("%d/%d/%d",&year,&month,&day);
       if(day<0||day>31)
       {
               printf("error!please input angin.\n");
               goto loop;
       }
       if(year%4!=0||0==year%100&&0!=year%400)
       {
               leap = 0;
       }
       else
       {
               leap = 1;
       }
       switch(month)
       {
               
       case 12:t = t+30;
       case 11:t = t+31;
       case 10:t = t+30;
       case 9:t = t+31;
       case 8:t = t+31;
       case 7:t = t+30;
       case 6:t = t+31;
       case 5:t = t+30;
       case 4:t = t+31;
       case 3:t = t+28+leap;
       case 2:t = t+31;
       case 1:break;
       default: printf("error!please input angin.\n");goto loop;
               
       }
       num = t+day;
       printf("%d年%d月%d日是%d年的第%d天\n",year,month,day,year,num);
       
}这只是一道作业题,是计算几月几日是一年中的第几天的。运行效果如下:


小弟手痒,发着玩儿的,高手请勿拍砖哦!!

默然 发表于 2014-3-23 09:06:51

嘿嘿,不错不错

牡丹花下死做鬼 发表于 2014-3-23 09:07:50

拍砖 没实力 只能说给你看看我写的吧 可能还没你的好#include <stdio.h>

int leap(int i)
{
        if(i%4 == 0 && i%100 != 100 || i%400 == 0)
                return 1;
        else
                return 0;
}

void main()
{
      int y,m,d,i,sum = 0;
                int a = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
                int        b = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
      printf("请输入年月日(用逗号分隔):");
                scanf("%d,%d,%d",&y,&m,&d);
      if(leap(y) == 1)
                {
                        for(i=0;i<m-1;++i)
                        {
                                sum += b;
                        }
                        sum += d;
                }
                else
                {
                        for(i=0;i<m-1;++i)
                        {
                                sum += a;
                        }
                        sum += d;
                }
                printf("%d年%d月%d天是今年的第%d天\n", y, m, d, sum);
}

CL0419 发表于 2014-3-23 12:57:31

好像不怎么对,if(year%4!=0||0==year%100&&0!=year%400)
         {
               leap = 0;
         }
应该改为:if ((year%4==0 && year%100!=0) || (year%4==0))
         {
                leap = 0;
      }

如果按照你的源代码那么写的话 ,那你算一下2014/3/23,你的代码算的是82天,但实际应该是83天才对。2014年 不是闰年,那么2月才有28天,所以答案应该是2014/3/23应该是2014的第83天,但是你的是82天。你好好看看你代码

gaora203 发表于 2014-3-23 13:13:41

不错啊   顶一个

康泽 发表于 2014-3-23 16:37:58

感觉不错啊

最好是明天 发表于 2014-3-23 16:55:29

天天向上向上

只是想学C 发表于 2014-3-23 17:56:00

CL0419 发表于 2014-3-23 12:57 static/image/common/back.gif
好像不怎么对,if(year%4!=0||0==year%100&&0!=year%400)
         {
               leap = 0;


2014年1月31天,2月28天,到3/23应该是31+28+23=82天


machimilk 发表于 2014-3-23 20:23:26

如果输入2014/02/29会怎样 2014/13/20会怎样

Farmer-fn4 发表于 2014-3-23 22:07:57

嘿,不错不错{:1_1:}

只是想学C 发表于 2014-3-24 05:02:23

machimilk 发表于 2014-3-23 20:23 static/image/common/back.gif
如果输入2014/02/29会怎样 2014/13/20会怎样

第二个我想到了,用了一个GOTO语句可以跳回去重新输入。第一个……由于每天月长度不同,我还没想到怎么解决……请高手指正。。

machimilk 发表于 2014-3-24 06:14:44

只是想学C 发表于 2014-3-24 05:02 static/image/common/back.gif
第二个我想到了,用了一个GOTO语句可以跳回去重新输入。第一个……由于每天月长度不同,我还没想到怎么解 ...

先判断年,如果年正确再判断月,如果月正确 再根据每个月判断输入的日,当然2月要考虑闰的情况
页: [1]
查看完整版本: 看了一天的视频,写了个小程序……