C语言 两种方法优化:输入一个日期的年、月、日,计算并输出这天是该年的第几天。
给正在努力且上进的你点赞~
输入一个日期的年、月、日,计算并输出这天是该年的第几天。比如: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语言 两种方法优化:输入一个日期的年、月、日,计算并输出这天是该年的第几天。相关推荐
- 【C语言】从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号)。
C语言实战题目:从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号).例如,输入-123,则忽略负号,由123分离出其百位1.十位2.个位3,然后计算3*100+2*10+1 = ...
- 输入一个日期,****年**月**日,如何判断是否为工作日?
今天让写一个程序:输入日期,计算是否为工作日.有以下几个思路: 首先是第一种计算原理: 把你想要知道的日期号,加上该月份代号,再除以7,能整除的就是星期日:不能整除的,余数是几,那天就是星期几.如果日 ...
- 使用Navicat和Transact-SQL语言两种方法创建、修改和删除表
修改基本表 数据库db100里 向employee中添加地址列 Mysql>alter table employee add address char(50); 增加课程名称必须取唯一值的约束条 ...
- 编c语言程序 任意输入一个长方体的长,宽,高,计算体积.,C语言程序,由键盘任意输入一个长方体的长.宽.高,计算体积....
用C语言编写程序,输入一个正整数n(1 #include"stdio.h"intmain(){\x09inti,j,n;\x09inta[12];\x09intmin,mx;\x0 ...
- js实现倒数日/纪念日功能:输入一个日期和重复类型,计算当天到该日期的天数
一.实现的功能 每月重复:接收一个[day]数组,其中day为日期,计算距离最近的这个日期的时间,遇到没有的月份会再往下一个月进行查询(适用于发薪日,月纪念日等) 每周重复:接受一个[week1,we ...
- C语言两种方法求圆的面积与周长编程
方法一:程序如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {const float pi = 3.14; ...
- C语言两种方法实现归并排序
递归实现归并排序思想 使用递归的方法来分元素 使用临时数组来保存排好序的元素 把临时数组中的元素拷贝给原数组 void mergeAdd(int arr[], int left, int mid, i ...
- linux系统的u盘安装方法,把linux系统装进u盘的两种方法(做一个口袋系统)
版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 教程仅供参考 一. 用两个U盘 一个做安装盘 另一个格式成ntf格式的空硬盘(安装速度快,但不小心 ...
- C语言 | 两种方法解决五人分鱼
A.B.C.D.E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉. 日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份. B 第二个醒来,也将鱼分为 ...
- R语言 两种方法连接oracle以及将处理后的数据导入数据库中
关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 一.通过RODBC包连接Oracle 1.首先在本机找到ODBC数据源,点击添加,按照自己的oracle,填写下面三个位置 2.填写完之后,点 ...
最新文章
- java计算机全部代码_(Java)谁有计算器的完整代码?
- 最优化问题的求解分类
- 利用Conda尝鲜Python 3.10
- FPGA Design's Tips
- C#图像处理基础概念知识
- java keytool证书工具使用小结
- 一调计算机专业综合理论试卷,一调计算机专业综合理论试卷(盐城)(新编)
- ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
- Redis与数据库同步问题
- PL/SQL 12.0配置连接远程Oracle数据库
- tsql 和 clr 的性能实测比对
- java 向后台传两个json数据类型_前台向后台传递JSON字符串,处理JSON字符串类型的方法...
- XenCenter 创建 New Storage Repository
- Java课程设计-作业管理系统
- npm下载require
- 技巧:Eclipse阿里代码规范插件
- Cortex-M3 (NXP LPC1788)之外部中断操作
- Office 如何双面打印Word文档
- ffmpeg里转场transition
- 淮阴工学院计算机网络题库,淮阴工学院计算机导论题库.doc
热门文章
- 批发商/分销商会有一波向B2B转型的浪潮
- 可汗学院公开课——统计学学习:12-34
- 应聘总经理的答卷,供大家打分!(二)
- Scala学习笔记01
- 在网络世界中我们该如何保护我们的信息安全?
- Go2sky -- Golang用skywalking实现全链路追踪
- 如何把视频生成二维码,手机扫一扫就可以看
- 加州大学戴维斯分校 计算机科学,加州大学戴维斯分校计算机科学硕士设置
- 开心网android客户端,开心网Android客户端V3.8.1升级评测
- 计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)