【C语言程序设计——选择结构程序设计】求输入的日期是该年的第几天(头歌实践教学平台习题)【合集】
目录😋
任务描述
相关知识
1、switch 结构基本语法
2、示例代码及解释
3、使用注意事项
4、判断闰年的条件
编程要求
测试说明
通关代码
测试结果
任务描述
本关任务:编写程序实现:从键盘上输入一个年月日(以空格或回车分隔),要求出该天是该年的第几天(注意判断该年是否是闰年)。
相关知识
为了完成本关任务,你需要掌握:
- switch 结构的使用
- 判断闰年的条件
1、switch 结构基本语法
在 C语言 中,
switch
语句的基本形式如下:switch (expression) {case constant_expression_1:// 语句序列1break;case constant_expression_2:// 语句序列2break;// 可以有更多的case分支default:// 默认语句序列break; }
expression
:这是一个整型或枚举类型的表达式。在 C++ 中,switch
表达式的类型通常是int
、char
(本质上也是一种小整数类型)或者枚举类型。例如,int num = 3; switch(num)
是合法的,其中num
是一个整数变量。constant_expression
:每个case
后面跟着一个常量表达式。这个常量表达式的值必须是在编译时就能确定的整型或枚举类型的值,并且在同一个switch
语句中,不同case
后的常量表达式的值必须互不相同。例如,case 1
、case 'a'
(字符a
的 ASCII 值是 97,也是一个整数)、case MyEnum::VALUE
(MyEnum
是一个枚举类型)都是合法的。break
:当执行到break
语句时,程序会跳出switch
语句块,继续执行switch
语句后面的代码。如果没有break
语句,程序会继续执行下一个case
分支的代码,这种现象称为 “fall - through”(贯穿),在某些情况下可能是有意为之,但在大多数情况下可能会导致意外的行为。default
:default
分支是可选的。当expression
的值与所有case
后的常量表达式的值都不匹配时,就会执行default
分支中的代码。
2、示例代码及解释
下面是一个简单的示例,根据用户输入的整数来输出不同的星期几:
#include <stdio.h> int main() {int day;printf("请输入一个1 - 7之间的整数来表示星期几:");scanf("%d", &day);switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期日\n");break;default:printf("输入错误,请输入1 - 7之间的整数。\n");break;}return 0; }
在这个示例中:
- 首先通过
scanf
函数从用户那里获取一个整数day
。- 然后
switch
语句根据day
的值进行判断。如果day
的值为 1,就会执行case 1
分支中的代码,输出 “星期一”,然后遇到break
语句跳出switch
语句块。如果day
的值为其他合法的值(2 - 7),就会执行相应case
分支中的代码。如果day
的值不在 1 - 7 这个范围内,就会执行default
分支中的代码,提示用户输入错误。
3、使用注意事项
- 避免忘记
break
语句:如果忘记添加break
语句,可能会导致程序执行的结果不符合预期。例如:int num = 2; switch (num) {case 1:printf("One");case 2:printf("Two");case 3:printf("Three");break; }
在这个例子中,因为
num = 2
,程序会先执行case 2
分支中的printf("Two");
,但是由于没有break
语句,程序会继续执行case 3
分支中的printf("Three");
,最终输出 “TwoThree”。
- 正确使用数据类型:
switch
表达式和case
后的常量表达式都应该是整数类型(包括字符类型)。如果使用其他类型(如浮点数),编译器会报错。例如,double num = 3.0; switch(num)
是不合法的。- 合理使用
default
分支:default
分支可以用于处理意外情况或者未预料到的输入。在一些复杂的程序中,它可以作为一种错误处理或者默认行为的机制。但是在某些情况下,如果已经确定了所有可能的输入情况,也可以不使用default
分支。
4、判断闰年的条件
- 能被4 整除但不能被 100 整除的年是闰年;
- 能被 400 整除的年也是闰年。
编程要求
根据提示,在右侧编辑器补充代码,根据输入的年份计算并输出程序结果。
测试说明
平台会对你编写的代码进行测试:
测试输入:
2012 5 30
预期输出:
sum days of 2012 - 5 - 30 : 151
测试输入:
2023 9 12
预期输出:
sum days of 2023 - 9 - 12 : 255
开始你的任务吧,祝你成功!
通关代码
#include<stdio.h>
int main()
{int year,month,day,days=0 ;//printf("please input year-month-day:" ) ;/*********Begin*********/scanf("%d %d %d", &year, &month, &day);switch(month){case 12:days += 30;case 11:days += 31;case 10:days += 30;case 9:days += 31;case 8:days += 31;case 7:days += 30;case 6:days += 31;case 5:days += 30;case 4:days += 31;case 3:days += 28;if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){days += 1;}case 2:days += 31;case 1:days += day;break;return 0;}/*********End**********/ printf( "sum days of %d - %d - %d : %d" ,year,month,day, days ) ;return(0);
}