C++ 创意编程 作业清单 ← 三科总览 配套课文 Word 版 ↓ 打印 / 存 PDF

C++ 创意编程 作业练习清单

顺序 → 选择 → 循环 → 数组 → 函数 → 指针,算法思维逐级进阶。

120道作业
85课全覆盖
35基础 ★
64进阶 ★★
21挑战 ★★★

快速跳转

  1. 第1部分 初识 C++ —— 顺序结构
  2. 第2部分 智能的开始 —— 选择结构
  3. 第3部分 不辞辛苦 —— 循环结构
  4. 第4部分 点、线、面、立体的组合 —— 数组
  5. 第5部分 功能的复用 —— 函数
  6. 第6部分 C++ 的灵魂 —— 指针
第1部分 初识 C++ —— 顺序结构22 题
  1. 1.
    编写第一个 C++ 程序,输出一行“Hello, C++!”。
    记住 main 函数和 return 0 的写法。
    对应第1课 被玩坏的字符
    ★☆☆
  2. 2.
    用 cout 输出一首 4 行的古诗,注意每行都要换行。
    endl 或 \n 都可以换行。
    对应第1课 被玩坏的字符
    ★★☆
  3. 3.
    用 cin 读入一个整数,再把它原样输出。
    cin >> 变量; 注意箭头的方向。
    对应第2课 蹩脚的“ChatGPT”
    ★☆☆
  4. 4.
    输入你的姓名和年龄,输出“我是XX,今年X岁”。
    字符串用 string,注意头文件。
    对应第2课 蹩脚的“ChatGPT”
    ★★☆
  5. 5.
    输入两个整数,交换后输出(不使用第三个变量)。
    可以用 a=a+b; b=a-b; a=a-b;
    对应第3课 舞动的机器人
    ★☆☆
  6. 6.
    趣味输入:输入一个字符,输出由它组成的 5×5 方阵。
    两层循环,或直接用 5 行 cout。
    对应第3课 舞动的机器人
    ★★☆
  7. 7.
    计算 25×4+18÷3 的结果并输出,注意整数除法。
    5/2 在 C++ 里等于 2。
    对应第4课 一桩大买卖
    ★☆☆
  8. 8.
    输入商品单价和数量,计算总价(保留 2 位小数)。
    用 double 和 fixed<<setprecision(2)。
    对应第4课 一桩大买卖
    ★★☆
  9. 9.
    输入圆的半径,输出面积(π=3.14159,保留 2 位小数)。
    半径要用 double 类型。
    对应第5课 这面积总缺那么一点
    ★☆☆
  10. 10.
    计算 1/3 并分别以 int 和 double 输出,比较差异并说明原因。
    整数除法会丢掉小数部分。
    对应第5课 这面积总缺那么一点
    ★★☆
  11. 11.
    数羊:输出 1 到 100,每行 10 个数字。
    用计数变量配合 if 控制换行。
    对应第6课 睡不着就数羊
    ★☆☆
  12. 12.
    统计 1-100 中数字“1”出现了多少次。
    分别看个位和十位。
    对应第6课 睡不着就数羊
    ★★☆
  13. 13.
    输入层数 n,输出 n 行的星号金字塔(居中对齐)。
    每行 = 空格 + 星号,找规律。
    对应第7课 星号金字塔
    ★★☆
  14. 14.
    输出倒金字塔,与正金字塔拼成一个菱形。
    把正三角和倒三角的代码拼起来。
    对应第7课 星号金字塔
    ★★★
  15. 15.
    计算 10 的阶乘(10!)并输出。
    注意结果会不会超出 int 范围。
    对应第8课 可怕的核废水
    ★★☆
  16. 16.
    核废水半衰:输入初始量和天数,每过 1 天衰减一半,输出剩余量。
    循环里不断除以 2。
    对应第8课 可怕的核废水
    ★★★
  17. 17.
    陈醋和酱油互换:两个变量 a、b 交换值并输出。
    经典三行交换法。
    对应第9课 陈醋和酱油不能混为一瓶
    ★☆☆
  18. 18.
    用 system() 调用系统命令(如清屏 cls),观察效果。
    不同系统的命令不同,注意区分。
    对应第10课 神秘的摩斯密码
    ★★☆
  19. 19.
    安排出游车辆:输入总人数和每车容量,计算需要几辆车(有余数要多一辆)。
    用 % 判断有没有余数。
    对应第11课 安排出游车辆
    ★★☆
  20. 20.
    输入一个十进制数,输出它的二进制表示(自己用除 2 取余法实现)。
    把余数倒序拼起来。
    对应第12课 小数字大学问
    ★★☆
  21. 21.
    输入一个大写字母,输出它对应的 ASCII 码,以及它的小写形式。
    大小写相差 32。
    对应第13课 ASCII编码背后的秘密
    ★★☆
  22. 22.
    用 setw 输出一张整齐的“商品价目表”,各列左对齐或右对齐。
    setw 需要 #include <iomanip>。
    对应第14课 列竖式做计算
    ★★☆
第2部分 智能的开始 —— 选择结构24 题
  1. 23.
    发热分诊台:输入体温,≥37.3 输出“请到发热门诊”,否则输出“普通门诊”。
    if 的基本用法。
    对应第15课 发热分诊台
    ★☆☆
  2. 24.
    输入年龄,判断是否成年(≥18),输出不同提示。
    注意比较运算符别写成赋值号。
    对应第15课 发热分诊台
    ★★☆
  3. 25.
    输入一个三位数,判断它是否同时能被 3 和 5 整除。
    用 && 连接两个条件。
    对应第16课 条件有点多
    ★☆☆
  4. 26.
    输入三个数,输出其中最大的一个(用多个 if)。
    先假设第一个最大,再逐个比较。
    对应第16课 条件有点多
    ★★☆
  5. 27.
    零售与批发:购买数量 ≥10 打 8 折,否则原价,输出应付金额。
    const 定义常量更规范。
    对应第17课 零售与批发
    ★☆☆
  6. 28.
    输入一个整数,判断它是正数、负数还是零。
    三种情况,注意 else 的归属。
    对应第17课 零售与批发
    ★★☆
  7. 29.
    血压侦测:输入高压和低压,用逻辑运算符判断是否正常。
    正常范围:90-140 / 60-90。
    对应第18课 血压侦测
    ★☆☆
  8. 30.
    输入年份和月份,输出这个月有多少天(不考虑闰年就是 2 月 28 天)。
    1、3、5、7、8、10、12 月是 31 天。
    对应第18课 血压侦测
    ★★☆
  9. 31.
    识别通道:输入坐标 (x, y),判断点在第几象限。
    if 嵌套先判断正负。
    对应第19课 识别通道
    ★☆☆
  10. 32.
    输入三个边长,先判断能否构成三角形,再判断是等边、等腰还是直角。
    三角形条件:任意两边之和大于第三边。
    对应第19课 识别通道
    ★★★
  11. 33.
    饭后小娱乐:输入骰子点数,输出对应的奖励或惩罚。
    用 switch 更清爽。
    对应第20课 饭后小娱乐
    ★★☆
  12. 34.
    输入一个字母,用 isupper / islower 判断大小写并输出。
    需要 #include <cctype>。
    对应第21课 大写或小写
    ★☆☆
  13. 35.
    输入一个字母,大写转小写、小写转大写后输出。
    大小写 ASCII 相差 32。
    对应第21课 大写或小写
    ★★☆
  14. 36.
    输入两个数,输出它们的差的绝对值(不要直接用 abs)。
    用 if 判断谁大谁小。
    对应第22课 大要最大,小要最小
    ★☆☆
  15. 37.
    输入三个人的身高,按从高到矮排序输出。
    两两比较交换,需要三次比较。
    对应第22课 大要最大,小要最小
    ★★☆
  16. 38.
    排高矮:输入 5 个身高,用循环 + 选择排序输出有序结果。
    先会三个数排序,再推广到五个。
    对应第23课 排高矮
    ★★☆
  17. 39.
    阶梯水价:0-10 吨 2 元/吨,11-20 吨 3 元/吨,20 吨以上 5 元/吨,输入用水量求水费。
    分段计算,注意区间边界。
    对应第24课 复杂的阶梯价
    ★★★
  18. 40.
    输入三角形三边,输出它的面积(海伦公式)。
    先用 if 判断能否构成三角形。
    对应第25课 古老的三角形王国
    ★☆☆
  19. 41.
    投票计数器:输入 5 张选票(1 或 2),用三目运算符统计并输出谁获胜。
    条件 ? 值1 : 值2
    对应第26课 投票计数器
    ★★☆
  20. 42.
    匹配翻译:输入 1-7,用 switch 输出对应的星期英文。
    别忘了每个 case 后的 break。
    对应第27课 匹配翻译
    ★☆☆
  21. 43.
    输入月份,用 switch 输出这个月的季节(春/夏/秋/冬)。
    多个 case 可以共用一段代码。
    对应第27课 匹配翻译
    ★★☆
  22. 44.
    游戏段位:输入分数,用 switch 输出青铜/白银/黄金/钻石/王者。
    可以把分数除以 20 再 switch。
    对应第28课 从青铜到王者
    ★★☆
  23. 45.
    心理测试小游戏:5 道题,每题输入 A/B,用 if 与 switch 嵌套统计结果。
    先统计计数,再判断类型。
    对应第29课 不太准的心理测试
    ★★★
  24. 46.
    3、7 过游戏:从 1 数到 100,遇到 3 的倍数说“过”,7 的倍数也说“过”,同时是倍数说“过过”。
    注意判断顺序,先判同时满足的情况。
    对应第30课 3、7过游戏
    ★★★
第3部分 不辞辛苦 —— 循环结构40 题
  1. 47.
    用 while 循环打印 1 到 20。
    while 的三要素:初值、条件、自增。
    对应第31课 不睡觉的计算机
    ★☆☆
  2. 48.
    输入一个正整数 n,用 while 输出它的所有位数(从个位开始)。
    n%10 取个位,n/=10 去掉个位。
    对应第32课 病毒弹窗
    ★☆☆
  3. 49.
    趣味青蛙:输入青蛙每次跳的格子和总距离,计算几次能跳到。
    用循环模拟每一次跳。
    对应第33课 趣味青蛙游戏
    ★☆☆
  4. 50.
    输入 10 个成绩,输出最高分、最低分和平均分。
    边读边更新 max 和 min。
    对应第33课 趣味青蛙游戏
    ★★☆
  5. 51.
    竞赛得分:输入 7 个评委打分,去掉一个最高分和一个最低分后求平均分。
    经典算法,注意保留小数。
    对应第34课 竞赛得分
    ★★☆
  6. 52.
    每天努力一点点:初始能力值 1,每天进步 1%,求 365 天后的能力值。
    对比每天退步 1% 的结果。
    对应第35课 每天努力一点点
    ★★☆
  7. 53.
    输入一个小数,判断它有几位小数(用循环不断乘 10 比较)。
    浮点比较要小心精度。
    对应第36课 小数位数的纠结
    ★★☆
  8. 54.
    求两个数的最小公倍数(用穷举 + break)。
    从较大的数开始往上找。
    对应第37课 最小公倍数
    ★★☆
  9. 55.
    求两个数的最大公约数(辗转相除法)。
    while(b){ t=a%b; a=b; b=t; }
    对应第38课 最大公约数
    ★★☆
  10. 56.
    用最大公约数求最小公倍数,对比穷举法效率。
    LCM = a*b/GCD
    对应第38课 最大公约数
    ★★★
  11. 57.
    冰雹猜想:输入一个正整数,奇数则乘 3 加 1,偶数则除以 2,直到变成 1,输出每一步。
    别忘了输出总步数。
    对应第39课 神奇的冰雹猜想
    ★★☆
  12. 58.
    暴力破解:一个三位数密码,已知各位数字之和为 15,输出所有可能的密码。
    三层循环穷举。
    对应第40课 暴力破解
    ★★☆
  13. 59.
    输入一个数,找出所有能把它整除的数(因数)。
    循环到它的一半即可。
    对应第40课 暴力破解
    ★★★
  14. 60.
    用 do-while 实现密码箱:反复输入密码直到正确为止。
    do-while 至少执行一次。
    对应第41课 无限次的密码箱
    ★☆☆
  15. 61.
    对比 while 和 do-while:分别写同一个程序,说明区别。
    条件一开始就不成立时差别最明显。
    对应第41课 无限次的密码箱
    ★★☆
  16. 62.
    倒立的数字:输入一个整数,把它倒序输出。
    反复 %10 和 /10。
    对应第42课 倒立的数字
    ★★☆
  17. 63.
    判断一个整数是不是回文数(正着读反着读一样)。
    倒过来和原数比较。
    对应第42课 倒立的数字
    ★★☆
  18. 64.
    用 for 循环打印 1 到 100。
    for(初值; 条件; 变化)
    对应第43课 紧箍咒
    ★☆☆
  19. 65.
    分成两队:输入 10 个身高,奇数身高进 A 队,偶数进 B 队,输出两队人数。
    for + if + 两个计数器。
    对应第44课 分成两队
    ★☆☆
  20. 66.
    求 1-100 中所有能被 7 整除的数的和。
    累加前先判断。
    对应第44课 分成两队
    ★★☆
  21. 67.
    输入 n,求 1+2+…+n 的和(用 for)。
    对比 while 版本。
    对应第45课 求和升级
    ★☆☆
  22. 68.
    给不起的麦子:棋盘第 1 格放 1 粒,以后每格翻倍,求 64 格总共多少粒。
    体会“指数爆炸”与整数溢出。
    对应第46课 给不起的麦子
    ★★☆
  23. 69.
    谁是窃贼:甲乙丙丁四人中一人是小偷,四人各说一句话,只有一人说假话,编程找出小偷。
    穷举 + 逻辑判断。
    对应第47课 谁是窃贼
    ★★★
  24. 70.
    输出 A 到 Z 的所有大写字母及其 ASCII 码。
    字符可以当循环变量。
    对应第48课 字母游戏
    ★☆☆
  25. 71.
    打印 1-20,但跳过所有 5 的倍数(用 continue)。
    continue 跳过本次循环体剩余部分。
    对应第49课 我要继续
    ★☆☆
  26. 72.
    输出斐波那契数列的前 30 项。
    a, b = b, a+b 的 C++ 写法。
    对应第50课 大自然的神奇数列
    ★★☆
  27. 73.
    输入一个数,判断它是不是质数(用标记法)。
    循环到 sqrt(n) 就可以。
    对应第51课 我是质数吗
    ★★☆
  28. 74.
    输出 100 以内的所有质数,每行 5 个。
    两层循环:外层枚举,内层判断。
    对应第51课 我是质数吗
    ★★★
  29. 75.
    输出 1e7、1.7e+007 等科学记数法对应的普通数字。
    理解科学记数法不是乱码。
    对应第52课 1.7e+007不是乱码
    ★★☆
  30. 76.
    分数计算器:输入两个分数,完成加、减、乘、除并输出最简结果。
    通分 + 约分(用最大公约数)。
    对应第53课 分数也能计算
    ★★★
  31. 77.
    用循环嵌套输出 5 行 5 列的星号方阵。
    外层管行,内层管列。
    对应第54课 危险!危险!
    ★☆☆
  32. 78.
    输出直角三角形、等腰三角形和菱形各一个。
    找空格和星号的数量规律。
    对应第54课 危险!危险!
    ★★☆
  33. 79.
    字母闪烁:输出一个由字母组成的动画效果(三重循环延时)。
    注意别让循环次数太多。
    对应第55课 字母闪烁
    ★★★
  34. 80.
    骰子电子屏:模拟掷骰子 100 次,统计每个点数出现的次数。
    用数组计数 + rand()。
    对应第56课 骰子电子屏
    ★★☆
  35. 81.
    输入层数,输出一棵圣诞树(三角形树冠 + 树干)。
    分两部分:树冠循环 + 树干循环。
    对应第57课 一棵圣诞树
    ★★☆
  36. 82.
    输出完整的九九乘法表。
    注意对齐,用 setw。
    对应第58课 经典之九九乘法表
    ★★☆
  37. 83.
    鸡兔同笼:输入头和脚的总数,输出鸡和兔各有多少只。
    穷举鸡的数量即可。
    对应第59课 经典之鸡兔同笼
    ★★☆
  38. 84.
    百钱百鸡:公鸡 5 钱、母鸡 3 钱、小鸡 3 只 1 钱,100 钱买 100 只鸡,输出所有方案。
    三重循环或两重循环优化。
    对应第60课 经典之百钱百鸡问题
    ★★★
  39. 85.
    输入年份和月份,输出这个月的日历(注意星期对齐和闰年)。
    先算这个月 1 号是星期几。
    对应第61课 一本日历
    ★★★
  40. 86.
    有人说谎:5 个人各说一句话,只有 2 人说谎,编程找出真相。
    穷举 + 逻辑表达式。
    对应第62课 有人说谎
    ★★★
第4部分 点、线、面、立体的组合 —— 数组13 题
  1. 87.
    定义长度为 10 的整型数组,输入 10 个数后原样输出。
    下标从 0 开始。
    对应第63课 加强训练
    ★☆☆
  2. 88.
    统计校服:输入 20 个同学的校服尺码,统计每种尺码的人数。
    用数组做计数器。
    对应第64课 统计校服
    ★☆☆
  3. 89.
    输入 10 个数,统计其中大于平均数的有多少个。
    先求平均,再遍历统计。
    对应第64课 统计校服
    ★★☆
  4. 90.
    热闹的火柿节:输入每天卖出的柿子数,输出总销量和销量最高的是第几天。
    记录最大值的下标。
    对应第65课 热闹的火柿节
    ★★☆
  5. 91.
    用冒泡排序把 10 个数从小到大排列,并输出每一轮的中间结果。
    相邻比较交换,外层 n-1 轮。
    对应第66课 经典之冒泡排序
    ★★☆
  6. 92.
    用选择排序把 10 个数从大到小排列。
    每轮找最值,放到已排好部分的末尾。
    对应第67课 经典之选择排序
    ★★☆
  7. 93.
    对比冒泡排序和选择排序:各排序 20 个数,统计比较次数和交换次数。
    体会两种算法的效率差别。
    对应第67课 经典之选择排序
    ★★★
  8. 94.
    字符串密码:输入一个字符串,把每个字符后移 3 位后输出(凯撒加密)。
    字符数组 + ASCII 运算。
    对应第68课 字符串密码
    ★★☆
  9. 95.
    输入一个字符串,统计其中字母、数字和空格的个数。
    用 isalpha / isdigit 判断。
    对应第68课 字符串密码
    ★★☆
  10. 96.
    定义一个 3×3 的二维数组,输入后按矩阵形式输出。
    两层循环输入输出。
    对应第69课 二维矩阵
    ★☆☆
  11. 97.
    求一个 3×4 矩阵的每一行之和与所有元素的总和。
    行列下标别写反。
    对应第69课 二维矩阵
    ★★☆
  12. 98.
    把一个 3×3 矩阵顺时针旋转 90 度后输出。
    找下标变换规律:a[i][j] → a[j][n-1-i]。
    对应第70课 翻转钥匙
    ★★☆
  13. 99.
    输入 5×5 矩阵,求两条对角线元素之和。
    主对角线 i==j,副对角线 i+j==4。
    对应第70课 翻转钥匙
    ★★★
第5部分 功能的复用 —— 函数13 题
  1. 100.
    定义一个打印欢迎语的函数,在主程序中调用 3 次。
    函数要先声明或定义在调用之前。
    对应第71课 组装一架飞机
    ★☆☆
  2. 101.
    把“组装飞机”的步骤拆成 3 个函数,主程序依次调用。
    体会“分而治之”。
    对应第71课 组装一架飞机
    ★★☆
  3. 102.
    写一个 max(a, b) 函数返回两个数中的较大值。
    注意 return 的类型。
    对应第72课 挑个最大的
    ★☆☆
  4. 103.
    写一个函数把十进制数转成二进制输出。
    参数是要转换的数。
    对应第73课 进制小case
    ★☆☆
  5. 104.
    写一个函数把十进制转成任意进制(2、8、16)。
    两个参数:数值和目标进制。
    对应第73课 进制小case
    ★★☆
  6. 105.
    写一个函数计算两个数的加、减、乘、除(通过参数返回多个结果)。
    可以用引用参数。
    对应第74课 计算小能手
    ★☆☆
  7. 106.
    写一个判断质数的函数 isPrime(n),返回 bool。
    主程序里调用它输出 100 以内质数。
    对应第74课 计算小能手
    ★★☆
  8. 107.
    改错:全局变量和局部变量重名导致结果错误,请修复并说明作用域。
    局部变量会“遮蔽”全局变量。
    对应第75课 我和你一样却不一样
    ★★☆
  9. 108.
    写一个函数,用静态局部变量记录自己被调用了几次。
    static 变量只初始化一次。
    对应第75课 我和你一样却不一样
    ★★☆
  10. 109.
    移位加密:写一个函数把字符串每个字符后移 k 位(k 为参数)。
    函数 + 字符数组。
    对应第76课 移位加密
    ★★☆
  11. 110.
    写一个函数接收数组和长度,返回数组平均值。
    数组作为参数要传长度。
    对应第77课 数组也能传
    ★★☆
  12. 111.
    写一个函数实现数组的冒泡排序(数组作为参数传入)。
    在函数里修改数组会影响原数组。
    对应第77课 数组也能传
    ★★★
  13. 112.
    写一个 factorial(n) 函数,并用它求 1!+2!+…+10! 的和。
    函数可以自己调用自己(递归),也可以用循环。
    对应第78课 阶乘再求和
    ★★★
第6部分 C++ 的灵魂 —— 指针8 题
  1. 113.
    定义变量 a,用指针 p 指向它,通过 p 输出 a 的地址和值。
    & 取地址,* 解引用。
    对应第79课 探寻宝藏的地址
    ★☆☆
  2. 114.
    通过指针修改变量的值,观察原变量的变化。
    *p = 100;
    对应第79课 探寻宝藏的地址
    ★★☆
  3. 115.
    用指针遍历一个数组,输出每个元素。
    p++ 会跳到下一个元素。
    对应第80课 穿越时空
    ★☆☆
  4. 116.
    投票表决:输入 5 张选票,用指针操作数组统计票数。
    用 *(p+i) 访问元素。
    对应第81课 投票表决
    ★★☆
  5. 117.
    用指针找到数组中的最大值(“指向火车头”)。
    用指针记录最大值的位置。
    对应第82课 指向火车头
    ★★☆
  6. 118.
    用指针实现字符串的连接(接上就是喜欢)。
    字符指针逐个字符处理。
    对应第83课 接上就是喜欢
    ★★☆
  7. 119.
    写一个 swap 函数,用指针参数真正交换两个变量的值(对比值传递版本)。
    为什么普通的参数交换不生效?
    对应第84课 函数里的交换
    ★★★
  8. 120.
    综合:用指针实现数组的逆序存放,并说明指针与数组、函数的关系。
    两个指针,一头一尾对调。
    对应第85课 双双指向
    ★★★
使用建议:每学完一课做对应的 1–2 题;★ 为课堂当堂完成,★★ 为课后作业,★★★ 为选做挑战。 勾选框可直接点击打勾(也可打印后在纸上打勾)。遇到卡住的题,回到对应课文页看原书讲解。