C语言 让机器理解计算表达式

输入一个合法不含括号的常整数表达式字符串:

2+3*4+5%2

计算这个结果

输入:

2+3*4+5%2

输出:

15

注:所有输入均为半角字符,字符串中无空格。仅仅包含+ - * / % 五个运算符号,且都是整数。

c

4个回答

如果肯采纳本回答,可以帮你按照你的要求改好。

caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复wwdzyx: 好了
一年多之前 回复
wwdzyx
wwdzyx 已采纳,请尽快提交程序,谢谢!
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 稍等
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复wwdzyx: 请点右边的采纳按钮,然后帮你修改。
一年多之前 回复
wwdzyx
wwdzyx 谢谢,我可以采纳答案,只要你帮我直接写好程序,就是直接可以提交那种。
一年多之前 回复

http://blog.csdn.net/zwt0112/article/details/54562469
参考这个例子,稍微修改,加上%就可以了。

 // expcalc.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


/*****************************************************  
File name:calculator  
Author:???    Version:1.0    Date: 2016-6-12  
Description:??????????,???,?,?,?,????????  
Calls : 1.insert_operand ()     ????  
        2.insert_oper()         ?????  
        3.compare()             ????????  
        4.deal_date()           ??????  
*****************************************************/  

#include <stdio.h>                          /*?????*/  
#include <stdlib.h>

#define MAX_SIZE 1024                       /*????*/  

int insert_operand(int *operand , int * top_num ,int num)           /*???????*/  
{  
    (*top_num) ++;  
    operand[*top_num] = num;                    /*????*/  

    return 0;                           /*????*/  
}  

int insert_oper (char * oper , int *top_oper , char ch)             /*????????*/  
{  
    (*top_oper)++;  
    oper[*top_oper] = ch;                       /*?????*/  

    return 0;                           /*????*/  
}  

int compare(char *oper , int *top_oper , char ch)                   /*????????*/  
{     

    if((oper[*top_oper] == '-' || oper[*top_oper] == '+')           /*???????????????????*/  
            && (ch == '*' || ch == '/' || ch == '%'))  
    {  
        return 0;                      /*??????*/   
    }  

    else if(*top_oper == -1 || ch == '('   
            || (oper[*top_oper] == '(' && ch != ')'))       /*??????????;????                                                               ????'('*/  
    {  
        return 0;                       /*??????*/  
    }  

    else if (oper[*top_oper] =='(' && ch == ')' )       /*???????????????*/  
    {  
        (*top_oper)--;  
        return 1;                       /*?()????*/  
    }  

    else  
    {  
        return -1;                                          /*????????*/  
    }  

}  

int deal_date(int *operand ,char *oper ,int *top_num, int *top_oper)    /*??????*/  
{  
    int num_1 = operand[*top_num];              /*??????????*/  
    int num_2 = operand[*top_num - 1];  

    int value = 0;  

    if(oper[*top_oper] == '+')                  /*????*/  
    {  
        value = num_1 + num_2;  
    }  

    else if(oper[*top_oper] == '-')             /*????*/  
    {  
        value = num_2 - num_1;  
    }  

    else if(oper[*top_oper] == '*')             /*????*/  
    {  
        value = num_2 * num_1;  
    }  

    else if(oper[*top_oper] == '/')             /*????*/  
    {  
        value = num_2 / num_1;  
    }  

    else if(oper[*top_oper] == '%')             /*????*/  
    {  
        value = num_2 % num_1;  
    }  


    (*top_num) --;                              /*?????????*/  
    operand[*top_num] = value;                  /*??????????*/  
    (*top_oper) --;                             /*??????????*/  

  return value;
}  

int main()  
{  
    int operand[MAX_SIZE] = {0};                /*???,???*/  
    int  top_num = -1;  

    char oper[MAX_SIZE] = {0};                  /*????,???*/  
    int top_oper = -1;  

    char *str = (char *) malloc (sizeof(char) * 100);               /*?????(??=)*/  
    scanf("%s",str);  

    char* temp;  
    char dest[MAX_SIZE];  
    int num = 0;  

    int i = 0;  
    while(*str != '\0')  
    {  
        temp = dest;  

        while(*str >= '0' && *str <= '9')           /*???????*/  
        {  
            *temp = *str;  
            str ++;  
            temp ++;                  
        }                               /*??????*/  

        if(*str != '(' && *(temp - 1) != '\0')      /*???????'('*/  
        {  
            *temp = '\0';  

            num = atoi(dest);               /*????????*/  
            insert_operand(operand, &top_num,num);      /*????????*/  
        }  

         while(1)  
         {  
             i = compare(oper,&top_oper,*str);      /*????????*/  

            if(i == 0)  
            {  
                insert_oper(oper,&top_oper,*str);   /*?????*/  
                break;  
            }  

            else if(i == 1)                         /*?????????????*/  
            {  
                str++;  
            }  

            else if(i == -1)                        /*??????*/  
            {  
                deal_date(operand,oper,&top_num,&top_oper);  
            }  

         }  

        str ++;                 /*??????????*/  
    }  

    printf("num = %d\n",operand[0]);        /*????*/  

    return 0;                       /*????*/  
}  
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复wwdzyx: 解决了么?
一年多之前 回复
wwdzyx
wwdzyx 很感谢
一年多之前 回复
wwdzyx
wwdzyx 他说我是新用户,不能提交回答里的图片。。。
一年多之前 回复
wwdzyx
wwdzyx 好的
一年多之前 回复
wwdzyx
wwdzyx haode
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复wwdzyx: 如果还有问题,如果是编译问题,贴出你的错误提示截图和使用的编译器软件和版本,如果是运行问题,贴出你输入的表达式和运行截图。明天我来看。先睡了。
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复wwdzyx: 如果你是在线oj,去掉inlude stdafx,并且,printf("num = %d\n",operand[0]);,去掉num = 。
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复wwdzyx: 发给你了。
一年多之前 回复
wwdzyx
wwdzyx 测试的时候不管输入什么 都输出@
一年多之前 回复
wwdzyx
wwdzyx Test case input* 1+2+3*4-5 Test case output* 10 Standard output* @
一年多之前 回复
wwdzyx
wwdzyx 回复caozhy: 1741831676@qq.com
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复wwdzyx: 什么问题?我这里可以运行,看下图。留下邮箱,发你完整的项目
一年多之前 回复
wwdzyx
wwdzyx 谢谢,但是测试有问题啊。。。
一年多之前 回复

图片说明

var a = new System.Data.DataTable().Compute(表达式, "");试试看看这个可不可以啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言:计算表达式的近似值
计算x - (1/2)*(x3/4) + (1/2)*(3/4)*(x5/6) - (1/2)*(3/4)*(5/6)*(x7/8) + … 编写一个程序,计算上式的近似值(直到最后一项的绝对值小于eps,其中x和eps是键盘输入,且|x|&amp;amp;amp;lt;1.0),并将结果和自己的学号(学号按字符串处理)写入到out.dat文件中保存起来。 #include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #include...
C语言实验——计算表达式
Problem Description 计算下列表达式值:    Input 输入x和n的值,其中x为非负实数,n为正整数。 Output 输出f(x,n),保留2位小数。 Example Input 3 2 Example Output 2.00 01#include 02#include 03#include 04d
C语言-计算表达式
//计算表达式 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;ctype.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #define MAX_SIZE 128 struct OP { int type;//0 union{char symbol;double val;}value;//联合,共用体,公用体 }op_deque[MAX_SIZ...
C语言实验--计算表达式
C语言实验——计算表达式Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description计算下列表达式值: Input输入x和n的值,其中x为非负实数,n为正整数。 Output输出f(x,n),保留2位小数。 Example Input3 2Example Output2.00#include<stdio.h
SDUT-1199 C语言实验——计算表达式
Code #include #include double f(double x,int n) { int i; double s = x; for(i=1; i<=n; i++) { s = sqrt(i+s); } return s; } int main() { double x; int n;
两种方式计算表达式(C语言)
数据结构课程设计,用两种方式实现表达式的自动计算
2020: C语言实验——计算表达式
C语言实验——计算表达式 递归问题
(C语言)练习4——计算表达式
Problem Description 计算下列表达式值: Input 输入x和n的值,其中x为非负实数,n为正整数。 Output 输出f(x,n),保留2位小数。 Example Input 3 2 Example Output 2.00 利用C语言写的代码如下: //利用了函数实现的 #include&lt;stdio.h&gt; #include&lt;mat...
c语言深刻剖析-让你真正理解C语言
C语言的深刻的解析 让你真正了解C语言,程序员面试必须得清除的一些东西。
C语言逆波兰表示法计算表达式的值
读取输入字符存入数组中,逐个扫描数组元素遇操作数进栈,遇运算符计算并将结果进栈继续上述过程,直至数组读取完
YTU OJ 2020: C语言实验——计算表达式
Description 计算下列表达式值:  Input 输入x和n的值,其中x为非负实数,n为正整数。 Output 输出f(x,n),保留2位有效数字。 Sample Input 3 2 Sample Output 2.00 【AC代码】: #include &amp;lt;iostream&amp;gt; #include &amp;lt;stdio.h&amp;gt; using namesp...
ytu 2020: C语言实验——计算表达式
2020: C语言实验——计算表达式 时间限制: 1 Sec  内存限制: 64 MB 提交: 48  解决: 31 [提交][状态][讨论版] 题目描述 计算下列表达式值:  输入 输入x和n的值,其中x为非负实数,n为正整数。 输出 输出f(x,n),保留2位有效数字。 样例输入 3 2 样例输出 2.00 #include #i
C语言实验——计算表达式 (sdut oj)
C语言实验——计算表达式 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 计算下列表达式值:    Input 输入x和n的值,其中x为非负实数,n为正整数。 Output 输出f(x,n),保留2位小数。
计算表达式实现C代码
C语言写的计算表达式代码,对你有用就下吧,个人觉得还过的去,不是很好。
C语言指针理解
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 指针的概念   指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。
理解c语言的数据类型
众所周知的,c语言是强类型语言,任何变量都必须要有自己的数据类型。那么 我们该如何理解这句话,为什么说是必须的呢。 1;关键的一句话就是; 数据类型决定在内存读取时的长度和解析的方法。 以32位计算机为例; char b的解析; 2;关于数据类型的封装; 就是上下两层不用管其的数据类型。采用void和void *类型,他们就是表示暂时未定数据类型,由调用者再次强制转换。其中memcpy这些库函数...
C 语言指针理解
C 语言指针理解 #include&lt;stdio.h&gt; int main() { int *p1,*p2,*p,a,b; printf("please enter two integer numbers"); scanf("%d,%d",&amp;a,&amp;b); ...
C语言一些理解
1、数组作为函数参数传递时会转换为指针,使用sizeof时需要注意。 2、函数必须在调用之前进行声明或者定义,#include的作用是预处理时在#include处插入.h的代码。因此不要在.h文件中定义变量,而#ifndef....#define.....#endif是必要的。 3、静态函数不能被源代码文件以外的文件调用,会分配一个一直使用的存储区。 4、含有指针成员的结构体必须为其指针初始
深入理解C语言
面向过程:接口(api)、过程的封装和设计 内存中的四个区域 数据类型本质分析 数据类型的本质是一个固定内存块大小的别名 sizeof是操作符,不是函数;sizeof测量的实体类型的大小为编译期间就已确定。 指针运算的步长和类型有关,比如: int array[10] = {0}; printf(&amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;array = %p, array = %p, &amp;amp;amp;
c语言的指针理解
c语言的指针理解 //做人做事我笃信阳明心学的知行合一 //编程之道完美诠释知行合一 //对某一个问题哪怕有一点点的不清楚,那就是完全不清楚 //对一个问题,只有知与未知两个状态,没有中间状态 //下面的代码应该能够加深对C语言指针的理解 #include&lt;stdio.h&gt; main()...
C语言理解与总结
C语言理解与总结(01)1.C概述1.#include<stdio.h>#include<stdio.h>是程序的第一行,该语句的作用相当于您在文件中该行所在的位置键入了文件stdio.h的完整内容,实际上,它是一种剪切和粘贴操作,这样可以方便地在多个程序间共享公用的信息。#include句是C预处理指令的一个例子。stdio.h文件作为所有C编译包的一部分提供,它包含了有关输入和输出函数的信息以供
c语言指针的理解
关于c的指针的理解
c语言深度理解
尽管经常使用C语言,但对它深入全面理解。此书正好可以弥补一下,梳理一下。
<C语言>结构体理解
题目:关于C语言结构体的理解 作者:wsg 时间:2017年8月14日 一、先来看看理论点的不好理解的结构体定义: { ·概念:结构体(structure)是由各种类型组成的的复合数据类型。 ·定义一个结构体类型的语法如下: struct {成员列表}; ·定义一个结构体变量的3种形式: ①常规形式: struct {成员列表}; struct ; ②与类型定
理解c语言helloworld
从helloworld开始 下面的代码是最简单的c语言程序,我们编译成汇编语言看看发生了什么事情。 #include int main(){ printf(&quot;helloworld&quot;); return 0; } .file &quot;a.c&quot; .def ___main; .scl 2; .type 32; .endef .secti
C语言初步理解
学习C++语言开始感觉不理解,难以理解计算机语言的意义。但是过了几个月的学习后,从不甚理解到能够自己书写代码,在此表达一下自己的心得。 知识点积累与感悟: 关于《C语言程序设计》,前几章重点讲述的是: (1)C语言的魅力之处以及新手为何需要学习C语言,它对于C语言的讲解使我对C语言的历史有所了解同时又让我对C语言的学习充满了期待。 (2)C语言的语句种类。就目前我学到的知识来看: ①变量的使用需要...
C语言指针理解C语言指针理解C语言指针理解
C语言指针理解C语言指针理解C语言指针理解
C语言:理解C语言二维数组名
通俗易懂 转载自:https://blog.csdn.net/kelehaier/article/details/76244582
c语言实战105例,让你更好的理解C
这是一个不错的学习C语言的光盘,想当初我就是凭借着它进一步加深了对C开发小型项目的理解,为以后打下了扎实的基础。
C语言指针的理解
// demo1.cpp : Defines the entry point for the console application. // #include &quot;stdafx.h&quot; #include &amp;lt;stdio.h&amp;gt; int i ; void ch (int* a, int* b){ int p ; p = *a ; *a = *b ; ...
理解C语言指针
C语言指针理解 本人在初学的时候认为c语言中指针很好理解,但身边好多同学一直在说老师讲的指针太抽象了,看不到,摸不着,非常难理解,甚至学了4年计算机,毕业了,不少同学还说不清楚指针是什么,遇到指针的问题必定出错,这里简单介绍一下。 引言 c语言中有很多抽象的东西,而指针就是其中一个,学好 c 语言就要学会计算机的思维:透过表面看本质。 比如下面一行代码中 两个 ! 运算符 int x = 0; i...
理解c语言数组类型
抛砖:数组类型,压死初学者的三座大山 1、数组类型;数组名 2、数组指针;与数组名同等级还是上一级需要&amp;amp;才能赋值 3、数组类型和数组指针的关系; 先以一维数组为例;int a[10]; int *a1; int (*a2)[10]; a;a数组的首地址,即为指针其指向的类型就是int,则a可等效于a1.其区别在于a是常量不能修改a = a+1;这一修改,而a1是变量,两者都可以进行加减法。...
C语言函数理解
#include void test(int a) { printf("a=%p \n",&a);//a=0x7fff4481bd5c } void main() { int a = 100; printf("%p \n",&a);//a=0x7fff4481bd7c test(a); } //函数的实参和形参地址是不一样的,所以形参是不能改变实参的值得
c语言理解和基础
最清晰的c语言基础,看完包会c语言理解和使用,让你的c语言6的飞起
C语言链表的理解
在操作系统和一些著名的框架设计中,如信号量,事件,消息队列,任务控制块,任务调度及各种算法中,经常使用到链表。链表太常见了,每当看到链表时,总有些发懵。看着很费力,主要还是对链表指来指去,没有个清晰直观的认识。 那么画一下图吧,在遇到分析链表的问题,直接图示一下比较直观,在脑海中形成一种认识。以下从基础开始分析,对链表进行一下理解。 网上很多对双向链表解释的文章都是用这个结构:
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview