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

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

时间:2022-09-27 21:45:04浏览次数:52  
标签:第一天 %% 每日 C语言 日期 BIRTHDAY printf DATE 生日

第一天

小明想要给他的朋友写一个生日祝福程序,在运行时,会根据输入的日期输出不同的结果。

若在平时运行程序(例如9月28日):

09-28 :
+3?-15

而在朋友生日(12月13日)当天:

12-13 :
% % % % % % % % %
%      4bd      %
%   ^      ^    %
%   +------+    %
%   +------+    %
%  +--------+   %
% % % % % % % % %  Happy birthday!

输入

程序通过命令行参数输入获取参数,参数格式为月份 日期

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

输出

在输出中,第一行为月份-日期,其中若月份或日期不为两位数,则在左侧用0补齐两位。

非生日日期时,在第一行后输出 生日月份 与 当前月份 数字之差,和 生日日期 与 当前日期 数字之差,并强制显示正负号,两个数字间以问好为分隔。

生日日期时,在第一行后输出如上图所示的字符画,且包含按十六进制表示的月份日期生日日期(即示例中的4bd, 它是十六进制的1213)。

提示

CLion 可以在运行时自动输入命令行参数,点击位于在开发界面的右上角的调试设置,选择“编辑配置”

CLion命令行参数设置_1

在配置框中的“程序实参”填入要输入的参数,多个参数间用空格分隔。如同所示,该配置将在运行时将额外传递两个参数I[给程序。

CLion 程序执行参数配置 2


解答:

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

#define BIRTHDAY_DATE_MONTH 12
#define BIRTHDAY_DATE_DAY 13


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

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

    // 获取“真正的”月份和日期
    month = ((int) *argv[1]) - 64;
    day = ((int) *argv[2]) - 64;

    // 打印第一行
    printf("%02d-%02d :\n", month, day);

    // 判断是否是生日
    if (day == BIRTHDAY_DATE_DAY and month == BIRTHDAY_DATE_MONTH) {
        // 是生日
        printf("%% %% %% %% %% %% %% %% %%\n");
        printf("%%      %03x      %%\n", BIRTHDAY_DATE_MONTH * 100 + BIRTHDAY_DATE_DAY);
        printf("%%   ^      ^    %%\n");
        printf("%%   +------+    %%\n");
        printf("%%   +------+    %%\n");
        printf("%%  +--------+   %%\n");
        printf("%% %% %% %% %% %% %% %% %%  Happy birthday!\n");
    } else {
        // 不是生日
        printf("%+d?%+d\n", BIRTHDAY_DATE_MONTH - month, BIRTHDAY_DATE_DAY - day);
    }

    return 0;
}

标签:第一天,%%,每日,C语言,日期,BIRTHDAY,printf,DATE,生日
From: https://www.cnblogs.com/tobe-goodlearner/p/basic_C_programming-day_1.html

相关文章

  • 每日一结
    174.地下城游戏本题是本人在学习动态规划遇到的第一道比较特殊的题目。因为此题是倒着推的。因为要求最低血量,如果正着从起点开始求,不能保证后无效性。也就是说,前面的工......
  • C语言数组越界和溢出
    一、数组越界为了保证C/C++的运行效率,所以它们都不对数组越界进行检查。#include<stdio.h>intmain(){inta[4]={1,2,3,4};for(inti=-2;i<=8;++......
  • C语言:蟠桃
    #include<stdio.h>main(){intdays,sum=1;scanf("%d",&days);while(--days){sum=(sum+1)*2;}printf("%d",sum);getchar......
  • c语言常见文件操作函数——文本流
    一、文件的打开关闭指向一个保存打开文件信息的结构体变量,该结构体类型为'FILE'。在'stdio.h'中声明:struct_iobuf{char*_ptr;int_cnt;char*_base;......
  • C语言:P74-11
    #include<stdio.h>#include<math.h>#defineN10//一个球从100米高度自由落下,每次落地后返回高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?main(){......
  • C语言 define 的用法
    define的骚用法可以实现模板define字符串连接以及变量名分段联结用法   #define A(x)  test_##x     A(int8)-->test_int8   test_int8(1......
  • C语言学习第8天
    咕了一天,今天继续更-----------------------------------------------------------判断素数实例   ----------------------------------------------------------......
  • LeetCode739 每日温度
    LeetCode739每日温度classSolution:defdailyTemperatures(self,temperatures:List[int])->List[int]:ans,stack,n=[0]*len(temperatures),[......
  • 每日一结
    120.三角形最小路径和要求自顶到下的最短路径,只需要把从顶到各个位置的值都求出,最后再找出最底行的最小值即可。因为当前位置可由其正上方或者斜上方得来,所以只需要初始......
  • 秀真的学习日记:学Java的第一天
    秀真的学习日记:学Java的第一天快捷键ctrl+A=全选ctrl+X=剪切ctrl+C=复制ctrl+Z=撤销ctrl+V=粘贴ctrl+S=......