首页 > 其他分享 >C语言每日一题——第六天

C语言每日一题——第六天

时间:2022-10-02 14:58:37浏览次数:42  
标签:target start int 每日 pnt month 第六天 C语言 day

第六天

小明想了想,发现他已经写过数个用于计算日期的程序了。今天他决定更进一步,要实现一个可以计算两个日期实际相差天数的代码。另外,为了方便,不考虑闰年情况。

运行:main.exe B B A A

输出:

1-1 to 2-2 :
1?32

解释:前两个参数B B 表示目标日期为 2 月 2 日, A A表示起始日期为 1 月 1日,1月与2月相隔1个月,1月 1日距离2月 2日相隔32天。

运行:main.exe B A A B

输出:

1-2 to 2-1 :
1?30

解释:前两个参数B A 表示目标日期为 2 月 1 日, A B表示起始日期为 1 月 2日,1月与2月相隔1个月,2月 1日距离2月 1日相隔30天。

运行:main.exe A A B B

输出:

2-2 to 1-1 :
11?333

解释:前两个参数A A 表示目标日期为 1 月 1 日, B B表示起始日期为 2 月 2日,2月与来年1月相隔11个月,2月 1日距离来年1月 1日相隔333天。

输入

程序通过命令行参数输入获取参数,参数格式为目标月 目标日 起始月 起始日

为了方便输入,将数字统一移动64个,即 ASSCII 码表为 65 的符号(即A)代表数字1。

输出

程序第一行输出用于计算的起始月-起始日 to 目标月-目标日 :,,第二行以问号?为分隔,输出相隔月数相隔日数

关键

函数的使用,代码能力


解答

#include <stdio.h>
#include <iso646.h>


int get_day_number_of_month(int month) {
    if (month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12) {
        // "本"月有31天
        return 31;
    } else if (month == 2) {
        // 2月28天
        return 28;
    } else {
        // "本"月有30天
        return 30;
    }
}


int main(int cnt, char **argv) {
    int target_month, target_day, start_month, start_day, pnt_month, day = 0;

    if (cnt != 5) {
        printf("Input value error!\n");
        return -1;
    }

    // 获取输入
    target_month = (int) (*argv[1] - 'A') + 1;
    target_day = (int) (*argv[2] - 'A') + 1;
    start_month = pnt_month = (int) (*argv[3] - 'A') + 1;
    start_day = (int) (*argv[4] - 'A') + 1;

    printf("%d-%d to %d-%d :\n", start_month, start_day, target_month, target_day);

    // Month
    if (target_month >= start_month) {
        printf("%d?", target_month - start_month);
    } else {
        printf("%d?", 12 + target_month - start_month);
    }

    // Day
    if (target_day > start_day) {
        day += target_day - start_day;
    } else {
        day += get_day_number_of_month(start_month) - start_day + target_day;
        pnt_month += 1;
    }
    while (pnt_month != target_month) {
        day += get_day_number_of_month(pnt_month);
        pnt_month += 1;
        if (pnt_month > 12) {
            pnt_month = 1;
        }
    }
    printf("%d\n", day);

    return 0;
}

标签:target,start,int,每日,pnt,month,第六天,C语言,day
From: https://www.cnblogs.com/tobe-goodlearner/p/basic_C_programming-day_6.html

相关文章

  • 【C语言_11】快速了解switch多重选择语句!
    1.switch的用法switch后面的括号只能填整型表达式case后面的常量不能有重复的可以没有defaultswitch(整型表达式){case整型常量1:语句;case整型常量2:......
  • 插入字符串,删除字符串——C语言描述
    插入字符串,删除字符串——C语言描述目录插入字符串,删除字符串——C语言描述0测试用例框架1插入字符串1.1功能需求:1.2条件1.3方法1.4代码实现0测试用例框架https://......
  • 初识C语言
    #include<stdio.h>#include<stdlib.h>#include<math.h>intmain(){doublea,b,c,y;intx;scanf("%lf%lf%lf",&a,&b,&c);x=a+b+c;y=(a+b+c)/4;printf("x=%d",x);pri......
  • C语言常用函数
    数据类型:整数:char、unsignedchar(0-255)、signedchar(-128-127)、short、unsignedshort(0-65535)、int、unsignedint、long、unsignedlong小数:float(6位):单精度,eg:2.5fdouble......
  • 每日一结
    剑指Offer12.矩阵中的路径本题问,给定的二维数组中是否有按顺序出现的指定字符串。注意:1、遍历所有位置依次调用函数。函数可以完成在当前位置作为起点的情况下,实现......
  • C语言猜单词游戏
    C语言猜单词游戏C语言猜单词游戏1问题描述请从一片英文的短文中任意提取一个单词,给出该单词的字母数量,让游戏者猜单词的拼写字母,游戏者每次只能猜一个字母,如果游戏者猜......
  • C语言学生的选课管理系统
    C语言学生的选课管理系统六、编制一个学生的选课管理系统【问题描述】现有若干个班级的学生,进行下学期课程的选课,任选5门课程录入课程信息(包括课程编号、课程名称、课......
  • C语言常见关键字+指针
    c语言的常见关键字有:auto,break,case,char,const(常变量),continue,default(默认),do,double,else,enum(枚举),extern(引入外部符号),float,for,goto,if,int,long,register(寄存器关......
  • C语言每日一题——第五天
    第五天今天小明觉得自己又可以了!于是他决定继续实现游戏开发,这次从玩家行为控制入手。在长度无限、宽度为9的地图场景中,我们可以控制角色向左右移动,移动后会留下轨迹,该轨......
  • 测试用例框架——C语言
    测试用例框架——C语言目录测试用例框架——C语言1宏定义2初始化函数3测试的结果函数4状态测试函数5字符串的比较函数6值比较函数1宏定义staticintTestNum=......