返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 10, 主题|小节 3
进行中

10.2 if语句基础实验

2025年9月22日
课 进展
0% 完成

“小朋友们,让我们通过一系列实验来掌握if语句和双分支语句的基本用法,”我说,”通过这些实验,你们将学会如何使用条件判断来解决各种实际问题。”

10.2.1 基本比较运算

实验一:两个数比大小

题目描述:有A,B两个数,请将其中较大数打印出来。

样例输入

5 3

样例输出

5

代码实现

// 方法一:使用第三个变量存储较大值
#include <iostream>
using namespace std;

int main() {
    int a, b;                  // 定义两个整数变量a和b
    cin >> a >> b;             // 输入两个整数
    int c = a;                 // 先假设a较大,将a的值赋给c
    if(b > a){                 // 判断b是否大于a
        c = b;                 // 如果b更大,则更新c的值为b
    }
    cout << c;                 // 输出较大的数
    return 0;
}
// 方法二:使用swap函数交换
#include <iostream>
using namespace std;

int main() {
    int a, b;                  // 定义两个整数变量a和b
    cin >> a >> b;             // 输入两个整数
    if(a < b){                 // 判断a是否小于b
        swap(a, b);            // 如果a小于b,交换a和b的值
                               // 相当于 int t=a; a=b; b=t;
    }
    cout << a;                 // 输出a(此时a已经是较大的数)
    return 0;
}
// 方法三:提前返回
#include <iostream>
using namespace std;

int main() {
    int a, b;                  // 定义两个整数变量a和b
    cin >> a >> b;             // 输入两个整数
    if(a > b){                 // 判断a是否大于b
        cout << a;             // 如果a更大,则输出a
        return 0;              // 结束程序
    }
    cout << b;                 // 如果a不大于b,则输出b
    return 0;
}
// 方法四:使用两个独立的if语句
#include <iostream>
using namespace std;

int main() {
    int a, b;                  // 定义两个整数变量a和b
    cin >> a >> b;             // 输入两个整数
    int c;                     // 定义变量c存储较大的数
    if(a > b){                 // 判断a是否大于b
        c = a;                 // 如果a更大,则c等于a
    }
    if(b > a){                 // 判断b是否大于a
        c = b;                 // 如果b更大,则c等于b
    }
    cout << c;                 // 输出较大的数
    return 0;
}
// 方法五:使用if-else语句
#include <iostream>
using namespace std;

int main() {
    int a, b;                  // 定义两个整数变量a和b
    cin >> a >> b;             // 输入两个整数
    int c;                     // 定义变量c存储较大的数
    if(a > b){                 // 判断a是否大于b
        c = a;                 // 如果a更大,则c等于a
    }else{                     // 否则(a不大于b)
        c = b;                 // c等于b
    }
    cout << c;                 // 输出较大的数
    return 0;
}
// 方法六:使用max函数
#include <iostream>
using namespace std;

int main() {
    int a, b;                  // 定义两个整数变量a和b
    cin >> a >> b;             // 输入两个整数
    int c = max(a, b);         // 使用max函数找出a和b中的较大值
    cout << c;                 // 输出较大的数
    return 0;
}

思考

  1. 方法一使用了一个额外的变量c来存储最大值,初始设为a,如果b更大则更新
  2. 方法二通过swap函数将较大的数交换到a,然后输出a
  3. 方法三通过提前返回避免了额外的变量,如果a大则直接输出a并结束程序
  4. 方法四使用两个独立的if语句,但若a等于b则c没有赋值,可能导致错误
  5. 方法五使用if-else结构,保证了无论a和b的关系如何,c都会有值
  6. 方法六使用了C++标准库中的max函数,代码最简洁

实验二:十位大还是个位大

题目描述:请从键盘读入一个两位数,计算一下,这个两位数的十位和个位,哪一位更大,输出更大的那一位。

样例输入

73

样例输出

7

代码实现

// 方法一:使用变量存储最大值
#include <iostream>
using namespace std;

int main() {
    int n;                     // 定义整数变量n
    cin >> n;                  // 输入一个两位数
    int g = n % 10;            // 计算个位数(除以10的余数)
    int s = n / 10;            // 计算十位数(整除10的结果)
    int m = g;                 // 先假设个位数更大
    if(s > g){                 // 判断十位是否大于个位
        m = s;                 // 如果十位更大,则更新m的值
    }
    cout << m;                 // 输出较大的数位
    return 0;
}
// 方法二:提前返回
#include <iostream>
using namespace std;

int main() {
    int n;                     // 定义整数变量n
    cin >> n;                  // 输入一个两位数
    int g = n % 10;            // 计算个位数
    int s = n / 10;            // 计算十位数
    if(g > s){                 // 判断个位是否大于十位
        cout << g;             // 如果个位更大,则输出个位
        return 0;              // 结束程序
    }
    cout << s;                 // 如果十位不小于个位,则输出十位
    return 0;
}
// 方法三:使用两个独立的if语句
#include <iostream>
using namespace std;

int main() {
    int n;                     // 定义整数变量n
    cin >> n;                  // 输入一个两位数
    int g = n % 10;            // 计算个位数
    int s = n / 10;            // 计算十位数
    if(g > s){                 // 判断个位是否大于十位
        cout << g;             // 如果个位更大,则输出个位
    }
    if(g <= s){                // 判断个位是否小于等于十位
        cout << s;             // 如果个位小于等于十位,则输出十位
    }
    return 0;
}
// 方法四:使用if-else语句
#include <iostream>
using namespace std;

int main() {
    int n;                     // 定义整数变量n
    cin >> n;                  // 输入一个两位数
    int g = n % 10;            // 计算个位数
    int s = n / 10;            // 计算十位数
    if(g < s){                 // 判断个位是否小于十位
        cout << s;             // 如果十位更大,则输出十位
    }else{                     // 否则(个位大于等于十位)
        cout << g;             // 输出个位
    }
    return 0;
}
// 方法五:使用max函数
#include <iostream>
using namespace std;

int main() {
    int n;                     // 定义整数变量n
    cin >> n;                  // 输入一个两位数
    cout << max(n % 10, n / 10); // 使用max函数比较个位和十位,并输出较大的数位
    return 0;
}

思考

  1. 方法一使用变量m存储最大值,初始设为个位,如果十位更大则更新
  2. 方法二使用提前返回,如果个位大则直接输出个位并结束程序
  3. 方法三使用两个独立的if语句,确保了两种情况都能处理
  4. 方法四使用if-else结构,确保只有一个分支被执行
  5. 方法五使用max函数直接在输出语句中进行比较,代码最简洁
  6. 所有方法都使用了n%10获取个位,n/10获取十位

10.2.2 实际应用问题

实验三:打电话

题目描述:超市有一门公共电话,收费标准是,如果通话时间在10分钟内,那么按照1.5元/分钟收费,如果通话时间超过10分钟(含10分钟)按照1.2元/分钟收费。请编程从键盘读入一个整数n,代表通话时间,按照要求计算出应付金额是多少?(计算结果保留1位小数)。

样例输入

15

样例输出

18.0

代码实现

// 方法一:C语言风格
#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    int n;                     // 定义整数变量n表示通话时间
    //cin >> n;
    scanf("%d", &n);           // 输入通话时间(分钟)
    double f;                  // 定义浮点数变量f表示费用
    f = n * 1.5;               // 先按1.5元/分钟计算费用
    if(n >= 10){               // 判断通话时间是否大于等于10分钟
        f = n * 1.2;           // 如果是,则按1.2元/分钟重新计算
    }
    //cout << fixed << setprecision(1) << f;
    printf("%.1f", f);         // 输出费用,保留1位小数
    return 0;
}
// 方法二:使用变量存储费率
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;                     // 定义整数变量n表示通话时间
    cin >> n;                  // 输入通话时间(分钟)
    double d = 1.5;            // 默认费率为1.5元/分钟
    if(n >= 10){               // 判断通话时间是否大于等于10分钟
        d = 1.2;               // 如果是,则费率为1.2元/分钟
    }
    double f = n * d;          // 计算总费用
    cout << fixed << setprecision(1) << f; // 输出费用,保留1位小数
    return 0;
}
// 方法三:提前返回
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;                     // 定义整数变量n表示通话时间
    cin >> n;                  // 输入通话时间(分钟)
    double f;                  // 定义浮点数变量f表示费用
    if(n >= 10){               // 判断通话时间是否大于等于10分钟
        f = n * 1.2;           // 如果是,则按1.2元/分钟计算
        cout << fixed << setprecision(1) << f; // 输出费用,保留1位小数
        return 0;              // 结束程序
    }
    f = n * 1.5;               // 如果通话时间小于10分钟,则按1.5元/分钟计算
    cout << fixed << setprecision(1) << f; // 输出费用,保留1位小数
    return 0;
}
// 方法四:使用两个独立的if语句
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;                     // 定义整数变量n表示通话时间
    cin >> n;                  // 输入通话时间(分钟)
    double d;                  // 定义浮点数变量d表示费率
    if(n < 10){                // 判断通话时间是否小于10分钟
        d = 1.5;               // 如果是,则费率为1.5元/分钟
    }
    if(n >= 10){               // 判断通话时间是否大于等于10分钟
        d = 1.2;               // 如果是,则费率为1.2元/分钟
    }
    double f = n * d;          // 计算总费用
    cout << fixed << setprecision(1) << f; // 输出费用,保留1位小数
    return 0;
}
// 方法五:使用if-else语句
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;                     // 定义整数变量n表示通话时间
    cin >> n;                  // 输入通话时间(分钟)
    double d;                  // 定义浮点数变量d表示费率
    if(n >= 10){               // 判断通话时间是否大于等于10分钟
        d = 1.2;               // 如果是,则费率为1.2元/分钟
    }else{                     // 否则(通话时间小于10分钟)
        d = 1.5;               // 费率为1.5元/分钟
    }
    double f = n * d;          // 计算总费用
    cout << fixed << setprecision(1) << f; // 输出费用,保留1位小数
    return 0;
}

思考

  1. 方法一使用C语言风格的输入输出函数,具有良好的兼容性
  2. 方法二引入了变量d存储费率,根据条件设置不同的费率后再计算
  3. 方法三使用提前返回,直接在if块中计算并输出结果
  4. 方法四使用两个独立的if语句设置费率,适合初学者理解
  5. 方法五使用if-else结构确保只有一个分支被执行,逻辑更清晰
  6. 所有方法都需要处理浮点数输出格式,保留1位小数

实验四:打折问题

题目描述:小明在超市购买了3个商品,今天超市的活动是超过100的部分可以打八折,请计算小明需要付多少钱(保留两位小数)。

样例输入

50 30 40

样例输出

116.00

代码实现

// 方法一:直接计算
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int a, b, c;              // 定义三个整数变量表示商品价格
    cin >> a >> b >> c;       // 输入三个商品价格
    double sum = a + b + c;   // 计算商品总价
    if(sum > 100){            // 判断总价是否超过100
        sum = 100 + (sum - 100) * 0.8; // 如果超过100,则超过部分打八折
    }
    cout << fixed << setprecision(2) << sum; // 输出总价,保留两位小数
    return 0;
}
// 方法二:使用C语言风格
#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    int a, b, c;              // 定义三个整数变量表示商品价格
    scanf("%d%d%d", &a, &b, &c); // 输入三个商品价格
    int sum = a + b + c;      // 计算商品总价
    if(sum > 100){            // 判断总价是否超过100
        double result = 100 + (sum - 100) * 0.8; // 如果超过100,则超过部分打八折
        printf("%.2f", result); // 输出打折后的总价,保留两位小数
        return 0;             // 结束程序
    }
    printf("%.2f", sum * 1.0); // 如果不超过100,则输出原价,保留两位小数
    return 0;
}
// 方法三:使用两个独立的if语句
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int a, b, c;              // 定义三个整数变量表示商品价格
    cin >> a >> b >> c;       // 输入三个商品价格
    double sum;               // 定义浮点数变量sum表示总价
    if((a + b + c) <= 100){   // 判断总价是否不超过100
        sum = a + b + c;      // 如果不超过100,则总价不变
    }
    if((a + b + c) > 100){    // 判断总价是否超过100
        sum = 100 + ((a + b + c) - 100) * 0.8; // 如果超过100,则超过部分打八折
    }
    cout << fixed << setprecision(2) << sum; // 输出总价,保留两位小数
    return 0;
}
// 方法四:使用if-else语句
#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    int a, b, c;              // 定义三个整数变量表示商品价格
    scanf("%d%d%d", &a, &b, &c); // 输入三个商品价格
    double sum;               // 定义浮点数变量sum表示总价
    if((a + b + c) <= 100){   // 判断总价是否不超过100
        sum = a + b + c;      // 如果不超过100,则总价不变
    }else{                    // 否则(总价超过100)
        sum = 100 + ((a + b + c) - 100) * 0.8; // 超过部分打八折
    }
    printf("%.2f", sum);     // 输出总价,保留两位小数
    return 0;
}

思考

  1. 方法一首先计算总价,然后根据条件应用打折策略
  2. 方法二使用C语言风格的输入输出函数,并使用提前返回简化代码
  3. 方法三使用两个独立的if语句分别处理两种情况
  4. 方法四使用if-else结构确保只有一个分支被执行,逻辑更清晰
  5. 所有方法的打折逻辑都是:100元以内不打折 + 超过100元的部分打八折
  6. 需要正确处理输出格式,保留两位小数

实验五:装跳绳

题目描述:学校买了n条跳绳,同学们要把跳绳装进箱子,每个箱子能装30条,一共需要多少个箱子?

样例输入

100

样例输出

4

代码实现

// 方法一:计算后向上修正
#include <iostream>
using namespace std;

int main() {
    int n;                    // 定义整数变量n表示跳绳数量
    cin >> n;                 // 输入跳绳数量
    int m = n / 30;           // 计算完整装满的箱子数
    if(n % 30){               // 判断是否有余数(n % 30 != 0)
        m += 1;               // 如果有余数,则需要额外一个箱子
    }
    cout << m;                // 输出需要的箱子总数
    return 0;
}
// 方法二:使用逻辑非判断是否能整除
#include <iostream>
using namespace std;

int main() {
    int n;                    // 定义整数变量n表示跳绳数量
    cin >> n;                 // 输入跳绳数量
    if(!(n % 30)){            // 判断是否能整除(n % 30 == 0)
        cout << n / 30;       // 如果能整除,则输出n/30
        return 0;             // 结束程序
    }
    cout << n / 30 + 1;       // 如果不能整除,则输出n/30+1
    return 0;
}
// 方法三:两个独立的if语句
#include <iostream>
using namespace std;

int main() {
    int n;                    // 定义整数变量n表示跳绳数量
    cin >> n;                 // 输入跳绳数量
    int m;                    // 定义整数变量m表示箱子数量
    if(!(n % 30)){            // 判断是否能整除(n % 30 == 0)
        m = n / 30;           // 如果能整除,则箱子数为n/30
    }
    if(n % 30){               // 判断是否不能整除(n % 30 != 0)
        m = n / 30 + 1;       // 如果不能整除,则箱子数为n/30+1
    }
    cout << m;                // 输出需要的箱子总数
    return 0;
}
// 方法四:使用if-else语句
#include <iostream>
using namespace std;

int main() {
    int n;                    // 定义整数变量n表示跳绳数量
    cin >> n;                 // 输入跳绳数量
    int m;                    // 定义整数变量m表示箱子数量
    if(!(n % 30)){            // 判断是否能整除(n % 30 == 0)
        m = n / 30;           // 如果能整除,则箱子数为n/30
    }else{                    // 否则(不能整除)
        m = n / 30 + 1;       // 箱子数为n/30+1
    }
    cout << m;                // 输出需要的箱子总数
    return 0;
}
// 方法五:使用数学技巧
#include <iostream>
using namespace std;

int main() {
    int n;                    // 定义整数变量n表示跳绳数量
    cin >> n;                 // 输入跳绳数量
    int m = (n + 29) / 30;    // 使用(n+29)/30计算向上取整的结果
    cout << m;                // 输出需要的箱子总数
    return 0;
}

思考

  1. 方法一先计算整除的箱子数,再根据是否有余数决定是否加1
  2. 方法二使用逻辑非和提前返回,处理能整除的情况
  3. 方法三使用两个独立的if语句分别处理两种情况
  4. 方法四使用if-else结构确保只有一个分支被执行
  5. 方法五使用了数学技巧(n+29)/30,这是一种常用的向上取整方法
  6. 这个问题本质上是”向上取整”的典型应用