Skip to main content

C++ 练习

写在前面​

  1. 括号内的为推荐使用方法,并非是唯一解,不要被括号里的方法束缚住(不过还是建议按顺序学的同学先用括号里的东西解啦:D)
  2. 做不出来可查看题解或询问人工智能,但看完后一定要自己手敲一遍
  3. 欢迎在群里问问题,但在问之前请确保自己已经思考过了
  4. 本题单只是最低限度要做的题,初学者想要完全掌握需要自己多找题多敲

基础阶段 采用洛谷题库​

顺序结构​

P1001(基本刷题系统操作)
P5706(运算、输入、输出 涉及多种数据类型)
P5708(复杂一些的运算)

分支结构​

P5711(逻辑判断)
P5713(if-else)
P5715(嵌套if)
P1909(switch if 嵌套组合)

循环结构​

P5718(for)
P5720(while)
P1980(for套while)
P5723(break与continue的使用)

数组​

P1427(数组的基本应用)
P5727(使用数组存放中间计算结果)
P5728(二维数组)
P5729(多维数组)
P5730(数组存储字符)

字符串​

P1914(scanf的使用与字符元素的处理)
P1125(strlen和strcpy的使用与字符数组)
P1957(更多与字符相关函数的使用)
P5734(string的使用)

函数与结构体​

P5735(函数)
P5738(函数传递数组名与局部变量)
P5739(递归函数)
P5741(结构体的定义与其元素访问)
P5742(构造函数)

数据结构(选做)​

P1996(链表)
P1981(栈)
P1540(队列)

以下是自命题阶段​

需自己手动输入,此处不限制输入输出样式,自行发挥

指针​

1. 指针基本操作​

题目描述​

编写一个程序,声明两个整数变量 a 和 b,分别给它们赋值。然后分别声明两个指向整数变量 a 和 b 的指针,通过指针操作交换这两个变量的值。

输入输出​

输入内容:交换前的 a 和 b 的值
输出内容:交换后的 a 和 b 的值

输入:
1 2

输出:
2 1

2. 指针与数组​

题目描述​

你现在是一只饥饿的恶龙,于是你抓来了许多人类决定饱餐一顿,但你的胃的容量是有限的,于是你决定估摸着你的饭量进食,并且为了吃到多种口感的人你决定选择多个年龄的人进食。好消息是你抓来了超多人类,坏消息是由于你很久没吃饭了胃已经坏了所以吃完后会把人吐出来。

你需要完成以下任务:

  • 使用指针分配一个大小为‘n’的数组,‘n’由你决定,代表你要吃的人类数量。
  • 依次输入你要吃的‘n’个人的年龄,并将其存储在数组中。
  • 输出数组这些人的年龄以便你对照着挑选对应的人。
  • 吐出来这些人,释放数组。

输入输出​

输入内容:吃的人类数量 n 及 n 个人类对应的年龄
输出内容:吃的所有人的年龄

输入:
5
13 24 63 54 90

输出:
13 24 63 54 90

3. 指针与结构体​

题目描述​

定义一个表示“学生”的结构体,包含成员姓名和年龄。通过指向该结构体的指针访问和修改成员。

输入输出​

输入内容:学生的名字和年龄
输出内容:修改后的学生信息

输入:
穆院士 233

输出:
姓名:穆院士,年龄:233

面向对象​

1. 要开始了吗 从类开始的面向对象冒险!​

题目描述​

勇者正在为即将到来的冒险准备武器。请你帮助他创建一把“剑”。定义一个类 Sword 来表示这把剑,包含以下功能:

  • 成员变量 length(剑的长度)和 weight(剑的重量)
  • 一个构造函数,用于初始化剑的长度和重量
  • 一个成员函数 getPower,返回剑的战斗力(计算公式:length * weight)

输入输出​

输入内容:剑的长度和重量
输出内容:剑的战斗力

输入:
5 10

输出:
50

2. 一击即破 析构函数!​

题目描述​

在这次冒险中,勇者还需要一副护甲来保护自己。定义一个类 Armor,它有以下功能:

  • 成员变量 name(护甲名称)和 defense(护甲的防御力)
  • 一个构造函数用于初始化护甲的名称和防御力
  • 一个析构函数,在护甲被废弃时输出 "护甲已被摧毁"
  • 一个成员函数 showInfo,输出护甲的名称和防御力

输入输出​

输入内容:护甲的名称和防御力
输出内容:护甲的名称、防御力,和销毁时的提示信息

输入:
超牛护甲 5000000

输出:
超牛护甲 5000000
护甲已被摧毁

3. 升级了 类的继承!​

题目描述​

勇者还需要掌握一种魔法。定义一个基类 Magic,它有一个虚函数 getPower。然后定义两个派生类:

  • FireMagic 表示火焰魔法,有一个 powerLevel 成员变量,表示魔法的威力
  • IceMagic 表示冰冻魔法,有成员变量 freezeLevel,表示冰冻效果
  • 派生类需要根据各自的属性实现 getPower 函数,返回各自的魔法威力

输入输出​

输入内容:火焰魔法的威力和冰冻魔法的效果
输出内容:火焰魔法和冰冻魔法的总威力

输入:
100 80

输出:
火焰魔法威力: 100
冰冻魔法效果: 80

4. 驯服野生怪物--重载!​

题目描述​

勇者的冒险中,他可以通过合成不同的宝石来增强战斗力。定义一个类 Gem,它有两个属性 strength(力量)和 magic(魔法),表示宝石的力量值和魔法值。重载加法运算符 +,使得两个 Gem 可以相加,合成一个新的宝石,新的宝石的力量值和魔法值是两个宝石对应属性的和。

输入输出​

输入内容:两个宝石的力量值和魔法值
输出内容:合成后的宝石的力量值和魔法值

输入:
宝石1: 力量 10, 魔法 20
宝石2: 力量 15, 魔法 25

输出:
合成后的宝石: 力量 25, 魔法 45

5. 旅途的终止 是时候睡觉了!​

题目描述​

勇者每一次冒险都会留下战斗记录,定义一个类 BattleRecord,该类有一个静态成员变量 count,用于记录勇者总共经历了多少次战斗。每当创建一个 BattleRecord 对象时,count 增加,并通过静态函数 getCount 来返回当前的战斗次数.

输入输出​

输入内容:无
输出内容:当前的战斗次数

输出:
勇者总共经历了 3 次战斗