c入门第八篇——如果上天可以给我再来一次的机会

至尊宝说:“曾经有一份真挚的爱情摆在我面前,但我没有珍惜,等到失去了我才后悔莫及,尘世间最痛苦的事莫过于此。如果上天可以给我再来一次的机会,我会对那个女孩说三个字:‘我爱你!’如果非要在这份爱前加一个期限的话,我希望是一万年。”
假如我们用程序来实现这段逻辑是怎么样的呢?

if (上天可以给我再来一次的机会) {
    我会对那个女孩说三个字:“我爱你”;
} else {
    do_nothing;
}

if (加一个期限) {
    time = ten_thousand_years;
} else {
    time = 0;
}

if-else说明

在C语言中,if-else语句是用来进行条件判断的。如果条件成立,则就执行if语句中的代码块;如果条件不成立,则执行else语句中的代码块。基本结构如下:

if (condition) {
    // 条件成立时执行的代码
} else {
    // 条件不成立时执行的代码
}

其中condition是一个布尔表达式,即它的值为真(true)或假(false)。
if-else还有一些其他的变种情况,如下:

if (condition1) {
    // 条件1成立时执行的代码
} else if (condition2) {
    // 条件2成立时执行的代码
else {
    // 条件不成立时执行的代码
}

也可以没有else,如下:

if (condition) {
    // 条件成立时执行的代码
}

示例-简单成绩管理系统

#include <stdio.h>

int main()
{
    int grade;

    scanf("%d", &grade);
    if (grade >= 90) {
        printf("excellent!\n");
    } else if (grade >= 80) {
        printf("good!\n");
    } else {
        printf("wow! There is huge room for growth!\n");
    }

    return 0;
}

相比至尊宝的后悔莫及,另一个宝韦小宝则是志得意满,不过他愁的是七个老婆怎么分配时间陪伴的问题。他决定将一周的七天给每个老婆一人一天。不过有时候,他记性不好,总是忘记周几陪谁。正在学习c语言的你,有什么好办法来帮助他来记住周几该陪谁么?

switch-case

在C语言中,switch-case是一种多分支选择结构,它可以根据一个变量的值来选择执行特定的代码块。switch-case语句在需要对同一个变量进行多个固定值判断时非常有用,它能使代码比多个if-else if-else语句更加清晰和易于维护。(这里也想说明的是,switch-case能够实现的功能,if-else if-else也能够实现。)
switch-case的基本结构如下:

switch (expression) {
    case value1:
        // 如果expression的值等于value1,则执行此代码块
        break;
    case value2:
        // 如果expression的值等于value2,则执行此代码块
        break;
    ...
    default:
        // 如果expression的值与所有case都不匹配,则执行此代码块
        break;
}

switch-case结构,是顺序判断的结构,先用expression依次和value1、value2等比较,如果命中相应分支,则执行相应分支的代码块。这里需要注意的是break,如果期望该分支执行完,就结束,则需要break,不然程序还会继续执行后面的case代码块(这个是和if-else区别的地方),这被称为“穿透”。很多时候,忘记break,导致程序执行结果不符合预期。

韦小宝选老婆实现

#include <stdio.h>
#include <time.h>

#define Mon  1 //宏定义,让Mon有特殊的含义就是1,代码中的Mon会被全部替换为1
#define Tues 2
#define Wed  3
#define Thur 4
#define Fri  5
#define Sat  6
#define Sun  7

int cal_weekday(int day, int month, int year) {
    if (month == 1 || month == 2) {
        month += 12;
        year--;
    }

    int k = year % 100;
    int j = year / 100;
    int weekday = (day + 13 * (month + 1) / 5 + k + k / 4 + j / 4 - 2 * j) % 7;

    // Zeller's algorithm outputs 0=Saturday, 1=Sunday, ..., 6=Friday.
    return (weekday + 5) % 7 + 1; // Adjusting the result to 1=Monday, ..., 7=Sunday
}

int today_is_which_day()
{
    // 获取当前时间戳
    time_t now = time(NULL);
    // 将时间戳转换为本地时间
    struct tm *local = localtime(&now);

    // 获取年、月、日
    int year = local->tm_year + 1900;  // tm_year 是从 1900 年起的年数
    int month = local->tm_mon + 1;     // tm_mon 为月份,0 表示一月,所以需要加 1
    int day = local->tm_mday;          // tm_mday 表示一个月中的第几天

    return cal_weekday(day, month, year);
}

int main()
{
    int day = today_is_which_day();

    switch(day) {
        case Mon:
            printf("Shuang Er\n");
            break;
        case Tues:
            printf("Su Quan\n");
            break;
        case Wed:
            printf("Fang Yi\n");
            break;
        case Thur:
            printf("Zeng Rou\n");
            break;
        case Fri:
            printf("Mu JianPing\n");
            break;
        case Sat:
            printf("Jian Ning\n");
            break;
        case Sun:
            printf("A Ke\n");
        default:
            printf("Shuang Er\n");
            break;
    }
    return 0;
}

周天的时候,韦小宝惊讶的发现这一天需要陪两个老婆,你能发现其中的原因,并修复吗?

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值