在编写一个简单易用的星座查询程序时,我们需要考虑几个关键点:用户输入处理、星座日期范围定义以及输出结果。以下是一个基于C语言的星座查询程序示例,它将引导用户输入出生日期,然后输出对应的星座。
程序设计思路
- 用户输入:提示用户输入出生的年、月、日。
- 日期验证:检查输入的日期是否合法。
- 星座判断:根据输入的日期判断用户所属的星座。
- 输出结果:显示用户所属的星座。
程序实现
#include <stdio.h>
#include <stdlib.h>
// 函数声明
int isValidDate(int year, int month, int day);
const char* get_zodiac_sign(int month, int day);
int main() {
int year, month, day;
const char* sign;
// 用户输入
printf("请输入您的出生日期(格式:年 月 日):");
scanf("%d %d %d", &year, &month, &day);
// 日期验证
if (!isValidDate(year, month, day)) {
printf("输入的日期不合法。\n");
return 1;
}
// 星座判断
sign = get_zodiac_sign(month, day);
// 输出结果
printf("您的星座是:%s\n", sign);
return 0;
}
// 函数定义
// 验证日期是否合法
int isValidDate(int year, int month, int day) {
if (year < 0 || month < 1 || month > 12 || day < 1 || day > 31) {
return 0;
}
// 检查闰年2月29日的情况
if (month == 2 && day > 29) {
return 0;
}
// 检查每个月的天数
int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (day > daysInMonth[month]) {
return 0;
}
return 1;
}
// 获取星座
const char* get_zodiac_sign(int month, int day) {
const char* signs[] = {
"摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座",
"巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"
};
int startDay[] = {20, 19, 20, 20, 21, 21, 22, 23, 23, 23, 22, 21};
if (day < startDay[month - 1]) {
month--;
}
return signs[month - 1];
}
程序解释
isValidDate函数:用于检查用户输入的日期是否合法。它考虑了月份和日期的有效性,以及闰年2月29日的情况。get_zodiac_sign函数:根据输入的月份和日期返回对应的星座。这里假设了每个月的星座开始日,如果用户输入的日期小于这个开始日,则星座向前推一个月。main函数:是程序的入口点,它负责获取用户输入、调用验证函数和星座判断函数,并打印结果。
这个简单的星座查询程序易于理解和使用,适合初学者练习C语言编程。
