吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 679|回复: 4
收起左侧

[讨论] C++经典实例刷题

[复制链接]
hoy0a1d 发表于 2022-10-18 17:07
题目:输入某年某月某日,判断这一天是这一年的第几天?
书中代码:
[C] 纯文本查看 复制代码
#include "stdio.h"

main()
{
	int day, month, year, sum, leap;
	printf("\nplease input year,month,day\n");
	scanf("%d,%d,%d", &year, &month, &day);
	switch(month)	/*先计算某月以前月份的总天数*/
	{
		case 1:sum = 0;break;
		case 2:sum = 31;break;
		case 3:sum = 59;break;
		case 4:sum = 90;break;
		case 5:sum = 120;break;
		case 6:sum = 151;break;
		case 7:sum = 181;break;
		case 8:sum = 212;break;
		case 9:sum = 243;break;
		case 10:sum = 273;break;
		case 11:sum = 304;break;
		case 12:sum = 334;break;
		default:printf("data error");break;
	}
	sum = sum + day;	/*再加上某天的天数*/
	if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))	/*判断是不是闰年*/
		leap = 1;
	else
		leap = 0;
	if(leap == 1 && month > 2)	/*如果是闰年且月份大于2,总天数应该加一天*/
		sum++;
	printf("It is the %dth day.",sum);
	getch(); 
}



我写的代码:
[C++] 纯文本查看 复制代码
#include <iostream>

int main()
{
	int iYear, iMonth, iDay, iDaySum;
	std::cout << "请输入年月日:例如 2000 12 12" << std::endl;
	std::cin >> iYear >> iMonth >> iDay;
	
	// 判断是不是闰年
	if(iYear % 400 == 0 || (iYear % 4 == 0 && iYear % 100 != 0))
		iDaySum = 1;
	else
		iDaySum = 0;
	
	switch(iMonth)
	{
		case 1:		// 1 月无需考虑闰年因素,重新赋值即可
			if(iDay > 0 && iDay <= 31)	// 增加 IDay 数据是否合法,避免结果出现错误 
			{
				iDaySum = iDay;
				goto resultok;
			}
			else
				goto resultno;
		case 2:		// 2 月无需考虑闰年因素,加 1 月天数重新赋值
			if(iDaySum = 1)
			{
				if(iDay > 0 && iDay <= 29)
				{
					iDaySum = iDay + 31;
					goto resultok;
				}
				else
					goto resultno;
			}
			else
			{
				if(iDay > 0 && iDay <= 28)
				{
					iDaySum = iDay + 31;
					goto resultok;
				}
				else
					goto resultno;
			}
		case 3:		// 考虑闰年因素,将已赋值 iDaySum 累加 1、2 月天数
			if(iDay > 0 && iDay <= 31)
			{
				iDaySum += iDay + 31 + 28;
				goto resultok;
			}
			else
				goto resultno;
		case 4:		// 累加 1 - 3 月天数
			if(iDay > 0 && iDay <= 30)
			{
				iDaySum += iDay + 31 + 28 + 31;
				goto resultok;
			}
			else
				goto resultno;
		case 5:		// 累加 1 - 4 月天数
			if(iDay > 0 && iDay <= 31)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30;
				goto resultok;
			}
			else
				goto resultno;
		case 6:		// 累加 1 - 5 月天数
			if(iDay > 0 && iDay <= 30)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30 + 31;
				goto resultok;
			}
			else
				goto resultno;
		case 7:		// 累加 1 - 6 月天数
			if(iDay > 0 && iDay <= 31)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30;
				goto resultok;
			}
			else
				goto resultno;
		case 8:		// 累加 1 - 7 月天数
			if(iDay > 0 && iDay <= 31)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31;
				goto resultok;
			}
			else
				goto resultno;
		case 9:		// 累加 1 - 8 月天数
			if(iDay > 0 && iDay <= 30)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
				goto resultok;
			}
			else
				goto resultno;
		case 10:	// 累加 1 - 9 月天数
			if(iDay > 0 && iDay <= 31)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
				goto resultok;
			}
			else
				goto resultno;
		case 11:	// 累加 1 - 10 月天数
			if(iDay > 0 && iDay <= 30)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
				goto resultok;
			}
			else
				goto resultno;
		case 12:	// 累加 1 - 11 月天数
			if(iDay > 0 && iDay <= 31)
			{
				iDaySum += iDay + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
				goto resultok;
			}
			else
				goto resultno;
		default:
			goto resultno1;
	}
		
	resultok:
		std::cout << iYear << " 年 " << iMonth << " 月 " << iDay << " 日是这一年的第 "
				<< iDaySum << " 天。" << std::endl;
		return 0;
		
	resultno:
		std::cout << "日数据输入错误。" << std::endl;
		return 0;
		
	resultno1:
		std::cout << "月份数据输入错误。" << std::endl;
		return 0;	
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wslans 发表于 2022-10-18 17:14
还是书上的简单,反正每个月都是固定的,直接用天数就行了,没必要再算一遍,只需要最后根据月份是不是大于2,再看是不是闰年,需要不需要加1就可以了
Deng-13148 发表于 2022-10-18 17:41
测绘中常用的儒略日,可以快速判断还可以判断是周几
lr957 发表于 2022-10-18 19:54
lansemeiying 发表于 2022-10-18 21:34
拿舟了谢谢啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-13 04:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表