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

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

时间:2022-09-28 22:35:46浏览次数:80  
标签:week century int 每日 C语言 第二天 without year month

第二天

题目

小明在完成给朋友统计生日的代码之后,想起来他好像看到过有一个数学公式是用于计算某年某月某日是星期几。当然了,他不会无聊到用这个程序计算超过700年前的星期。

执行:$ main.exe U V I ]

输出:

2022-9-29: 4

输入

程序通过命令行参数输入获取参数,参数格式为世纪 不含世纪的年份 月份 日期

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

输出

程序首先以减号为分隔输出用于计算的,冒号后输出星期。

关键

信息检索能力,C程序数学公式构建能力,强制类型转换。


解答

题目暗示的公式是蔡勒(Zeller)公式,可以看这篇文章了解:https://www.cnblogs.com/faterazer/p/11393521.html

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


int main(int cnt, char **argv) {
    int century, year_without_century, month, day, week;

    // 获取输入的日期
    if (cnt not_eq 5) {
        // 第一个参数是获得的参数数量, 若数量不正确, 说明输入错误, 这时程序打印错误停止运行, 返回 -1
        printf("Input value error!\n");
        // 函数在运行到 return 后便会退出, 不会运行之后的代码
        return -1;
    }

    // 获取用于计算的日期
    century = (int) (*argv[1]) - 64;
    year_without_century = (int) (*argv[2]) - 64;
    month = (int) (*argv[3]) - 64;
    day = (int) (*argv[4]) - 64;

    century -= 1;  // 事实上在计算后 "century" 就不再代表“世纪“了
    printf("%d%d-%d-%d", century, year_without_century, month, day);

    // 公式运算
    if (month == 1 or month == 2) {
        year_without_century -= 1;
        month += 11;
    }

    // 因为公式太长,被我分为了两段
    week = (int) (century / 4) - 2 * century + year_without_century + (int) (year_without_century / 4);
    week = week + (int) ((13 * (month + 1)) / 5) + day - 1;

    while (week < 0){
        week += 7;
    }
    week %= 7;

    // 打印结果
    printf(": %d\n", week);

    return 0;
}

标签:week,century,int,每日,C语言,第二天,without,year,month
From: https://www.cnblogs.com/tobe-goodlearner/p/basic_C_programming-day_2.html

相关文章

  • 【C语言_7】运算符!看这篇就够了
    一、算术运算符1.加法运算符+#include<stdio.h>intmain(){inta=2;intb=3;printf("a+b=%d\n",a+b);return0;}运行结果:2.减法运算符-#include<stdio.h>intmain()......
  • 【C语言】Visual Studio 2022开发环境搭建
    1.下载VisualStudio2022VisualStudio的官方网站:​​https://visualstudio.microsoft.com/​​点击下载VisualStudio社区版Community2.安装VisualStudio2022双击Visual......
  • C语言 测标准体重
    #include<stdio.h>intmain(){ doubleh,w; chara; printf("请输入性别(男性输入m,女性输入f):"); scanf("%c",&a); printf("输入身高(cm)"); scanf("%lf",&h); if(a=='m') ......
  • C语言入门学习——函数的使用
    函数的概述C程序是由函数组成的,我们写的代码都是由主函数main()开始执行的。函数是C程序的基本模块,是用于完成特定任务的程序代码单元。从函数定义的角度看,函数可分为系......
  • C语言也能做界面:踏上GTK+学习之旅
    ​​00、背上行囊1——程序员学习之道​​​​01、背上行囊2——为什么要学习GTK​​​​02、背上行囊3——​​​​GUI概述​​​​03、背上行囊4——GTK简介​​​​04、......
  • 初学C语言笔记220928
    void*p  强制类型转换成int型指针,再解引用voidqsort((void*base,//指向要排序的数组的第一个元素的指针size_tnitems,,//数组中的元素个数......
  • 每日一结
    回文子串是要连续的,回文子序列可不是连续的516.最长回文子序列解决本题一个很妙的做法就是,设置一个二维数组,行为给定字符串的最后一位,列每次的起始值为行+1。这样做的......
  • C语言第19天,标识符作用域和预处理指令
    一、标识符作用域1.代码块作用域{//代码块Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}{//代码块Bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}源代码中,被花括号包括的代码,形成一个......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    #include<iostream>#include<string>#include<vector>intmain(){usingnamespacestd;strings1;//创建一个string对象strings2{"cplusplus"};//......
  • C语言标准字符串分割
               std::stringheroIDAndLeve=tdx["id"].asString();heroIDAndLeve="msefd111ds,12";constchar*expr=heroIDAndLeve.c_str();......