精华内容
下载资源
问答
  • C语言四则运算计算器

    2020-12-23 19:54:38
    通过c语言实现一个简单的四则运算计算器。 代码如下 #include<stdio.h> int main() { float a,b; printf("********************\n"); printf("*******计算器*******\n"); printf("*****1.加 2.减*****\...

    四则运算计算器:

    通过c语言实现一个简单的四则运算计算器。

    代码如下

    #include<stdio.h>
    int main()
    {
       float a,b;
       printf("********************\n");     
       printf("*******计算器*******\n"); 
       printf("*****1.加  2.减*****\n");
       printf("*****3.乘  4.除*****\n");
       printf("*******5.退出*******\n");
       printf("********************\n");
       {
       int n=1;
       while(n)	
       {
       	printf("请输入选项:\n");
       	scanf("%d",&n);
       	switch(n)
       	{
       		case 1:
       		printf("输入两个数:\n");
       		scanf("%f %f",&a,&b);
       		printf("%.2f\n",a,b,a+b);
       		break;
       		case 2:
       		printf("输入两个整数:\n");
       		scanf("%f %f",&a,&b);
       		printf("%.2f\n",a-b);
       		break;
       		case 3:
       		printf("输入两个整数:\n");
       		scanf("%f %f",&a,&b);
       		printf("%.2f\n",a*b);
       		break;
       		case 4:
       		printf("输入两个整数:\n");
       		scanf("%f %f",&a,&b);
       		printf("%.2f\n",a/b);
       		break;
       		case 5:
       		return 0;
    		default:
    		printf("输入错误,请重新输入!\n");   	
         }
        }
       }
       return 0;
    }
    

    程序运行结果

    ********************
    *******计算器*******
    *****1.2.*****
    *****3.4.*****
    *******5.退出*******
    ********************
    请输入选项:
    7
    输入错误,请重新输入!
    请输入选项:
    1
    输入两个数:
    1 2
    1.00
    请输入选项:
    2
    输入两个整数:
    3 2
    1.00
    请输入选项:
    3
    输入两个整数:
    3 3
    9.00
    请输入选项:
    4
    输入两个整数:
    6 3
    2.00
    请输入选项:
    5
    
    --------------------------------
    Process exited with return value 0
    Press any key to continue . . .
    
    展开全文
  • C语言四则运算程序

    千次阅读 2020-10-01 22:58:55
    选择1表示只有加法运算,2表示只有减法运算,3表示只有乘法运算,4表示只有除法运算,5表示上面运算类型的随机混合。 允许用户输入难度等级。在难度等级为1时,程序只使用一位数字完成算术运算;在难度等级为2时...
    #include <iostream>
    #include <stdlib.h>
    #include <time.h> 
    using namespace std;
     
    void Comment(int i);	//声明 
    
    /*生成一个随机数*/
    int Number_gen(int i)
    {
    	switch(i){
    		case 1:return rand()%10;break;
    		case 2:return (rand()%90)+10;break;
    		case 3:return (rand()%900)+100;break;
    		case 4:return (rand()%9000)+1000;break; 
    		case 5:return (rand()%90000)+10000;break;
    		default:break;
    	}; 
     } 
    /*加法*/
    void Add(int n)
    {
    	printf("现在行的是%d位数加法运算\n",n);	
    	int count=0;
    	for(int i=1;i<=10;i++){
    		int a = Number_gen(n);  
    		int b = Number_gen(n);
    		printf("%d + %d = ",a,b);
    		int result;scanf("%d",&result);
    		if(result==a+b){
    			count++;
    			Comment(1);
    		}
    		else Comment(0);
    	}
    	double rate = count / 10;
    	if(rate<0.75) printf("很遗憾,你没有过关,快去找老师补课哦!\n");
    	else printf("祝贺!你已经通过了本级测试!\n");
    }
    /*减法*/ 
    void Subtr(int n)
    {
    	printf("现在行的是%d位数减法运算\n",n);	
    	int count=0;
    	for(int i=1;i<=10;i++){
    		int a = Number_gen(n);  
    		int b = Number_gen(n);
    		printf("%d - %d = ",a,b);
    		int result;scanf("%d",&result);
    		if(result==a-b){
    			count++;
    			Comment(1);
    		}
    		else Comment(0);
    	}
    	double rate = count / 10;
    	if(rate<0.75) printf("很遗憾,你没有过关,快去找老师补课哦!");
    	else printf("祝贺!你已经通过了本级测试!");
    }
    /*乘法*/
    void Mult(int n)
    {
    	printf("现在行的是%d位数乘法运算\n",n);	
    	int count=0;
    	for(int i=1;i<=10;i++){
    		int a = Number_gen(n);  
    		int b = Number_gen(n);
    		printf("%d * %d = ",a,b);
    		int result;scanf("%d",&result);
    		if(result==a*b){
    			count++;
    			Comment(1);
    		}
    		else Comment(0);
    	}
    	double rate = count / 10;
    	if(rate<0.75) printf("很遗憾,你没有过关,快去找老师补课哦!\n");
    	else printf("祝贺!你已经通过了本级测试!\n");
     } 
    /*除*/
    void Divi(int n)
    {
    	printf("现在行的是%d位数除法运算(注意保留6位有效小数点)\n",n);	
    	int count=0;
    	for(int i=1;i<=10;i++){
    		int a = Number_gen(n);  
    		int b = Number_gen(n);
    		if(n==1)	//两位除法特殊,除数不能为0 
    		{
    			int b = (rand()%9)+1;  //除数不能为0 
    		}
    		printf("%d / %d = ",a,b);
    		float result;scanf("%f",&result);  //生成数字的时候,应该循环一系列数字 
    		if(result==1.0*a/b){
    			count++;
    			Comment(1);
    		}
    		else Comment(0);
    	}
    	float rate = count / 10;
    	if(rate<0.75) printf("很遗憾,你没有过关,快去找老师补课哦!\n");
    	else printf("祝贺!你已经通过了本级测试!\n");	
    }
    /*混合*/
    void Mix(int n)
    {
    		int count;
    		for(int i=0;i<10;i++){ 
    		float result;
    		int c = rand()%4;		//随机生成加减乘除 
    		int a = Number_gen(n);  	 
    		int b = Number_gen(n);
    		switch(c){
    			case 0:		//加法 
    			printf("%d + %d = ",a,b);
    			scanf("%f",&result);  
    			if(result==a+b){
    				count++;
    				Comment(1);
    		}
    		else Comment(0);break;   
    		
    			case 1:			//减法
    				printf("%d - %d = ",a,b);
    				scanf("%f",&result);  
    		if(result==a-b){
    				count++;
    				Comment(1);
    		}
    		else Comment(0);break;  
    				break;	 
    				
    			case 2:
    				printf("%d * %d = ",a,b);
    				scanf("%f",&result);  
    		if(result==a*b){
    				count++;
    				Comment(1);
    		}
    		else Comment(0);break;  
    				break;		//乘法 
    				
    			case 3:
    			if(n==1)		//两位除法特殊,除数不能为0
    			{	 
    			int b = (rand()%9)+1;
    			}  
    			printf("%d / %d = ",a,b);
    			scanf("%f",&result);
    		if(result==1.0*a/b){
    				count++;
    				Comment(1);
    		}
    		else Comment(0);break;  
    				break;		//除法 
    			default:break; 
    		};			
    	}
    	float rate = count / 10;
    	if(rate<0.75) printf("很遗憾,你没有过关,快去找老师补课哦!\n");
    	else printf("祝贺!你已经通过了本级测试!\n");
     } 
    
    /*评语随机生成函数*/
    void Comment(int i)
    {
    	if(i==1){
    		int j = rand()%3;
    		switch(j){
    			case 0:printf("棒极了!\n");break;
    			case 1:printf("太好了!\n");break;
    			case 2:printf("你好棒哦!\n");break;
    			default:break;
    		}
    	}
    	else if(i==0){
    		int k = rand()%4;
    		switch(k){
    			case 0:printf("请再试一次!\n");break;
    			case 1:printf("别灰心!\n");break;
    			case 2:printf("失败是成功之母!\n");break;
    			case 3:printf("继续加油哦\n");break;
    			default:break; 
    		}
    	} 
    }
    
    int main()
    { 
    	srand((unsigned)time(NULL));
    while(true){	
    /*交互界面*/
    	int choice1,choice2;
    	printf("运算选择:\n1  加法\t 2  减法\t 3  乘法\t 4  除法\t 5  四种运算类型的随机混合\n\n");
    	printf("难度选择:\n1  一位数字运算\n2  两位数字运算\n3  三位数字运算\n4  四位数字运算\n5  五位数字运算\n\n");
    	printf("键入运算难度和难度选择:");scanf("%d%d",&choice1,&choice2);
    /*难度选择*/
    	switch(choice1){
    		case 1:Add(choice2);break;
    		case 2:Subtr(choice2);break;
    		case 3:Mult(choice2);break;
    		case 4:Divi(choice2);break;
    		case 5:Mix(choice2);break;
    	}	
    	}
    	return 0;
    }
      1. 允许用户选择一种类型的算术运算来学习。选择1表示只有加法运算,2表示只有减法运算,3表示只有乘法运算,4表示只有除法运算,5表示上面四种运算类型的随机混合。
      2. 允许用户输入难度等级。在难度等级为1时,程序只使用一位数字完成算术运算;在难度等级为2时,程序最多使用两位数;依此类推。
      3. 对于相应的运算类型和难度等级,利用rand函数产生两个正整数,接着程序应显示诸如“6×7=”之类的问题,然后学生输入答案。接下来程序会检查学生的答案,如果回答正确,打印出诸如“棒极了!”、“太好了!”、“你好棒哦!”之类的评语,随后问另一个问题。如果回答错误,打印出诸如“请再试一次!”、“别灰心!”、“失败是成功之母!”、“继续加油哦!”之类的评语,然后让学生继续尝试回答同样的问题,直到最后回答正确。
      4. 统计学生回答正确和回答错误的次数。学生回答10次以后,程序应该计算回答正确的百分比。如果百分比低于75%,那么程序应打印“很遗憾,你没有过关,快去找老师补课哦!”,然后重置程序,这样另一学生可以使用它。如果百分比大于等于75%,则显示“祝贺!你已经通过了本级测试!”,然后重置程序,这样另一学生可以使用它。
    展开全文
  • C语言四则运算

    2014-05-28 19:37:12
    简单的C语言四则运算法则源代码,属于课程上的课后的作业题,比较简单的模式
  • 我想请教一下,怎么样修改一下代码,使得输入的表达式不含“=”号也能运行并输出结果。如 输入 5+2/2 ,输出 =6. 代码非原创,原文出自:https://blog.csdn.net/dannis_bh/article/details/51002627
  • C语言四则运算计算器(带错误检测)

    千次阅读 2018-10-23 12:35:48
    //当前符号是加减号并且前一个字符是符号且不是右括号,判定为正负号 if ((i == 0 || !isdigit(all[i - 1])) && (all[i] == '+' || all[i] == '-') && (i == 0 || all[i - 1] != ')')) { if (all[i] ...

    Java小作业,用C写了一遍

    输入格式随意,程序自带去空格,欢迎检测bug。

    #include <iostream>
    #include <cctype>
    #include <stack>
    #include <string>
    #include <vector>
    #include <map>
    using namespace std;
    vector<string>s;
    map<string, int>mm;
    stack<string>st;
    string t, alls, all;
    int main()
    {
    
    	//优先级
    	mm["+"] = 1;
    	mm["-"] = 1;
    	mm["*"] = 2;
    	mm["/"] = 2;
    	mm["("] = 3;
    	getline(cin, alls);
    
    
    
    	//删空格判非法符号
    	for (int i = 0; i < alls.size(); i++)
    	{
    		if (!isdigit(alls[i]) && alls[i] != '+'&&alls[i] != '-'&&alls[i] != '*'&&alls[i] != '/'&&alls[i] != '('&&alls[i] != ')'&&alls[i] != '.'&&alls[i] != ' ')
    		{
    			printf("#ERROR\n");
    			printf("Unknown symbol\n");
    			return 0;
    		}
    		if (alls[i] != ' ')
    			all += alls[i];
    	}
    
    
    
    	//判断表达式是否正确
    	int left_bracket = 0;
    	for (int i = 0; i < all.size(); i++)
    	{
    		//判括号
    		if (all[i] == '(')
    			left_bracket++;
    		else if (all[i] == ')')
    		{
    			if (left_bracket == 0)
    			{
    				printf("#ERROR\n");
    				printf("Brackets do not match\n");
    				return 0;
    			}
    			left_bracket--;
    		}
    		//特判第一个
    		if (i == 0)
    		{
    			if (all[i] != '+'&&all[i] != '-'&&all[i] != '(' && !isdigit(all[i]))
    			{
    				printf("#ERROR\n");
    				printf("Operator error\n");
    				return 0;
    			}
    		}
    		//特判最后一个
    		else if (i == all.size() - 1)
    		{
    			if (all[i] != ')' && !isdigit(all[i]))
    			{
    				printf("#ERROR\n");
    				printf("Operator error\n");
    				return 0;
    			}
    			if (all[i] == ')'&&all[i - 1] == '(')
    			{
    				printf("#ERROR\n");
    				printf("Operator error\n");
    				return 0;
    			}
    		}
    		//中间字符,枚举ERROR情况
    		else
    		{
    			if (isdigit(all[i]))
    			{
    				if (all[i - 1] == ')' || all[i + 1] == '(')
    				{
    					printf("#ERROR\n");
    					printf("Operator error\n");
    					return 0;
    				}
    			}
    			else if (all[i] == '.')
    			{
    				if (!isdigit(all[i - 1]) || !isdigit(all[i + 1]))
    				{
    					printf("#ERROR\n");
    					printf("radix point error\n");
    					return 0;
    				}
    			}
    			else if (all[i] == '*' || all[i] == '/')
    			{
    				if ((!isdigit(all[i - 1]) && all[i - 1] != ')') || (!isdigit(all[i + 1]) && all[i + 1] != '+'&&all[i + 1] != '-'&&all[i + 1] != '('))
    				{
    					printf("#ERROR\n");
    					printf("Operator error\n");
    					return 0;
    				}
    			}
    			else if (all[i] == '+' || all[i] == '-')
    			{
    				if (isdigit(all[i - 1]) || all[i - 1] == ')')
    				{
    					if (!isdigit(all[i + 1]) && all[i + 1] != '+'&&all[i + 1] != '-')
    					{
    						printf("#ERROR\n");
    						printf("Operator error\n");
    						return 0;
    					}
    				}
    				else
    				{
    					if (!isdigit(all[i + 1]))
    					{
    						printf("#ERROR\n");
    						printf("Operator error\n");
    						return 0;
    					}
    				}
    			}
    			else if (all[i] == '(')
    			{
    				if (isdigit(all[i - 1]) || all[i - 1] == ')' || all[i + 1] == '*' || all[i + 1] == '/' || all[i + 1] == ')')
    				{
    					printf("#ERROR\n");
    					printf("Operator error\n");
    					return 0;
    				}
    			}
    			else if (all[i] == ')')
    			{
    				if ((!isdigit(all[i - 1]) && all[i - 1] != ')') || (all[i + 1] != '+'&&all[i + 1] != '-'&&all[i + 1] != '*'&&all[i + 1] != '/'&&all[i + 1] != ')'))
    				{
    					printf("#ERROR\n");
    					printf("Operator error\n");
    					return 0;
    				}
    			}
    		}
    	}
    
    
    
    	//中缀转后缀
    	for (int i = 0; i < all.size();)
    	{
    		if (!isdigit(all[i]))
    		{
    			//当前符号是加减号并且前一个字符是符号且不是右括号,则判定为正负号
    			if ((i == 0 || !isdigit(all[i - 1])) && (all[i] == '+' || all[i] == '-') && (i == 0 || all[i - 1] != ')'))
    			{
    				if (all[i] == '-')
    					t = all[i];
    				i++;
    				goto qwe;
    			}
    			t = all[i];
    			i++;
    		}
    		else
    		{
    			t.clear();
    		qwe:
    			for (; i < all.size(); i++)
    			{
    				if (!isdigit(all[i]) && all[i] != '.')
    					break;
    				t += all[i];
    			}
    		}
    		//如果是数字
    		if (isdigit(t[0]) || t.size() > 1)
    			s.push_back(t);
    		else
    		{
    			//如果是右括号,弹出遇到左括号的所有符号
    			if (t == ")")
    			{
    				while (!st.empty())
    				{
    					if (st.top() == "(")
    					{
    						st.pop();
    						break;
    					}
    					s.push_back(st.top());
    					st.pop();
    				}
    			}
    			//否则,正常操作
    			else
    			{
    				while (!st.empty())
    				{
    					if (st.top() == "(")
    						break;
    					if (mm[st.top()] >= mm[t])
    					{
    						s.push_back(st.top());
    						st.pop();
    					}
    					else
    						break;
    				}
    				st.push(t);
    			}
    		}
    	}
    	//剩下的符号除了括号全部入栈
    	while (!st.empty())
    	{
    		if (st.top() != "("&&st.top() != ")")
    			s.push_back(st.top());
    		st.pop();
    	}
    
    	for (int i = 0; i < s.size(); i++)
    	{
    		if (i != 0)
    			cout << " ";
    		cout << s[i];
    	}
    	cout << endl;
    
    
    
    	//后缀表达式求值
    	stack<double>num;
    	for (int i = 0; i < s.size(); i++)
    	{
    		if (s[i].size() > 1 || isdigit(s[i][0]))
    		{
    			double nums = 0;
    			double mul = 1;
    			for (int j = s[i].size() - 1; j >= 0; j--)
    			{
    				if (isdigit(s[i][j]))
    				{
    					nums += (s[i][j] - '0')*mul;
    					mul *= 10;
    				}
    				else if (s[i][j] == '.')
    				{
    					nums /= mul;
    					mul = 1;
    				}
    				else if (s[i][j] == '-')
    					nums = -nums;
    			}
    			num.push(nums);
    		}
    		else
    		{
    			double a, b, sums;
    			b = num.top();
    			num.pop();
    			a = num.top();
    			num.pop();
    			switch (s[i][0])
    			{
    			case '+':
    				sums = a + b;
    				break;
    			case '-':
    				sums = a - b;
    				break;
    			case '*':
    				sums = a * b;
    				break;
    			case '/':
    			{
    				if (b == 0)
    				{
    					printf("#ERROR\n");
    					printf("Can not be divided into zero.\n");
    					return 0;
    				}
    				sums = a / b;
    			}
    			}
    			num.push(sums);
    		}
    	}
    	printf("%.1lf\n", num.top());
    }

     

    展开全文
  • C语言实现四则运算

    千次阅读 2019-04-02 15:56:33
    C语言实现四则运算C语言实现四则运算(QG第二次训练营作业) 头文件 代码: #include <stdio.h> #include<malloc.h> #include<math.h> typedef enum Status { ERROR = 0, SUCCESS = 1 } ...

    @huange7

    C语言实现四则运算

    用C语言实现四则运算(QG第二次训练营作业)

    头文件

    代码:

    
        #include <stdio.h>
        #include<malloc.h>
        #include<math.h>
        
        // 返回值结构体
        typedef enum Status {
            ERROR = 0, SUCCESS = 1
        } Status;
    
    	// 栈节点结构体
        typedef  struct StackNode
        {
        	char cData;
        	double data;
        	struct StackNode *next;
        }StackNode, *LinkStackPtr;
    
    	// 链栈
        typedef  struct  LinkStack{
        	LinkStackPtr top;
        	int	count;
        }LinkStack;
    
    
        Status initLStack(LinkStack *s);//初始化栈
        Status isEmptyLStack(LinkStack *s);//判断栈是否为空
        double getTopLStackint(LinkStack *s);//得到栈顶元素
        char getTopLStackchar(LinkStack *s);//得到栈顶元素
        Status destroyLStack(LinkStack *s);//销毁栈
        Status pushLStackdouble(LinkStack *s,double data);//入栈
        Status pushLStackchar(LinkStack *s,char data);//入栈
        Status popLStackdouble(LinkStack *s,double *data);//出栈
        Status popLStackchar(LinkStack *s,char *data);//出栈
        void inputCheck(int *val);  //检查输入
        void inputString(char s[]); //字符串的输入
        Status checkString(char s[]); //检查字符串的正确
        Status convertString(char s1[],char s2[],LinkStack *s); //将中缀表达式转化为后缀表达式
        int judgePriority(char a, char b);// 判断符号优先级
        double computeString(LinkStack *s1,char s[]);// 计算结果
    

    函数实现

    #include "calculatior.h"
    
    Status initLStack(LinkStack *s)   //初始化
    {
        s->count = 0;
        s->top = (LinkStackPtr)malloc(sizeof(StackNode));
        if(s->top == NULL)
        {
            printf("\t\t\t\t动态分配内存失败!\n");
            return ERROR;
        }
        else
        {
            s->top = NULL;
        }
        return SUCCESS;
    }
    
    Status isEmptyLStack(LinkStack *s)  //判断链栈是否为空
    {
        if(s->count == 0)
        {
            return SUCCESS;
        }
        return ERROR;
    }
    
    Status destroyLStack(LinkStack *s)   //销毁栈
    {
        if(isEmptyLStack(s))
            return ERROR;
        while(s->top != NULL)
        {
            LinkStackPtr p = s->top;
            s->top = s->top->next;
            free(p);
        }
        s->count = 0;
        return SUCCESS;
    }
    
    Status pushLStackdouble(LinkStack *s,double data)   //入栈
    {
        LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));
        if(p == NULL)
        {
            printf("\t\t\t\t动态分配内存失败!\n");
            return ERROR;
        }
        p->data = data;
        p->next = s->top;
        s->top = p;
        s->count ++;
        return SUCCESS;
    }
    
    Status pushLStackchar(LinkStack *s,char data)   //入栈
    {
        LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));
        if(p == NULL)
        {
            printf("\t\t\t\t动态分配内存失败!\n");
            return ERROR;
        }
        p->cData = data;
        p->next = s->top;
        s->top = p;
        s->count ++;
        return SUCCESS;
    }
    
    Status popLStackdouble(LinkStack *s,double *data)   //出栈
    {
        if(isEmptyLStack(s))
            return ERROR;
        *data = s->top->data;
        LinkStackPtr p = s->top;
        s->top = p->next;
        free(p);
        p = NULL;
        s->count--;
        return SUCCESS;
    }
    
    Status popLStackchar(LinkStack *s,char *data)   //出栈
    {
        if(isEmptyLStack(s))
            return ERROR;
        *data = s->top->cData;
        LinkStackPtr p = s->top;
        s->top = p->next;
        free(p);
        p = NULL;
        s->count--;
        return SUCCESS;
    }
    
    void inputString(char s[])	// 输入运算表达式
    {
        int i=0;
        printf("请输入表达式:");
        scanf("%s", s);
        getchar();
        while(1)
        {
            if((s[i] < '0'||s[i] > '9')&&(s[i] != '+'&&s[i] != '-'&&s[i] != '*'&&s[i] != '/'&&s[i] != '.'&&s[i]!= '('&&s[i] != ')'))
            {
                printf("请输入正确的表达式!");
                scanf("%s", s);
                i = 0;
            }else
            {
                i++;
            }
            if(s[i] == '\0')
                break;
        }
        checkString(s);
    }
    
    Status checkString(char s[])  //检查字符串的输入
    {
        int i,j = 0;
        char a[20] = {0};         //存放运算符
        int flag = 0;       // 用于判断该数是否为负数  例如:5*-3,则3的实际为-3
        int bracket = 0;    // 检测括号的配对关系
        for(i = 0; s[i] != '\0'; i++)
        {
            //将数字间的运算符存储起来
            if(s[i] == '+'||s[i] == '-'||s[i] == '*'||s[i] == '/')
            {
                a[j++] = s[i];
            }
            //判断括号是否匹配
            if(s[i] == '(')
                bracket = 1;
            if(s[i] == ')'&&bracket == 1)
                bracket = 0;
            //将数字间的字符进行运算并判断是否正确
            if((s[i+1] >= '0'&&s[i+1] <= '9')||s[i+1] == '(')
            {
                char c = a[0];
                for(int k = 1;k < j; k++)
                {
                    if((c =='+'&& a[k]=='-')||(c == '-'&&a[k] == '+'))
                        c = '-';
                    else if(c == '-'&& a[k] == '-')
                    {
                        c = '+';
                    }
                    else if(c =='*' &&a[k] == '+')
                    {
                        c = '*';
                    }
                    else if((c == '*'||c == '/')&& a[k] == '-')
                    {
                        if(flag == 0)
                            flag = 1;
                        else
                            flag = 0;
                    }
                    else if((c == '+'||c == '-')&&(a[k] == '*'||a[k] == '/'))
                    {
                        printf("输入表达式错误!请重新输入:");
                        inputString(s);
                    }
                }
                if(c == '+'||c == '-'|| c == '*'|| c == '/')
                {
                   s[i-j+1] = c;
                   for(int k = i-j+2;s[k] != '\0'; k++)
                        s[k] = s[k+j-1];
                   i = i-j+2;
                }
              for(int k = 0; k < j; k++)
                    a[k] = '\0';
                j = 0;
            }
        }
        if(s[i-1] == '+'||s[i-1] == '-'||s[i-1] == '*'||s[i-1] == '/'||bracket != 0)
        {
            printf("表达式输入错误!请重新输入:");
            inputString(s);
        }
    	printf("\n最终的表达式为:");
        for(int k = 0; s[k] != '\0'; k++)
            printf("%c" ,s[k]);
            printf("\n");
            printf("bra = %d\n", bracket);
        return SUCCESS;
    }
    
    double getTopLStackdouble(LinkStack *s)  //得到栈顶元素
    {
        if(isEmptyLStack(s))
            return 0;
        return (s->top->data);
    }
    
    char getTopLStackchar(LinkStack *s)  //得到栈顶元素
    {
        if(isEmptyLStack(s))
            return '\0';
        return (s->top->cData);
    }
    
    Status convertString(char s1[],char s2[],LinkStack *s)//将中缀表达式转化为后缀表达式
    {
        int i = 0 , j = 0;
        int flag = 0;                                //用于分隔右括号和运算符
        char c;
        while(s1[i] != '\0')
        {
            if((s1[i] >= '0'&&s1[i] <= '9')||s1[i] == '.')
                {
                    s2[j++] = s1[i];
                    if(s1[i] >= '0'&&s1[i] <= '9')
                        printf("是数字,直接赋值:%.2lf\n",(double)(s1[i]-48));
                    else
                        printf("是小数点,直接赋值!\n");
                }
            if(s1[i+1] == ')')
            {
                if(s1[i+2] == '+'||s1[i+2] == '-'||s1[i+2] == '*'||s1[i+2] == '/'||s1[i+2] == '\0'||s1[i+2] == ')')
                {
                    if(flag == 0)
                   {
                        flag = 1;
                        s2[j++] = ',';
                        printf("数字转化完毕!加个逗号\n");
                   }
                }
            }
            if(s1[i+1] == '+'||s1[i+1] == '-'||s1[i+1] == '*'||s1[i+1] == '/'||s1[i+1] == '\0')
                {
                    if(flag == 1)
                   {
                        flag = 0;
                   }
                    else
                    {
                        s2[j++] = ',';
                        printf("数字转化完毕,加个逗号!\n");
                    }
                }
            if(s1[i] == '+'||s1[i] == '-'||s1[i] == '*'||s1[i] == '/')
            {
                if(isEmptyLStack(s))
                    {
                        pushLStackchar(s, s1[i]);
                        printf("空栈或者遇到左括号,直接放入\n");
                    }
                else
                {
                    switch(judgePriority(s1[i], getTopLStackchar(s)))
                    {
                    case -1:
                        {
                            pushLStackchar(s , s1[i]);
                            printf("运算符优先级比栈顶高,入栈!\n");
                            break;
                        }
                    case 0:
                    case 1:
                        {
                            while(judgePriority(s1[i], getTopLStackchar(s)) != -1)
                            {
                                popLStackchar(s , &s2[j++]);
                                printf("运算符优先级比栈顶低或者相等,出栈!\n");
                                if(isEmptyLStack(s))
                                    {
                                        printf("空栈!暂停比较!\n");
                                        break;
                                    }
                            }
                            if(!isEmptyLStack(s)&&(judgePriority(s1[i], getTopLStackchar(s)) == -1))
                                {
                                    printf("栈不空!并且运算符优先级比栈顶高!直接入栈!\n");
                                    pushLStackchar(s, s1[i]);
                                }
                            if(isEmptyLStack(s))
                                {
                                    printf("空栈!直接压栈!\n");
                                    pushLStackchar(s , s1[i]);
                                }
                            break;
                        }
                    }
                }
            }
            if(s1[i] == '(')
                {
                    pushLStackchar(s, s1[i]);
                    printf("遇到左括号,压栈!\n");
                }
            if(s1[i] == ')')
            {
                printf("遇到右括号!开始出栈!\n");
                while(1)
                {
                    popLStackchar(s, &s2[j++]);
                    if(s->top == NULL||s->top->cData == '(')
                        break;
                }
                popLStackchar(s, &c);
                printf("出栈完毕!栈顶元素为:%c\n", getTopLStackchar(s));
            }
            i++;
        }
        while(!isEmptyLStack(s))
            {
                printf("s1扫描完毕,将栈中元素全部给s2\n");
                popLStackchar(s, &s2[j++]);
            }
        printf("转换完成的后缀表达式为:");
        for(i = 0;s2[i] != '\0'; i++)
            printf("%c", s2[i]);
        printf("\n");
        return SUCCESS;
    }
    
    int judgePriority(char a, char b)                  //判断符号优先级
    {
        if((( a == '+'|| a == '-')&&(  b == '+'|| b == '-'))||((a == '*'||a == '/')&&(b == '*'||b == '/')))
            return 1;                                 //代表二者优先级相等
        else if((a == '+'||a == '-')&&(b == '*'||b == '/'))
            return 0;                                 //代表右边优先级高
        else
            return -1;                                 //代表左边优先级高
    }
    
    double computeString(LinkStack *s1,char s[])
    {
        double temp = 0;
        int flag = 0;
        for(int i = 0;s[i] != '\0'; i++)
        {
            if(s[i] == '.')
                flag = 1;
            if(s[i] >= '0'&&s[i] <= '9')
            {
                if(flag != 0)
                {
                    temp += (double)(s[i]-48)*pow(10,-flag);
                    flag ++;
                }
                else
                    temp = temp*10 + (double)(s[i]-48);
            }
            if(s[i] == ',')
            {
                pushLStackdouble(s1, temp);
                temp = 0;
                flag = 0;
            }
            if(s[i] == '+'||s[i] == '-'||s[i] == '*'||s[i] == '/')
            {
                double a,b,temp2;
                popLStackdouble(s1, &a);
                popLStackdouble(s1, &b);
                switch(s[i])
                {
                case '+':temp2 = a + b;pushLStackdouble(s1, temp2);temp2 = 0;break;
                case '-':temp2 = b - a;pushLStackdouble(s1, temp2);temp2 = 0;break;
                case '*':temp2 = b * a;pushLStackdouble(s1, temp2);temp2 = 0;break;
                case '/':temp2 = b / a;pushLStackdouble(s1, temp2);temp2 = 0;break;
                }
            }
        }
        popLStackdouble(s1, &temp);
        return temp;
    }
    
    

    主函数

        #include "calculatior.h"
        
        int main()
        {
            char aExpression1[100] = {0};
            char aExpression2[100] = {0};
            LinkStack *symbol = (LinkStack *)malloc(sizeof(LinkStack));
            LinkStack *number = (LinkStack *)malloc(sizeof(LinkStack));
            initLStack(symbol);
            initLStack(number);
            inputString(aExpression1);
            convertString(aExpression1,aExpression2,symbol);
            double temp = computeString(number,aExpression2);
            printf("\n 结果为-->%.2lf\n", temp);
            destroyLStack(symbol);
            destroyLStack(number);
            free(symbol);
            free(number);
            system("pause");
            return 0;
        }
    

    使用说明:

    例如:(1+1)--1+1
    运算结果:
    在这里插入图片描述
    可以看到,本应用支持将表达式中的连续输入的符号进行判断并且进行转换,同时还将过程展示出来

    其他的使用者可以继续摸索尝试!

    展开全文
  • 课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
  • c语言实现 四则运算

    2010-04-16 00:16:28
    输入一行四则运算式 可以带多个括号 计算结果
  • c语言 整数四则运算

    千次阅读 2020-07-19 15:19:17
    整数四则运算 计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 ...
  • C语言堆栈写的四则运算源码 有详细注释,浮点数含括号的四则运算代码
  • 四则运算--Java、C语言 代码(记事本保存)。点个赞再走啊,客官~ 四则运算--Java、C语言 代码(记事本保存)。点个赞再走啊,客官~ 四则运算--Java、C语言 代码(记事本保存)。点个赞再走啊,客官~ 四则运算--Java...
  • C语言栈实现四则运算

    千次阅读 多人点赞 2019-06-27 16:41:24
    说明:本代码旨在帮助实现遇到困难的低年级学生或非计算机相关专业学生借鉴,是借鉴,不是抄袭,我强烈建议你自己先...补充:如果正是大一的你,你想实现功能更强大的计算器,比如用QT实现不仅仅四则运算的,可以...
  • C语言整数四则运算

    千次阅读 2020-05-23 16:52:08
    本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、...
  • 小学生四则运算实现,c语言编写。 实现小学生加法、减法、乘法和除法运算。 并选择难易度,简单运算和混合运算,具有界面选择功能。
  • 一个简单的程序,但是很实用,适合C语言初学者
  • c语言编写的小学生四则运算软件,有点小缺点,但很好用,可以给小学生测试四则运算
  • 关于稀疏矩阵的加、减、乘的代码,数据结构中用的。写得感觉一般,但可以运行,仅供参考。
  • c语言实现简单四则运算

    千次阅读 2017-09-25 15:41:00
    c语言实现简单四则运算 一、项目开始 网上代码参考(代码链接:张瑞舒---博客园:http://www.cnblogs.com/bjzsr/p/5268377.html) 二、阅读代码 1、参考代码使用了随机函数...
  • C语言实现分数的四则运算

    千次阅读 2018-10-15 20:06:58
    C语言实现分数的四则运算 #include&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; int main() { int a,b,d,e,f...
  • c语言代码,exe执行文件,帮助小学生练习四则运算的程序
  • 资源共享,有什么错误和好的建议请指出 如果没资源分,我可以直接发给你)
  • C语言 实现四则运算简单计算器

    千次阅读 2017-03-12 21:53:54
    C语言编写了一个简单的四则运算计算器,输入以#号结束 #include #include #define MAXSIZE 100 #define OKAY 1 #define ERROR 0 char ops[7]={'+','-','*','/','(',')','#'}; int cmp[7][7]={ {2,2,1,1,1,2,2},...
  • c语言进行复数的四则运算

    千次阅读 2019-11-29 15:08:15
    c语言进行虚数的四则运算 额。。好像没什么好说的直接上代码吧,注意下结构体的用法 #include<stdio.h> struct complex { double re; double im; }; complex add(complex x,complex y); complex ...
  • 四则运算简易计算器C语言详解

    千次阅读 2019-11-16 17:17:26
    问题描述:输入一个不含括号的四则运算表达式,输出计算结果。 方法:四则运算只有两种优先级,在输入两步计算(三个操作数)之后一定能得到一个结果。如1-2*3,无论3后的操作符是什么,2*3都可以先计算。则1-2*3=1-...
  • 题目:设计一个简单的四则运算编辑器 思路:我使用的是C语言编程,看到题目首先要随机出3个随机数,其中两个为100以内的随机数(a,b),一个为0~3的随机数(k)。 k值的变化使得+ - * /的变化。然后使用的for...
  • C语言自制四则运算小游戏

    千次阅读 2018-11-08 15:42:27
    #include #include ...自主选择运算方式,会随机生成2个数字,要求你给出答案,它会去判断正确或错误。完成答题后按Y或y继续游戏,其他键退出游戏。现在我还不会做积分器,以后会加上,并不断完善。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,967
精华内容 18,786
关键字:

c语言四则运算代码

c语言 订阅