程序设计之二:测试你活了多少天(C)

今天看到一个网页,其功能是计算一个人从出生到今天,共有多少天,然而多次尝试,均提示输入格式错误,便萌生了自己用C语言写这个程序的想法。

本程序实现的基本思想:采用控制台方式输入生日,并将该数据赋给一个结构体变量YearStart。计算这个日期距1900年的天数。同时调用系统函数,获得系统时间,将其赋给另一个结构体变量YearEnd,并计算它距1900年的天数。最后将后者减去前者,得到的数据便是生日那天据今天的天数。

运行结果举例:

以下是我的程序代码:

// 测试你活了多少天.cpp : 定义控制台应用程序的入口点。
//
/*
********************************************************
*作者:钩鸿踏月,2011年3月20日
*版本:1.0——2011年3月20日
*	   1.1——2011年8月28日
********************************************************
*/
#include "stdafx.h"
#include <conio.h> 
#include <stdlib.h> 
#include <time.h> 

//定义结构体Date,声明相关成员,并声明两个变量
struct Date
{
	int year;
	int month;
	int day;
}YearStart,YearEnd;
int main()
{
	int i;//变量用于年份的循环
	int	sum=0,s=0;//保存起始年份至1900年份的天数
	int	sum1=0,s1=0;//保存系统年份至1900年份的天数
	int month[13];//该数组用来保存输入年份和当前年份的月份数列
	int	sumday[13];//用来保存本月初至年初天数
	int	monthdayr[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
	//定义闰年每个月的天数,分别保存为monthdayr[1]至monthdayr[12]中
	int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	//定义平年每个月的天数,分别保存为monthdayr[1]至monthdayr[12]中
	printf("请输入您的生日:\n");
	printf("年:");
	scanf("%d",&YearStart.year);
	printf("月:");
	scanf("%d",&YearStart.month);
	printf("日:");
	scanf("%d",&YearStart.day);
	//输入出生年月,将其分别赋给结构体变量YearStart的各成员
	struct tm *p;
	time_t timep;
	time(&timep);
	p=localtime(&timep); //取得系统时间
	YearEnd.year=1900+p->tm_year;
	YearEnd.month=1+p->tm_mon;
	YearEnd.day= p->tm_mday;//将系统时间赋给结构体变量YearEnd各成员
	for(i=1900;i<YearStart.year;i++)
	{
		if((i%4==0&&i%100!=0)||(i%100==0&&i%400==0))
			sum+=366;
		else
			sum+=365;
	}//统计输入的年份距1900年有多少天
	if((YearStart.year%4==0&&YearStart.year&100!=0)||
		(YearStart.year%100==0&&YearStart.year%400==0))
		//判断起始年份是否为闰年
	{//是闰年
		for(i=1;i<YearStart.month;i++)
		{
			month[i]=i/i;//初始化数组month中的值
			sumday[i]=month[i]*monthdayr[i];
			s+=sumday[i];//计算出month中记录的月份至年初有多少天
		}
		s+=YearStart.day;//加上日,统计本日距本年初的天数
		sum+=s;//统计该输入日期据1900年元旦的总天数
	}
	else//不是闰年
	{
		for(i=1;i<YearStart.month;i++)
		{
			month[i]=i/i;//初始化数组month中的值
			sumday[i]=month[i]*monthday[i];
			s+=sumday[i];//计算出month中记录的月份至年初有多少天
		}
		s+=YearStart.day;//加上日,统计本日距本年初的天数
		sum+=s;//统计该输入日期距1900年元旦的总天数
	}
	for(i=1900;i<YearEnd.year;i++)
	{
		if((i%4==0&&i%100!=0)||(i%100==0&&i%400==0))
			sum1+=366;
		else
			sum1+=365;
	}//统计系统年份距1900年有多少天
	if((YearEnd.year%4==0&&YearEnd.year&100!=0)||
		(YearEnd.year%100==0&&YearEnd.year%400==0))
		//判断系统年份是否是闰年
	{//是闰年
		for(i=1;i<YearEnd.month;i++)
		{
			month[i]=i/i;//初始化数组month中的值
			sumday[i]=month[i]*monthdayr[i];
			s1+=sumday[i];//计算出month中记录的月份至年初有多少天
		}
		s1+=YearEnd.day;//加上日,统计本日距本年初的天数
		sum1+=s1;//统计该系统日期距1900年元旦的总天数
	}
	else//不是润年
	{
		for(i=1;i<YearEnd.month;i++)
		{
			month[i]=i/i;//初始化数组month中的值
			sumday[i]=month[i]*monthday[i];
			s1+=sumday[i];//计算出month中记录的月份至年初有多少天
		}
		s1+=YearEnd.day;//加上日,统计本日距本年初的天数
		sum1+=s1;//统计该系统日期距1900年元旦的总天数
	}
	sum=sum1-sum;//将系统日期距1900年的总天数减去输入日期距1900年的总天数
	printf("你活了%d天\n",sum);//输出你活了多少天
	system("pause");
}

2011年3月20日星期日

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值