白骑士的C语言教学实战项目篇 4.1 计算器程序

系列目录

上一篇:白骑士的C语言教学高级篇 3.5 性能优化

        在本项目中,我们将设计并实现一个简单的计算器程序,涵盖程序设计与实现、用户输入处理、算术运算与结果显示。该计算器可以进行基本的加减乘除运算,并能处理用户的连续输入。

程序设计与实现

        首先,我们需要设计计算器的基本结构和功能。我们将创建一个命令行程序,用户可以输入简单的算术表达式,程序会解析并计算结果,然后将结果显示给用户。

        程序的主要模块包括:

  • 用户输入处理模块
  • 算术运算模块
  • 结果显示模块

用户输入处理

        用户输入处理模块负责接收用户输入的算术表达式,并将其拆分成操作数和操作符。这部分需要注意输入的合法性和错误处理。以下是用户输入处理的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


// 判断字符是否为运算符
int isOperator(char ch) {
    return ch == '+' || ch == '-' || ch == '*' || ch == '/';
}


// 提取操作数
double getOperand(char *input, int *index) {
    double operand = 0.0;

    while (isdigit(input[*index]) || input[*index] == '.') {
        operand = operand * 10 + (input[*index] - '0');

        (*index)++;
    }

    return operand;
}


// 获取操作符
char getOperator(char *input, int *index) {
    char operator = input[*index];

    (*index)++;

    return operator;
}


int main() {
    char input[100];

    printf("请输入算术表达式(例如 3 + 5):\n");
    fgets(input, sizeof(input), stdin);
    
    int index = 0;
    double operand1 = getOperand(input, &index);
    char operator = getOperator(input, &index);
    double operand2 = getOperand(input, &index);

    // 处理运算结果
    double result = 0.0;

    switch (operator) {
        case '+': result = operand1 + operand2; break;
        case '-': result = operand1 - operand2; break;
        case '*': result = operand1 * operand2; break;
        case '/': result = operand1 / operand2; break;
        default: printf("无效的运算符\n"); return 1;
    }
    
    // 显示结果
    printf("结果: %lf\n", result);

    return 0;
}

算术运算与结果显示

  • 算术运算模块:负责执行基本的加减乘除运算,并将计算结果返回给主程序。我们将使用 ‘switch‘ 语句来处理不同的运算符,并进行相应的运算;
  • 结果显示模块:负责将计算结果格式化并输出给用户。为了提高用户体验,程序可以处理一些特殊情况,比如除数为零等错误。

        以下是算术运算与结果显示的示例代码:

double calculate(double operand1, char operator, double operand2) {
    double result = 0.0;

    switch (operator) {
        case '+': result = operand1 + operand2; break;
        case '-': result = operand1 - operand2; break;
        case '*': result = operand1 * operand2; break;
        case '/':
            if (operand2 != 0) {
                result = operand1 / operand2;
            } 

            else {
                printf("错误: 除数不能为零\n");

                exit(1);
            }

            break;

        default:
            printf("无效的运算符\n");

            exit(1);
    }

    return result;
}


int main() {
    char input[100];

    printf("请输入算术表达式(例如 3 + 5):\n");
    fgets(input, sizeof(input), stdin);
    
    int index = 0;
    double operand1 = getOperand(input, &index);
    char operator = getOperator(input, &index);
    double operand2 = getOperand(input, &index);

    // 处理运算结果
    double result = calculate(operand1, operator, operand2);

    // 显示结果
    printf("结果: %lf\n", result);

    return 0;
}

总结

        通过本项目,我们实现了一个简单的计算器程序,涵盖了程序设计、用户输入处理、算术运算与结果显示等模块。这不仅让我们巩固了C语言的基础知识,也提升了我们对实际项目开发的理解和能力。在实际开发中,可以根据需要扩展计算器的功能,例如支持更多的运算符和复杂表达式处理等。

下一篇:白骑士的C语言教学实战项目篇 4.2 文件加密与解密​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

240706_昇思学习打卡-Day18-基于MindSpore的GPT2文本摘要

240706_昇思学习打卡-Day18-基于MindSpore的GPT2文本摘要 今天做一个根据一段文章提取摘要的提取器&#xff0c;基于nlpcc2017摘要数据&#xff0c;内容为新闻正文及其摘要&#xff0c;就是训练集及标签。 首先我们来预装以下MindSpore环境 %%capture captured_output # 实验…

昇思MindSpore学习笔记4-05生成式--Pix2Pix实现图像转换

摘要&#xff1a; 记录昇思MindSpore AI框架使用Pix2Pix模型生成图像、判断图像真实概率的原理和实际使用方法、步骤。包括环境准备、下载数据集、数据加载和处理、创建cGAN神经网络生成器和判别器、模型训练、模型推理等。 一、概念 1.Pix2Pix模型 条件生成对抗网络&#x…

IDEA常用技巧荟萃:精通开发利器的艺术

1 概述 在现代软件开发的快节奏环境中,掌握一款高效且功能全面的集成开发环境(IDE)是提升个人和团队生产力的关键。IntelliJ IDEA,作为Java开发者的首选工具之一,不仅提供了丰富的编码辅助功能,还拥有高度可定制的界面和强大的插件生态系统。然而,要充分发挥其潜力,深…

求职成功率的算法,与葫芦娃救爷爷的算法,有哪些相同与不同

1 本节概述 通过在B站百刷葫芦娃这部儿时剧&#xff0c;我觉得可以从中梳理出一些算法&#xff0c;甚至可以用于求职这个场景。所以&#xff0c;大家可以随便问我葫芦娃的一些剧情和感悟&#xff0c;我都可以做一些回答。 2 葫芦娃救爷爷有哪些算法可言&#xff1f; 我们知道…

使用Python实现CartPole游戏

在深度强化学习内容的介绍中&#xff0c;提出了CartPole游戏进行深度强化学习&#xff0c;现在提供一种用Python简单实现Cart Pole游戏的方法。 1. 游戏介绍 CartPole 游戏是一个经典的强化学习问题&#xff0c;其中有一个小车&#xff08;cart&#xff09;和一个杆&#xff…

Apache Seata tcc 模块源码分析

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 一 .导读 spring 模块分析中讲到&#xff0c;Seata 的 spring 模块会对涉及到分布式业务的 b…

进程控制-wait和waitpid进程回收

wait 阻塞函数 函数作用&#xff1a; 1. 阻塞并等待子进程退出 2. 回收子进程残留资源 3. 获取子进程结束状态&#xff08;退出原因&#xff09; pid_t wait(int *wstatus); 返回值&#xff1a; ‐1 : 回收失败&#xff0c;已经没有子进程了 >0 : 回收子进程对应的…

《linux系统内核设计与实现》-实现最简单的字符设备驱动

开发linux内核驱动需要以下4个步骤&#xff1a; 1 编写hello驱动代码 驱动代码如下 helloDev.c&#xff0c;这是一个最小、最简单的驱动&#xff0c;去掉了其他的不相干代码&#xff0c;尽量让大家能了解驱动本身。 #include <linux/module.h> #include <linux/mod…

python函数和c的区别有哪些

Python有很多内置函数&#xff08;build in function&#xff09;&#xff0c;不需要写头文件&#xff0c;Python还有很多强大的模块&#xff0c;需要时导入便可。C语言在这一点上远不及Python&#xff0c;大多时候都需要自己手动实现。 C语言中的函数&#xff0c;有着严格的顺…

vulhub-activemq(CVE-2016-3088)

在 Apache ActiveMQ 5.12.x~5.13.x 版本中&#xff0c;默认关闭了 fileserver 这个应用&#xff08;不过&#xff0c;可以在conf/jetty.xml 中开启&#xff09;&#xff1b;在 5.14.0 版本后&#xff0c;彻底删除了 fileserver 应用。【所以在渗透测试过程中要确定好 ActiveMQ …

2024年世界人工智能大会(WAIC)各大佬的精彩发言

2024年世界人工智能大会&#xff08;WAIC&#xff09;在上海举行&#xff0c;受到了广泛关注和参与。以下是大会首日的主要观点和议题的总结&#xff1a; AI 应用落地&#xff1a;大会讨论了AI应用如何落地&#xff0c;即如何在当前阶段利用大模型技术实现实际应用。 AI 安全&…

nginx转发的问题

我在项目配置的时候遇到一个问题&#xff1a; 配置了域名转发&#xff0c;且配置了https nginx配置如下&#xff1a; server {listen 443 ssl;server_name yourdomain.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;loca…

收银系统源码-线上商城预售功能

1.功能描述 预售&#xff1a;智慧新零售收银系统&#xff0c;线上商城营销插件之一&#xff0c;商品出售时可设置以支付定金或全款的方式提前预售&#xff0c;门店按订单量备货&#xff0c;降低压货成本&#xff1b; 2.适用场景 易损商品提前下单备货&#xff0c;如水果生鲜…

拼多多20240509实习生笔试

题目一 解题思路 分类讨论 情况一&#xff1a;5元汉堡也买不完。 情况二&#xff1a;5元汉堡能买完&#xff0c;非5元买不起。 情况三&#xff1a;都能买起&#xff0c;或还有剩余买原价汉堡。 题目二 解题思路 找规律&#xff0c;假设有...xy...&#xff0c;x在前。如果交换x…

KubeSphere 社区双周报|2024.06.21-07.04

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2024.06.21-07.04…

nodejs实现:支付宝订单查询

nodejs实现&#xff1a;支付宝订单查询&#xff1b; 原生http请求&#xff0c;不使用三方库&#xff1b; 代码如下&#xff1a; const https require(https); const crypto require(crypto); const querystring require(querystring);// 支付宝公共参数 const PRIVATE_KE…

联想小新14Pro,误删了一个注册表,怎么办?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

flask模块化、封装使用cache(flask_caching)

1.安装flask_caching库 pip install flask_caching 2.创建utils Python 软件包以及cache_helper.py 2.1cache_helper.py代码 from flask_caching import Cachecache Cache()class CacheHelper:def __init__(self, app, config):cache.init_app(app, config)staticmethoddef…

常见的Java运行时异常

常见的Java运行时异常 1、ArithmeticException&#xff08;算术异常&#xff09;2、ClassCastException &#xff08;类转换异常&#xff09;3、IllegalArgumentException &#xff08;非法参数异常&#xff09;4、IndexOutOfBoundsException &#xff08;下标越界异常&#xf…

【python】python母婴数据分析模型预测可视化(数据集+论文+PPT+源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…