Shell——计算器解决思路

本文介绍了一个使用Bash脚本实现的基本计算器。该计算器能够接收两个整数作为输入,并执行加法、减法、乘法、除法及取余运算。此外,还支持幂运算。脚本首先检查输入的有效性,确保它们都是整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过脚本参数变量判断用户输入是否为整数,并进行计算

#!/bin/bash
#no.1

[ $# -ne 2 ]&&{
        echo $"USAGE $0 NUM1 NUM2"
        exit 1
}

#no.2
a=$1
b=$2

expr $a + $b + 110 &>/dev/null
if [ $? -ne 0 ];then
        echo "You must input two nums"
        exit 2
fi

#no.3
echo "a+b=$(($a+$b))"
echo "a-b=$(($a-$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a%b=$(($a%$b))"
echo "a**b=$(($a**$b))"

<think>我们正在讨论C++的学习路径和资源。根据引用内容,我们可以整合一些经典书籍和资源。首先,引用[1]提到了四本经典的C++书籍:1.《C++Primer5th》-基础2.《EffectiveC++》-提高3.《MoreEffectiveC++》-进阶4.《STL源码剖析》-深入STL5.《深度探索C++对象模型》-深入理解C++对象模型引用[2]则强调了C++在多个领域的重要性,并给出了一个简单的类继承和虚函数的例子,说明C++的核心概念(类、继承、多态)以及内存管理和数据结构等基本原理。因此,我们可以将C++学习路径分为几个阶段:阶段1:基础语法和面向对象编程-推荐资源:《C++Primer》第5版(全面且详细)-学习目标:掌握基本语法、数据类型、控制流、函数、类、面向对象(封装、继承、多态)等。阶段2:提高与最佳实践-推荐资源:《EffectiveC++》和《MoreEffectiveC++》-学习目标:了解C++编程中的常见陷阱和最佳实践,提高代码质量和效率。阶段3:深入理解C++底层机制-推荐资源:《深度探索C++对象模型》-学习目标:理解C++对象在内存中的布局,虚函数表机制等。阶段4:STL(标准模板库)学习与源码剖析-推荐资源:《STL源码剖析》-学习目标:掌握STL的常用容器和算法,并了解其内部实现原理。阶段5:项目实践与设计模式-引用[3]提到设计模式的重要性,以及通过项目实践来提升。-推荐资源:可以阅读《设计模式:可复用面向对象软件的基础》(GoF)等书籍,同时参与实际项目。此外,刷题也是提高编程能力的重要途径,如LeetCode、牛客网等平台。总结学习路径:1.基础语法(《C++Primer》)2.进阶技巧(《EffectiveC++》系列)3.底层机制(《深度探索C++对象模型》)4.STL源码(《STL源码剖析》)5.项目实践与设计模式注意:每个阶段都需要编写代码实践,从简单的程序到复杂的项目。下面,我们将按照这个路径详细展开。</think>### C++学习路径与资源建议 #### 一、系统学习路径 1. **基础语法阶段**(1-2个月) - 核心资源:《C++ Primer》(第5版) - 覆盖C++11/14标准,包含现代C++特性 - 重点章节:类与对象、模板、STL容器 - 实践:完成书中所有编程练习,建立基础项目(如计算器、文件处理器) 2. **进阶实践阶段**(2-3个月) - 必读书籍: - 《Effective C++》:55条编码准则(资源管理、继承体系设计) - 《More Effective C++》:异常处理、智能指针等高级主题 - 关键技能: - RAII资源管理范式 - 移动语义与完美转发(`std::move`, `std::forward`) 3. **底层机制深入**(1-2个月) - 经典著作:《深度探索C++对象模型》 - 虚函数表实现机制 - 对象内存布局分析 - 配套实验:通过`sizeof`和内存地址打印验证理论 4. **STL源码级掌握**(2个月) - 核心资源:《STL源码剖析》 - 容器实现原理(vector扩容策略、红黑树在map中的应用) - 迭代器设计模式 - 实践:手写简化版STL容器(如自定义vector类) 5. **工程化实战**(持续进行) - 项目类型建议: - 网络库开发(基于asio) - 简易游戏引擎(OpenGL整合) - 高频交易系统原型 - 设计模式学习:《设计模式:可复用面向对象软件的基础》 #### 二、关键资源推荐 | 类别 | 资源名称 | 特点说明 | |------------|-----------------------------------|------------------------------| | **在线平台** | [LearnCPP](https://www.learncpp.com) | 交互式现代C++教程 | | **编译器** | GCC 13 + Clang 17 | 支持C++20/23最新特性 | | **调试工具**| GDB + Valgrind | 内存泄漏检测/多线程调试 | | **项目参考**| [Awesome C++](https://github.com/fffaraz/awesome-cpp) | 开源项目集合 | #### 三、高效学习策略 1. **代码规范先行** - 初期采用Google C++ Style Guide - 使用Clang-Format自动格式化 ```cpp // 示例:现代C++初始化规范 std::vector<int> data{1, 2, 3}; // 统一初始化语法 auto ptr = std::make_unique<MyClass>(); // 智能指针 ``` 2. **调试能力培养** - 核心调试命令: ```shell gdb -tui a.out # 图形化调试 (gdb) b MyClass::func # 类方法断点 (gdb) watch *0x7fffffffde44 # 内存监视点 ``` 3. **性能分析实践** - 工具链: ```mermaid graph LR A[代码] --> B[perf性能采样] B --> C[FlameGraph火焰图] C --> D[热点函数优化] ``` #### 四、进阶路线图 ```mermaid graph LR A[语法基础] --> B[面向对象设计] B --> C[模板元编程] C --> D[并发编程] D --> E[跨平台开发] E --> F[领域专项:游戏/量化/嵌入式] ``` > 关键提示:学习过程中需持续实践,建议每章学习后完成**代码重写挑战**——在不参考原代码的情况下重新实现书中案例[^1]。遇到语言特性时,务必通过`Compiler Explorer`观察汇编输出加深理解[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值