经典C程序100例_04_练习记录

题目: 输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,
然后再加上5天即本年的第几天,
特殊情况,闰年且输入月份大于3时需考虑多加一天。

#include
int main() {
	int year, month, day,sum=0;
	printf("Please enter the year, month and day you need to calculate\n ");	
	scanf("%d %d %d", &year, &month, &day);
	switch (month) {
	case 1:sum = 0;
		break;
	case 2:sum = 31;
		break;
	case 3:sum = 59;
		break;
	case 4:sum = 90;
		break;
	case 5:sum = 120;
		break;
	case 6:sum = 151;
		break;
	case 7:sum = 181;
		break;
	case 8:sum = 212;
		break;
	case 9:sum = 243;
		break;
	case 10:sum = 273;
		break;
	case 11: sum = 304;
		break;
	case 12:sum = 334;
		break;
	default: printf("data error\n");
		break;
	}
	sum = sum + day;

	if(year%400==0 || (year%4==0 && year%100!=0))      //普通年能被四整除且不能被100整除的为闰年、世纪年能被400整除的是闰年
		if(month>=2)
			sum++;
	printf("it is the %dth day.", sum);
}

然后联想获取到本机时间然后进行一些处理

关于本机系统的时间获取

#include
#include 
int main()
{
	time_t timep;     //定义一个time_t 类型的变量
	struct tm *p;     //定义一个struct tm类型的指针变量
    time (&timep);    //获取time_t类型的当前时间  //利用函数time_t time ( time_t * timer )然后返回值到参数中
	//用gmtime将time_t类型的时间转换为struct tm类型的时间,//没有经过时区转换的UTC时间(北京时区需+8)
    //然后再用asctime转换为我们常见的格式 Fri Jan 11 17:25:24 2008
	
	printf("%s\n", asctime(gmtime(&timep)));       //没有经过时区转换的UTC时间
	printf("%s\n", ctime(&timep));                 //将timep转换为真实世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样

	p = localtime(&timep);         // 本地化时间(我们是UTC+8时) 
	printf("%d\n", p->tm_sec);     //获取当前秒      //取出p结构体中的tm_sec值打印出来    
	printf("%d\n", p->tm_min);     //获取当前分
	printf("%d\n", 0 + p->tm_hour);//获取当前时,这里获取本地的时间,所以无需+8
	printf("%d\n", p->tm_mday);    //获取当前月份日数,范围是1-31
	printf("%d\n", 1 + p->tm_mon); //获取当前月份,范围是0-11,所以要加1
	printf("%d\n", 1900 + p->tm_year);//获取当前年份,从1900开始,所以要加1900
	printf("%d\n", p->tm_yday);      //从今年1月1日算起至今的天数,范围为0-365
	return 0;
}

根据原题拓展:输入年月日然后计算据今日为止一共相差几年几月几天? 程序分析:需要获取本机时间,然后计算

#include
#include
int main() 
{
	time_t timep;
	struct tm* p;
	time(&timep);          
	int year, month, day, diff_year, diff_month, diff_day,temp_day=0,temp_month=0;
	p = localtime(&timep);
	printf("Please enter the year, month and day to nowtimes difference calculate \n ");
	scanf("%d %d %d", &year, &month, &day);
	if (year > (1900 + p->tm_year)|| year<= 0|| month>12|| month<=0 ||day<=0||day>=32){        //判断用户输入是否日期是否正确
		printf("please enter the year or the month or the day\n ");
	}
	else {
		if (day > (p->tm_mday)) {                                         //输入的天数大于目前系统天数
			diff_day = day - (p->tm_mday);
			temp_day++;
		}
		else diff_day = (p->tm_mday) - day;

		if (month > (1 + p->tm_mon)) {                                 //输入的月份大于目前系统天数
			diff_month = 12 + (1 + p->tm_mon) - month;          
			temp_month++;
		}
		else diff_month = (1 + p->tm_mon) - month - temp_day;
		diff_year = (1900 + p->tm_year) - year - temp_month;

		printf(" difference %dyear %dmonth %dday", diff_year, diff_month, diff_day);
	 }
	
}
/*note:判断年份之间有几个闰年
for (; year != (1900 + p->tm_year); year++) {
	if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
		diff_day++;
*/

你可能感兴趣的:(C语言练习记录)