20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises07
P702

/*
自行扩展
输入任意年【1-3000年】月【1-12月】,给出该月的天数
分析:
1. 2003年不是闫年,额外知识点:
return (year % (year % 100 ? 4 : 400) ? 0 : 1);
2. 一,三,五,七,八,十,十二月,各31天
二为28天,如果是闫年,则29天
四,六,九,十一朋,为各30天
3. 输入N,直接判断匹配对应的天数即可
4. 本题可以扩展为输入任意某年某月,输出该月的天数
*/
#include <stdio.h>
int main(void)
{
int year;
int month;
printf("please input the year,month number: ");
scanf("%d,%d",&year, &month);
if (( year >1 && year< 3000) && (month>0 && month < 13))
{
// 先判断是否闫年
if((year % (year % 100 ? 4 : 400) ? 0 : 1))
{
// 从技术上讲,可以首先约束到有效月数字上来
if(month == 2 )
{
printf("\n%d.%d has 29 days", year, month);
}
else if(month == 4 || month==6||month==9||month==11)
{
printf("\n%d.%d has 30 days", year, month);
}
else
{
printf("\n%d.%d has 31 days", year, month);
}
}
else
{
// 从技术上讲,可以首先约束到有效月数字上来
if(month == 2 )
{
printf("\n%d.%d has 28 days", year, month);
}
else if(month == 4 || month==6||month==9||month==11)
{
printf("\n%d.%d has 30 days", year, month);
}
else
{
printf("\n%d.%d has 31 days", year, month);
}
}
}
else
{
printf("\nInvalid year or month input !");
}
return 0;
}
另一种解法
/*
自行扩展
输入任意年【1-3000年】月【1-12月】,给出该月的天数
再重构一下程序,相同的部分,可以只用一次
分析:
1. 2003年不是闫年,额外知识点:
return (year % (year % 100 ? 4 : 400) ? 0 : 1);
2. 一,三,五,七,八,十,十二月,各31天
二为28天,如果是闫年,则29天
四,六,九,十一朋,为各30天
3. 输入N,直接判断匹配对应的天数即可
4. 本题可以扩展为输入任意某年某月,输出该月的天数
学习方法:
1. 通过思考,不断重构自己的代码,让程序更简洁
2. 让重复的代码被重构
*/
#include <stdio.h>
int main(void)
{
int year;
int month;
printf("please input the year,month number: ");
scanf("%d,%d", &year, &month);
if ((year > 1 && year < 3000) && (month > 0 && month < 13))
{
// 其他月份,正常输出
if (month == 4 || month == 6 || month == 9 || month == 11)
{
printf("\n%d.%d has 30 days", year, month);
}
else if (month == 2) // 只有2月,才去判断是否闫年
{
if ((year % (year % 100 ? 4 : 400) ? 0 : 1))
{

本文提供了一系列C语言编程练习,包括计算特定年份月份的天数、转换百分制成绩为等级、计算企业产值翻番等,涉及条件判断、循环及数据处理技巧。
最低0.47元/天 解锁文章
9642

被折叠的 条评论
为什么被折叠?



