输入日期,计算当前日期是这一年中的第几天(涉及闰年问题)
一、应用到的知识:闰年问题,数组,for循环,命令行参数,atoi函数
? ? ? ? 1. 闰年问题:
????????闰年 是指该年有366日,即较平常年份多出一日。每400年就会有一次闰年;或者年份是4的倍数,但不是100的倍数的,也是闰年。如2000年是闰年,2004年也是闰年,但2001年却不是闰年。
? ? ? ? 2. 数组:
????????连续有顺序的,大小固定并且里面的数据类型一致的内存空间
? ? ? ? ? ? ? ??
????????3.for循环:
????????????????for (初始化; 判断表达式; 变量处理){
????????????????? ? 代码块;
????????????????}
? ? ? ? 初始化:用于初始化变量,只有刚进入for循环时执行
????????判断表达式:只要结果为真(不为0,NULL等),就会执行代码块
? ? ? ? 变量处理:对变量进行处理的,如 i++, i = i * 2,? i--等
? ? ? ? 注意:
? ? ? ? ? ? ? ? a. 首次进入for循环时,变量处理不会进行,只会进行初始化和判断表达式的。
? ? ? ? ? ? ? ? b. 以上三个并不是必须填写的,可以和while循环互相替换
// 代码输出:
// 0
for (int i = 0; i < 1; i++){
printf("%d\n", i);
}
// 将i < 1改为 i < 0 则第一次进入不满足条件,不输出
? ? ? ? 4. 命令行参数(以下列代码为例):
#include <stdio.h>
int main(int argc, char* argv[]) {
for (int i = 0; i < argc; i++) {
printf("arg %d: %s\n", i, argv[i]);
}
}
????????上面示例中,main()函数有两个参数argc(argument count)和argv(argument variable)。这两个参数的名字可以任意取,但是一般来说,约定俗成就是使用这两个词。
第一个参数argc是命令行参数的数量,程序名也被计算在内。
第二个参数argv是一个数组,保存了所有的命令行输入,它的每个成员是一个字符串指针。
????????5.atoi函数:
????????该函数在头文件stdlib.h中,功能是将字符串转为整数(ASCII to int);
????????函数原型:int atoi(const char* nptr);
????????返回值:整型
????????参数:字符串(字符类型的数组)
二、完整代码和功能演示视频
#include <stdio.h>
#include <stdlib.h>
// 返回一年中的第几天的函数
int Day(int year, int month, int day){
// 初始化月份天数,没有0月,空置 二月
int months[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
months[2] = 29;
} else {
months[2] = 28;
}
int ret = 0;
for (int i = 1; i < month; i++){
ret += months[i];
}
return ret + day;
}
// 主函数的参数:argc和argv
int main(int argc, char *argv[]){
if (argc != 4){
printf("Usage: %s 2020 12 3\n", argv[0]);
return 1;
}
int count = 0;
count = Day(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
printf("The %s-%s-%s is %d days.\n", argv[1], argv[2], argv[3], count);
return 0;
}
计算当天年天数20231227
三、介绍
????????1. 定义数组装载一年中12个月的每天天数,并且计算闰年将2月天数单独装载
? ? ? ? 2. 先封装一个函数Day(), 然后通过命令行参数输入日期
? ? ? ? 3. 在Day函数中,计算从1月1日截止至输入日期的天数,最后在主函数中输出
? ? ? ?
四、简单说一下外话
????????注意,本次的代码仅仅做一个小练习,所以并未对输入的参数进行设限,故输入一些错误数据,如13月,或者51号,或者 -2013年都是可以的。如果想要使代码更完善一些,不妨自己添加一些判断。
? ? ? ? 本次代码难度很小,可以利用库函数time.h中的函数简单完成,但本次仅仅是为了了解一些知识,并不对time.h库进行介绍
? ? ? ? 制作不易,还望点赞评论支持一下,谢谢
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!