C语言实现“输入年月求对应月份天数”

C语言实现“输入年月求对应月份天数”

一、运行截图

在这里插入图片描述

二、源代码

#include<stdio.h>
main()
{
	int x, y, a, b, c;
	printf("请你输入任意一年的年份(年):\t");
	scanf("%d", &x);
	printf("请输入任意一个月份数(月):\t");
	scanf("%d", &y);
	a = x % 4, b = x % 100, c = x % 400;
	switch (y)
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		printf("%d年%d月的天数为(天):\t31天\n", x, y);
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		printf("%d年%d月的天数为(天):\t30天\n", x, y);
		break;
	default:
		if (a == 0)
	{
		if (b != 0)
			printf("%d年%d月的天数为(天):\t29天\n", x, y);
		else if (b == 0 && c == 0)
			printf("%d年%d月的天数为(天):\t29天\n", x, y);
	}
		   else printf("%d年%d月的天数为(天):\t28天\n", x, y);
	};
}


//优化后:
#include<stdio.h>
int f(x, y)
{
	if (y == 1 || y == 3 || y == 5 || y == 7 || y == 8 || y == 10 || y == 12)
		return(31);
	else if (y == 2)
	{
		if (x % 4 == 0 && x%100 != 100)
			return (29);
		if (x % 100 == 0 && x %400== 400)
			return(29);
		else
			return(28);
	}
	else
		return(30);
}//定义函数体
main()
{
	int x, y;
	printf("请你输入任意一个日期(格式:年,月):\t");
	scanf("%d,%d", &x, &y);
	printf("%d年%d月有%d天\n", x, y, f(x, y));
}



//代码再次优化:
#include<stdio.h>
int NF(float x, float y);//函数声明(函数原型)
int main()
{
	float x, y;//不定义整形是为了程序的健壮性考虑(消除安全隐患)
	printf("请输入要查询的年份和月份(空格间隔):");
	scanf("%f%f", &x, &y);
	if ((int)(x) == x && (int)(y) == y)//检验输入的日期是否合法
	{
		printf("%g年%g月有:%d天", x, y, NF(x, y));
	}
	else
		printf("你输入的日期至少有一个不合法!!!");
}
int NF(float a, float b)//定义函数(为了保证形参类型一致只能定义浮点型)
{
	int x, y;
	x = a, y = b;//由于浮点数不能做求余运算所以进行数据类型转换
	if (y == 1 || y == 3 || y == 5 || y == 7 || y == 8 || y == 10 || y == 12)
		return 31;
	else if (y == 4 || y == 6 || y == 9 || y == 11)
		return 30;
	else if (y == 2)
	{
		if ((x % 4 == 0 && x % 100 != 0) || (x % 100 == 0 && x % 400 == 0))//注:能被100整除必可被4整除
			return 29;		
		else
			return 28;
	}
}
  • 16
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值