「Mac玩转仓颉内测版55」应用篇2 - 使用函数实现更复杂的计算

news2025/1/3 4:19:29

本篇教程基于仓颉编程语言扩展了计算器功能,支持加减乘除的基础运算,以及幂运算和开平方等高级功能。代码经过简化后,移除了对输入的复杂校验,提升了程序的可维护性和交互效率。


关键词
  • 仓颉编程语言
  • 函数封装
  • 高级运算

一、功能说明

升级后的计算器实现了以下功能:

  1. 支持基础运算(加、减、乘、除)和高级运算(幂运算、开平方)。
  2. 提供简单的用户提示,减少复杂的输入校验。
  3. 使用函数封装,保持代码逻辑清晰和可扩展性。

二、代码实现
2.1 主程序

主程序用于提供菜单交互,并调用相应的功能处理函数。

/* 文件名:55-1.cj */
package cjcDemo

import std.console.*
import std.math.*      // 数学运算支持
import std.convert.*    // 数据转换模块

// 主函数
main(): Int64 {
    println("高级计算器 - 支持加减乘除、幂运算与开平方")
    while (true) {
        println("\n请选择操作:")
        println("1. 基础运算 (+, -, *, /)")
        println("2. 幂运算 (^)")
        println("3. 开平方 (sqrt)")
        println("4. 退出程序")
        
        let mode: Int64 = readInt("请输入操作编号 (1-4):")
        if (mode == 4) {
            println("程序已退出。再见!")
            break
        }
        handleChoice(mode)
    }
    return 0
}
2.2 核心功能:操作处理与计算
// 根据用户选择调用对应功能
func handleChoice(mode: Int64) {
    if (mode == 1) {
        println("请输入第一个数字:")
        let num1: Int64 = readInt("请输入整数:")
        println("请输入第二个数字:")
        let num2: Int64 = readInt("请输入整数:")
        println("请输入操作符 (+, -, *, /):")
        let operation: String = Console.stdIn.readln().getOrThrow()
        calculateAndPrintResult(num1, num2, operation)
    } else if (mode == 2) {
        println("请输入底数:")
        let base: Float64 = readFloat("请输入数字:")
        println("请输入指数:")
        let exponent: Float64 = readFloat("请输入数字:")
        let result: Float64 = power(base, exponent)
        println("幂运算结果: ${result}")
    } else if (mode == 3) {
        println("请输入需要开平方的数字:")
        let number: Float64 = readFloat("请输入数字:")
        let result: Float64 = squareRoot(number)
        println("开平方结果: ${result}")
    } else {
        println("无效选择,请输入 1, 2, 3 或 4。")
    }
}
2.3 公共工具函数
// 幂运算函数
func power(base: Float64, exponent: Float64): Float64 {
    return pow(base, exponent)
}

// 开平方函数
func squareRoot(number: Float64): Float64 {
    if (number < 0.0) {
        println("错误:不能对负数开平方")
        return 0.0
    }
    return sqrt(number)
}

// 读取整数输入
func readInt(prompt: String): Int64 {
    println(prompt)
    let input: String = Console.stdIn.readln().getOrThrow()
    return Int64.parse(input)
}

// 读取浮点数输入
func readFloat(prompt: String): Float64 {
    println(prompt)
    let input: String = Console.stdIn.readln().getOrThrow()
    return Float64.parse(input)
}

// 计算并输出结果
func calculateAndPrintResult(num1: Int64, num2: Int64, operation: String) {
    if (operation == "+") {
        println("结果: ${num1 + num2}")
    } else if (operation == "-") {
        println("结果: ${num1 - num2}")
    } else if (operation == "*") {
        println("结果: ${num1 * num2}")
    } else if (operation == "/") {
        if (num2 != 0) {
            println("结果: ${num1 / num2}")
        } else {
            println("错误:除数不能为零")
        }
    } else {
        println("错误:无效的操作符。请使用 +, -, *, /")
    }
}

三、效果示例

效果示例

输入:

高级计算器 - 支持加减乘除、幂运算与开平方
请选择操作:
1
请输入第一个数字:
8
请输入第二个数字:
2
请输入操作符 (+, -, *, /):
/

输出:

结果: 4

输入:

请选择操作:
2
请输入底数:
3
请输入指数:
2

输出:

幂运算结果: 9.000000

输入:

请选择操作:
3
请输入需要开平方的数字:
-4

输出:

错误:不能对负数开平方

四、小结

本次教程通过仓颉编程语言实现了更复杂的计算器功能。简化后的实现去掉了复杂的输入校验逻辑,依赖用户的正确输入,保持了代码简洁性。同时,通过函数封装保持代码模块化,方便后续扩展更多功能。


上一篇: 「Mac玩转仓颉内测版54」应用篇1 - 编写一个简单的计算器
下一篇: 「Mac玩转仓颉内测版56」应用篇3 - 增强计算器功能与数据存储

📍公测版
  • 仓颉编程语言官网
  • 开发指南
  • 仓颉编程语言库 API
  • 仓颉语言 IDE 插件使用指南
  • 仓颉编程语言白皮书
  • 词法结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2268395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你还在用rand()生成随机数?

1. rand() 的缺陷 伪随机数生成器使用数学算法来产生具有良好统计特性的数字序列&#xff0c;但这些数字并非真正随机。 C 标准库中的 rand() 函数并不保证所生成的随机序列的质量。某些 rand() 实现生成的数字周期较短&#xff0c;且这些数字是可以预测的。对于有强伪随机数…

基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 2ASK调制解调 2.2 帧同步 3.Verilog核心程序 4.完整算法代码文件获得 1.算法仿真效果 vivado2019.2仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 设置SNR8db 设置SNR20db 整体波形效果&…

RT-Thread中堆和栈怎么跟单片机内存相联系

现在RT-ThreadMCU的应用方式越来越普遍&#xff0c;RT-Thread需要配置MCU中的RAM到的系统中&#xff0c;进入系统内存管理&#xff0c;才能提供给基于实时系统的应用程序使用&#xff0c;比如给应用程序提供malloc、free等函数调用功能。在嵌入式软件开发中&#xff0c;我们经常…

2、Bert论文笔记

Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调&#xff08;预训练下游策略&#xff09; 3、模型架构4、输入/输出1.输入&#xff1a;2.输出&#xff1a;3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…

TiDB 的MPP架构概述

MPP架构介绍&#xff1a; 如图&#xff0c;TiDB Server 作为协调者&#xff0c;首先 TiDB Server 会把每个TiFlash 拥有的region 会在TiFlash上做交换&#xff0c;让表连接在一个TiFlash上。另外 TiFlash会作为计算节点&#xff0c;每个TiFlash都负责数据交换&#xff0c;表连接…

3、redis的高可用

主从复制 主从复制&#xff1a;这是redis高可用的基础。哨兵模式和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的&#xff0c;主负责写入&#xff0c;然后把写入的数据同步到从&#xff0c;从节点只能读不能写。read only。 不能做高可用的切换&#xff…

【架构-38】如何选择通信协议和数据格式

一、通信协议选择 不同的协议适用于不同的应用场景&#xff0c;关键在于数据传输的需求&#xff0c;如&#xff1a;实时性、带宽、可靠性等。下面是几种常见通信协议的适用场景&#xff1a; WebSocket 适用场景&#xff1a;实时、双向数据传输、低延迟、持久连接 特点&#x…

SpringCloudAlibaba 技术栈—Sentinel

1、什么是sentinel? Sentinel是一个用于微服务架构的流量管理和控制系统&#xff0c;它通过限制和控制进入系统的流量&#xff0c;来保护系统免受过载和故障的影响&#xff0c;确保服务的稳定性。简而言之&#xff0c;它就是一个帮助微服务在高负载情况下也能稳定运行的工具。…

初学STM32 ---高级定时器互补输出带死区控制

互补输出&#xff0c;还带死区控制&#xff0c;什么意思&#xff1f; 带死区控制的互补输出应用之H桥 捕获/比较通道的输出部分&#xff08;通道1至3&#xff09; 死区时间计算 举个栗子&#xff08;F1为例&#xff09;&#xff1a;DTG[7:0]250&#xff0c;250即二进制&#x…

RoboMIND:多体现基准 机器人操纵的智能规范数据

我们介绍了 RoboMIND&#xff0c;这是机器人操纵的多体现智能规范数据的基准&#xff0c;包括 4 个实施例、279 个不同任务和 61 个不同对象类别的 55k 真实世界演示轨迹。 工业机器人企业 埃斯顿自动化 | 埃夫特机器人 | 节卡机器人 | 珞石机器人 | 法奥机器人 | 非夕科技 | C…

Hadoop HA安装配置(容器环境),大数据职业技能竞赛模块A平台搭建,jdk+zookeeper+hadoop HA

HA概述 &#xff08;1&#xff09; 所谓HA&#xff08;High Availablity&#xff09;,即高可用&#xff08;7*24小时不中断服务&#xff09;。 &#xff08;2&#xff09; 实现高可用最关键的策略是消除单点故障&#xff0c;HA严格来说应该分为各个组件的HA机制&#xff0c;H…

国产文本编辑器EverEdit - 如何让输出窗口的日志具有双击跳转到文件指定行的功能

1 开发参考&#xff1a;编写脚本时如何向输出窗口打印可跳转到文件位置的日志 1.1 应用场景 编写脚本时&#xff0c;有时对文本进行分析&#xff0c;需要将提示信息打印到输出窗口&#xff0c;同时希望将文本的行、列信息也打印在日志中&#xff0c; 最好是双击日志信息可以跳…

《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具

在本节课程中&#xff0c;我们来了解一下K8s集群的安全配置&#xff0c;通过对CIS安全基准和kube-bench工具的介绍&#xff0c;可以快速发现K8s集群中不符合最佳实践的配置项&#xff0c;及时进行修复&#xff0c;从而来提高集群的安全性。 在这个课程中&#xff0c;我们将学习…

3、redis的集群模式

主从模式 哨兵模式 集群 主从模式&#xff1a;这是redis高可用的基础&#xff0c;哨兵模式和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的&#xff0c;主负责写入&#xff0c;然后把写入的数据同步到从&#xff0c; 从节点只能读不能写&#xff0c;rea…

计算机图形学知识点汇总

一、计算机图形学定义与内容 1.图形 图形分为“图”和“形”两部分。 其中&#xff0c;“形”指形体或形状&#xff0c;存在于客观世界和虚拟世界&#xff0c;它的本质是“表示”&#xff1b;而图则是包含几何信息与属性信息的点、线等基本图元构成的画面&#xff0c;用于表达…

自动化测试模型(一)

8.8.1 自动化测试模型概述 在自动化测试运用于测试工作的过程中&#xff0c;测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象&#xff0c;总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。 线性测试 首先&#…

医疗数仓数据仓库设计

医疗数仓数据仓库设计 数据仓库构建流程数据调研明确数据域构建业务总线矩阵明确统计指标交易主题医生主题用户主题评价主题 维度模型设计汇总模型设计 数据仓库构建流程 数据仓库分层规划 优秀可靠的数仓体系&#xff0c;需要良好的数据分层结构。合理的分层&#xff0c;能够…

Go-知识 注释

Go-知识 注释 行注释块注释包注释结构体&接口注释函数&方法注释废弃注释文档 在 go 语言中注释有两种&#xff0c;行注释和块注释 行注释 使用双斜线 // 开始&#xff0c;一般后面紧跟一个空格。行注释是Go语言中最常见的注释形式&#xff0c;在标准包中&#xff0c;…

1230作业

思维导图 作业 将广播发送和接收端实现一遍&#xff0c;完成一个发送端发送信息&#xff0c;对应多个接收端接收 自实验 //广播发送端 #include <myhead.h> #define G_PORT 8765 #define G_IP "192.168.124.255" int main(int argc, const char *argv[]) {//…

U盘格式化工具合集:6个免费的U盘格式化工具

在日常使用中&#xff0c;U盘可能会因为文件系统不兼容、数据损坏或使用需求发生改变而需要进行格式化。一个合适的格式化工具不仅可以清理存储空间&#xff0c;还能解决部分存储问题。本文为大家精选了6款免费的U盘格式化工具&#xff0c;并详细介绍它们的功能、使用方法、优缺…