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:数据类型大小猜猜猜
目的: 巩固数据类型存储空间知识
规则:
- 老师提问数据类型,学生猜测大小
- 用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定义像π这样的固定值,可以防止意外修改,也让代码更易读。
基础作业(必做):
- 完成P1010、P2067、P1011三个题目
- 编写程序计算:已知等差数列首项为2,公差为5,求第20项的值
- 思考:如果要计算(3+4)×5÷2-1,C++表达式应该怎么写?
提高作业(选做):
- 完成P1037和P1012题目
- 尝试用两种方法计算2的10次方(pow函数和循环)
- 研究:当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循环
今天下午的核心目标是:
- 理解深入: 真正理解数据类型的存储原理和取值范围
- 掌握运算: 熟练使用基本运算符,理解运算规则
- 解决问题: 能够将简单数学问题转化为C++程序
- 培养习惯: 开始培养良好的编程习惯和调试能力
关键教学原则:
- 不追求速度,确保每个学生都理解
- 多举例,多练习,多反馈
- 鼓励尝试,允许犯错,从错误中学习