前言
其实上一个题是我在6天前先写好了草稿,还差一点完善,就没有发布。
这个题才是今天写的
害,没想到,三天的清明假期如此短暂,怎么就上课了QAQ,虚度光阴的时间真的过得空虚且快。
很久没和师父聊天,其实蛮想问候一下的,但怕问起我作业情况QAQ,还是先把作业补完有点底气了再去找师父。
新的一天,新的开始,废话不多说,下面开始第四题的练习。
第四题
题目:
输入某年某月某日,判断这一天是这一年的第几天?
我的思路
输入:年月日
输出:这一年的第几天
分析:
1、首先肯定要定义输入的格式为代码能识别的形式,这里可以用2021/4/5,或者2021年4月5日,便于所写代码的识别。
2、特别注意,闰年为366天,在写代码时要考虑进去。所以写代码时要先用if-else判断,再继续写。
我的过程
其实这题用函数要简单些,但这个进度肯定是用来练习switch语句。
#include<stdio.h>
int main(void)
{
int year,month,day,sum,leap;
printf("请按格式输入年/月/日:");
scanf("%d/%d/%d",&year,&month,&day);
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=31+28;break;
case 4:sum=31+28+31;break;
case 5:sum=31+28+31+30;break;
case 6:sum=31+28+31+30+31;break;
case 7:sum=31+28+31+30+31+30;break;
case 8:sum=31+28+31+30+31+30+31;break;
case 9:sum=31+28+31+30+31+30+31+31;break;
case 10:sum=31+28+31+30+31+30+31+31+30;break;
case 11:sum=31+28+31+30+31+30+31+31+30+31;break;
case 12:sum=31+28+31+30+31+30+31+31+30+31+30;break;
default:printf("这都能打错,你眼瞎吧!");break;
}
sum=sum+day;
if(year%400==0||(year%4==0&&year%100!=0))
{leap=1;}
else {leap=0;}
if(leap==1&&month>2)
{sum++;}
printf("这是这一年的第 %d 天。",sum);
printf("\n");
return 0;
}
输出结果
参考答案
我一开始想的是先判断闰年,再输出天数。但这样比较复杂,并且我我也卡壳了。
参考答案
总结
我 switch 语句真的忘的七七八八了,还好看书结合例题又重拾回来。建议大家在看例题的时候,也不妨看完用自己的思路敲一敲,会更加掌握要点。
1、这题不难,先在脑海里理清从什么地方开始,比如这里就是先从月-年输出天,我最开始想的是年-月输出天。考虑两种方案的复杂程度,合理选择。
2、default 语句在switch中并不是必须要的,但这个的出现可以提示操作人员出错了,在软件开发中也是蛮重要的吧。
3、若出现数据一定要用scanf语句,本质上这是个指针的存储。