C语言习题:输入某年某月某日,判断这一天是这一年的第几天(分支结构)

判断年与实际天数关系首先就要考虑闰年和非闰年,公历年份是4的倍数且不是100的倍数的为普通闰年.公历年份是整百数的,且是400倍数的是世纪闰年.

总体来说便是:能被4整除且不能被100整除或者能被400整除的是闰年。(闰年一年共366天,二月29天。)


判断闰年的代码实现:

int year;
if(year%100!=0&&year%4==0||year%400==0)
{	
	printf("%d年是闰年\n",year);
}
else
{
	printf("%d年是非闰年\n",year);
}

其次还需要理解的一个知识点就是分支结构的定义:


分支结构:
分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,
根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,
这样做把程序设计分析与语言分开,使得问题简单化,易于理解。if(条件){分支体} 这样的形式为分支结构,当然也有多分支结构。(switch-case)

代码实现1 if(条件){分支体}:

#include <stdio.h>
int getDays(int month,int day);
int FILO(int year);
int main()
{
int year,month,day;
printf("请按照这样的格式:20200101,输入你想查询的日期:\n");
scanf("%4d%2d%2d",&year,&month,&day);																				
int days = getDays(month,day);					
if (days==0)
{
printf("您输入的天数无效。\n");
return 0;
}
if (FILO(year) && month > 2)				//闰年且月份大于二,则返回天数加一,否则直接返回函数值
{
printf("这一天是%4d年的第%d天",year,days+1);
}
else{
printf("这一天是%4d年的第%d天",year,days);
}
return 0;
}
int getDays(int month,int day){
int Number[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int result=day;
if (month >12){ //避免出现数组越界情况(提高容错率和复用性.) 
return 0;
}
for (int i=0;i< month-1;i++){
result+= Number[i];
}
return result;
}
int FILO(int year){
return year%4 ==0 && year%100 !=0 || year%400 ==0;
}

代码实现2(switch-case)

#include<stdio.h>
int main()
{

int day,month,year,sum;
printf("请按照这样的格式:2019年10月1日,输入您想查询的日期.\n");
scanf("%4d年%2d月%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("您输入的天数无效.");break;

}

sum=sum+day;

if((year%400==0||(year%4==0&&year%100!=0))&&month>2)  //是闰年且月份大于2方加一 

sum++;

printf("这一天是%4d年的第%d天\n",year,sum);

return 0;

}

个人而言更加推荐代码二,因为switch-case的执行效率要高于if.

代码实现3

switch后接:

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("这是这一年的第 %d 天。",sum);

printf("\n");

}

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值