| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1844 人关注过本帖
标题:新手习作,遇上问题,请高手指点
只看楼主 加入收藏
badmen
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-7-1
收藏
 问题点数:0 回复次数:17 
新手习作,遇上问题,请高手指点

我刚学C没多久,老师给布置了这样一道作业。

判断平年还是闰年。

要求:1、输入年份时,要校验年份是否在100<year<9999之间,如若不在,直接否定。

   2、如果是闰年,输入二月,给出正确的天数;输入其他月份也要给出正确的天数。

   3、如果是平年,输入二月,给出正确的天数。

我编完了所有的代码,在单个块运行时,只有警告,没错,可一汇总,就出现一个else的错误,我对if...else语句理解不是很透,我不知问题出在哪?请高手指点一下。

#include <stdio.h> void main() { int year,month; month=1; month=3; month=5; month=7; month=8; month=10; month=12; month=2; month=4; month=6; month=9; month=11; printf("输入一个年份:\n"); scanf("%d",&year);

if (100<year && year<9999) if(year%4==0) printf("这是闰年\n"); else printf("这是平年\n"); printf("输入一个月份:\n"); scanf("%d",&month); if (0<month && month<12) if (month==1 || month>2) if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 ||month==12) printf("month=31 \n",month); if (month==2 && year%4==0) printf("month=29 \n",month); else printf("month=28 \n",month); else printf("month=30 \n",month);

}

搜索更多相关主题的帖子: 习作 
2004-07-01 12:42
onicuka
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2004-6-23
收藏
得分:0 

你写的IF和ELSE里面一个大括号也没有你叫程序怎么判断啊,先把语句看看熟,然后自己改改试试


2004-07-01 15:00
kuangjingbo
Rank: 1
等 级:新手上路
帖 子:312
专家分:0
注 册:2004-4-24
收藏
得分:0 

month=1; month=3; month=5; month=7; month=8; month=10; month=12; month=2; month=4; month=6; month=9; month=11;

这一堆好象没有用!

你在编写程序之前是否认真的考虑过?流程图画了吗?

还是先整理好你的思维吧,语言只不过是对思维的描述!!


永不放弃!
2004-07-01 17:14
badmen
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-7-1
收藏
得分:0 

我自己也知道,上面那一长串赋值没用,发帖时,忘记删掉了。

我对IF...ELSE一直就理解不透。请高手指出我的不足

2004-07-01 20:43
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

#include <stdio.h> #include <stdlib.h>

int main() { int year,month; bool isLeapYear; printf("输入一个年份:\n");

scanf("%d",&year); if (100<year && year<9999) { isLeapYear = (year % 4 == 0) && ((year % 100 != 0) || (year % 400) == 0);

if(isLeapYear) { printf("这是闰年\n"); } else { printf("这是平年\n"); } printf("输入一个月份:\n"); scanf("%d",&month); if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 ||month==12) printf(" %d. month has 31 days \n",month); else if (month==2 && isLeapYear) printf(" %d. month has 29 days.\n",month); else if(month==2 && !isLeapYear) printf("%d. month has 28 days. \n",month); else printf("%d. month has 30 days. \n",month);

}

system("pause"); return 0; }


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-07-02 06:04
badmen
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-7-1
收藏
得分:0 

请问,在“isLeapYear = (year % 4 == 0) && ((year % 100 != 0) || (year % 400) == 0);”中,“(year % 100 != 0)”和“(year % 400) == 0)”是作什么的,为什么要分别模上“100”和“400”?

2004-07-02 21:21
kuangjingbo
Rank: 1
等 级:新手上路
帖 子:312
专家分:0
注 册:2004-4-24
收藏
得分:0 

那不就是测试是否能被整除用的吗!

知道闰年的含义吗?基本上是这样的:可以被4整除但不能被100整除的是,能被100整除且能被400整除的也是!!


永不放弃!
2004-07-02 21:27
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

badmen,

那是用来判断闰年的一个算法。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-07-02 22:44
badmen
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-7-1
收藏
得分:0 

在看了大家给的提示和代码,我结合了自己现在学到的知识,在反复画流程图后,重新的写了一段代码,请大家批评不足。

#include <stdio.h> void main() { int year,month; printf("输入一个年份:\n"); scanf("%d",&year); if (100<year && year<9999) { if(year%4==0) printf("这是闰年\n"); else printf("这是平年\n"); printf("输入一个月份:\n"); scanf("%d",&month); if (month>0 && month<13) { if (month==2) if(year%4==0) printf("本月为29 \n"); else printf("本月为28 \n"); if ((month>0 && month!=2) || month>2) if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 ||month==12) printf("本月为31 \n",month); else printf("本月为30 \n",month); } else printf("月份有误。\n"); } else printf("年份输入有误。\n"); }

2004-07-02 23:29
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

其中还是有问题, 判断闰年的算法不对.

那个if (month>0 && month<13) 是不必要的.

我的建议:

if(month == 2 && isLeapyear)

printf("本月为29 \n");

else if(month == 2 && !isLeapyear)

printf("本月为28 \n"); else if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 ||month==12) printf("本月为31 \n");

else if(month==4 || month==6 || month==9 || month==11) printf("本月为31 \n");

else

printf("月份有误。\n");

另外,你的这句还是有错

printf("本月为30 \n",month); // 这个month 没有必要


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-07-03 01:41
快速回复:新手习作,遇上问题,请高手指点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025967 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved