打印

[提问] 一道C语言基础题

一道C语言基础题

今天的上机课 老师让我们做一道题

题目是输入年月日  然后输出这一天是这一年的第几天

比如2000 3 2
是这一年的62天 这样应该怎么写  有没有什么简单的写法 我写了N长的switch 郁闷 了   
后来试了试用循环和数组  总是出错

听老师说有个同学只用的5行代码就写出来了 靠  我想知道他是怎么写的 当时忘了问他了  不知道大家有没有什么办法
if (a != a) {
System.out.println("你太有才了");
}

TOP

对于C语言不太熟
不过我认为这个题
除了2月份的天数会有点变化(判断所输年份是否为润年),再决定天数是否加一
其余几个月的天数都是固定的!只要赋个初值就行了。
然后判断所输月份
再把所输月份之前的每个月的天数之和 加上所输入的日子
应该就行了!应该就几行可以搞定的吧!!

TOP

你可以写写试试啊  

然后判断所输月份
再把所输月份之前的每个月的天数之和 加上所输入的日子


就是这一个句子我写了好多行。。 有的天数是30 有的是31
if (a != a) {
System.out.println("你太有才了");
}

TOP

那我回去后去试试
如果楼主想到好的方法的话希望能共享下!!

TOP

请自觉加上代码框!Christopher
复制内容到剪贴板
代码:
#include <stdio.h>
int whichday(int ,int);
/* 结构 date */
struct date
{
        int day;
        int month;
};
void main()
{
        struct date d1;
        int l;
        char ch;
        do{
        printf("请输入某天日期值(月,日):");
        scanf("%d,%d",&d1.month,&d1.day);
        
                if(!(d1.month>=1 && d1.month<=12 && d1.day >= 1 && d1.day <= 31))
                {
                        printf("\n无效日期,程序退出!\n");
                        //        exit(0);                                
                }
                l=whichday(d1.month,d1.day);
                printf("这是今年的第%d天",l);
                fflush(stdin);
                printf("是否继续?(Y/N)");
                scanf("%c",&ch);
        }while(ch=='Y' || ch=='y');
}
int whichday(int month,int day)
{
        int sz[13]={31,28,31,30,31,30,31,31,30,31,30,31};
        int total=0,i,L,count=0;
        
                        /*if (month==1)
                        {
                                count=day;
                                return(count);
                        }
                        else*/
                                for (i=0;i<month;i++)
                                {
                                        total+=sz[i-1];
                                }
                                L=total+day;
               
                return(L);
}
               
不知道有没有错!!!

[ 本帖最后由 Christopher 于 2007-3-20 20:36 编辑 ]
本帖最近评分记录
http://blueice.tech.topzj.com/

TOP

呵呵``没写注释应该看得懂吧
http://blueice.tech.topzj.com/

TOP

#5的程序有错误判断,但2月都按28天算的, 显然是不对的,下面我给过正确的算法:
以下代码在"创天中文VC++"中编译通过
复制内容到剪贴板
代码:
#include <stdio.h>
void main(){
int yy,mm,dd;
scanf("%d%d%d",&yy,&mm,&dd);
mm-=1; /*因为当月的天数可能只有几天,所以要从前一月算起*/
if(mm>7){ /*8月后的大小月不一样*/
   dd+=31*4+30*3;
   mm-=7;
}
if(mm>0){
   if(mm % 2!=0){
      dd+=(30+31)*mm/2;/*偶数个月的算法*/
   }else{
      dd+=30*(mm-1)/2+31*(mm+1)/2;/*奇数个月的算法*/
   }
}
if(mm>1) dd-=2;/*月份包含2月就要减2天*/
if(((yy % 4==0)&&(yy % 100!=0)||(yy % 400==0))&&mm>0) dd+=1; /*因为前面算的是减2天,所以闰年再加一天*/
printf("%d",dd);
}
说实话,我真想知道那个5行的代码是咋写的。

[ 本帖最后由 编程小猪 于 2007-3-20 18:02 编辑 ]

TOP

我汗 有点晕  我也不知道那个5行是怎么写的 我们老师还特意表扬他了  说他怎么也想不到这个同学居然会想出来那种方法。  他自己也没有想出来。
if (a != a) {
System.out.println("你太有才了");
}

TOP

扣啊 你不说要回家休息 一段时间 学习C么!…… 都走了 职务还不给我干嘛

还有你写了30行 是因为你的想的太多了 某些很简单的事 不要把它想的太复杂了!!!

[ 本帖最后由 地狱幽灵 于 2007-3-20 20:47 编辑 ]
###################################
#        0day.Research.Center
#     http://www.security0rc.cn/
#
#      
###################################

TOP

日  别乱搞 小心我扣你分!
if (a != a) {
System.out.println("你太有才了");
}

TOP

Processed in 0.045854 second(s), 6 queries, Gzip enabled.