【C语言】 模拟计算器

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

int _add(int a, int b)
{
    return a + b;
}
int _sub(int a, int b)
{
    return a - b;
}
int _mul(int a, int b)
{
    return a*b;
}
int _div(int a, int b)
{
    if (b == 0)
    {
	printf("除数位0\n");
    }
    return a / b;
}

void menu()
{
	printf("*************************\n");
	printf("**** 1.add   2.sub   ****\n");
	printf("**** 3.mul   4.div   ****\n");
	printf("******** 0.exit *********\n");
	printf("*************************\n");
}

int main()
{
    int input = 1;
    int num1 = 0;
    int num2 = 0;
    int ret = 0;
    while (input)
    {
	menu();
	printf("请选择>:");
	scanf("%d", &input);
	printf("请输入两个整数操作数>:");
	scanf("%d%d", &num1, &num2);
	switch (input)
	{
	case 1:
		ret = _add(num1, num2);
		break;
	case 2:
		ret = _sub(num1, num2);
		break;
	case 3:
	        ret = _mul(num1, num2);
		break;
	case 4:
		ret = _div(num1, num2);
		break;
	case 0:
		exit(EXIT_FAILURE);
		break;
	default:
		printf("选择错误,请重新选择.\n");
		break;
	}
	printf("ret = %d\n", ret);
    }
	return 0;
}

此外,也可以用枚举结构(enum)实现:

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

enum OP
{
	EXIT,
	ADD,
	SUB,
	MUL,
	DIV
};
int _add(int a, int b)
{
    return a + b;
}
int _sub(int a, int b)
{
    return a - b;
}
int _mul(int a, int b)
{
    return a*b;
}
int _div(int a, int b)
{
    if (b == 0)
    {
	printf("除数位0\n");
    }
    return a / b;
}

void menu()
{
	printf("*************************\n");
	printf("**** 1.add   2.sub   ****\n");
	printf("**** 3.mul   4.div   ****\n");
	printf("******** 0.exit *********\n");
	printf("*************************\n");
}

int(*pfun[5])(int, int) = {0, _add, _sub, _mul, _div};

int main()
{
    int input = 1;
    int num1 = 0;
    int num2 = 0;
    int ret = 0;
    while (input)
    {
	menu();
	printf("请选择>:");
	scanf("%d", &input);
	printf("请输入两个整数操作数>:");
	scanf("%d%d", &num1, &num2);
	if (input >= 1 && input <= 4)
		{
			ret = pfun[input](num1, num2);
		}
		else if (input == 0)
		{
			exit(EXIT_FAILURE);
		}
		else
		{
			printf("选择错误\n");
		}
	printf("ret = %d\n", ret);
	}
	return 0;
}
时间: 2024-11-05 13:48:23

【C语言】 模拟计算器的相关文章

语言模拟ATM自动取款机系统

C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入:用户输入密码,才能进入. 登陆成功界面:共有六个选项,查询余额.取款.存款.转账,修改密码,退出分别对应1,2,3,4,5,6选项,若序号输入不正确会予以提示. 选定1后,进入查询余额界面: 选定2后,进入取款界面: 选定3后,进入存款界面: 选定4后,修改密码,选定5,进入转账:选定6,退出界面:

模拟计算器进行四则运算(同等优先级)(第2届第3题)

题目要求 问题描述:模拟计算器进行四则运算.假设只有+.-.*./.=五种运算符,且它们优先级相等.输入=后会显示计算结果. 样例输入:8.5+0.5*2.5= 样例输出:22.5 解决方案 比起需要考虑优先级,且有多种运算符的题目,这个问题显然要简单地多,直接读取输入并进行分析,然后再计算即可. 源码示例 结果展示 小结 题目虽简单,但是还要考虑细节,比如第一个数为负数的情况.另外本示范代码未对异常输入做检查,所以如果是写严谨的程序,为了保证健壮性,必须进行细致的错误检查.

c 语言简单计算器源码

//  main.c //  计算器 //  Created by qianfeng on 14-7-15. //  Copyright (c) 2014年 ___FGY___. All rights reserved. //iPhone自带计算器不够好,由于你技术出众,你被安排去开发一款iOS新式计算器. /*项目经理认为计算器第一版要支持表达式求值,所以要求如下: 输入任意表达式 求出他的值(支持负数,不支持小数) 这里支持6种表达式 () * / + - ()优先级最高, * /优先级其次

模拟计算器

#coding:utf-8 #Author:Mr Zhi """ 模拟计算器开发: 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后, 必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果, 结果必须与真实的计算器所得出的结果一致 "&

关于c语言模拟c++的多态

关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主要通过函数指针实现,可以参考<Object Orientated Programming in ANSI-C> //shape.h #ifndef __SHAPE_H #define __SHAPE_H #include <stdio.h> #include <stdlib.h&

C语言实现计算器 version 2.

在之前版本中使用栈结构来实现,但由于51单片机不支持malloc函数,所以使用C语言又写了一个计算器版本. 通过数组存放值和操作符模拟栈操作. 实现代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 #define OK 1 5 #define ERROR 0 6 int InputJudge(char c); //判断函数是否为数字 7 float Calc(char optr, f

C语言::模拟实现strlen函数

编写一个C语言程序模拟实现strlen函数. 算法 strlen函数功能是计算字符串中字符的个数.(除\0外) 而字符串本身就是一个字符数组,只不过末尾以\0结束. 因此,我们只需遍历除\0之外的所有字符即可. 有三种方法可以解决这个问题. 算法总结 方法一:设置一个整型计数器,遍历字符串. 方法二:通过不断函数自身的递归. 方法三:与方法一类似,设置一个char*变量标记字符串尾部,通过指针相减得到字符长度. 核心代码 //方法一:通过设置整型计数器,模拟实现strlen函数. int my_

C语言::模拟实现strcmp函数

题目要求 编写一个C语言程序模拟实现strcmp函数. (我们依然先模拟实现strcmp函数,然后再对照string.h库中strcmp函数的实现,对比与大师之间的差距.) 算法分析 通过上一篇文章:C语言::strcmp函数功能.原型.用法及实例我们获得了strcmp函数的如下信息: strcmp原型:int strcmp( const char *s1, const char *s2 ); strcmp功能:将两个字符串自左向右逐个字符进行相比(根据ASCII值大小),直到出现不同的字符或遇

C语言::模拟实现strcat函数

题目要求 编写一个C语言程序模拟实现strcat函数. (我们不妨先模拟实现一下strcat函数,然后再对照一下string.h库函数中strcat函数代码的实现,与大师肩并肩.) 算法分析 strcat函数功能:将两个字符串连接起来,最终返回连接后字符串的首地址. strcat函数原型:char *strcat(char *dest,const char *src); 我们清楚地了解了strcat函数功能和原型之后,就很容易分析出算法... 算法总结 第一步:将dest指向的内容循环遍历至'\