精华内容
下载资源
问答
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include#includeintgetOption(void);voidgetData(int*num1,int*num2);floatcalc(intoption,intnum1,intnum2);floatadd(intnum1,intnum2);floatsub(intnum1,intnum...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #include 

    #include 

    int getOption (void);

    void getData (int* num1, int* num2);

    float calc (int option, int num1, int num2);

    float add (int num1, int num2);

    float sub (int num1, int num2);

    float mul (int num1, int num2);

    float divs (int num1, int num2);

    void printData (int nun1, int num2, int option, float result);

    int main (void)

    {

    int option;

    int num1;

    int num2;

    float result;

    option = getOption();

    getData (&num1, &num2);

    result = calc (option, num1, num2);

    printData (num1, num2, option, result);

    return 0;

    }

    int getOption (void)

    {

    int option;

    printf("\t********************************");

    printf("\n\t* MENU *");

    printf("\n\t* *");

    printf("\n\t* 1. ADD *");

    printf("\n\t* 2. SUBTRACT *");

    printf("\n\t* 3. MULTIPLY *");

    printf("\n\t* 4. DIVIDE *");

    printf("\n\t* *");

    printf("\n\t********************************");

    printf("\n\nPlease type your choice ");

    printf("and key return:");

    scanf ("%d", &option);

    return option;

    }

    void getData (int* a, int* b)

    {

    printf("Please enter two integer numbers:");

    scanf ("%d %d", a, b);

    return;

    }

    float calc (int option, int num1, int num2)

    {

    float result;

    switch(option)

    {

    case 1 : result = add (num1, num2);

    break;

    case 2 : result = sub (num1, num2);

    break;

    case 3 : result = mul (num1, num2);

    break;

    case 4 : if (num2 == 0.0)

    {

    printf("\n\a\aError:");

    printf("division by zero\n");

    exit (100);

    }

    else

    result = divs (num1, num2);

    break;

    default: printf("\aOption not available\n");

    exit (101);

    }

    return result;

    }

    float add (int a, int b)

    {

    float sum;

    sum = a + b;

    return sum;

    }

    float sub (int a, int b)

    {

    float dif;

    dif = a - b;

    return dif;

    }

    float mul (int a, int b)

    {

    float product;

    product = a * b;

    return product;

    }

    float divs (int a, int b)

    {

    float quotient;

    quotient = (float)a / b;

    return quotient;

    }

    void printData (int a, int b, int option, float result)

    {

    switch(option)

    {

    case 1 : printf("\n%d + %d = %.0f\n", a, b, result);

    break;

    case 2 : printf("\n%d - %d = %.0f\n", a, b, result);

    break;

    case 3 : printf("\n%d * %d = %.0f\n", a, b, result);

    break;

    case 4 : printf("\n%d / %d = %.2f\n", a, b, result);

    break;

    default: printf("\n\a\a未知错误!\n");

    exit (102);

    }

    return;

    }

    展开全文
  • c语言实现加减乘除计算功能

    千次阅读 2019-06-23 22:30:52
    功能需求 1、设置运算符栈和运算数栈辅助分析算符优先...4、在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作内容 代码实现: 1、头文件 #pragma once #include<stdio.h> #include<s...

    功能需求
    1、设置运算符栈和运算数栈辅助分析算符优先关系
    2、在读入表达式的字符序列的同时,完成运算符和运算数(整数)的识别处理,以及相应的运算
    3、在识别出运算数的同时,要将其字符序列形式转换成整数形式
    4、在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作的内容

    代码实现:
    1、头文件
    #pragma once
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    #include<math.h>
    #include<Windows.h>
    #include <graphics.h>
    #pragma comment(lib, “winmm.lib”)
    #pragma comment(lib,“Msimg32.lib”)
    #include “mmsystem.h”
    #include <easyx.h>
    #include
    using namespace std;
    #define INITSIZE 40
    #define INCREMENT 10
    #define OK 1
    #define ERROR 0
    #define max 201
    typedef char ElemType;
    typedef double SElemType;
    typedef int Status;
    //1
    typedef struct
    {
    ElemType *base;
    ElemType *top;
    int StackSize;
    }CSqStack;
    //2
    typedef struct
    {
    SElemType *base;
    SElemType top;
    int StackSize;
    }ISqStack;
    //1
    Status CInitStack(CSqStack &S)
    {
    S.base = (ElemType
    )malloc(sizeof(ElemType)INITSIZE);
    if (!S.base)
    {
    exit(-1);
    }
    S.top = S.base;
    S.StackSize = INITSIZE;
    return OK;
    }
    //2
    Status IInitStack(ISqStack &S)
    {
    S.base = (SElemType
    )malloc(sizeof(SElemType)*INITSIZE);
    if (!S.base)
    {
    exit(-1);
    }
    S.top = S.base;
    S.StackSize = INITSIZE;
    return OK;
    }

    //1
    Status CPushStack(CSqStack &S,ElemType e)
    {
    	if (S.top - S.base >= S.StackSize)
    	{
    		S.base = (ElemType*)realloc(S.base, sizeof(ElemType)*(S.StackSize + INCREMENT));
    		if (!S.base)
    		{
    			return ERROR;
    		}
    		S.top = S.base + S.StackSize;
    		S.StackSize += INCREMENT;
    	}
    	*S.top++ = e;
    	return OK;
    }
    //2
    Status IPushStack(ISqStack &S, SElemType e)
    {
    	if (S.top - S.base >= S.StackSize)
    	{
    		S.base = (SElemType*)realloc(S.base, sizeof(SElemType)*(S.StackSize + INCREMENT));
    		if (!S.base)
    		{
    			return ERROR;
    		}
    		S.top = S.base + S.StackSize;
    		S.StackSize += INCREMENT;
    	}
    	*S.top++ = e;
    	return OK;
    }
    
    //1
    int CStackLength(CSqStack &S)
    {
    	return(S.top - S.base);
    }
    //2
    int IStackLength(ISqStack &S)
    {
    	return(S.top - S.base);
    }
    //1
    int CPopStack(CSqStack &S, ElemType &e)
    {
    	if (S.top == S.base)
    	{
    		return ERROR;
    	}
    	e = *--S.top;
    	return OK;
    }
    //2
    int IPopStack(ISqStack &S, SElemType &e)
    {
    	if (S.top == S.base)
    	{
    		return ERROR;
    	}
    	e = *--S.top;
    	return OK;
    }
    //获取光标
    void gotoxy(int x, int y)
    {
    	COORD pos = { x,y };
    	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    	// 获取标准输出设备句柄 
    	SetConsoleCursorPosition(hOut, pos);
    	//两个参数分别是指定哪个窗体,具体位置
     }
    //隐藏关标
    void HideCursor() 
    {
    	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    	CONSOLE_CURSOR_INFO cci;
    	GetConsoleCursorInfo(hOut, &cci);
    	cci.bVisible = FALSE;
    	SetConsoleCursorInfo(hOut, &cci);
    }
    //颜色变化
    int color(int c)
    {
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
    	return 0;
    }
    //神兽保佑,代码无bug
    void yt_show();
    int make_line();
    int explain_show();
    void calculator_show();
    void Init_calculator();
    void over_show();
    void Init_show();
    void calculate();
    int Judge_bracket(int i);
    int Judge_bit(int n);
    void ZswitchH(CSqStack S);
    
    
    2、主函数
    
    #include"resource.h"
    char s[max];
    int s1[max];
    int A[max];
    char Hz[max];
    //中缀转后缀
    void ZswitchH(CSqStack S)//90*2+70-4*(3+2)/3
    {
    	int i = 0, j = 0;
    	ElemType e;
    	for (; i<strlen(s); i++)
    	{
    		if (s[i]-48 >= 0)
    		{
    			Hz[j++] = s[i];
    		}
    		else if (s[i] == '+' || s[i] == '-')
    		{
    			if (!CStackLength(S))
    			{
    				CPushStack(S, s[i]);
    			}
    			else
    			{
    				do
    				{
    					CPopStack(S, e);
    					if (e == '(')
    					{
    						CPushStack(S, e);
    					}
    					else
    					{
    						Hz[j++] = e;
    					}
    
    				} while (CStackLength(S) && e != '(');
    				CPushStack(S, s[i]);
    			}
    		}
    		else if (s[i] == ')')
    		{
    			CPopStack(S, e);
    			while (e != '(')
    			{
    				Hz[j++] = e;
    				CPopStack(S, e);
    			}
    
    		}
    		else if (s[i] == '*' || s[i] == '/' || s[i] == '(')
    		{
    			CPushStack(S, s[i]);
    		}
    		else
    		{
    			printf("输入格式错误");
    			return;
    		}
    	}
    	while (CStackLength(S))
    	{
    		CPopStack(S, e);
    		Hz[j++] = e;
    	}
    }
    
    int Judge_bit(int n)
    {
    	int t = 0;
    	while (n != 0)
    	{
    		t++;
    		n /= 10;
    	}
    	return t;
    }
    int Judge_bracket(int i)
    {
    	int j = i;
    	int  t = 0,n=0;
    	if (s1[j] == -1)
    	{
    		while (s1[j] == -1)
    		{
    			j++;
    			t++;
    		}
    	}
    	if (t >= 2 )
    	{
    		n = t-1;
    	}
    	return n;
    }
    void calculate()//90*2+70-4*(3+2)/3
    {		//902*70+432+3/*-
    	ISqStack S;//s1
    	IInitStack(S);//2*(6+2*(3+5*(6+7)))
    	int e;//(((5+6)*7+3)*2+6)*2
    	int t,m;
    	int i = 0, j = 0;
    	double q, w;
    	double sum;
    	while (Hz[j] != '\0')
    	{		
    		m=Judge_bracket(i);
    		if (s1[i] != -1&&s1[i]!=0)
    		{
    			e = s1[i];
    			IPushStack(S, e);
    			t = Judge_bit(s1[i]);
    			i++;
    			j += t;
    		}
    		else
    		{	
    			if (m != 0)
    			{
    				i += m;
    			}
    			if (Hz[j] - 48 >= 0 && Hz[j] - 48 <= 9)
    			{
    				i++;
    			}
    			else
    				if (Hz[j] == '+')
    				{
    					IPopStack(S, q);
    					IPopStack(S, w);
    					sum = q + w ;
    					IPushStack(S, sum);
    					j++;
    					i++;
    				}
    				else
    					if (Hz[j] == '-')
    					{
    						IPopStack(S, q);
    						IPopStack(S, w);
    						sum = w - q ;
    						IPushStack(S, sum);
    						j++;
    						i++;
    					}
    					else
    						if (Hz[j] == '*')
    						{
    							IPopStack(S, q);
    							IPopStack(S, w);
    							sum = w *q;
    							IPushStack(S, sum);
    							j++;
    							i++;
    						}
    						else
    							if (Hz[j] == '/')
    							{
    								IPopStack(S, q);
    								IPopStack(S, w);
    								sum = w  /q ;
    								IPushStack(S, sum);
    								i++;
    								j++;
    							}
    		}
    	}
    	IPopStack(S, sum);
    	printf("%lf",sum);
    }
    //void Init_show()
    //{
    //	initgraph(960, 640);
    //	HWND hwnd = GetHWnd();
    //	SetWindowText(hwnd, L"简易计算器 初级版");
    //	setbkmode(TRANSPARENT);
    //	IMAGE img;
    //	loadimage(&img, L"keji.jpg", 0, 0);
    //	//putimage(0, 0,400,626, &img,0,0);
    //	putimage(150, 150, &img);
    //	//putimage(0, 0, &img);
    //	setfillcolor(BLUE);
    //	solidrectangle(0,0,960,150);
    //	settextcolor(RED);
    //	settextstyle(15,10,L"楷体");
    //	outtextxy(300,10,L"简易计算器使用说明");
    //	settextcolor(GREEN);
    //	outtextxy(10, 30, L"从键盘上输入计算的式子(注意:此计算器只能计算加减乘除加小括号的计算)");
    //	outtextxy(10, 60, L"以中缀表达式输入,格式不能输入错误   输入示例:90*2+70-4*(3+2)/3  ");
    //	outtextxy(10, 90, L"结果精确至小数点后6位     输出结果:254.333333");
    //	setfillcolor(BLUE);
    //	solidrectangle(0, 450, 960, 640);
    //	outtextxy(10, 500, L"输入位置:");
    //	outtextxy(10,600,L"结果输出:");
    //	settextstyle(10,500,L"宋体");
    //}
    void Init_show()
    {
    	color(10);
    	gotoxy(25, 10);
    	printf("欢 迎 使 用 简 易 计 算 器");
    	gotoxy(30, 15);
    	printf("1、使 用 说 明");
    	gotoxy(30, 20);
    	printf("2、进 入 使 用");
    	color(8);
    	gotoxy(20, 5);
    	printf("(从键盘上输入数字1 数字2 点击enter进入功能)");
    	color(11);
    	for (int i = 0; i <= 28; i ++)
    	{
    		gotoxy(10, i);
    		printf("■");
    		gotoxy(70, i);
    		printf("■");
    	}
    	for (int i = 10; i <= 70; i+=2)
    	{
    		gotoxy(i, 28);
    		printf("■");
    		gotoxy(i, 0);
    		printf("■");
    	}
    	gotoxy(30, 25);
    }
    void over_show()
    {
    	system("cls");
    	HideCursor();
    	color(12);
    	for (int i = 0; i <= 20; i++)
    	{
    		gotoxy(10, i);
    		printf("■");
    		gotoxy(50, i);
    		printf("■");
    	}
    	for (int i = 10; i <= 50; i += 2)
    	{
    		gotoxy(i, 20);
    		printf("■");
    		gotoxy(i, 0);
    		printf("■");
    	}
    	gotoxy(20, 10);
    	printf("感谢使用");
    	gotoxy(20, 12);
    	printf("拜拜(输入任意键退出)");
    	getch();
    	exit(0);
    }
    void Init_calculator()
    {
    		//cin >> s;//90*2+70-4*(3+2)/3
    		CSqStack S;
    		CInitStack(S);
    		memset(Hz, 0, sizeof(char));
    		memset(s1, 0, sizeof(int));
    		ZswitchH(S);
    		int i, j, t = 0, k, sum = 0, q;
    		int count = 0;
    		for (i = 0; i < strlen(s); i++)//90
    		{
    			if (s[i] >= 48 && s[i] - 48 <= 9)
    			{
    				t++;
    			}
    			else if (t != 0 && (s[i] - 48 < 0))
    			{
    				q = t - 1;
    				for (j = 0; j < t; j++)
    				{
    					sum += (s[j + i - t] - 48)*pow(10, q--);
    				}
    				s1[count++] = sum;//90 
    				sum = 0;
    				t = 0;
    				i = i - t - 1;//1  
    			}
    			else
    			{
    				s1[count++] = -1;
    			}
    		}
    		sum = 0;
    		q = t - 1;
    		for (j = 0; j < t; j++)
    		{
    			sum += (s[j + i - t] - 48)*pow(10, q--);
    		}
    		s1[count] = sum;//90*2+70-4*(3+2)/3	
    		calculate();	
    }
    void calculator_show()
    {
    	color(11);
    	for (int i = 0; i <= 20; i++)
    	{
    		gotoxy(10, i);
    		printf("■");
    		gotoxy(80, i);
    		printf("■");
    	}
    	for (int i = 10; i <= 80; i += 2)
    	{
    		gotoxy(i, 20);
    		printf("■");
    		gotoxy(i, 0);
    		printf("■");
    	}
    	color(4);
    	gotoxy(35, 2);
    	printf("欢迎使用简易计算器");
    	color(8);
    	gotoxy(12, 5);
    	printf("输入表达式:");
    	gotoxy(12, 10);
    	printf("结果为:");
    	color(12);
    	gotoxy(25, 5);
    	cin >> s;
    	gotoxy(25, 10);
    	Init_calculator();
    	memset(Hz, 0, sizeof(char));
    	memset(s1, 0, sizeof(int));
    	memset(s, 0, sizeof(char));
    	fflush(stdin);
    }
    int explain_show()
    {
    	int w=0;
    	color(11);
    	for (int i = 0; i <= 15; i++)
    	{
    		gotoxy(10, i);
    		printf("■");
    		gotoxy(80, i);
    		printf("■");
    	}
    	for (int i = 10; i <= 80; i += 2)
    	{
    		gotoxy(i, 15);
    		printf("■");
    		gotoxy(i, 0);
    		printf("■");
    	}
    	color(10);
    	gotoxy(25, 2);
    	printf("使用说明");
    	gotoxy(12, 5);
    	printf("1、输入数字正负都可,格式为中缀表达式");
    	gotoxy(12, 7);
    	printf("2、输入长度不可超过200");
    	gotoxy(12, 9);
    	printf("3、此计算器只能计算加减乘除,无其他计算功能");
    	gotoxy(12, 11);
    	printf("4、最高数字大小不可超过int形范围");
    	gotoxy(12, 13);
    	printf("5、精确度为小数点后6位");
    	gotoxy(12, 20);
    	printf("输入数字1返回,其他退出");
    	cin >> w;
    	if (w != 1)
    	{
    		over_show();
    	}
    	return w;
    }
    int make_line()
    {
    	int p;
    	gotoxy(25, 15);
    	printf("是否继续进行计算:(1继续/2退出/3返回)");
    	cin >> p;
    	if (p == 2)
    	{
    		over_show();
    	}
    	return p;
    }
    void yt_show()
    {
    	/**
    	*        ┏┓       ┏┓+ +
    	*       ┏┛┻━━━━━━━┛┻┓ + +
    	*       ┃       ┃
    	*       ┃   ━   ┃ ++ + + +
    	*       █████━█████  ┃+
    	*       ┃       ┃ +
    	*       ┃   ┻   ┃
    	*       ┃       ┃ + +
    	*       ┗━━┓    ┏━┛
    	*				 ┃    ┃
    	*         ┃    ┃ + + + +
    	*         ┃   ┃ Code is far away from     bug with the animal protecting
    	*         ┃   ┃ +              神兽保佑,代码无bug
    	*         ┃   ┃
    	*         ┃   ┃  +
    	*         ┃    ┗━━━┓ + +
    	*         ┃      ┣┓
    	*         ┃      ┏┛
    	*         ┗┓┓┏━━━┳┓┏┛ + + + +
    	*          ┃┫┫  ┃┫┫
    	*          ┗┻┛  ┗┻┛+ + + +*/
    }
    int main()
    {
    	//HideCursor();
    	yt_show();
    ex:
    	system("cls");
    	Init_show();
    	int f;
    	while (1)
    	{
    
    	int w;
    	cin >> f;
    	switch (f)
    	{
    	case 1:
    		system("cls");
    		w=explain_show();
    		if (w == 1)
    		{
    			goto ex;
    		}
    		break;
    	case 2:
    	cu:
    		int p;
    		system("cls");
    		calculator_show();
    		p=make_line();
    		if (p == 1)
    		{
    			goto cu;
    		}
    		else
    			if (p == 3)
    			{
    				goto ex;
    			}
    		break;
    	}
    	}
    
    	return 0;
    }
    
    展开全文
  • printf("请输入计算表达式 :/n"); scanf("%f%c%f" #include "stdio.h"#include "conio.h"main(){ float a /n"); scanf("%f%f" b; printf("简易运算器0.1版/n"); printf("请输入字符 /n"); scanf("%f%f" b a &b); ...
    /n"); scanf("%c" r);}}
    
    
    |||
    void main() { char c; float a r);}              else if(c=='%')              {r=(int)a%(int)b;              printf("=%lf /n" r);}           else if(c=='/')           {r=a/b;           printf("=%lf /n" r);}        else if(c=='*')        {r=a*b;        printf("=%lf /n" r);}     else if(c=='-')     {r=a-b;     printf("=%lf /n" &b);  if(c=='+')  {r=a+b;  printf("=%lf /n" &c &a b;  double r;  char c;  printf("请输入计算表达式  :/n");  scanf("%f%c%f" 
    #include "stdio.h"#include "conio.h"main(){  float a  /n"); scanf("%f%f" b; printf("简易运算器0.1版/n"); printf("请输入字符 /n"); scanf("%f%f" b a &b); printf("%.2f+%.2f=%.2f/n" &a &c); switch(c) { case '+' : printf("请输入两个数字 /n"); scanf("%f%f" b a &b); printf("%.2f-%.2f=%.2f/n" &a a+b);break; case '-' : printf("请输入两个数字 /n"); scanf("%f%f" b a &b); printf("%.2f*%.2f=%.2f/n" &a a-b);break; case '*' : printf("请输入两个数字 呵呵 你调试下看看
    
    
     b a &b); printf("%.2f/%.2f=%.2f/n" &a a*b);break; case '/' : printf("请输入两个数字 /n"); } } 刚出来的 a/b);break; default : printf("您输入了错误的运算符 
    展开全文
  • C语言中栈思想实现加减乘除四则运算和括号计算器 设计思路 将每个运算符设置优先级,运用栈先入后出思想,从左到右扫描输入到电脑上的计算公式,将扫描到数字数据和字符数据优先级分别存入两个数组,...

    设计思路

    将每个运算符设置优先级,运用栈先入后出的思想,从左到右扫描输入到电脑上的计算公式,将扫描到的数字数据和字符数据的优先级分别存入两个数组,再依次从两个数组中弹出对应的数据和计算符号进行计算。

    主要问题

    1.如何让计算机实现正确的符号计算顺序?
    为每个符号设定相应的优先级,在这个程序中我将+,-优先级设置为1,*,/设置为2,(设置为3,)设置为0,=设置为-1,也就是最低等。
    在从左到右扫描代数式时,若下一位符号优先级更大,则改符号可以直接推入存储符号的栈中;若下一位符号优先级相比较小,则在数字栈弹出两个数字,在符号位弹出一个符号进行运算。

    符号| 序号 | 优先级 |
    +| -7 | 1 |
    –| -6 | 1 |
    x | -5 | 2 |
    / | -4 | 2 |
    ( | -3 | 3 |
    ) | -2 | 0 |
    =| -1 | -1|

    2.如何实现多位数的扫描?
    设置rate变量,正常情况下rate为10,前面扫描得到的数据在下一次扫描时乘上10再加上后面扫描的数据,若遇到小数点的情况则rate变为0.1,且之后的每次扫描rate都应该缩小10倍

    3.如何实现括号位的计算?
    当遇到左括号时,因为左括号的优先级大于任何一个运算符,所以左括号可以直接压入栈中,在压入栈中之后将左括号运算符改为右括号运算符,为了让括号内的运算符也可以成功压入栈栈中。
    遇到右括号运算符时,右括号运算符只比等号运算符优先级大,所以读取到右括号运算符后计算机会开始计算括号内的式子,计算完括号内的式子后直接将左括号运算符从栈内弹出。

    数据结构和主要函数

    Struct fuhao s[7]运用结构存放不同的操作符和对应的优先级;
    Char str[30]用来存放输入的算式;
    double a[20]用来存放运算的数据;
    int b[20]用来存放操作符号所对应的在结构数组中的编号;

    Void PUSH(nu,a[])为将操作数存放进数组a中;
    void PUSH1(nu,b[])为将操作符号对应的序号存放进数组b中;
    Double READ(*p)为读取字符串的数据,返回读取的数据;
    Double POP(a[])为弹出a数组顶部的操作数,返回操作数;
    int POP1(b[])为弹出b数组顶部的操作符对应序号;
    Int t 用来判断情况,double ans为计算后的最终结果;

    代码实现

    #include <iostream>
    using namespace std;
    int lu=0;
    struct fuhao
    {
    	char f;
    	int x;
    }s[7]={{'+',1},{'-',1},{'x',2},{'/',2},{'(',3},{')',0},{'=',-1}};
    void PUSH(double nu,double a[])
    {
    	int i=0;
    	for(;i<=20;i++)
    		if(a[i]==9999)
    			break;
    	a[i]=nu;
    }//常数入栈
    void PUSH1(double nu,int b[])
    {
    	int i=0;
    	for(;i<=20;i++)
    		if(b[i]==9999)
    			break;
    	b[i]=nu;
    }//符号优先级入栈
    double READ(char *p)//从左往右读取
    {
    	double rate=10.0,item=0;
    	int x=0;//表示读取的是数字还是符号
    	p=p+lu;
    	while(*p!='/n')
    	{
    		if(x==0)
    		{
    		if(*p=='+')
    		{lu++;return -7;}//全局变量用来指示读取到的序号
    		else if(*p=='-')
    		{lu++;return -6;}
    		else if(*p=='*')
    		{lu++;return -5;}
    		else if(*p=='/')
    		{lu++;return -4;}
    		else if(*p=='(')
    		{lu++;return -3;}
    		else if(*p==')')
    		{lu++;return -2;}
    		else if(*p=='=')
    		{lu++;return -1;}
    		else if(*p>='0'||*p<='9')//读取到数字数据
    		{
    			if(rate==10)
    				item=item*rate+*p-'0';//转换为数字量
    			else{
    				item=item+(*p-'0')*rate;
    				rate=rate/10;}//rate可以解决读取连续两个数的问题
    			p++;
    			lu++;
    			x=1;
    		}
    		else//读取到不知名数字
    		{
    			cout<<"符号出错"<<endl;
    			return -8;
    		}
    		}
    		else
    		{
    			while(*p!='+'&&*p!='-'&&*p!='*'&&*p!='/'&&*p!='('&&*p!=')'&&*p!='=')//二重循环
    				{
    					if(*p=='.')
    					rate=0.1;
    					else
    						{
    			if(rate==10)
    				item=item*rate+*p-'0';//rate如果为10则比率依然不改变
    			else{
    				item=item+(*p-'0')*rate;
    				rate=rate/10;}
    		}
    		
                p++;
    	    lu++;
    	}
    	return item;
    }
    	}
    }
    int TOP(int b[])
    {
    	int i=0;
    	for(;i<20;i++)
    		if(b[i]==9999)
    		break;
    	int c=b[i-1]+7;
    	return c;
    }//提取最上方的符号位的序号
    double POP(double a[])
    {
    	int i=0;
    	double h;
    	for(;i<20;i++)
    		if(a[i]==9999)
    			break;
    	h=a[i-1];
    	a[i-1]=9999;
    	return h;
    }//弹出数据
    int POP1(int b[])
    {
    	int i=0,h;
    	for(;i<20;i++)
    		if(b[i]==9999)
    			break;
    	h=b[i-1];
    	b[i-1]=9999;//弹出后该位还原为9999
    	return h+7;
    }//弹出符号
    int main()
    {
    	cout<<"请输入表达式:";
    	char str[30];
    	gets(str);//输入表达式
    	int b[20],i,t=0,you,you1,you2,xu;//you表示读取的符号数
    	double a[20],h,ans,op1,op2,op3;
    	for(i=0;i<20;i++)
    	{
    		b[i]=9999;
    		a[i]=9999;
    	}//将两个数组都赋予初值最大值
    	PUSH1(-1,b);//在b数组底部放入=号
    	while(t!=2)//t表示三种情况,0表示读取数据,1表示计算数据,2表示得出结果
    	{
    		if(t==0)
    		h=READ(str);
    		if(h>=0)
    		PUSH(h,a);	//read函数返回的数据大于0,数字入栈        
    		else//读取到符号位
    		{
    			you1=h;//检测到下一个符号位
    			you=TOP(b);//最上面符号的序号
    			if(s[you].x<s[you1+7].x)//索引到符号位的优先级较大或者上一位为左括号则将符号压入栈中
    			{
    			PUSH1(h,b);
    			t=0;
    			you2=TOP(b);
    			if(you2==4)//左括号位的处理,压入后成为右括号,优先级变为0
    			{
    				POP1(b);
    				PUSH1(-2,b);//变为右括号
    			}
    			}
    			else if(you==6&&h==-1)//读取的和栈最上面的符号都是“=”
    			{
    				ans=POP(a);
    				t=2;
    				cout<<"结果为:"<<ans;
    			}
    			else//压入的优先级小,需要进行计算
    			{
    				xu=POP1(b);//弹出顶层符号
    				switch(xu)
    				{
                    case 0:op1=POP(a);op2=POP(a);op3=op2+op1;PUSH(op3,a);t=1;break;//将计算所得的数重新压入堆栈
    				case 1:op1=POP(a);op2=POP(a);op3=op2-op1;PUSH(op3,a);t=1;break;
    				case 2:op1=POP(a);op2=POP(a);op3=op2*op1;PUSH(op3,a);t=1;break;
    				case 3:op1=POP(a);op2=POP(a);op3=op2/op1;PUSH(op3,a);t=1;break;
    				case 5:t=0;break;//左括号直接省去,直接往后读一位,省略右括号
    				default: cout<<"输入的计算式子错误"<<endl;t=2;break;//计算到没有显示的符号,输入的计算式错误
    				}
    			}
    		}
    	}
    	system("pause");
    	return 0;
    }
    

    有错误和改进欢迎大家指出啊!!!

    展开全文
  • 本文将从位运算种类、原理、运用入手,详细介绍如何仅使用位运算实现整数的加减乘除运算,代码采用C语言实现。** ** 1.位运算 ** 我们知道,程序所有数据在计算机内存中都是以二进制形式存放,所谓位...
  • 程序对于初学C语言的同学很有帮助,#include "iostream" using namespace std; int main( void ) { double numbera, numberb, result; char operate; try { //输入操作数和运算符 cout请输入第一个操作...
  • 编写程序的目的就是使程序有他应用地方,编写一个简单计算器来实现我们计算的目的。  利用swich case 语句和循环结构来实现简单程序的编写。利用选择语句来进行输入选择,然后利用所输入数字不同进行...
  • printf("请按(操作数1运算符op操作数2)表达式输入(运算符仅限加减乘除):\n"); i=scanf("%f%c%f",&x,&op,&y); if(x>0&&y>0||x>0&&y<0||x<0&&y>0||x&...
  • 帮助小学生学习加减乘除 随着计算机成本下降,对每个学生来说,不管经济状况如何,拥有一台计算机并在学校里使用变得可行。这为改善全世界所有学生教育体验创造了令人兴奋可能性,如下面五个练习所示。 (1) ...
  • 开班人数:2-5人 年级:3年级以上 第一课 教学目标了解什么C语言编程学习第一个C语言程序(让计算机开口说话)学习简单的加减乘除计算 教学难点 加减乘除计算 1.为什么要学习编程了解什么是C语言C语言有什么作用 C语言是...
  • 计算器C语言的程序

    2009-09-15 12:38:29
    我个人用C语言控制台计算器程序,供C语言初学者参考。可以计算加减乘除乘方四则运算,源代码有详细注释,不懂可以加我QQ(代码中附带)。
  • 文章目录(一)前言(二)设计目的(三)硬件及其电路(1)时钟电路(2)复位电路(3)...计算程序(7)加法计算程序(8)减法计算程序(9)乘法计算程序(10)除法计算程序(11)显示子程序(五) 结束语...
  • 一、寄存器与缓存 程序是保存在硬盘中,要载入内存才能运行,CPU也被设计为只能从内存中读取数据和...运算单元是CPU大脑,负责加减乘除、比较、位移等运算工作,每种运算都有对应电路支持,速度很快。寄存器
  • ”*”、”/”、”^”、”(”、”)”,分别表示加减乘除和指数,其中括号用于调整计算的顺序。合法表达式如下: x+y+z x+(y+z) x*(y+z)+a-b-c^d 小赛对此不太精通,因此请你帮忙编写这个程序
  • 对于初学c语言的人们来说比较有用。可以实现加减乘除,十二进制转换,计算面积。有少许bug
  • 对于CPU来说,内存仅仅是一个...CPU是一个复杂计算机部件,它内部又包含很多小零件,如下图所示:运算单元是CPU大脑,负责加减乘除、比较、位移等运算工作,每种运算都有对应电路支持,速度很快。寄存器(Regi...
  • C语言简单程序设计,计算器设计

    千次阅读 2016-08-15 09:40:19
    C语言简单程序设计,计算器的设计,加减乘除的计算实现,并且除数不能为零,可以循环使用
  • c语言编写基于51单片机计算器程序(4x4按键);0~9十个数字键,加减乘除四个键,等号按键和清零按键。实现长度最长为6位数加、减、乘、除,可根据自己硬件,进行改写,增加计算数字长度。
  • 自己编写相量计算工具源码,在dev-C++中可正常编译运行,只是一个简单控制台程序,主要用途为以复数形式计算两相量的加减乘除并输出。
  • 算法是一个程序和软件灵魂,作为一名优秀程序员,只有对一些基础算法有着全面掌握,才会在设计程序和编写代码过程中显得得心应手。 计算Fibonacci数列 Fibonacci数列又称斐波那契数列,又称黄金分割...
  • C语言程序设计

    千次阅读 2021-01-03 11:22:45
    编写程序,定义一个书店购书结构体类型,包括书名、单价、数量和金额四个元素。运行程序,输入一个人购书情况:书名,单价和数量存入...编写加减乘除4个自定义函数add, sub, mul,div,在主函数中调用这4个函数去.
  • 这是一个用C语言实现简单桌面计算器,支持加减乘除和括号运算,只要稍加修改即可实现其他运算,程序在文件中读取表达式,然后进行计算,返回计算结果
  • C语言实现24点程序

    2019-09-26 13:29:49
    程序的思想和算法来自于C语言教材后实训项目,程序通过用户输入四个整数计算出能够通过加减乘除得到数字24所有表达式,程序的设计有别于一般通过穷举实现方式,效率得到提高。算法介绍如下: 如用户输入1...
  • 支持计算表达式输入,连续输入,整数的加减乘除,优先级判断等功能,代码注释齐全,浅显易懂,开发工具为Visual Studio 2019
  • //类型:加减乘除 标志 int num1,num2,num3=100,num4; for(i=0;i;i++) { type=random1(); //随机函数 随机产生1234 flag=1; // switch(type) { case 1: //乘法 while(flag) ...
  • C语言程序中可以直接使用数字和加减乘除符号(+ - * /)。 C语言程序中每个计算步骤最后都必须以 ; 结尾,以此结尾的计算步骤叫做一个语句。 C语言程序中绝大多数语句都需要写在 { } 大括号里面,函数内部语言一定...
  • C语言程序里可以直接使用数字和加减乘除 四则运算符号(*代表乘法,/代表除法) C语言程序里每个计算步骤必须使用;结束, 每个使用;结束的计算步骤叫做一条语句 绝大多数语句应该写在大括号中间 大括号外面内容一般...
  • 利用系统时间设定随机种子生成4个随机数,并对4个数字... 使用加减乘除,能得出24者为赢,存在无解情况。  游戏开始得分为1000分,每一秒钟减少1分,当答对一次时,分数增加100分。(暂未实现) 代码展示: /* * *
  • 计算器 c语言 单片机

    2013-09-05 10:11:32
    基于单片机计算器c语言程序可进行32bit 加减乘除计算
  • 封面 作者 PanHongliang 仅供个人学习 C 语言程序设计实训题目 一人完成一题一般选取相同题目最多允许 3 人 指导教师孙杰 1 设计一个多功能计算软件 实现功能 具备整型数据浮点型数据算术(加减乘除)运算功能 ....

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

c语言计算加减乘除的程序

c语言 订阅