发布网友 发布时间:2022-04-25 11:37
共5个回答
热心网友 时间:2023-10-16 11:45
[回答]
1. 用C语言自己的时间函数
difftime(time_t time1, time_t time0) / 800
这样做得缺点是,这里的time_t类型,只支持到2037年
2. 自己定义函数
楼主用的方法,在实际编程里不常用,变化比较大。
下面这个方法是直接计算两个日期到公元元年的天数
然后相减,这个是实际编程时的算法,经过很多程序员的洗炼,已经被广泛使用
#include<stdio.h>
#define LEAP(y) (y%(y%100?4:400)==0) /*公元y年是否闰年*/
long totaldays(int year,int month,int day)/*公元纪年的总天数*/
{ int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int c=day,m,y=year-1;
days[2]=28+LEAP(year);
for(m=1;m<month;m++)c+=days[m];
return c+y/4-y/100+y/400+y*365L;
}
void main()
{ int y,m,d; long t1,t2;
printf("date 1: ");
scanf("%d%*c%d%*c%d",&y,&m,&d);
t1=totaldays(y,m,d);
printf("date 2: ");
scanf("%d%*c%d%*c%d",&y,&m,&d);
t2=totaldays(y,m,d);
printf("total days: %ld\n",t2-t1);
}
这应该是全部的实现方法了
楼主的方法没必要简化了
尤其是刻意追求短代码就更没有必要了
要知道,代码短了,可读性就差
两者协调好,才能称为好程序^^
悉雨辰寂
热心网友 时间:2023-10-16 11:46
#include <stdio.h>
void main()
{
unsigned int sour;
int count=0,i;
printf("Input an Hex Number:");
scanf("%x",&sour);
for(i=0;i<16;i++)
{
if(sour%2==1) count++;
sour/=2;
}
printf("The Number Contains %d 1s\n",count);
getch();
}
以上是第一题答案。
你的第二题基本上正确,希望楼主能够顺着思路,自己解决下自己的程序,培养自学能力和调试能力。
2008年4月4日16:01:58
哎,好吧,给你第二题的答案。不过,我建议你看看我的程序,然后试着对你自己的程序进行小修改。调试程序可是C语言的基本工哦……
#include <stdio.h>
main()
{
int n,i,yy,mm,dd,by,bm,bd,mdsum=0,days=0;
int md[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("Input year month day today: ");
scanf("%d%d%d",&yy,&mm,&dd);
printf("Input year month day birthday: ");
scanf("%d%d%d",&by,&bm,&bd);
for(n=by;n<yy;n++)
if(n%100!=0&&n%4==0||n%400==0) days+=366;
else days+=365;
if(by%100!=0&&by%4==0||by%400==0) md[2]=29;
for(n=1;n<bm;n++) mdsum+=md[n];
days-=(mdsum+bd);
mdsum=0;
if(yy%100!=0&&yy%4==0||yy%400==0) md[2]=29;
for(n=1;n<mm;n++) mdsum+=md[n];
days+=mdsum+dd;
printf("You have come here for %d days!",days);
getch();
}
热心网友 时间:2023-10-16 11:46
我没有改你的输入语句,如果改了会更短一点。
#include <stdio.h>
void main()
{
int i,j,t=0,day,Y1,M1,D1,Y2,M2,D2;
printf("\t*********your life lastint?*********\n");
printf("please put your birthday year:\t\n");
scanf("%d",&Y1);
printf("请输入您的出生月份:\t\n");
scanf("%d",&M1);
printf("请输入您的出生日号:\t\n");
scanf("%d",&D1);
printf("请输入当前年份:\t\n");
scanf("%d",&Y2);
printf("请输入当前月份:\t\n");
scanf("%d",&M2);
printf("请输入当前日号:\t\n");
scanf("%d",&D2);
for(i=Y1;i<Y2;i++)
if(i%4==0)t++;
if((Y1%4==0)||(M1>2))t--;
for(j=M1;j<12;j++)
{
if(j<=7){if(j%2==1)t++;}
else if(j%2==0)t++;
}
for(j=1;j<M2;j++)
{
if(j<=7){if(j%2==1)t++;}
else if(j%2==0)t++;
}
day=(30-D1)+(12-M1)*30+(Y2-Y1-1)*365+(M2-1)*30+D2+t;
printf("total day:%d\n",day);
}
热心网友 时间:2023-10-16 11:47
楼上写的比较简洁,也很正确
楼主写的太乱了
本来我打算帮楼主改改的,鉴于楼上说要锻炼他的自学能力,我也不费这个心了
热心网友 时间:2023-10-16 11:47
第二题有什么简单的方法吗?期待高手~