C&C++控制结构实训(国防科大)

这是一个关于C/C++编程的实训课程,涵盖了分支结构和循环结构的多个关卡,包括判断闰年、计算一年中的第几天、重排数字找到最大数、黑洞陷阱问题、素数判断及求和等。每个关卡都有详细的任务描述、相关知识、编程要求和测试说明,旨在帮助学员掌握C/C++的控制结构和算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:分支结构:是闰年吗

100

  • 任务要求
  • 参考答案
  • 评论231

任务描述

本关任务:输入一个年份,判断该年份是否是闰年,是闰年则输出 Yes,否则输出 No。

相关知识

编程时有时候需要根据某个条件是否满足来选择执行或不执行某些语句。

C 和 C++ 的 if 语句可以实现这种根据条件判断来选择执行的功能。if 语句有两种形式,分别实现一路分支和两路分支。

if 语句

实现一路分支的基本方法是采用 if 语句:

 
  1. if (<条件表达式>) <语句>

其语义为:如果<条件表达式>的值为非0 ( true ),即“真”,则执行<语句>,然后按顺序执行 if 语句的后继语句。如果<条件表达式>的值为0( false ),即“假”,则忽略<语句>,按顺序执行 if 语句的后继语句。

例如:

 
  1. // 当分数 score 小于 60 时,执行输出语句,否则跳过该语句(不执行)
  2. if (score < 60)
  3. cout << "Sorry, you've failed!\n";

if...else 语句

实现两路分支的常用方法是采用 if...else 语句:

 
  1. if (<条件表达式>) <语句1>
  2. else <语句2>

其中,else 和<语句2>称为 else 分支或 else 子句。

其执行语义为:如果<条件表达式>的值为非0,即“真”( true ),则执行<语句1>,执行完<语句1>后继续执行整个 if 语句的后继语句(不执行<语句2>);如果<条件表达式>的值为0,即“假”( false ),则跳过<语句 1>,执行<语句2>,执行完<语句2>后继续执行整个 if 语句的后继语句。

即 if 语句是根据<条件表达式>的结果,选择<语句1><语句2>中的一个执行,执行完后,整个 if 语句也就执行完了。

例如:

 
  1. // 当分数 score 大于等于 60 时输出"Passed",否则输出"Failed"
  2. if (grade >= 60)
  3. cout << ″Passed\n″;
  4. else
  5. cout << ″Failed\n″;

if 语句的分支有且只能有一条语句,如果某个分支不需要做任何事时,可以使用空语句,空语句就是一个独立的分号。如果需要做很多事,一条语句完成不了,可以使用复合语句。用花括号括起来的一条或者多条语句叫复合语句,复合语句可以当做一条语句来看。

例1:

 
  1. // 当速度 speed 小于等于 120 时什么也不做,否则输出"危险驾驶"
  2. if (speed <= 120)
  3. ;// 空语句
  4. else
  5. cout<<"危险驾驶"<<endl;

例2:

 
  1. // 如果 a 大于 b 则交换 a、b 的值
  2. if (a > b)
  3. {
  4. // 复合语句
  5. int c = a;
  6. a = b;
  7. b = c;
  8. }

C 和 C++ 中任何有值的表达式都可以作为条件表达式(计算结果非0则为真,0则为假)。如果需要综合判断多个条件,就需要使用逻辑运算符了。

例如如果要描述条件“分数 x 在0到100之间”,不能使用数学中的表达形式0 <= x <= 100,而应当使用逻辑运算符x >= 0 && x <= 100

 
  1. // 逻辑与 && 表示两个条件x >= 0 和 x <= 100 都为真,结果才为真
  2. if (x >= 0 && x <= 100)
  3. ……

直接写成0 <= x <= 100编译器也不会报错,但语义完全不一样:

 
  1. // 表示先计算 0 <= x ,结果可能是 true 或者 false,然后用该结果和 100 比较,所以该条件永远为真
  2. if (0 <= x <= 100)
  3. ……

编程要求

在右侧编辑器中的Begin-End之间补充代码,判断输入的年份(输入数据由平台提供,需要你获取后再使用)是否位闰年,是则输出 Yes,否则输出 No。

提示:闰年的判别条件是该年年份能被 4 整除但不能被 100 整除、或者能被 400 整除。闰年的 2 月有 29 天,其它月份的天数和非闰年是一样的。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:2017 预期输出:No

测试输入:2000 预期输出:Yes


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

// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
    int year;
    // 请在此添加代码,判断输入的年份是否位闰年,是则输出"Yes",否则输出"No"
    /********** Begin *********/
	scanf("%d",&year);
    if((year%4==0&&year%100!=0)||year%400==0){
        printf("Yes");
    }else{
        printf("No");
    }
    /********** End **********/
    return 0;
}

第2关:分支结构:一年中的第几天

100

  • 任务要求
  • 参考答案
  • 评论231
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值