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

一、应用到的知识:闰年问题,数组,for循环,命令行参数,atoi函数

        1. 闰年问题:

        闰年 是指该年有366日,即较平常年份多出一日。每400年就会有一次闰年;或者年份是4的倍数,但不是100的倍数的,也是闰年。如2000年是闰年,2004年也是闰年,但2001年却不是闰年。

        2. 数组:

        连续有顺序的,大小固定并且里面的数据类型一致的内存空间
                输入日期,计算当前日期是这一年中的第几天(涉及闰年问题)_第1张图片

        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 

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 
#include 

// 返回一年中的第几天的函数
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库进行介绍

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

你可能感兴趣的:(C,娱乐)