给正在努力且上进的你点赞~

输入一个日期的年、月、日,计算并输出这天是该年的第几天。比如:2011年1月31日,是该年的第31天。

优化后:

#include <stdio.h>int main() { int day, month, year, sum, leap; printf("\n请输入年、月、日,格式为:年,月,日(2015,12,10)\n");scanf("%d%d%d", &year, &month, &day); // 格式为:2019 05  10switch (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("这是这一年的第 %d 天。", sum);printf("\n");
}

优化前:

#include "stdio.h"
main()
{int  year,month,day,days;  /*年,月,日,该年第几天 */printf("please input the year month day:");scanf("%d%d%d",&year,&month,&day);days=0;switch(month){case 1:days=day;  break;case 2:days=day+31; break;case 3:days=day+31+28;break;case 4:days=day+31+28+31;break;case 5:days=day+31+28+31+30;break;case 6:days=day+31+28+31+30+31;break;case 7:days=day+31+28+31+30+31+30;break;case 8:days=day+31+28+31+30+31+30+31;break;case 9:days=day+31+28+31+30+31+30+31+31;break;case 10:days=day+31+28+31+30+31+30+31+31+30;break;case 11:days=day+31+28+31+30+31+30+31+31+30+31;break;case 12:days=day+31+28+31+30+31+30+31+31+30+31+30;break;}if((month>=3&&month<=12)&&(year%4==0&&year%100!=0)||year%400==0)days+=1;//闰年二月是29天,把switch语句里的28替换成29,即整体加一 printf("days=%d",days);
}



有伙伴对优化前的代码不懂,故解读如下:

/*以2021年2月有28天为例
*假设我想知道 2021 1 1 有多少天,预期结果是1。
*假设我想知道 2021 2 1 有多少天,预期结果是32。因为1月的31天加上现在2月的1号即31+1=32
*假设我想知道 2021 3 1 有多少天,预期结果是60。因为1月的31天加上2月的28加上现在3月的1号即31+28+1=60
然后scanf语句输入了一个day变量来接受 2021 1 1 中的1,表示天数的,几月第几号的。
所以把上面3个例子的所有的1替换成day就是:
days = day
days = day + 31
days = day + 31 + 28
然后知道了2021 1 1 有多少天后就退出switch语句,代码又有了:
days = day;break;
假如你算的是2021 2 1 有多少天后就退出switch语句,代码又有了:
days = day + 31;break;
到这里你懂了之后,后面的都是一步一步累加的。
然后这一年是平年还是闰年呢?
平年2月有28天,闰年2月有29天。
所以要对年份做判断。
这里2021年2月有28天。
*/
/*参考:https://pypypy.blog.csdn.net/article/details/102751000
关于解决问题,你要知道:
(1)分析问题,预期结果是什么
(2)要用到什么知识
(3)思考从哪里入手
(4)先从简单的地方开始
(5)重复 (1)到(4)步
*/

C语言 两种方法优化:输入一个日期的年、月、日,计算并输出这天是该年的第几天。相关推荐

  1. 【C语言】从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号)。

    C语言实战题目:从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号).例如,输入-123,则忽略负号,由123分离出其百位1.十位2.个位3,然后计算3*100+2*10+1 = ...

  2. 输入一个日期,****年**月**日,如何判断是否为工作日?

    今天让写一个程序:输入日期,计算是否为工作日.有以下几个思路: 首先是第一种计算原理: 把你想要知道的日期号,加上该月份代号,再除以7,能整除的就是星期日:不能整除的,余数是几,那天就是星期几.如果日 ...

  3. 使用Navicat和Transact-SQL语言两种方法创建、修改和删除表

    修改基本表 数据库db100里 向employee中添加地址列 Mysql>alter table employee add address char(50); 增加课程名称必须取唯一值的约束条 ...

  4. 编c语言程序 任意输入一个长方体的长,宽,高,计算体积.,C语言程序,由键盘任意输入一个长方体的长.宽.高,计算体积....

    用C语言编写程序,输入一个正整数n(1 #include"stdio.h"intmain(){\x09inti,j,n;\x09inta[12];\x09intmin,mx;\x0 ...

  5. js实现倒数日/纪念日功能:输入一个日期和重复类型,计算当天到该日期的天数

    一.实现的功能 每月重复:接收一个[day]数组,其中day为日期,计算距离最近的这个日期的时间,遇到没有的月份会再往下一个月进行查询(适用于发薪日,月纪念日等) 每周重复:接受一个[week1,we ...

  6. C语言两种方法求圆的面积与周长编程

    方法一:程序如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {const float pi = 3.14; ...

  7. C语言两种方法实现归并排序

    递归实现归并排序思想 使用递归的方法来分元素 使用临时数组来保存排好序的元素 把临时数组中的元素拷贝给原数组 void mergeAdd(int arr[], int left, int mid, i ...

  8. linux系统的u盘安装方法,把linux系统装进u盘的两种方法(做一个口袋系统)

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 教程仅供参考 一.         用两个U盘 一个做安装盘 另一个格式成ntf格式的空硬盘(安装速度快,但不小心 ...

  9. C语言 | 两种方法解决五人分鱼

    A.B.C.D.E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉. 日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份. B 第二个醒来,也将鱼分为 ...

  10. R语言 两种方法连接oracle以及将处理后的数据导入数据库中

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 一.通过RODBC包连接Oracle 1.首先在本机找到ODBC数据源,点击添加,按照自己的oracle,填写下面三个位置 2.填写完之后,点 ...

最新文章

  1. java计算机全部代码_(Java)谁有计算器的完整代码?
  2. 最优化问题的求解分类
  3. 利用Conda尝鲜Python 3.10
  4. FPGA Design's Tips
  5. C#图像处理基础概念知识
  6. java keytool证书工具使用小结
  7. 一调计算机专业综合理论试卷,一调计算机专业综合理论试卷(盐城)(新编)
  8. ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
  9. Redis与数据库同步问题
  10. PL/SQL 12.0配置连接远程Oracle数据库
  11. tsql 和 clr 的性能实测比对
  12. java 向后台传两个json数据类型_前台向后台传递JSON字符串,处理JSON字符串类型的方法...
  13. XenCenter 创建 New Storage Repository
  14. Java课程设计-作业管理系统
  15. npm下载require
  16. 技巧:Eclipse阿里代码规范插件
  17. Cortex-M3 (NXP LPC1788)之外部中断操作
  18. Office 如何双面打印Word文档
  19. ffmpeg里转场transition
  20. 淮阴工学院计算机网络题库,淮阴工学院计算机导论题库.doc

热门文章

  1. 批发商/分销商会有一波向B2B转型的浪潮
  2. 可汗学院公开课——统计学学习:12-34
  3. 应聘总经理的答卷,供大家打分!(二)
  4. Scala学习笔记01
  5. 在网络世界中我们该如何保护我们的信息安全?
  6. Go2sky -- Golang用skywalking实现全链路追踪
  7. 如何把视频生成二维码,手机扫一扫就可以看
  8. 加州大学戴维斯分校 计算机科学,加州大学戴维斯分校计算机科学硕士设置
  9. 开心网android客户端,开心网Android客户端V3.8.1升级评测
  10. 计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)