前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【C语言程序设计——选择结构程序设计】求输入的日期是该年的第几天(头歌实践教学平台习题)【合集】

【C语言程序设计——选择结构程序设计】求输入的日期是该年的第几天(头歌实践教学平台习题)【合集】

作者头像
Rossy Yan
修改2024-12-26 10:05:24
修改2024-12-26 10:05:24
6900
代码可运行
举报
运行总次数:0
代码可运行

任务描述

本关任务: 编写程序实现:从键盘上输入一个年月日(以空格或回车分隔),要求出该天是该年的第几天(注意判断该年是否是闰年)。 输出格式为:sum days of 2012 -5 -30 :151

相关知识

为了完成本关任务,你需要掌握:

  1. switch 结构的使用
  2. 判断闰年的条件
1、switch 结构基本语法

在 C语言 中,switch语句的基本形式如下:

代码语言:javascript
代码运行次数:0
复制
switch (expression) {
    case constant_expression_1:
        // 语句序列1
        break;
    case constant_expression_2:
        // 语句序列2
        break;
    // 可以有更多的case分支
    default:
        // 默认语句序列
        break;
}
  • expression:这是一个整型或枚举类型的表达式。在 C++ 中,switch表达式的类型通常是intchar(本质上也是一种小整数类型)或者枚举类型。例如,int num = 3; switch(num)是合法的,其中num是一个整数变量。
  • constant_expression:每个case后面跟着一个常量表达式。这个常量表达式的值必须是在编译时就能确定的整型或枚举类型的值,并且在同一个switch语句中,不同case后的常量表达式的值必须互不相同。例如,case 1case 'a'(字符a的 ASCII 值是 97,也是一个整数)、case MyEnum::VALUEMyEnum是一个枚举类型)都是合法的。
  • break:当执行到break语句时,程序会跳出switch语句块,继续执行switch语句后面的代码。如果没有break语句,程序会继续执行下一个case分支的代码,这种现象称为 “fall - through”(贯穿),在某些情况下可能是有意为之,但在大多数情况下可能会导致意外的行为。
  • defaultdefault分支是可选的。当expression的值与所有case后的常量表达式的值都不匹配时,就会执行default分支中的代码。
2、示例代码及解释

下面是一个简单的示例,根据用户输入的整数来输出不同的星期几:

代码语言:javascript
代码运行次数:0
复制
#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语句,可能会导致程序执行的结果不符合预期。例如:
代码语言:javascript
代码运行次数:0
复制
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 整除的年也是闰年。

编程要求

根据提示,在右侧编辑器补充代码,根据输入的年份计算并输出程序结果。

测试说明

平台会对你编写的代码进行测试:

测试输入:

代码语言:javascript
代码运行次数:0
复制
2012 5 30

预期输出:

代码语言:javascript
代码运行次数:0
复制
sum days of 2012  -  5  -  30  : 151

测试输入:

代码语言:javascript
代码运行次数:0
复制
2023 9 12

预期输出:

代码语言:javascript
代码运行次数:0
复制
sum days of 2023  -  9  -  12  : 255

开始你的任务吧,祝你成功!


我的通关代码:
代码语言:javascript
代码运行次数:0
复制
#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);
} 

测试结果:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 任务描述
  • 相关知识
    • 1、switch 结构基本语法
    • 2、示例代码及解释
    • 3、使用注意事项
  • 编程要求
  • 测试说明
    • 我的通关代码:
    • 测试结果:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档