黑马程序员技术交流社区
标题:
到底哪里出问题了,弄一天了无法解决!!!
[打印本页]
作者:
fudanxiaoan
时间:
2015-7-30 22:54
标题:
到底哪里出问题了,弄一天了无法解决!!!
/*---------------------------------
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;
}
作者:
Eil.tea
时间:
2015-7-30 23:45
乍一看好像没问题,如果你愿意,可以把源码贴出来,我给你排排错。
作者:
Eil.tea
时间:
2015-7-31 00:00
不用贴了, 你连几月有几天都定义错了,就是你定义的数组
作者:
Eil.tea
时间:
2015-7-31 00:16
第二个大错误, if ((year % 4 == 0 && year % 100 != 0) || (year % 400)), year % 400==0好吧
作者:
Eil.tea
时间:
2015-7-31 00:22
#include <stdio.h>
int isLeapYear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400)==0)
{
return 1;
}
return 0;
}
int countday(int year,int month,int day)
{
int sumday=0;
int monthDay[]={31,28,31,30,31,30,31,31,30,31,30,31};
for (int i=2006; i<year; i++) {
sumday+=365+isLeapYear(i);
}
for (int i=1; i<month; i++) {
sumday+=monthDay[i-1];
if (i==2 && isLeapYear(year)) {
sumday++;
}
}
return sumday+day;
}
int main(int argc, const char * argv[]) {
int year=2007;
int month=3;
int day=5;
int dayNum=countday(year, month, day);
if (dayNum%6==0) {
printf("男女通吃\n");
}
else if (dayNum%3==0) {
printf("搞基\n");
}
else if (dayNum%2==0){
printf("泡妞\n");
}
else {
printf("单身狗\n");
}
return 0;
}
复制代码
因为你的思路很清晰了,所以基本是沿用你的思路来的,包括定义month数组,没有挨个去判断,贴一下我的代码,你可以两个执行一下,比较一下错误,如果我哪里写的不合适,欢迎指出
作者:
fudanxiaoan
时间:
2015-7-31 17:25
Eil.tea 发表于 2015-7-31 00:22
因为你的思路很清晰了,所以基本是沿用你的思路来的,包括定义month数组,没有挨个去判断,贴一下我的代码 ...
谢谢,问题已经解决,必须说说:你的代码比我的好很多 如最后的判断输出结果就很好: 谢谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2