流光 发表于 2021-12-2 09:36

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天
}

zck1 发表于 2021-12-2 10:28

不错不错,学习了

zhchxu123 发表于 2021-12-2 10:30

建议直接用英文,year,这样比较习惯

987fw 发表于 2021-12-2 11:12

怎样算从今天排除星期六星期天后,往后推100天后的日期?以及与今天相隔多少天?相隔多少天要计算星期六星期天。

gaoyingjie123 发表于 2021-12-2 11:29

学习永无止境 我也想要学习 希望大佬分享呀
页: [1]
查看完整版本: C语言学习100列之004