C语言学习100列之004
【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\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");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2) /*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);
getch();
}
自写代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*
//闰年366天 平年365天 多的那一天就是2月的一天,平年二月28天,闰年29天.
//1、3、5、7、8、10、12月每月31天
//4、6、11其他的月份就是三十天每月.
//2月闰年29天,不是闰年就是28天
*/
int main() {
int fun_yuefen(int,int);
int fun_run(int);
//声明作用域内函数
int nian, yue, ri, sum = 0;//年:nian 月:yue 日:ri 总天数:sum
printf("请输入:年-月-日(不加0):\n举个栗子:2021-5-12\n");
scanf("%d-%d-%d", &nian, &yue, &ri);
for (int i = 1; i < yue; i++)
{
sum += fun_yuefen(nian, i);//月份累计
}
sum += ri;// 日累加
printf("这一年已经过去%d天", sum);
return 0;
}
//判断闰年函数
int fun_run(int n) {
if (n % 400 == 0) { return 1; } //命中闰年规则被400整除,返回成功状态1
else if (n % 4 == 0 && n / 100 != 0) { return 1; } //命中闰年规则被4整除,但是不能被100整除,返回成功状态1
else { return 0; }//未命中,返回成功状态0
}
int fun_yuefen(int nian, int yue) {
if (yue == 2)// 优先判断 传入的参数是不是2月份
{
if (fun_run(nian) == 1) { return 29; }//判断是不是闰年 闰年 2月份29天
else { return 28; }//平年 2月份28天
}
else if (yue == 4 || yue == 6 || yue == 11) { return 30; }//4、6、11每月固定30天
else { return 31; }//1、3、5、7、8、10、12月每月31天
} 不错不错,学习了 建议直接用英文,year,这样比较习惯 怎样算从今天排除星期六星期天后,往后推100天后的日期?以及与今天相隔多少天?相隔多少天要计算星期六星期天。 学习永无止境 我也想要学习 希望大佬分享呀
页:
[1]