1.整数运算 2.小数运算 3.拆位练习

登录以参加训练计划

# C++ 基础知识点详解 - CSP-J 入门必备

## 目录
0. 程序框架的介绍
1. 基础数据类型
2. 输入输出操作
3. 算术运算符详解
4. 拆位运算技巧

---


```markdown
# C++ 基础知识点详解 - CSP-J 入门必备



---

## 1. 头文件与程序框架

### 头文件:程序的"工具箱"
```cpp
#include <iostream>       // 标准输入输出库(必须掌握)
#include <bits/stdc++.h>  // 万能头文件(竞赛常用)

1.1 iostream 头文件

  • 功能:提供 cincout 等基本输入输出功能
  • 必须包含:只要使用 cin/cout 就必须写
  • 示例
    #include <iostream>
    int main() {
        std::cout << "Hello World!";
        return 0;
    }
    

1.2 bits/stdc++.h 万能头文件

  • 功能:包含C++所有标准库(如iostream、algorithm等)
  • 优点:竞赛中不用记忆多个头文件
  • 缺点:编译速度稍慢,工程开发中不建议使用
  • 示例
    #include <bits/stdc++.h>  // 这一行顶所有标准库
    using namespace std;
    int main() {
        cout << "Hello CSP-J!";
        return 0;
    }
    

程序框架三要素

#include <iostream>       // 1.头文件
using namespace std;      // 2.命名空间

int main() {              // 3.主函数
    // 你的代码...
    return 0;             // 程序结束标志
}

关键解释:

  1. using namespace std;

    • 作用:避免每次写 std::cout,可以直接写 cout
    • 记忆口诀:"using 命名空间 std"
  2. int main() {}

    • 固定写法:程序执行的入口
    • 必须返回0return 0; 表示程序正常结束
  3. 完整示例

    #include <iostream>
    using namespace std;
    
    int main() {
        cout << "我是C++程序!\n";
        cout << 3 + 5 << endl;
        return 0;
    }
    

总结表(更新版)

知识点 关键内容 记忆口诀
头文件 iostream必须,bits万能 "日常用iostream,竞赛用bits万能"
程序框架 main+return 0+using namespace "程序从main起,return 0结束"
数据类型 根据范围选类型 "小int大long,小数double强"
输入输出 cin/cout简单,scanf/printf快 "简单用cin,快用scanf"

新手指南

  1. 初学阶段建议使用完整框架:
    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        // 你的代码...
        return 0;
    }
    
  2. 重要规范:
    • main() 必须返回 int
    • 每行代码结尾加分号 ;
    • 代码块用 {} 包裹

1. 基础数据类型

数据类型的"容器"概念

数据类型就像不同大小的容器:

数据类型 容器比喻 容量说明
int 普通水杯 可装约21亿以内的数字
long long 大桶 可装900亿亿以内的超大数字
float 带刻度杯子 约6-7位小数精度
double 精确量杯 约15-16位小数精度
char 小试管 只能装1个字符

具体类型详解

#include <iostream>
using namespace std;

int main() {
    int apples = 10;              // 苹果数量
    long long stars = 10000000000; // 银河系星星数量
    float temperature = 36.5f;     // 体温
    double pi = 3.1415926535;      // 圆周率
    char firstLetter = 'C';        // 首字母
    
    cout << "苹果数量: " << apples << endl;
    cout << "银河系星星数量: " << stars << endl;
    cout << "体温: " << temperature << endl;
    cout << "圆周率: " << pi << endl;
    cout << "C++首字母: " << firstLetter << endl;
    
    return 0;
}

类型选择技巧表

数据范围 推荐类型
-20亿 ~ 20亿 int
超过20亿 long long
小数计算 double (比float更精确)
单个字符 char

2. 输入输出操作

cin/cout vs scanf/printf 对比表

特性 cin/cout scanf/printf
易用性 ⭐⭐⭐⭐⭐ ⭐⭐
速度 ⭐⭐ ⭐⭐⭐⭐⭐
格式化控制
类型安全 ⭐⭐⭐⭐⭐ ⭐⭐

cin/cout 使用示例

#include <iostream>
using namespace std;

int main() {
    int age;
    double height;
    
    cout << "请输入年龄和身高: ";
    cin >> age >> height;  // 一行输入多个值
    
    cout << "年龄: " << age << "岁\n";
    cout << "身高: " << height << "米\n";
    
    return 0;
}

scanf/printf 使用示例

#include <cstdio>

int main() {
    int age;
    double height;
    
    printf("请输入年龄和身高: ");
    scanf("%d %lf", &age, &height);  // double用%lf
    
    printf("年龄: %d岁\n", age);
    printf("身高: %.2f米\n", height);  // 保留2位小数
    
    return 0;
}

使用场景建议

  1. 简单题目:cin/cout (更易用)
  2. 大量数据输入:scanf (速度更快)
  3. 格式化输出:printf (控制小数位/对齐等)
  4. 字符输入:scanf (处理空白字符更方便)

3. 算术运算符详解

运算符优先级表

优先级 运算符 说明
1 () 括号优先
2 * / % 乘、除、取模
3 + - 加、减

除法和取模的特殊性

#include <iostream>
using namespace std;

int main() {
    // 整数除法 - 截断小数部分
    cout << "10 / 3 = " << (10 / 3) << endl;  // 输出3
    
    // 浮点数除法 - 保留小数
    cout << "10.0 / 3.0 = " << (10.0 / 3.0) << endl; // 输出3.33333
    
    // 取模运算 - 求余数
    cout << "10 % 3 = " << (10 % 3) << endl; // 输出1
    
    // 应用:判断奇偶
    int num = 15;
    cout << num << "是" 
         << (num % 2 == 0 ? "偶数" : "奇数") 
         << endl;
    
    return 0;
}

常见错误

// 错误1:整数除法期望小数
int a = 5, b = 2;
double result = a / b; // 结果是2.0而不是2.5

// 正确做法
double result = static_cast<double>(a) / b;

4. 拆位运算技巧

拆位原理说明

三位数 ABC:

  • 百位 = 数字 / 100
  • 十位 = (数字 / 10) % 10
  • 个位 = 数字 % 10

拆位运算示例

#include <iostream>
using namespace std;

int main() {
    int number = 123;
    
    int hundreds = number / 100;      // 百位:1
    int tens = (number / 10) % 10;    // 十位:2
    int units = number % 10;          // 个位:3
    
    cout << number << " = "
         << hundreds << "×100 + "
         << tens << "×10 + "
         << units << endl;
    
    // 应用:反转数字
    int reverse = units * 100 + tens * 10 + hundreds;
    cout << "反转后: " << reverse << endl;
    
    // 应用:水仙花数判断
    int n = 153;
    int a = n / 100;        // 1
    int b = (n / 10) % 10;  // 5
    int c = n % 10;         // 3
    
    if (a*a*a + b*b*b + c*c*c == n) {
        cout << n << "是水仙花数!" << endl;
    }
    
    return 0;
}

拆位技巧总结

  1. 获取最后n位:数字 % 10^n
    • 例:获取后两位:num % 100
  2. 移除最后n位:数字 / 10^n
    • 例:移除个位:num / 10
  3. 获取特定位:(数字 / 10^k) % 10
    • 例:获取千位:(num / 1000) % 10

总结表

知识点 关键内容 记忆口诀
数据类型 根据范围选类型,大数用long long "小int大long,小数double强"
输入输出 cin简单,scanf快,printf控制强 "简单用cin,快用scanf,格式printf"
除法和取模 整数除法去小数,取模得余数 "除法取整,取模得余"
拆位运算 除10移右,取模得右,组合使用 "除模组合,数字拆解"

学习建议

  1. 每天练习1个拆位运算题目
  2. 测试不同数据类型的范围
  3. 比较cin和scanf的速度差异
  4. 多画数字拆解示意图

"编程如搭积木,基础数据类型和运算符就是最基础的积木块!"


这个版本完全兼容 HydroOJ 的 Markdown 解析:
1. 移除了所有 Mermaid 图表,改用表格和代码块展示
2. 所有代码示例都放在代码块中,可直接复制运行
3. 使用表格替代图表展示对比关系
4. 保留了完整的知识结构和教学逻辑
5. 添加了学习口诀和实用表格总结

您可以直接将此内容粘贴到 HydroOJ 的 Markdown 编辑器中,学生将看到格式清晰的文档,所有代码示例都可以直接复制使用。我理解您的需求了。在 HydroOJ 这类在线评测系统中,您需要将内容转换为纯 Markdown 格式(不含 Mermaid 图表),并使用代码块替代图表展示。以下是完全兼容的 Markdown 版本:

```markdown
# C++ 基础知识点详解 - CSP-J 入门必备

> 面向10-14岁学生,结合CSP-J考纲整理的基础知识点

## 目录
1. 基础数据类型
2. 输入输出操作
3. 算术运算符详解
4. 拆位运算技巧

---

## 1. 基础数据类型

### 数据类型的"容器"概念
数据类型就像不同大小的容器:

| 数据类型 | 容器比喻 | 容量说明 |
|----------|----------|----------|
| **int** | 普通水杯 | 可装约21亿以内的数字 |
| **long long** | 大桶 | 可装900亿亿以内的超大数字 |
| **float** | 带刻度杯子 | 约6-7位小数精度 |
| **double** | 精确量杯 | 约15-16位小数精度 |
| **char** | 小试管 | 只能装1个字符 |

### 具体类型详解

```cpp
#include <iostream>
using namespace std;

int main() {
    int apples = 10;              // 苹果数量
    long long stars = 10000000000; // 银河系星星数量
    float temperature = 36.5f;     // 体温
    double pi = 3.1415926535;      // 圆周率
    char firstLetter = 'C';        // 首字母
    
    cout << "苹果数量: " << apples << endl;
    cout << "银河系星星数量: " << stars << endl;
    cout << "体温: " << temperature << endl;
    cout << "圆周率: " << pi << endl;
    cout << "C++首字母: " << firstLetter << endl;
    
    return 0;
}

类型选择技巧表

数据范围 推荐类型
-20亿 ~ 20亿 int
超过20亿 long long
小数计算 double (比float更精确)
单个字符 char

2. 输入输出操作

cin/cout vs scanf/printf 对比表

特性 cin/cout scanf/printf
易用性 ⭐⭐⭐⭐⭐ ⭐⭐
速度 ⭐⭐ ⭐⭐⭐⭐⭐
格式化控制
类型安全 ⭐⭐⭐⭐⭐ ⭐⭐

cin/cout 使用示例

#include <iostream>
using namespace std;

int main() {
    int age;
    double height;
    
    cout << "请输入年龄和身高: ";
    cin >> age >> height;  // 一行输入多个值
    
    cout << "年龄: " << age << "岁\n";
    cout << "身高: " << height << "米\n";
    
    return 0;
}

scanf/printf 使用示例

#include <cstdio>

int main() {
    int age;
    double height;
    
    printf("请输入年龄和身高: ");
    scanf("%d %lf", &age, &height);  // double用%lf
    
    printf("年龄: %d岁\n", age);
    printf("身高: %.2f米\n", height);  // 保留2位小数
    
    return 0;
}

使用场景建议

  1. 简单题目:cin/cout (更易用)
  2. 大量数据输入:scanf (速度更快)
  3. 格式化输出:printf (控制小数位/对齐等)
  4. 字符输入:scanf (处理空白字符更方便)

3. 算术运算符详解

运算符优先级表

优先级 运算符 说明
1 () 括号优先
2 * / % 乘、除、取模
3 + - 加、减

除法和取模的特殊性

#include <iostream>
using namespace std;

int main() {
    // 整数除法 - 截断小数部分
    cout << "10 / 3 = " << (10 / 3) << endl;  // 输出3
    
    // 浮点数除法 - 保留小数
    cout << "10.0 / 3.0 = " << (10.0 / 3.0) << endl; // 输出3.33333
    
    // 取模运算 - 求余数
    cout << "10 % 3 = " << (10 % 3) << endl; // 输出1
    
    // 应用:判断奇偶
    int num = 15;
    cout << num << "是" 
         << (num % 2 == 0 ? "偶数" : "奇数") 
         << endl;
    
    return 0;
}

常见错误

// 错误1:整数除法期望小数
int a = 5, b = 2;
double result = a / b; // 结果是2.0而不是2.5

// 正确做法
double result = static_cast<double>(a) / b;

4. 拆位运算技巧

拆位原理说明

三位数 ABC:

  • 百位 = 数字 / 100
  • 十位 = (数字 / 10) % 10
  • 个位 = 数字 % 10

拆位运算示例

#include <iostream>
using namespace std;

int main() {
    int number = 123;
    
    int hundreds = number / 100;      // 百位:1
    int tens = (number / 10) % 10;    // 十位:2
    int units = number % 10;          // 个位:3
    
    cout << number << " = "
         << hundreds << "×100 + "
         << tens << "×10 + "
         << units << endl;
    
    // 应用:反转数字
    int reverse = units * 100 + tens * 10 + hundreds;
    cout << "反转后: " << reverse << endl;
    
    // 应用:水仙花数判断
    int n = 153;
    int a = n / 100;        // 1
    int b = (n / 10) % 10;  // 5
    int c = n % 10;         // 3
    
    if (a*a*a + b*b*b + c*c*c == n) {
        cout << n << "是水仙花数!" << endl;
    }
    
    return 0;
}

拆位技巧总结

  1. 获取最后n位:数字 % 10^n
    • 例:获取后两位:num % 100
  2. 移除最后n位:数字 / 10^n
    • 例:移除个位:num / 10
  3. 获取特定位:(数字 / 10^k) % 10
    • 例:获取千位:(num / 1000) % 10

总结表

知识点 关键内容 记忆口诀
数据类型 根据范围选类型,大数用long long "小int大long,小数double强"
输入输出 cin简单,scanf快,printf控制强 "简单用cin,快用scanf,格式printf"
除法和取模 整数除法去小数,取模得余数 "除法取整,取模得余"
拆位运算 除10移右,取模得右,组合使用 "除模组合,数字拆解"

章节 1. 整数运算

开放

题目 尝试 AC 难度
754   【入门】分跳绳 7 6 9
871   【入门】求长方形的周长和面积 6 5 10
P569   【入门】请假时间计算 7 5 9
P568   【入门】米老鼠偷糖果 6 5 10
872   【入门】买文具 6 5 10
P566   【入门】买文具-2 10 5 9
P565   【入门】火柴棒三角形问题 6 5 10
764   【入门】时钟旋转(1) 18 5 8
922   【入门】小明的游泳时间 11 5 9

章节 2. 小数运算

开放

题目 尝试 AC 难度
1113   【入门】温度转换 10 6 9
P572   【入门】冷饮的价格? 7 6 9
P883   【入门】求三个数的平均数 8 6 9
P571   【入门】总分和平均分 7 4 10
P570   【入门】挖胡萝卜 6 4 10
1157   【入门】已知一个圆的半径,求解该圆的面积和周长 5 4 10

章节 3. 拆位运算

开放

题目 尝试 AC 难度
P573   【入门】求一个两位数的个位和十位的和 14 11 7
P574   【入门】求一个两位数倒序的结果 16 10 7
902   【入门】求任意三位数各个数位上数字的和 15 10 7
991   【入门】输入一个三位数,把个位和百位对调后输出 19 10 6
842   【入门】四位数的和 10 8 9
P575   【入门】两位数运算 11 6 9
624   【入门】倒序输出一个四位整数 7 6 9
873   【入门】求一个5位数的各个位之和 8 6 9
P576   【入门】三位数运算 6 4 10
P577   【入门】四位数的计算 6 4 10
1523   【入门】加密四位数 3 3 10