至尊宝说:“曾经有一份真挚的爱情摆在我面前,但我没有珍惜,等到失去了我才后悔莫及,尘世间最痛苦的事莫过于此。如果上天可以给我再来一次的机会,我会对那个女孩说三个字:‘我爱你!’如果非要在这份爱前加一个期限的话,我希望是一万年。”
假如我们用程序来实现这段逻辑是怎么样的呢?
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;
}
周天的时候,韦小宝惊讶的发现这一天需要陪两个老婆,你能发现其中的原因,并修复吗?