C++ if语句的嵌套

部署运行你感兴趣的模型镜像

如果if语句中的“内嵌语句”(即语句1或语句2)也是if语句,就构成了“嵌套if语句”。

嵌套的基本格式

嵌套if语句有2种形式:

  • 嵌套在else分支中,格式如下:
    if (表达式1) 语句1;
    else if (表达式2) 语句2;
        else if …
            else语句n;
  • 嵌套在if分支中,格式如下:
        if (表达式1){
            if (表达式2) 语句1;
            else 语句2 ;
        }
        else 语句3;

配对原则

C++规定:在嵌套if语句中,if和else按照“就近配对”的原则配对,即相距最近且还没有配对的一对if和else首先配对

试分析下面的2组语句有何区别?

//语句1:
if(n%3==0)
    if(n%5==0) cout<<n<<″是15的倍数″<<endl;
    else cout<<n<<″是3的倍数但不是5的倍数<<endl; //else与第二个if配对

//语句2:
if(n%3==0){
    if(n%5==0) cout<<n<<″是15的倍数″<<endl;
}
else cout<< n <<″不是3的倍数″; //else与第一个if配对

两个语句的差别虽然仅在于一对“{}”,但逻辑关系却完全不同。

关于if嵌套语句的几点说明:

  • if语句用于解决二分支的问题,嵌套if语句则可以解决多分支问题。
  • 2种嵌套形式各有特点,应用时注意区别,考虑一下是否可以互相替换。
  • 由上述2个语句可以看出:if中嵌套的形式较容易产生逻辑错误,而else中嵌套的形式配对关系则非常明确,因此从程序可读性角度出发,建议尽量使用在else分支中嵌套的形式

应用举例

【例2.6】用嵌套if语句完成改写【例2.5】, 求三个整数中的最大值。
#include <iostream>
using namespace std;
int main(){
    int a, b, c, max;
    cout<<"输入三个整数:";
    cin>>a>>b>>c;
    if(a>b&&a>c)  max=a;
    else if(b>a&&b>c)  max=b;
        else  max=c;
    cout<<"最大数为:max="<<max<<endl;
    return 0;
}

【例2.7】某商场优惠活动规定,某商品一次购买5件以上(包含5件)10件以下(不包含10件)打9折,一次购买10件以上(包含10件)打8折。设计程序根据单价和客户的购买量计算总价。
#include <iostream>
using namespace std;
int main(){
    float price,discount,amount;   //单价、折扣、总价
    int count;         //购买件数
    cout<<"输入单价:"<<endl;
    cin>>price;
    cout<<"输入购买件数:"<<endl;
    cin>>count;
    if(count<5)  discount=1;
    else if(count<10)  discount=0.9;
        else  discount=0.8;
    amount=price*count*discount;
    cout<<"单价:"<< price<<endl;
    cout<<"购买件数:"<<count<<"/t/t"<<"折扣:"<<discount<<endl;
    cout<<"总价:"<<amount<<endl;
    return 0;
}

【例2.8】求一元二次方程ax2+bx+c=0的根。系数a(a≠0)、b、c由键盘输入。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
    float a,b,c;
    float delta,x1,x2;
    cout<<"输入三个系数a(a!=0), b, c:"<<endl;
    cin>>a>>b>>c;
    cout<<"a="<<a<<'/t'<<"b="<<b<<'/t'<<"c="<<c<<endl;
    delta=b*b-4*a*c;
    if(delta==0){   
        cout<<"方程有两个相同实根:";
        cout<<"x1=x2="<<-b/(2*a)<<endl;
    }
    else if(delta>0){
        delta=sqrt(delta);
        x1=(-b+delta)/(2*a);
        x2=(-b-delta)/(2*a);
        cout<<"方程有两个不同实根:";
        cout<<"x1="<<x1<<'/t'<<"x2="<<x2<<endl;
    }
   else cout<<"方程无实根!"<<endl;//delta<0
    return 0;
}

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 我们为C++初学者设计一些有趣且实用的if语句嵌套题目。题目将涵盖基本条件判断、逻辑运算符、范围判断等,并融入一些有趣的情境,如游戏、生活场景等,以增加学习兴趣。 ### 题目列表: 1. **游戏角色状态判断**:根据角色的生命值、魔法值和状态(正常、中毒、眩晕)判断角色是否能施放技能。 2. **简单计算器**:实现一个能进行加、减、乘、除的计算器,要求处理除数为0的情况。 3. **成绩等级转换**:将百分制成绩转换为等级制(A、B、C、D、F),并加入特殊条件(如满分或不及格的特殊提示)。 4. **闰年判断**:判断输入的年份是否为闰年,考虑闰年的规则(能被4整除但不能被100整除,或者能被400整除)。 5. **三角形类型判断**:输入三个边长,判断是否能构成三角形,以及是等边、等腰还是普通三角形。 6. **BMI指数分类**:根据用户身高体重计算BMI,并给出健康建议(偏瘦、正常、超重、肥胖等)。 7. **自动售货机找零**:模拟自动售货机,根据商品价格和支付金额计算找零,并给出不同面额的纸币和硬币数量(简化版,只考虑元单位,不考虑角分)。 8. **猜数字游戏反馈**:用户输入一个数字,与预设数字比较,给出“太大”、“太小”或“正确”的提示,并增加范围限制(例如1-100)和错误输入处理。 9. **简单登录系统**:模拟登录,检查用户名和密码,并考虑多个用户(例如两个用户)的情况。 10. **出租车计费**:根据里程计算费用,起步价包含一定里程,超过后按每公里计费,同时考虑夜间加价和拥堵时段加价(简化版,只考虑里程和是否夜间)。 ### 我们从中选择7道题目,并给出示例代码和解释: ### 1. 游戏角色状态判断 **题目**:编写一个程序,输入角色的生命值(hp)、魔法值(mp)和状态(0表示正常,1表示中毒,2表示眩晕)。角色能施放技能的条件是:生命值大于0,魔法值大于10,且状态为正常。如果条件满足,输出“可以施放技能”,否则输出“无法施放技能”,并指出具体原因(如生命值不足、魔法值不足或状态异常)。 ```cpp #include <iostream> using namespace std; int main() { int hp, mp, status; cout << "输入生命值、魔法值和状态(0正常,1中毒,2眩晕):"; cin >> hp >> mp >> status; // 先判断是否死亡 if (hp <= 0) { cout << "无法施放技能:生命值不足!" << endl; } else if (mp <= 10) { cout << "无法施放技能:魔法值不足!" << endl; } else if (status != 0) { cout << "无法施放技能:状态异常!" << endl; } else { cout << "可以施放技能!" << endl; } return 0; } ``` ### 2. 简单计算器 **题目**:实现一个简单的计算器,支持加(+)、减(-)、乘(*)、除(/)四则运算。用户输入两个数字和一个运算符,程序输出计算结果。注意处理除数为0的情况。 ```cpp #include <iostream> using namespace std; int main() { double num1, num2; char op; cout << "输入两个数字和运算符(如 3 4 +):"; cin >> num1 >> num2 >> op; if (op == '+') { cout << num1 + num2 << endl; } else if (op == '-') { cout << num1 - num2 << endl; } else if (op == '*') { cout << num1 * num2 << endl; } else if (op == '/') { if (num2 == 0) { cout << "错误:除数不能为0!" << endl; } else { cout << num1 / num2 << endl; } } else { cout << "无效的运算符!" << endl; } return 0; } ``` ### 3. 成绩等级转换 **题目**:输入一个0-100之间的成绩,将其转换为等级制: - 90-100: A - 80-89: B - 70-79: C - 60-69: D - 0-59: F 如果输入的成绩是100,输出“满分!太棒了!”,如果成绩低于60,输出“不及格,要加油哦!”。 ```cpp #include <iostream> using namespace std; int main() { int score; cout << "输入成绩(0-100):"; cin >> score; if (score < 0 || score > 100) { cout << "成绩无效!" << endl; } else { if (score == 100) { cout << "满分!太棒了!" << endl; } else if (score >= 90) { cout << "A" << endl; } else if (score >= 80) { cout << "B" << endl; } else if (score >= 70) { cout << "C" << endl; } else if (score >= 60) { cout << "D" << endl; } else { cout << "F - 不及格,要加油哦!" << endl; } } return 0; } ``` ### 4. 闰年判断 **题目**:输入一个年份,判断是否为闰年。闰年规则:能被4整除但不能被100整除,或者能被400整除的年份。输出“是闰年”或“不是闰年”。 ```cpp #include <iostream> using namespace std; int main() { int year; cout << "输入年份:"; cin >> year; if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { cout << year << "是闰年" << endl; } else { cout << year << "不是闰年" << endl; } return 0; } ``` ### 5. 三角形类型判断 **题目**:输入三个正整数作为三角形的三条边,判断是否能构成三角形,如果能,进一步判断是等边、等腰还是普通三角形。 ```cpp #include <iostream> using namespace std; int main() { int a, b, c; cout << "输入三角形的三条边:"; cin >> a >> b >> c; // 判断是否能构成三角形 if (a + b > c && a + c > b && b + c > a) { // 判断三角形类型 if (a == b && b == c) { cout << "等边三角形" << endl; } else if (a == b || a == c || b == c) { cout << "等腰三角形" << endl; } else { cout << "普通三角形" << endl; } } else { cout << "不能构成三角形!" << endl; } return 0; } ``` ### 6. BMI指数分类 **题目**:输入身高(米)和体重(千克),计算BMI指数(体重/身高的平方),并根据BMI值分类: - 低于18.5:偏瘦 - 18.5-24:正常 - 24-28:超重 - 28以上:肥胖 并给出健康建议。 ```cpp #include <iostream> #include <cmath> using namespace std; int main() { double height, weight, bmi; cout << "输入身高(米)和体重(千克):"; cin >> height >> weight; bmi = weight / pow(height, 2); cout << "BMI指数:" << bmi << endl; if (bmi < 18.5) { cout << "偏瘦,注意加强营养!" << endl; } else if (bmi < 24) { cout << "正常,继续保持!" << endl; } else if (bmi < 28) { cout << "超重,注意控制饮食!" << endl; } else { cout << "肥胖,需要加强锻炼!" << endl; } return 0; } ``` ### 7. 猜数字游戏反馈 **题目**:程序随机生成一个1-100的整数(这里为了简化,可以固定一个数),用户输入一个猜测的数字,程序提示“太大”、“太小”或“正确”。如果用户输入的数字不在1-100,提示错误。 ```cpp #include <iostream> using namespace std; int main() { int secret = 42; // 预设的数字 int guess; cout << "猜一个1-100之间的数字:"; cin >> guess; if (guess < 1 || guess > 100) { cout << "错误:数字必须在1-100之间!" << endl; } else { if (guess == secret) { cout << "正确!" << endl; } else if (guess < secret) { cout << "太小!" << endl; } else { cout << "太大!" << endl; } } return 0; } ``` ### 8. 出租车计费(附加题,可选) **题目**:出租车计费规则:起步价10元(含3公里),超过3公里后每公里2元,夜间(22:00-5:00)加收20%服务费。输入行驶里程和当前时间(24小时制,只考虑小时),计算总费用。 ```cpp #include <iostream> using namespace std; int main() { double distance; int hour; double cost = 10.0; cout << "输入行驶里程(公里):"; cin >> distance; cout << "输入当前时间(小时,0-23):"; cin >> hour; if (distance > 3) { cost += (distance - 3) * 2; } // 判断是否为夜间 if (hour >= 22 || hour < 5) { cost *= 1.2; // 加收20% cout << "夜间服务,加收20%费用。" << endl; } cout << "总费用:" << cost << "元" << endl; return 0; } ``` ### 9. 简单登录系统(附加题,可选) **题目**:系统预存两个用户的用户名和密码(例如:user1/pass1, user2/pass2)。用户输入用户名和密码,如果匹配则显示“登录成功”,否则显示“用户名或密码错误”。要求使用嵌套if判断多个用户。 ```cpp #include <iostream> #include <string> using namespace std; int main() { string username, password; cout << "用户名:"; cin >> username; cout << "密码:"; cin >> password; // 预定义两个用户 if (username == "user1") { if (password == "pass1") { cout << "登录成功!欢迎user1" << endl; } else { cout << "密码错误!" << endl; } } else if (username == "user2") { if (password == "pass2") { cout << "登录成功!欢迎user2" << endl; } else { cout << "密码错误!" << endl; } } else { cout << "用户名不存在!" << endl; } return 0; } ``` 以上题目均使用了if语句嵌套,覆盖了多种场景。初学者可以通过这些题目练习条件判断的逻辑编写,同时题目设计尽量有趣味性。 §§相关问题§§: 1. 在C++中,如何避免if-else嵌套过深? 2. 除了if-else,C++还有哪些条件控制语句? 3. 如何用switch语句改写成绩等级转换的题目? 4. 在游戏角色状态判断中,如果状态有多种组合(比如同时中毒和眩晕),如何修改代码? </think> 以下是专为C++初学者设计的7道有趣实用的if语句嵌套练习题,涵盖游戏、生活、数学等多个有趣场景,每道题都附带代码实现和详细解释: ### 1. 魔法药水效果判断 🔮 **题目**:巫师根据颜色(红/蓝/绿)和剂量(1-3滴)制作药水,不同组合产生不同效果: - 红+1滴:小火球 - 红+2滴:大火球 - 蓝+1滴:小治疗 - 蓝+3滴:复活术 - 绿+2滴:隐身 - 其他组合:失败冒烟 ```cpp #include <iostream> #include <string> using namespace std; int main() { string color; int drops; cout << "输入药水颜色(红/蓝/绿): "; cin >> color; cout << "输入剂量(1-3滴): "; cin >> drops; if (color == "红") { if (drops == 1) { cout << "✨ 小火球术发动!" << endl; } else if (drops == 2) { cout << "🔥 大火球术发动!" << endl; } else { cout << "💨 失败!冒出一股黑烟" << endl; } } else if (color == "蓝") { if (drops == 1) { cout << "💖 小治疗术发动!" << endl; } else if (drops == 3) { cout << "🌟 复活术发动!" << endl; } else { cout << "💨 失败!冒出一股黑烟" << endl; } } else if (color == "绿") { if (drops == 2) { cout << "👻 隐身术发动!" << endl; } else { cout << "💨 失败!冒出一股黑烟" << endl; } } else { cout << "⚠️ 无效的颜色输入!" << endl; } return 0; } ``` ### 2. 外星生物分类器 👽 **题目**:根据生物特征(触角数量、眼睛颜色)分类: - 触角>4且红眼:危险级⚠️ - 触角>4且蓝眼:观察级👀 - 触角=2且绿眼:友好级🤝 - 其他:未知生物❓ ```cpp #include <iostream> using namespace std; int main() { int antennae; string eyeColor; cout << "输入触角数量: "; cin >> antennae; cout << "输入眼睛颜色(红/蓝/绿): "; cin >> eyeColor; if (antennae > 4) { if (eyeColor == "红") { cout << "⚠️ 危险级外星生物!启动防御系统" << endl; } else if (eyeColor == "蓝") { cout << "👀 观察级外星生物,保持监测" << endl; } else { cout << "❓ 发现未知外星生物类型" << endl; } } else if (antennae == 2) { if (eyeColor == "绿") { cout << "🤝 友好级外星生物,尝试建立沟通" << endl; } else { cout << "❓ 发现未知外星生物类型" << endl; } } else { cout << "❓ 发现未知外星生物类型" << endl; } return 0; } ``` ### 3. 智能零食推荐机 🍿 **题目**:根据天气和心情推荐零食: - 晴天+开心:冰淇淋🍦 - 晴天+悲伤:巧克力🍫 - 雨天+开心:薯片🍟 - 雨天+悲伤:热可可☕ - 其他:饼干🍪 ```cpp #include <iostream> using namespace std; int main() { string weather, mood; cout << "今天天气如何?(晴天/雨天): "; cin >> weather; cout << "你现在心情如何?(开心/悲伤): "; cin >> mood; if (weather == "晴天") { if (mood == "开心") { cout << "推荐:冰淇淋 🍦" << endl; } else if (mood == "悲伤") { cout << "推荐:巧克力 🍫" << endl; } else { cout << "推荐:饼干 🍪" << endl; } } else if (weather == "雨天") { if (mood == "开心") { cout << "推荐:薯片 🍟" << endl; } else if (mood == "悲伤") { cout << "推荐:热可可 ☕" << endl; } else { cout << "推荐:饼干 🍪" << endl; } } else { cout << "推荐:饼干 🍪" << endl; } return 0; } ``` ### 4. 密室逃脱密码锁 🔐 **题目**:三重密码验证系统: 1. 第一关:数字是偶数 2. 第二关:数字>50 3. 第三关:数字能被3整除 全部通过显示"宝藏之门开启!" ```cpp #include <iostream> using namespace std; int main() { int number; cout << "输入密码数字(1-100): "; cin >> number; if (number % 2 == 0) { if (number > 50) { if (number % 3 == 0) { cout << "💰 宝藏之门开启!" << endl; } else { cout << "🔒 第三关失败:必须能被3整除" << endl; } } else { cout << "🔒 第二关失败:必须大于50" << endl; } } else { cout << "🔒 第一关失败:必须是偶数" << endl; } return 0; } ``` ### 5. 机器人舞蹈模式 🤖 **题目**:根据时间和电量选择舞蹈: - 电量>70%:霹雳舞💃 - 电量30-70%且白天:华尔兹🕺 - 电量30-70%且夜晚:慢舞🌙 - 电量<30%:充电模式🔋 ```cpp #include <iostream> using namespace std; int main() { int battery; string time; cout << "当前电量百分比(0-100): "; cin >> battery; cout << "当前时间(白天/夜晚): "; cin >> time; if (battery > 70) { cout << "启动霹雳舞模式 💃" << endl; } else if (battery >= 30) { if (time == "白天") { cout << "启动华尔兹模式 🕺" << endl; } else if (time == "夜晚") { cout << "启动慢舞模式 🌙" << endl; } else { cout << "⏱️ 时间输入错误" << endl; } } else if (battery < 30 && battery >= 0) { cout << "电量不足!进入充电模式 🔋" << endl; } else { cout << "⚠️ 无效电量输入" << endl; } return 0; } ``` ### 6. 神奇动物园导览 🦁 **题目**:根据游客年龄和天气推荐路线: - 儿童(0-12岁):萌宠区🐣 - 青少年(13-17):猛兽区🐯 - 成人(18+)且晴天:综合区🦒 - 成人(18+)且雨天:室内馆🐠 - 老人(65+):休息区♨️ ```cpp #include <iostream> using namespace std; int main() { int age; string weather; cout << "请输入游客年龄: "; cin >> age; cout << "当前天气(晴天/雨天): "; cin >> weather; if (age <= 12) { cout << "推荐路线:萌宠乐园 🐣" << endl; } else if (age <= 17) { cout << "推荐路线:猛兽探险区 🐯" << endl; } else if (age >= 65) { cout << "推荐路线:长者休息区 ♨️" << endl; } else { if (weather == "晴天") { cout << "推荐路线:综合游览区 🦒" << endl; } else if (weather == "雨天") { cout << "推荐路线:室内水族馆 🐠" << endl; } else { cout << "推荐路线:中央大厅休息" << endl; } } return 0; } ``` ### 7. 超级英雄能力检测 🦸 **题目**:检测飞行能力需满足: - 力量>80 且 有翅膀 - 或 魔法>90 且 会咒语 - 或 是氪星人 ```cpp #include <iostream> using namespace std; int main() { int strength, magic; string wings, spells, origin; cout << "力量值(0-100): "; cin >> strength; cout << "有翅膀吗?(是/否): "; cin >> wings; cout << "魔法值(0-100): "; cin >> magic; cout << "会咒语吗?(是/否): "; cin >> spells; cout << "起源星球: "; cin >> origin; if (origin == "氪星") { cout << "🦸 氪星人天生会飞!" << endl; } else if (strength > 80 && wings == "是") { cout << "🦸 力量飞行模式启动!" << endl; } else if (magic > 90 && spells == "是") { cout << "🦸 魔法飞行模式启动!" << endl; } else { cout << "❌ 飞行能力检测未通过" << endl; if (strength <= 80) cout << "力量不足" << endl; if (wings == "否") cout << "缺少翅膀" << endl; if (magic <= 90) cout << "魔法不足" << endl; if (spells == "否") cout << "不会咒语" << endl; } return 0; } ``` ### 练习题特点总结: 1. **情境丰富**:包含魔法、外星生物、动物园等趣味场景 2. **逻辑分层**:从简单到复杂的三层嵌套结构 3. **生活联系**:结合天气、心情、年龄等生活元素 4. **错误处理**:包含输入验证和边界情况处理 5. **视觉元素**:使用表情符号增强趣味性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值