🚀 第一课: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"太无聊了,我们想让电脑帮我们算数学题。这就需要变量。
-
什么是变量?
比喻:变量就像是一个带标签的盒子。
盒子:用来装东西(比如装数字3)。
标签:盒子的名字(比如叫 a)。
内容:盒子里的宝贝(比如数字3)。
特点:盒子里的宝贝是可以变的!今天装3,明天可以装5。
-
怎么定义一个变量?
我们要告诉电脑:"我要用一个盒子,名字叫a,类型是整数。"
语法:int 变量名 = 数值;
例子:
int a = 3; (定义了一个叫a的整数盒子,里面放了3)
int b = 5; (定义了一个叫b的整数盒子,里面放了5)
-
变量命名规则(不能乱起名):
只能包含:字母、数字、下划线 _。
不能以数字开头: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)和信奥一本通的题目,巩固今天所学:
-
洛谷 B2001 Hello, World!
题目要求:输出 Hello, World!
考察点:cout 的基本用法,注意标点符号是英文的。
-
信奥一本通 1001:交换两个数
题目描述:输入两个整数 a 和 b,请交换它们的值,然后输出。
样例输入:3 5
样例输出:5 3
提示:使用"第三个变量"的方法。
-
魔法任务:时间换算(拓展)
题目描述:输入一个秒数(比如8000秒),请把它换算成 x小时y分钟z秒 的形式。
考察点:除法 / 和取余 % 的综合运用。
思路:
小时 = 总秒数 / 3600
剩下的秒数 = 总秒数 % 3600
分钟 = 剩下的秒数 / 60
秒 = 剩下的秒数 % 60