怎样用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器?相关的知识,希望对你有一定的参考价值。
用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器的方法:
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File;
2、输入预处理命令和主函数:
#include<stdio.h> /*函数头:输入输出头文件*/
void main()/*空类型:主函数*/
3、定义变量:
int a,b,d; /*定义变量的数据类型为整型*/
char c;/*定义变量的数据类型为字符型*/
4、输入四则运算式:
printf("输入如“3*4”或“5+2”的四则运算式:");/*输出文字提示*/
scanf("%d%c%d",&a,&c,&b);/*输入四则运算式*/
5、判断运算符号:
switch(c) /*判断运算符号*/
case'+':d=a+b;break;/*进行加法运算*/
case'-':d=a-b;break;/*进行减法运算*/
case'*':d=a*b;break;/*进行乘法运算*/
case'/':d=a/b;break; /*进行除法运算*/
6、输出结果:
printf("%d%c%d=%d\\n",a,c,b,d);/*输出结果*/
完整的源代码:
#include<stdio.h> /*函数头:输入输出头文件*/
void main()/*空类型:主函数*/
int a,b,d;/*定义变量的数据类型为整型*/
char c;/*定义变量的数据类型为字符型*/
printf("输入如“3*4”或“5+2”的四则运算式:");/*输出文字提示*/
scanf("%d%c%d",&a,&c,&b);/*输入四则运算式*/
switch(c)/*判断运算符号*/
case'+':d=a+b;break;/*进行加法运算*/
case'-':d=a-b;break;/*进行减法运算*/
case'*':d=a*b;break;/*进行乘法运算*/
case'/':d=a/b;break;/*进行除法运算*/
printf("%d%c%d=%d\\n",a,c,b,d);/*输出结果*/
参考技术A 这是我写的一个win32框架,用你的c代码嵌入里面的计算代码你可以用纯c实现,很简单/*使用DEVC++5.0编译通过,新手朋友请注意,启动顺序为打开DEVC++ - 新建项目 - 新建windows application程序(这里不是控制台程序),
然后新建HELLOWORD项目,清空MAIN.C代码,将本代码复制进去编译运行即可,
具体功能通过修改C代码实现,大家自己去探索。代码保存为.C文件,直接打开无法通过*/
截图:
代码如下:
#include <windows.h>
//#include <stdlib.h>
#define IDC_EDIT1 201 //自定义控件识别号
#define IDC_EDIT2 202
#define IDC_STATIC 301
#define IDC_BTN1 101
//回调函数.............................................................................
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static TCHAR sss[256]; //不同的case分支之间传值一定要定义全局变量,否则会出错
static TCHAR sss1[256];
static int len,size,i,j,x=10,y=200;
static double sun;
TCHAR szText[256];
HWND edit1,edit2;
HWND an1;
HWND sta1;
switch(uMsg) //消息分支选择,注意SWITCH-CASE结构中,BREAK代表跳出当前SWITCH,RETURN代表结束整个函数。
case WM_COMMAND:
switch(LOWORD(wParam)) //点击不同的控件显示,走不同的处理路径
case IDC_BTN1: //点击按钮1触发消息
//MessageBox(hwnd,"提交成功","提示",MB_OK|MB_ICONINFORMATION);
len=GetDlgItemText(hwnd,IDC_EDIT1,sss,255); //获取控件内容函数 ,返回值为控件文本字节长度
//MessageBox(hwnd,sss,"输入内容",MB_OK);
GetDlgItemText(hwnd,IDC_EDIT2,sss1,255);
sun=atof(sss)+atof(sss1);
/*处理数据输入和涉及到数字运算用这个函数转换数据类型:【atof()】是把字符串转换成整型数的一个函数,扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回.默认返回类型为double类型,包含在头文件stdlib.h中。反方向函数为itoa()将整数转换成字符串*/
InvalidateRect(hwnd,NULL,TRUE); //发送刷新指令 ,这个很关键。要不然窗口不会及时显示结果。。
break;
default:
break;
break;
break;
case WM_DESTROY: //当前窗口被销毁时
PostQuitMessage(0); //发出退出程序的消息
break;
case WM_CLOSE: //右上角关闭按钮消息
DestroyWindow(hwnd); //销毁窗口
break;
case WM_CREATE: //控件创建消息
edit1 = CreateWindow("EDIT",NULL, WS_CHILD|WS_VISIBLE|WS_BORDER, 220, 30, 100,25,hwnd,(HMENU)IDC_EDIT1, NULL, NULL); //创建编辑框控件
edit2 = CreateWindow("EDIT",NULL, WS_CHILD|WS_VISIBLE|WS_BORDER, 220, 60, 100,25,hwnd,(HMENU)IDC_EDIT2, NULL, NULL); //创建编辑框控件
an1 = CreateWindow("button","计算",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,340,60,50,25,hwnd,(HMENU)IDC_BTN1,NULL,NULL); //创建按钮控件
//sta1= CreateWindow("STATIC","+",WS_CHILD|WS_VISIBLE|SS_CENTER,70,10,300,200,hwnd,(HMENU)IDC_STATIC,NULL,NULL); //创建静态文本框控件,画布,美化作用,下一步再深入研究
break;
case WM_PAINT: //【重绘窗口函消息 】
HDC hdc; //定义输出设备句柄
//RECT rect; //定义一块显示区域,DrawText 函数需要的参数
PAINTSTRUCT ps = 0; //定义一个 数组存放字符串
hdc = BeginPaint(hwnd,&ps); //开始重绘
/******************************************核心程序代码区******************************************************************/
SetTextColor(hdc, RGB(255,0,0)); //设置字体颜色
Rectangle(hdc,2,2,818,555);
Rectangle(hdc,10,190,810,550); //画矩形,必须在正文之前显示框,否则正文会被覆盖
TextOut(hdc,350,200,TEXT("九九乘法表"),10); //直接文本显示
for(i=1;i<=9;i++)
for(j=1;j<=i;j++)
size = wsprintf(szText,TEXT("%d×%d=%2d"),j,i,i*j); //将变量S,I的值按照格式符号%s%d转换后存入缓冲区szText,返回值为字节长度
/*注意:因为 wsprintf不支持浮点数,所以处理高精度数据计算式要用 swprintf代替*/
TextOut(hdc,x+j*80,y+i*25, szText,size);
TextOut(hdc,650,530,TEXT("小狗WINDOWS小程序"),17);
Rectangle(hdc,10,10,810,180); //矩形(美化类函数,形成边框效果)
TextOut(hdc,450,30,TEXT("简单的WIN32窗口框架,能够实现输入和显示"),39);
TextOut(hdc,100,30,TEXT("请输入参数A的值:"),16);
TextOut(hdc,100,60,TEXT("请输入参数B的值:"),16);
TextOut(hdc,100,90,TEXT("A+B= :"),len);
/*显示数字用以下代码*/
size = sprintf(szText,TEXT("%.4lf"),sun);
TextOut(hdc,220,90,szText,size);
/*显示文字或字母用以下代码
TextOut(hdc,550,30,sss,len);*/
/******************************************核心程序代码区******************************************************************/
EndPaint(hwnd,&ps); //结束重绘
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
return 0;
/*********************************************以下为主窗口函数**********************************************************************/
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
WNDCLASSEX wzgwind = 0; //窗口类结构, 为注册窗口类作准备
wzgwind.cbSize = sizeof(wzgwind); //WNDCLASSEX结构的大小
wzgwind.cbWndExtra = 0; //窗口额外内存, 没有, 设为0
wzgwind.hbrBackground = COLOR_WINDOW; //使用系统默认背景
//wzgwind.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //窗口背景, 这里使用灰色背景(另一种表示法)
wzgwind.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); //应用程序使用的鼠标类型
wzgwind.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION)); //光标类型
wzgwind.hIconSm = NULL; //应用程序程序的小光标, 不管, 设为 NULL
wzgwind.hInstance = hInstance; //应用程序程序实例句柄, 由 WinMain 函数传递过来
wzgwind.lpfnWndProc = WndProc; //这个很重要, 就是当前窗口的消息处理函数, 传递 WndProc 的地址
wzgwind.lpszClassName = "wzgwind"; //创建类时使用的类名, 可以自定义
wzgwind.lpszMenuName = NULL; //菜单, 没有, 就使用 NULL
wzgwind.style = CS_HREDRAW | CS_VREDRAW; //类的风格, 垂直重绘, 水平重绘
ATOM nAtom = RegisterClassEx(&wzgwind);
if (!nAtom )
MessageBox(NULL, "注册失败", "Infor", MB_OK);
return 0;
HWND hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"wzgwind","win-gou",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, /* x */
CW_USEDEFAULT, /* y */
840, /* width */
600, /* height */
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
MSG msg = 0 ; //定义并初始化msg
while( msg.message != WM_QUIT ) //使用while循环,如果消息不是WM_QUIT消息,就继续循环
if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看应用程序消息队列,有消息时将队列中的消息派发出去。
TranslateMessage( &msg ); //将虚拟键消息转换为字符消息
DispatchMessage( &msg ); //分发一个消息给窗口程序。
UnregisterClass("wzgwind", wzgwind.hInstance);
return 0;
参考技术B #include<stdio.h>
main()
double a,b,w,x,y,z;
char ch;
while(scanf("%lf %c %lf",&a,&ch,&b)!=1)
if(ch=='*')
w=a*b;printf("%lf*%lf=%.2lf\n",a,b,w);
if(ch=='/')
if(b==0)printf("输入有误\n");
else x=a/b;printf("%lf/%lf=%.2lf\n",a,b,x);
if(ch=='+')
y=a+b;printf("%lf+%lf=%.2lf\n",a,b,y);
if(ch=='-')
z=a-b;printf("%lf-%lf=%.2lf\n",a,b,z);
用java怎样编写加减乘除,从键盘输入,例如:1+2按回车之后可以运算,小数整数都可以
参考技术A public static void main(String[] args)Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数:");
double n1 = sc.nextDouble();
System.out.println("请输入运算符:");
String s = sc.next();
System.out.println("请输入第二个数:");
double n2 = sc.nextDouble();
if(s.equals("+"))
System.out.print(n1+"+"+n2+" = "+(n1+n2));
else if(s.equals("-"))
System.out.print(n1+"+"+n2+" = "+(n1-n2));
else if(s.equals("*"))
System.out.print(n1+"*"+n2+" = "+(n1*n2));
else if(s.equals("/"))
if(n2==0)
System.out.println("除数不能等于0");
else
System.out.print(n1+"/"+n2+" = "+(n1/n2));
else
System.out.println("运算符输入错误,请重新输入。");
追问
介个我知道哦~不过还是很感谢你哒,介个是一个一个的输入,我想要的是能够在同一行输入~不知亲,你能不能帮我解决一下介个问题~~想了好久都木想出来~~呜呜
本回答被提问者采纳 参考技术B package image;import java.util.Scanner;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JS
public static void main ( String[] args )
System.out.println ("随便输入一个式子:(直接回车结束)");
Scanner scanner = new Scanner (System.in);
ScriptEngineManager sem = new ScriptEngineManager ();
ScriptEngine se = sem.getEngineByName ("js");
while (scanner.hasNextLine ())
String line = scanner.nextLine ().trim ();
if ("".equals (line))
break;
try
System.out.println (se.eval (line));
catch (ScriptException e)
System.out.println ("不合法的式子,重新输入:");
continue;
scanner.close ();
追问
亲,你可以解释一下么,还有哦,这段代码如果在8.0一下版本运行的话,会报错运行不出来滴,虽然代码的功能很符合要求
追答没用过8.0
以上是关于怎样用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器?的主要内容,如果未能解决你的问题,请参考以下文章
C语言计算器 功能要求: 可以输入0-9数字、小数点、正负数 可以进行加减乘除运算及简单的数学函数运算?
c语言,编写程序,要求对两个实数实现简单的加减乘除运算的功能(用switch)语句