/*---------------------------------
10、小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
----------------------------------*/
#include <stdio.h>
#include <stdlib.h>
/*-----函数声明部分------*/
//最终输出函数:结识美女或帅哥等情况
void printEnd(int days);
//计算从2006年1月1日至输入日期总天数
int getDaysOftotal(int year,int month,int day);
//计算某年的天数
int getDaysOfYear(int year);
//判断当前年开始至输入日期的天数
int getDaysOfMonth(int year,int month);
/*-------主函数部分-------*/
int main(int argc, const char * argv[])
{
//定义int变量用于保存用户输入的日期
int year, month, day;
//获取用户输入的热情
printf("请输入年份:\n");
scanf("%d", &year);
printf("请输入月份:\n");
scanf("%d",&month);
printf("请输入日:\n");
scanf("%d",&day);
//给出判断结果
printEnd(getDaysOftotal(year, month, day));
return 0;
}
/*-------函数的定义部分-------*/
//最终输出函数:结识美女或帅哥等情况
void printEnd(int days)
{
//定义_bool变量用于保存输出可能情况
_Bool boy , girl, onlyBoy, onlyGirl, bothBoyAndGirl;
boy = (days % 2 == 0); //认识了帅哥
girl = (days % 3 == 0); //认识了美女
//对上面两情况作逻辑运算
onlyBoy = boy && (! girl); //只是认识帅哥
onlyGirl = girl && (! boy); //只是认识美女
bothBoyAndGirl = boy && girl; //同时认识帅哥和美女
//输入判断结果
if (onlyBoy)
printf("只是结识了帅哥");
else if (onlyGirl)
printf("只是结识了美女");
else if (bothBoyAndGirl)
printf("结识了帅哥和美女");
else
printf("都没有结识");
}
//计算从2006年1月1日至输入日期总天数
int getDaysOftotal(int year,int month,int day)
{
int sumDaysOfYear = 0;
int sumDaysOfMonth = 0;
/*int i = 2005;
while (++i < year)
sumDaysOfYear += getDaysOfYear(i);
sumDaysOfMonth = getDaysOfMonth(year,month);
*/
//计算之前年总天数
for (int i= 2006; i < year; i++)
{
sumDaysOfYear += getDaysOfYear(i);
}
sumDaysOfMonth = getDaysOfMonth(year,month);
return (sumDaysOfYear+ sumDaysOfMonth + day);
}
//计算某年的天数
int getDaysOfYear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400))
return 366;
else
return 365;
}
//判断当前年开始至输入日期的天数
int getDaysOfMonth(int year,int month)
{
int sumDaysOfMonth = 0;
//把闰年和平年每月的天数保存到一个2维数组里面
const int monthDays[2] [12] = {
{31,29,31,30,31,30,31,30,31,30,31,30}, //闰年
{31,28,31,30,31,30,31,30,31,30,31,30} //平年
};
//计算当前年至输入日期的天数
if ((year % 4 == 0 && year % 100 != 0) || (year % 400))
for (int i = 1; i <= month; i++)
{
sumDaysOfMonth = monthDays[0] [i];
}
else
for (int i = 1; i <= month; i++)
{
sumDaysOfMonth = monthDays[1] [i];
}
return sumDaysOfMonth;
}
|
|