c++寒假营day01下午

C++寒假营 Day01 下午课件:基础运算与入门习题精讲


一、课程大纲

第一部分:复习与引入

  • 上午知识点快速回顾(数据类型、变量、Hello World)
  • 数据类型存储空间深入理解(结合文档内容)
  • 从上午的"输出"到下午的"计算"过渡

第二部分:基本运算与表达式

  • 算术运算符(+、-、*、/、%)
  • 赋值运算符(=、+=、-=等)
  • 运算符优先级
  • 简单数学表达式编写

第三部分:入门习题精讲

  • P1010:计算分数的浮点数值(数据类型转换)
  • P2067:圆(圆周率计算)
  • P1011:甲流疫情死亡率(百分比计算)
  • P1037:2的n次幂(幂运算)
  • P1012:多项式计算

第四部分:实践练习与总结

  • 课堂练习:完成2-3个简单题目
  • 常见错误分析
  • 今日知识点总结

二、详细知识点

1. 数据类型存储空间深入理解

文档内容解析:
复制代码
Short:2字节
Int:4字节
Long long:8字节
Byte是最小的可操作单位
bit是最小的单位
1byte(字节)=8bits(位)
1KB(千字节)=1024bytes(字节)
1MB(兆字节)=1024KB
1GB(吉字节)=1024MB
教学讲解:

类比教学法:

  • bit(位):最小的存储单位,就像一粒米
  • byte(字节):8个bit组成1个字节,就像一碗饭(8粒米)
  • 数据类型:不同大小的"盒子"来装数据
cpp 复制代码
// 查看数据类型大小
#include <iostream>


using namespace std;

int main() {
    cout << "short类型大小: " << sizeof(short) << " 字节" << endl;
    cout << "int类型大小: " << sizeof(int) << " 字节" << endl;
    cout << "long long类型大小: " << sizeof(long long) << " 字节" << endl;
    cout << "float类型大小: " << sizeof(float) << " 字节" << endl;
    cout << "double类型大小: " << sizeof(double) << " 字节" << endl;
    cout << "char类型大小: " << sizeof(char) << " 字节" << endl;
    cout << "bool类型大小: " << sizeof(bool) << " 字节" << endl;
    
    return 0;
}
取值范围计算:
  • short(2字节 = 16位)
    • 有符号:-2¹⁵ ~ 2¹⁵-1 = -32768 ~ 32767
    • 无符号:0 ~ 2¹⁶-1 = 0 ~ 65535

趣味提问:

  • "为什么short的最大值是32767?"
  • "如果我们要存储班级人数(50人),用short够不够?"
  • "如果要存储全国人口数,应该用什么类型?"

2. 基本运算与表达式

(1) 算术运算符
cpp 复制代码
// 五种基本算术运算符
int a = 10, b = 3;
int sum = a + b;      // 加法:13
int diff = a - b;     // 减法:7
int product = a * b;  // 乘法:30
int quotient = a / b; // 除法:3(整数除法)
int remainder = a % b;// 取余:1
(2) 整数除法与浮点数除法
cpp 复制代码
// 重要概念:整数除法 vs 浮点数除法
int a = 7, b = 2;
int intResult = a / b;      // 结果是3,不是3.5!
double doubleResult = a / b; // 仍然是3.0,因为a/b先进行整数除法

// 正确的浮点数除法
double correctResult1 = (double)a / b;  // 3.5
double correctResult2 = a / 2.0;        // 3.5
(3) 赋值运算符
cpp 复制代码
int x = 10;
x += 5;   // x = x + 5,现在x=15
x -= 3;   // x = x - 3,现在x=12
x *= 2;   // x = x * 2,现在x=24
x /= 4;   // x = x / 4,现在x=6
x %= 4;   // x = x % 4,现在x=2
(4) 运算符优先级

记忆口诀: 先乘除,后加减,括号最先

cpp 复制代码
int result1 = 2 + 3 * 4;    // 14,不是20!
int result2 = (2 + 3) * 4;  // 20
int result3 = 10 / 2 * 5;   // 25,从左到右
int result4 = 10 * 2 / 5;   // 4

3. 入门习题精讲

题目1:P1010 计算分数的浮点数值

题目要求: 输入两个整数a和b,计算a/b的浮点数值

cpp 复制代码
#include <iostream>


#include <iomanip>  // 用于控制输出格式
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    
    // 方法1:类型转换
    double result1 = (double)a / b;
    
    // 方法2:乘以1.0
    double result2 = a * 1.0 / b;
    
    // 控制输出小数位数(保留9位小数)
    cout << fixed << setprecision(9) << result1 << endl;
    
    return 0;
}

教学要点:

  • 强调整数除法和浮点数除法的区别
  • 介绍两种类型转换方法
  • 讲解如何控制输出精度
题目2:P2067 圆

题目要求: 输入圆的半径r,输出圆的直径、周长、面积

cpp 复制代码
#include <iostream>


#include <iomanip>


using namespace std;

int main() {
    double r;
    const double PI = 3.14159;  // 定义常量
    
    cin >> r;
    
    double diameter = 2 * r;          // 直径
    double circumference = 2 * PI * r; // 周长
    double area = PI * r * r;         // 面积
    
    cout << fixed << setprecision(4);
    cout << diameter << endl;
    cout << circumference << endl;
    cout << area << endl;
    
    return 0;
}

教学要点:

  • 常量的定义和使用(const)
  • 数学公式的C++实现
  • 圆周率的精确度选择
题目3:P1011 甲流疫情死亡率

题目要求: 计算死亡率百分比

cpp 复制代码
#include <iostream>


#include <iomanip>


using namespace std;

int main() {
    int confirmed, deaths;
    cin >> confirmed >> deaths;
    
    // 计算死亡率百分比
    double mortalityRate = deaths * 100.0 / confirmed;
    
    cout << fixed << setprecision(3);
    cout << mortalityRate << "%" << endl;
    
    return 0;
}
题目4:P1037 2的n次幂

题目要求: 计算2的n次方

cpp 复制代码
#include <iostream>


#include <cmath>  // 数学函数库
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 方法1:使用pow函数
    double result1 = pow(2, n);
    
    // 方法2:使用位运算(扩展知识)
    // 2的n次方等于1左移n位
    int result2 = 1 << n;  // 只适用于整数且n不太大
    
    cout << result1 << endl;
    
    return 0;
}

教学要点:

  • 引入cmath数学库
  • pow函数的使用方法
题目5:P1012 多项式计算

题目要求: 计算多项式f(x)=ax³+bx²+cx+d的值

cpp 复制代码
#include <iostream>


#include <iomanip>


#include <cmath>


using namespace std;

int main() {
    double x, a, b, c, d;
    cin >> x >> a >> b >> c >> d;
    
    // 直接计算法
    double result1 = a*x*x*x + b*x*x + c*x + d;
    
    // 使用pow函数
    double result2 = a*pow(x,3) + b*pow(x,2) + c*x + d;
    
    // 秦九韶算法(优化,减少乘法次数)
    double result3 = ((a*x + b)*x + c)*x + d;
    
    cout << fixed << setprecision(7);
    cout << result1 << endl;
    
    return 0;
}

4. 等差数列与幂运算(文档内容补充)

等差数列通项公式讲解:
复制代码
文档内容:
1 4 7 10..  d=4-1=3
1~4(2): 1x3+1=4
1~7(3): 2x3+1=7
1~10(4): 3x3+1=10
...
1~?(100):99x3+1=298

通项公式: an = a1 + (n-1) * d

cpp 复制代码
// 计算等差数列第n项
#include <iostream>


using namespace std;

int main() {
    int a1 = 1;  // 首项
    int d = 3;   // 公差
    int n = 100; // 第100项
    
    int an = a1 + (n - 1) * d;  // 通项公式
    cout << "第" << n << "项是:" << an << endl;
    
    return 0;
}
幂运算深入:
复制代码
文档内容:
2**n:n个2相乘
2**2=2*2=4
2**3=2*2*2=8
2**4=2*2*2*2=16
cpp 复制代码
// 手动计算2的n次方(不使用pow)
#include <iostream>


using namespace std;

int main() {
    int n;
    cin >> n;
    
    long long result = 1;  // 使用long long防止溢出
    
    for(int i = 0; i < n; i++) {
        result *= 2;  // 循环n次,每次乘以2
    }
    
    cout << "2的" << n << "次方是:" << result << endl;
    
    return 0;
}

三、课堂活动

活动1:数据类型大小猜猜猜

目的: 巩固数据类型存储空间知识
规则:

  1. 老师提问数据类型,学生猜测大小
  2. 用sizeof()验证答案

活动2:运算符优先级挑战赛

目的: 掌握运算符优先级
题目:

cpp 复制代码
int a = 5, b = 3, c = 2;
// 计算以下表达式:
1. a + b * c
2. (a + b) * c
3. a * b / c
4. a % b + c
5. a += b *= c

活动3:编程小医生

目的: 识别和修正常见错误
有错误的代码:

cpp 复制代码
#include <iostream>


using namespace std;

int main() {
    int a = 5, b = 2;
    double result = a / b;
    cout << "5除以2等于:" << result << endl;
    
    int x = 100000;
    short y = x;
    cout << "y的值是:" << y << endl;
    
    return 0;
}

任务: 找出代码中的问题并修正

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    double a = 5, b = 2;
    double result = a / b;
    cout << "5除以2等于:" << result << endl;
    
    int x = 100000;
    int y = x;
    cout << "y的值是:" << y << endl;
    
    return 0;
}

  • 对比: 整数除法vs浮点数除法,不同数据类型的存储
  • 可视化: 用盒子大小比喻数据类型大小
  • 生活化例子:
    • 除法:分披萨(整数块vs精确重量)
    • 数据类型:不同大小的书包装不同物品

常见问题预测与解答

Q1:为什么5/2等于2而不是2.5?

A:因为5和2都是整数,C++默认进行整数除法,要去掉小数部分。要得到2.5,需要写成5.0/2或(double)5/2。

Q2:什么是溢出?

A:就像用一个小杯子装太多水会溢出一样,当一个变量的值超过它能存储的最大值时,就会发生溢出。

Q3:为什么要用double而不是float?

A:double精度更高,能表示更多小数位,对于初学者来说更不容易出错。

Q4:const是什么?为什么要用?

A:const表示常量,一旦赋值就不能改变。用const定义像π这样的固定值,可以防止意外修改,也让代码更易读。

基础作业(必做):

  1. 完成P1010、P2067、P1011三个题目
  2. 编写程序计算:已知等差数列首项为2,公差为5,求第20项的值
  3. 思考:如果要计算(3+4)×5÷2-1,C++表达式应该怎么写?

提高作业(选做):

  1. 完成P1037和P1012题目
  2. 尝试用两种方法计算2的10次方(pow函数和循环)
  3. 研究:当int类型溢出时会发生什么?写程序验证

板书

复制代码
左侧黑板:                     右侧黑板:
                          下午主题:计算的世界
数据类型大小:               基本运算符:
short: 2字节 (-32768~32767)   +  -  *  /  %
int: 4字节                   += -= *= /= %=
long long: 8字节             优先级:先*/%后+-
                          括号最优先

重要概念:
整数除法 vs 浮点数除法       课堂练习题目:
5/2 = 2                     P1010:分数计算
5.0/2 = 2.5                 P2067:圆的计算
(double)5/2 = 2.5           P1011:死亡率计算

溢出示例:
short s = 32767;           幂运算:
s = s + 1; // 溢出!        2³ = pow(2,3) = 8
                          循环计算:result=1; for循环

今天下午的核心目标是:

  1. 理解深入: 真正理解数据类型的存储原理和取值范围
  2. 掌握运算: 熟练使用基本运算符,理解运算规则
  3. 解决问题: 能够将简单数学问题转化为C++程序
  4. 培养习惯: 开始培养良好的编程习惯和调试能力

关键教学原则:

  • 不追求速度,确保每个学生都理解
  • 多举例,多练习,多反馈
  • 鼓励尝试,允许犯错,从错误中学习
相关推荐
散峰而望2 小时前
【算法竞赛】树
java·数据结构·c++·算法·leetcode·贪心算法·推荐算法
鱼很腾apoc2 小时前
【实战篇】 第14期 算法竞赛_数据结构超详解(下)
c语言·开发语言·数据结构·学习·算法·青少年编程
123_不打狼2 小时前
AE(自编码器)与 VAE(变分自编码器)核心区别:原理、目标与应用
深度学习·算法·机器学习·vae
Anastasiozzzz2 小时前
LeetCode hot100 45 跳跃游戏2
算法·leetcode·游戏
近津薪荼2 小时前
递归专题(3)——反转链表
数据结构·c++·学习·算法·链表
Tisfy2 小时前
LeetCode 3013.将数组分成最小总代价的子数组 II:两个堆维护k-1小 + 滑动窗口
算法·leetcode·题解·优先队列··有序集合·滑动窗口
code monkey.2 小时前
【Linux之旅】Linux 动静态库与 ELF 加载全解析:从制作到底层原理
linux·服务器·c++·动静态库
坚持就完事了2 小时前
Java算法:递归
算法
senijusene2 小时前
数据结构与算法:完全二叉树和非完全二叉数的各种详细操作以及哈希表的简单应用
数据结构·算法·链表