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

简介: 本任务要求编写程序,根据用户输入的年月日(以空格或回车分隔),计算并输出该天是该年的第几天,需注意判断闰年。主要内容包括:1. **任务描述**:实现从键盘输入年月日,计算该天是当年的第几天。2. **相关知识**: - `switch` 结构的基本语法及使用注意事项。 - 判断闰年的条件:能被4整除但不能被100整除,或能被400整除的年份为闰年。3. **编程要求**:根据提示补充代码,确保程序正确处理输入并输出结果。4. **测试说示例代码展示了如何使用 `switch` 语句和闰年判断逻辑来完成任务。通过此练习,掌握 `switch` 语句的应用及闰年判断方法。

目录😋

任务描述

相关知识

1、switch 结构基本语法

2、示例代码及解释

3、使用注意事项

4、判断闰年的条件

编程要求

测试说明

通关代码

测试结果


任务描述

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

相关知识

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

  1. switch 结构的使用
  2. 判断闰年的条件

1、switch 结构基本语法

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

switch (expression) {
    case constant_expression_1:
        // 语句序列1
        break;
    case constant_expression_2:
        // 语句序列2
        break;
    // 可以有更多的case分支
    default:
        // 默认语句序列
        break;
}
image.gif
  • 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;
}
image.gif

在这个示例中:

  • 首先通过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;
}
image.gif

在这个例子中,因为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
image.gif

预期输出:

sum days of 2012  -  5  -  30  : 151
image.gif

测试输入:

2023 9 12
image.gif

预期输出:

sum days of 2023  -  9  -  12  : 255
image.gif

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


通关代码

#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);
}

image.gif


测试结果

image.gif

image.gif

目录
相关文章
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
907 3
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
1166 2
|
C语言
《C语言程序设计》一 第 1 章 程序设计概述
本节书摘来自华章出版社《C语言程序设计》一 书中的第1章,第1.1节,作者:赵宏 陈旭东 马迪芳,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1446 0
|
C语言
《C语言程序设计与实践(第2版)》——第1章 C语言与程序设计概述 1.1初见C语言程序
我国古代数学家张邱建在其编写的《算经》里提出了历史上著名的“百钱买百鸡”问题:今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只,问鸡翁、母、雏各几何?对于这个问题,很多读者在小学或初中的竞赛中可能都见到过,而且通常都采用不定方程求解。
1442 0
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
1105 23
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
682 15
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1740 0
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
819 1
一文彻底搞清楚C语言的函数
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
1062 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
563 24