思路

1、采用多文件编程,引入自己编写的calculator.hcalculator.c
2、main函数中调用printMainMenu函数打印主菜单,并使用switch判断执行的功能。为实现重复使用,应将其置于while循环中。
3、printMainMenu函数中打印菜单,并返回_getch函数获取到的键盘输入。
4、calculator.h中声明实现计算功能所需函数,使用extern关键字让函数可跨文件调用。
5、calculator.c中定义实现计算功能所需函数。

实现

效果图

main.c

#include<stdio.h>
#include<Windows.h> //用于清屏
#include<conio.h> //用于_getch的调用
#include "calculator.h" //引入头文件int printMainMenu();
int isContinue(); //声明函数int main()
{double history = 0; //定义历史记录while(1){switch (printMainMenu()) //调用打印主菜单函数{case 0:printf("程序已退出,感谢您的使用!"); return 0; //结束程序case 1:do { history = plus(); } while (isContinue());break; //do...while循环实现返回功能case 2:do { history = subtract(); } while (isContinue());break; //isContinue判断是否继续case 3:do { history = multiply();} while (isContinue()); break; //乘法case 4:do { history = divise(); } while (isContinue());break;   //除法case 5:do { history = mod(); } while (isContinue());break;      //取余case 6:do { history = power();} while (isContinue()); break;    //幂运算case 7:do { history = decimal();} while (isContinue()); break;  //进制转换case 8:printf("上一次的计算结果是:%g", history); _getch(); break; //_getch避免结果被清空default:printf("不是一个合法的选项,按任意键继续"); _getch();}system("cls"); //清屏操作}
}int printMainMenu() {int menuID;system("cls"); //清屏操作printf("**************************欢迎使用计算器**************************\n");printf("*                                                                *\n");printf("*                ---------------------------------               *\n");printf("*                |         Powered By GBW        |               *\n");printf("*                ---------------------------------               *\n");printf("*                                                                *\n");printf("*                1)加法                                          *\n");printf("*                2)减法                                          *\n");printf("*                3)乘法                                          *\n");printf("*                4)除法                                          *\n");printf("*                5)取余                                          *\n");printf("*                6)幂运算                                        *\n");printf("*                7)进制转换(十进制转其他)                       *\n");printf("*                8)查看上次计算结果                              *\n");printf("*                0)退出系统                                      *\n");printf("*                                                                *\n");printf("******************************************************************\n");menuID = _getch()-48; //通过数字判断选项system("cls");return menuID;
}int isContinue()
{char ch; while ((ch = getchar()) != '\n' && ch != EOF); //清空缓冲区printf("\n是否继续?(y/n):");if (getchar() == 'n' || getchar() == 'N')return 0; //若输入n则返回“假”return 1;
}

calculator.h

实现部分计算功能需要考虑数据错误(如除数为0)

extern double plus();
extern double subtract();
extern double multiply();
extern double divise();
extern int mod();
extern double power();
extern int decimal();

calculator.c

#include "calculator.h"
#include <math.h>
#include <stdio.h>
#include <Windows.h>
#include <conio.h>double plus()
{double a, b;printf("请输入第一个加数:");scanf_s("%lf", &a);printf("请输入第二个加数:");scanf_s("%lf", &b);printf("和为是 %g", a+b);return a+b;
}double subtract()
{double a, b;printf("请输入被减数数:");scanf_s("%lf", &a);printf("请输入减数:");scanf_s("%lf", &b);printf("差为 %g", a - b);return a - b;
}
double multiply()
{double a, b;printf("请输入第一个乘数:");scanf_s("%lf", &a);printf("请输入第二个乘数:");scanf_s("%lf", &b);printf("积为 %g", a * b);return a * b;
}double divise()
{double a, b;label:printf("请输入被除数:");scanf_s("%lf", &a);printf("请输入除数:");scanf_s("%lf", &b);if (b == 0.0) { printf("除数不能为0,按任意键继续"); _getch();system("cls"); goto label;}else{printf("商为 %g", (double)a / b);}return (double)a / b;
}
int mod()
{double a, b;label:printf("请输入被除数:");scanf_s("%lf", &a);printf("请输入除数:");scanf_s("%lf", &b);if (b == 0.0){printf("除数不能为0,按任意键继续"); _getch();system("cls"); goto label;}else{printf("余数为 %d", (int)a % (int)b);}return (int)a % (int)b;
}
double power()
{double a, b;label:printf("请输入底数:");scanf_s("%lf", &a);printf("请输入指数:");scanf_s("%lf", &b);if (a == 0.0 && b<=0){printf("数据有误,请重新开始,按任意键继续"); _getch();system("cls"); goto label;}else{printf("幂为 %g", pow(a, b));}return pow(a, b);
}
int decimal()  //进制转换为某工作室考核题,直接把代码搬过来了
{int a, b,out=0,mod = 0, i = 0;int result[256] = { 0 };label:printf("请输入十进制整数:");scanf_s("%d", &a);printf("请输入进制数(1<d<10):");scanf_s("%d", &b);if (b>0 && b <= 10){for (i = 0; a != 0; i++){mod = a % b;a /= b;result[i] = mod;}for (; i != 0; i--){out += result[i - 1] * pow(10, i - 1);}printf("转换结果为 %d", out);}else{printf("进制数超出范围,按任意键继续"); _getch();system("cls"); goto label;}return out;
}

总结

实现计算功能并不复杂,但是要注意系统能否提供良好的交互性。

c语言 实现一个简单的计算器系统相关推荐

  1. c语言编写一个简单的答题系统

    利用c语言编写一个简单的答题系统. 思路是先设计好题目和答案,再输入自己的答案,利用输入的答案与正确答案对比,从而得出你回答的对错. (一)捆绑题目和答案 我们可以利用结构体对一个题目捆绑上一个答案. ...

  2. 用C语言实现一个简单的计算器代码

    #include <stdio.h> #include <math.h> #include <stdlib.h> //预处理指令 int main(void) {d ...

  3. C语言设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。

    设计一个简单的计算器,完成两个数的加.减.乘.除.取余.(根据输入的运算符,选择相应的运算,用switch语句实现. 实验代码: #include <stdio.h> #include & ...

  4. 用c语言实现一个简单的计算器(数据结构)

    概要:主要以c语言为例对数据结构中写一个简易的计算器(计算整数间加减乘除括号运算)的算法进行大致讲述,细说如何去实现符号优先级的比较的函数实现. 注:由于编辑器缘故,本文内我以小写x代替了*作为乘号 ...

  5. c语言简单整数计算器代码,用c语言实现一个简单的计算器(数据结构)

    概要:主要以c语言为例对数据结构中写一个简易的计算器(计算整数间加减乘除括号运算)的算法进行大致讲述,细说如何去实现符号优先级的比较的函数实现. 注:由于编辑器缘故,本文内我以小写x代替了*作为乘号 ...

  6. 用c语言制作一个简单的答题系统

    首先制作一个答题系统需要有一个题库,其次要有完整的出题系统,然后要能够进行答题和判断答案对错,最后就是统计答案正确率了. 实现创建一个题库并不难,仅需要使用数组保存题目与标准答案就行了,使用strcp ...

  7. 用C语言编写一个简单的“+”“”-“”*“/”计算器

    /* Note:Your choice is C IDE */ #include "stdio.h" void main() {     double a,b,d;     cha ...

  8. 用python语言写一个简单的计算器

    假如我们有这样一个式子: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2 ...

  9. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

最新文章

  1. 转 sessionid如何产生?由谁产生?保存在哪里?
  2. windows下安装nodejs及框架express
  3. Tomcat——目录结构
  4. SIGIR 2019 eBay高精度召回任务挑战赛冠军团队DeepBlueAI技术分享
  5. java生成UUID通用唯一识别码
  6. 如何查看一个组件的 classid是多少_如何快速查看胎压?胎压多少才正常?带您全面了解爱车的轮胎...
  7. html标题栏置顶,html – 当你滚动时,顶部标题栏的位置固定在iOS chrome上
  8. jmeter使用中的问题
  9. 操作系统—进程的定义、组成和组织方式(思维导图)
  10. 服务器显示PSD缩略图么,psd缩略图补丁(如何显示psd缩略图)
  11. native APP,hybrid APP和web APP
  12. 【AD15绘制原理图编译的一些警告的处理】
  13. java 地心坐标系(ECEF)和WGS-84坐标系(WGS84)互转
  14. linux给root权限命令,linux设置root权限命令
  15. 电脑安全模式没有修复计算机,电脑没有安全模式怎么办
  16. word打开文档很久很慢_打开office非常慢怎么回事_电脑打开word文件很慢怎么办
  17. TestCenter测试管理工具问题详解(5)
  18. Linux互斥锁详细解读,看这一篇就够了
  19. px5 连接充电器是充电指示灯熄灭
  20. 关于对象的construct与destruct

热门文章

  1. 云服务也要差异化————企商在线云计算事业部CTO陈鹏谈IDC与云服务的平衡艺术...
  2. 每日一题——反转字符串中的单词
  3. 内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
  4. javascript read and wirte file
  5. 京东联盟开发(3) 创建应用
  6. matlabB样条曲线求导求曲率
  7. 如何使用清华镜像源加速下载python库?
  8. 《不了神话 宫崎骏》一部关于宫崎骏老爷子的纪录片
  9. 膨胀!有了这份P9架构师推的2800页Java面试大礼包,金九银十稳了
  10. 设计算法把一个十进制的整数转换成二至九进制之间的任意进制输出