计算器(C语言)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 介绍
  • 关键代码
  • 运行代码(3种)


介绍

  • 标准计数器:执行加减乘除等等
  • 科学计算器:执行分数、统计学、指数函数、对数、三角函数运算等等
  • 程序员计算器:用于二进制,八进制,十进制,十六进制等相互转换功能

二、关键代码

1、加、减、乘、除的函数调用。

void Add(int x, int y)
{
    printf("sum=%d\n", x + y);
}

void Sub(int x, int y)
{
    printf("sum=%d\n", x - y);
}

void Mlu(int x, int y)
{
    printf("sum=%d\n", x * y);
}

void Div(int x, int y)
{
    printf("sum=%d\n", x / y);
}

2、

1、运用do...while进行计算器是否运行。再用switch...case.default选择加还是减或者乘、除。

    do
    {
        menu();  
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 0:
            printf("退出计算器:\n");
            break;
        case 1:
            printf("加法:");
            scanf("%d %d", &x, &y);
            Add(x, y);
            break;
        case 2:
            printf("减法:");
            scanf("%d %d", &x, &y);
            Sub(x, y);
            break;
        case 3:
            printf("乘法:");
            scanf("%d %d", &x, &y);
            Mlu(x, y);
            break;
        case 4:
            printf("除法:");
            scanf("%d %d", &x, &y);
            Div(x, y);
            break;
        default:
            printf("请重新输入:\n");
            break;
        }
    } while (input);

2、Add、Sub、Mlu和Div中有相同的代码,本着优秀代码利用函数指针数组可进行优化、简单、明了,再运用if...else if...else进行判断是否退出、或者进行计算。

        printf("请选择:>");
        scanf("%d", &input);
        int(*pfArr[5])(int, int) = { Add,Sub,Mlu,Div };

        if (input > 0 && input < 5)
        {
            printf("请输入二个数:");
            scanf("%d %d", &x, &y);
            pfArr[input](x, y);
        }
        else if (input == 0)
        {
            printf("退出计算器:\n");
        }
        else
            printf("请重新输入:");

3、运用回调函数进行优化。根据input进行选择计算器中加、减、乘、除,然后传给函数指针pf

,再输入二个要计算的数,再回归Add、Sub、Mlu、Div函数里进行运算。

     void Calc(int(* pf)(int, int))
{
    int x = 0, y = 0;
    printf("请输入二个数:");
    scanf("%d %d", &x, &y);
    pf(x, y);
}   

switch (input)
        {
        case 0:
            printf("退出计算器:\n");
            break;
        case 1:
            Calc(Add);
            break;
        case 2:
            Calc(Sub);
            break;
        case 3:
            Calc(Mlu);
            break;
        case 4:
            Calc(Div);
            break;
        default:
            printf("请重新输入:\n");
            break;
        }


运行代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>void Add(int x, int y)
{printf("sum=%d\n", x + y);
}void Sub(int x, int y)
{printf("sum=%d\n", x - y);
}void Mlu(int x, int y)
{printf("sum=%d\n", x * y);
}void Div(int x, int y)
{printf("sum=%d\n", x / y);
}void menu()
{printf("*********************\n");printf("**** 1.Add 2.Sub ****\n");printf("**** 3.Mlu 4.Div ****\n");printf("****  play.jsq   ****\n");printf("*********************\n");                      
}//方法一:
int main()
{int x = 0, y = 0;int input = 0;do{menu();  printf("请选择:>");scanf("%d", &input);switch (input){case 0:printf("退出计算器:\n");break;case 1:printf("加法:");scanf("%d %d", &x, &y);Add(x, y);break;case 2:printf("减法:");scanf("%d %d", &x, &y);Sub(x, y);break;case 3:printf("乘法:");scanf("%d %d", &x, &y);Mlu(x, y);break;case 4:printf("除法:");scanf("%d %d", &x, &y);Div(x, y);break;default:printf("请重新输入:\n");break;}} while (input);return 0;
}方法二
int main()
{int x = 0,y = 0;int input = 0;do{menu();printf("请选择:>");scanf("%d", &input);int(*pfArr[5])(int, int) = { Add,Sub,Mlu,Div };if (input > 0 && input < 5){printf("请输入二个数:");scanf("%d %d", &x, &y);pfArr[input](x, y);}else if (input == 0){printf("退出计算器:\n");}elseprintf("请重新输入:");} while (input);return 0;
}方法三
void Calc(int(* pf)(int, int))
{int x = 0, y = 0;printf("请输入二个数:");scanf("%d %d", &x, &y);pf(x, y);
}int main()
{int input = 0;do{menu();  printf("请选择:>");scanf("%d", &input);switch (input){case 0:printf("退出计算器:\n");break;case 1:Calc(Add);break;case 2:Calc(Sub);break;case 3:Calc(Mlu);break;case 4:Calc(Div);break;default:printf("请重新输入:\n");break;}} while (input);return 0;
}

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

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

相关文章

BoostCompass(数据准备预处理模块)

阅读导航 一、网页数据下载二、编写数据去标签与数据清洗的模块 Parser✅boost 开发库的安装1. 基本思路2. 详细讲解&#xff08;1&#xff09;程序递归遍历目录&#xff0c;收集所有HTML文件的路径&#xff08;2&#xff09;对每个HTML文件进行解析&#xff0c;提取出文档标题…

【资源分享】书籍:现代统计学:使用Python的计算方法

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

【微服务】------微服务架构技术栈

目前微服务早已火遍大江南北&#xff0c;对于开发来说&#xff0c;我们时刻关注着技术的迭代更新&#xff0c;而项目采用什么技术栈选型落地是开发、产品都需要关注的事情&#xff0c;该篇博客主要分享一些目前普遍公司都在用的技术栈&#xff0c;快来分享一下你当前所在用的技…

Java每日一题(三道同一类型的题)

前言 本文一共有三道题:1.两数之和 2.三数之和 3. 四数之和 为什么把这三道题放一起呢&#xff0c;因为三数之和是可以根据两数之和进行推导&#xff0c;四数之和可以根据三数之和进行推导。 两数之和 思路分析: 我的思路: 1.排序 2.使用左右指针 3.处理细节问题 先让数组…

生活中的数学 --- 等额本息贷款和等额本金贷款的月供应该怎么算?

等额本息贷款和等额本金贷款的月供应该怎么算&#xff1f; 从一个例子开始&#xff0c;假设我要从银行贷款36万(即&#xff0c;本金)&#xff0c;银行给出的贷款年利率是12%(月利率为年利率除以12)&#xff0c;贷款半年(6个月)&#xff0c;按月还款&#xff0c;分6期还完。 问分…

电池二次利用走向可持续大循环周期的潜力和挑战(第二篇)

一、二次利用风险 电动汽车的当前电池信息&#xff0c;如年份、容量和制造商&#xff0c;通常是相互关联和不完整的。再加上电池内部的电化学变化&#xff0c;SLB在包括安全和环境在内的一些领域存在很大的风险&#xff0c;这表明短期内梯次利用仍然是一个不成熟的方案。 1.1 安…

在mysql中如何更新数据呢?

如何更新一条数据&#xff1f; 在 MySQL 中&#xff0c;更新一条数据可以使用 UPDATE 语句。以下是更新一条数据的基本语法&#xff1a; UPDATE table_name SET column1 value1, column2 value2,... WHERE condition;其中&#xff1a; table_name&#xff1a;要更新的表的…

Linux 系统下对于 MySQL 的初级操作

由于公司老板想把早已封存的服务器陈年老码捣鼓一下&#xff0c;所以找了一个外援&#xff0c;我则是配合提供支持。但是过程并不顺利。至少 5 年以上的间隔&#xff0c;导致外援查看的时候发现很多代码和配置是缺失的&#xff0c;目前卡在数据库部分&#xff0c;而我这边就帮忙…

libVLC 提取视频帧使用QGraphicsView渲染

在前面章节中&#xff0c;我们讲解了如何使用QWidget渲染每一帧视频数据&#xff0c;这种方法对 CPU 负荷较高。 libVLC 提取视频帧使用QWidget渲染-CSDN博客 后面又讲解了使用OpenGL渲染每一帧视频数据&#xff0c;使用 OpenGL去绘制&#xff0c;利用 GPU 减轻 CPU 计算负荷…

亚马逊AWS永久免费数据库

Amazon DynamoDB 是一项无服务器的 NoSQL 数据库服务&#xff0c;您可以通过它来开发任何规模的现代应用程序。作为无服务器数据库&#xff0c;您只需按使用量为其付费&#xff0c;DynamoDB 可以扩展到零&#xff0c;没有冷启动&#xff0c;没有版本升级&#xff0c;没有维护窗…

交换机与队列的介绍

1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff08;后面会详细讲&…

RabbitMQ如何保证消息的幂等性???

在RabbitMQ中&#xff0c;保证消费者的幂等性主要依赖于业务设计和实现&#xff0c;而非RabbitMQ本身提供的一种直接功能。 在基于Spring Boot整合RabbitMQ的场景下&#xff0c;要保证消费者的幂等性&#xff0c;通常需要结合业务逻辑设计以及额外的技术手段来实现。以下是一个…

Elasticsearch 悬挂索引分析和自己的一点见解

在 Elasticsearch 的实战中&#xff0c;悬挂索引是一个既常见又容易引起困扰的概念。 今天&#xff0c;我将分享一次处理集群状态为RED&#xff0c;原因为DANGLING_INDEX_IMPORTED 的实战经验&#xff0c;深入探讨悬挂索引的定义、产生原因、管理方法&#xff0c;以及如何有效…

[Linux - C语言] 自主Shell

[Linux - C语言] 自主Shell [Linux - C语言] 自主Shell逻辑策划 main()打印命令行 void MakeCommandLineAndPrint()用户名 USER主机名 HOSTNAME当前目录 PWDSkipPath 切割目录打印命令行 获取用户字符串 int GetUserCommand()检查重定向 void CheckRedir()切割字符 void SplitC…

JVM字节码与类的加载——类的加载过程详解

文章目录 1、概述2、加载(Loading)阶段2.1、加载完成的操作2.2、二进制流的获取方式2.3、类模型与Class实例的位置2.4、数组类的加载 3、链接(Linking)阶段3.1、链接阶段之验证(Verification)3.1.1、格式检查3.1.2、字节码的语义检查3.1.3、字节码验证3.1.4、符号引用验证 3.2、…

Harmony鸿蒙南向驱动开发-I3C

I3C&#xff08;Improved Inter Integrated Circuit&#xff09;总线是由MIPI Alliance开发的一种简单、低成本的双向二线制同步串行总线。 I3C是两线双向串行总线&#xff0c;针对多个传感器从设备进行了优化&#xff0c;并且一次只能由一个I3C主设备控制。相比于I2C&#xf…

langchain LCEL,prompt模块,outputparse输出模块

目录 基本代码 prompt模块 prompt模版控制长度 outputparse格式化输出 LangChain表达式语言&#xff0c;或者LCEL&#xff0c;是一种声明式的方式&#xff0c;可以轻松地将链条组合在一起 langchian 可以使用 通义千问&#xff0c;我们用通义千问&#xff0c;用法也要申请…

基于ros的相机内参标定过程

基于ros的相机内参标定过程 1. 安装还对应相机的驱动2. 启动相机节点发布主题3. 下载camera_calibartion4. 将红框的文件夹复制在自己的工作空间里边&#xff0c;编译5. 标定完成以后&#xff0c;生成内参参数文件camera.yaml。将文件放在对应的路径下&#xff0c;修改config文…

ArcGIS Server 10发布要素服务时遇到的数据库注册问题总结(一)

工作环境&#xff1a; Windows 7 64 位旗舰版 ArcGIS Server 10.1 ArcGIS Desktop 10.1 IIS 7.0 开始的时候以为10.1发布要素服务和10.0一样&#xff0c;需要安装ArcSDE&#xff0c;后来查阅资料发现不需要&#xff0c;数据库直连方式就可以了。 首先我来说一下发布要素服…