C++信息学奥赛lesson1

🚀 第一课:NOIP初体验与C++魔法入门

课程主题:初识C++、开发环境、变量与四则运算

一、 信息学奥赛(NOIP)是什么?

在开始写代码之前,我们先来看看我们要进入的这个"魔法世界"到底有多酷!

什么是NOIP?

全称是全国青少年信息学奥林匹克联赛(National Olympiad in Informatics in Provinces)。

它是五大学科竞赛之一(数学、物理、化学、生物、信息学),含金量非常高!

为什么要学它?

升学助力:成绩优异的选手可以获得名校的保送资格,或者在中考、高考中获得降分录取的优惠。

锻炼思维:它不是简单的打字,而是像科学家一样思考,像工程师一样解决问题。

未来竞争力:统计数据表明,学过信息学的孩子,逻辑思维和解决问题的能力会变得超强!

二、 认识我们的"魔法棒":Dev-C++

我们要写代码,首先需要一个工具。就像画家需要画板,我们程序员需要编译器。

这节课我们使用的是 Dev-C++(简称 Dev-C++ 或 Dev)。

界面初探:

编辑区:中间大大的白纸,我们在这里写代码。

编译按钮:像一个齿轮,用来检查代码有没有错。

运行按钮:像一个三角形(播放键),用来执行代码,看结果。

三、 第一个C++程序:Hello, World!

这是每个程序员的"成人礼"。我们要让电脑屏幕打印出一句话。

代码实操:

cpp 复制代码
include <iostream>  // 声明头文件(引入魔法库)
using namespace std; // 使用标准名空间(省去写std::的麻烦)

int main() // 主函数 - 程序的入口(每个程序都必须有且仅有一个main)
{
    cout << "Hello, World!" << endl; // 输出语句:把引号里的内容打印出来
    return 0; // 返回0,表示程序正常结束
}

知识点拆解:

cout:读作 "see-out",意思是"输出"。箭头 << 像嘴巴,把东西"吐"出来。

<< endl;:意思是"换行",相当于按了一下回车。

分号 ;:超级重要! C++里每一句话的结尾都必须有分号,就像英文句号一样。漏了分号是初学者最常见的错误!

双引号 "":如果你想输出文字(比如"你好"),必须把文字包在双引号里。如果输出数字(比如123),就不需要引号。

四、 魔法容器:变量

光会输出固定的"Hello"太无聊了,我们想让电脑帮我们算数学题。这就需要变量。

  1. 什么是变量?

    比喻:变量就像是一个带标签的盒子。

    盒子:用来装东西(比如装数字3)。

    标签:盒子的名字(比如叫 a)。

    内容:盒子里的宝贝(比如数字3)。

    特点:盒子里的宝贝是可以变的!今天装3,明天可以装5。

  2. 怎么定义一个变量?

    我们要告诉电脑:"我要用一个盒子,名字叫a,类型是整数。"

    语法:int 变量名 = 数值;

    例子:

    int a = 3; (定义了一个叫a的整数盒子,里面放了3)

    int b = 5; (定义了一个叫b的整数盒子,里面放了5)

  3. 变量命名规则(不能乱起名):

    只能包含:字母、数字、下划线 _。

    不能以数字开头:4name ❌,name4 ✅。

    区分大小写:Teacher 和 teacher 是两个不同的名字。

    不能有空格:my name ❌,可以用下划线 my_name ✅。

五、 数学魔法课:四则运算与取余

C++里的数学符号和我们平时写的一样,但也有一些特别的规则。

运算符表:

运算 符号 例子 结果

加法 + a + b 求和

减法 - a - b 求差

乘法 * a * b 求积 (注意:是星号,不是×)

除法 / 5 / 2 结果是 2 (注意:整数除法只取整数部分,砍掉小数)

取余 % 5 % 2 结果是 1 (求余数,这个符号读作"取模")

重点难点:除法 / 和 取余 %

整数除法陷阱:int a = 1 / 2; 结果是多少?是0! 因为C++规定,整数相除,结果只保留整数部分,小数点后面直接砍掉(不是四舍五入)。

取余 % 的妙用:

判断奇偶数:如果 a % 2 == 0,那就是偶数。

提取个位数:123 % 60 等于多少?(钟表问题,123秒等于2分钟3秒,余数是3)。

六、 核心算法:交换两个变量的值

这是编程里最经典的"魔术"之一。怎么把A杯子里的可乐和B杯子里的雪碧互换?

方法一:借助第三个杯子(最稳妥)

准备一个空杯子C。

把A倒进C(A空了)。

把B倒进A(B空了)。

把C倒进B。

代码实现:

cpp 复制代码
int a = 3, b = 5, c;
c = a;    // c变成3
a = b;    // a变成5
b = c;    // b变成3

方法二:加减法(不借助第三变量)

原理:利用加减法抵消。

代码:

cpp 复制代码
a = a + b;  // a变成 3+5=8
b = a - b;  // b变成 8-5=3 (原来的a)
a = a - b;  // a变成 8-3=5 (原来的b)

注意:这种方法虽然酷,但容易因为数字太大导致溢出(超出范围),所以比赛中推荐用方法一。

七、 课后练习与真题演练

结合洛谷(Luogu)和信奥一本通的题目,巩固今天所学:

  1. 洛谷 B2001 Hello, World!

    题目要求:输出 Hello, World!

    考察点:cout 的基本用法,注意标点符号是英文的。

  2. 信奥一本通 1001:交换两个数

    题目描述:输入两个整数 a 和 b,请交换它们的值,然后输出。

    样例输入:3 5

    样例输出:5 3

    提示:使用"第三个变量"的方法。

  3. 魔法任务:时间换算(拓展)

    题目描述:输入一个秒数(比如8000秒),请把它换算成 x小时y分钟z秒 的形式。

    考察点:除法 / 和取余 % 的综合运用。

    思路:

    小时 = 总秒数 / 3600

    剩下的秒数 = 总秒数 % 3600

    分钟 = 剩下的秒数 / 60

    秒 = 剩下的秒数 % 60

相关推荐
San813_LDD1 小时前
[深度学习] 数据序列化格式对比:以日志级别配置为例
xml·java·前端
jllllyuz1 小时前
MATLAB实现滚动轴承故障诊断(外圈故障)
开发语言·人工智能·matlab
github_czy1 小时前
更加优雅的类型检查与传参---mcp源码分析
java·服务器·开发语言
专注_每天进步一点点1 小时前
IDEA中,Apifox Helper 的 2.0.15-243版本的插件 导出指定的接口,入参的中文名为空,描述为空
java·ide·intellij-idea
Irissgwe1 小时前
C++ STL关联式容器详解:set、multiset、map、multimap
开发语言·c++·stl·set·map·multiset·关联式容器
兰令水1 小时前
leecodecode【区间DP+树形DP】【2026.6.10打卡-java版本】
java·算法·leetcode
Irissgwe1 小时前
string类的模拟实现
c++·string
叶帆1 小时前
【YFIOs】用C#开发硬件之WiFi网络
开发语言·网络·c#
meilindehuzi_a1 小时前
深入理解 JavaScript 的同步与异步机制:从单线程设计到 Promise 核心应用
开发语言·javascript·ecmascript