输入日期,计算当前日期是这一年中的第几天(涉及闰年问题)

发布时间:2023年12月28日

一、应用到的知识:闰年问题,数组,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库进行介绍

? ? ? ? 制作不易,还望点赞评论支持一下,谢谢

文章来源:https://blog.csdn.net/hdz_wiz_csdn/article/details/135254481
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。