写了两个小时写的很粗陋,只能计算整数,但是可以支持多级别括号,和同一级别的多个括号。

希望大家多多指教,这个题目其实很有意思,要是大家有兴趣,可以把功能做的更加全面,比如算次方什么的

#include

#include

#include

void del(char* ,char *);

void del2(int [],int );

void convert(char [],char *,char *);

int jisuan(char []);

int num[100]={0};

void main()

{

char str[100];

int i;

printf("IF you want to exit,CTRL+Z will help you!!\n");

while(EOF!=scanf("%s",str))

{

printf("%d\n",jisuan(str));

for(i=0;i<100;i++)

num[i]=0;

}

}

int jisuan(char str[])

{

char *p;

char ss[100]={'\0'};

char fuhao[20]={'\0'};

int number[20]={0};

int kk=0,k,l,i,j=0,end=0,jj,wei=0;

p=strchr(str,'(');

while(p!=NULL)//查找str中的括号,并且优先处理,直到没有为止,

{

for(k=l=i=0;str[i]!='\0';i++)

{

if(str[i]=='(')k++;//这里是匹配多个括号,大家列个式子就能找到规律

if(str[i]==')')l++;

if(k==l&&k!=0)//第n个'('是和第'n'个')'匹配的

{

convert(ss,++p,&str[i-1]);//把括号中的字符传递出来处理

number[kk++]=jisuan(ss);//处理括号中的字符

num[0]=0;

*(--p)='q';//原来str中的括号位置用'q'来标志

p++;

del(p,&str[i+1]);//删除处理过的括号内容

k=l=0;

i=-1;

break;

}

}

p=strchr(str,'(');//继续查找括号

}

kk=0;

for(i=0;str[i]!='\0';i++)//这里我自己都觉得很没有条理,大家多花点时间

{

if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')

{

if(str[i-1]!='q')

{

for(jj=i-1,wei=0;jj>=end;jj--)

{

num[j]+=(str[jj]-'0')*(int)pow(10,wei++);

}

end=i+1;//end记录的是最后数字的位子,比如说“123”end记录的应该是2的位置

fuhao[j++]=str[i];

}

else

end=i+1;

}

if(str[i]=='q')

{

num[j]=number[kk++];//遇到第几个q就把number中的第机个元素传递给num

end=i+2;

fuhao[j++]=str[i+1];

}

}

if(str[i-1]!='q')//这里是考虑到数组的结尾有没有处理的数据

{ //比如说字符串"1+2+q+3"按照上面的处理最后就还有一个'3'没处理

for(--i,wei=0;i>=end;i--)

{

num[j]+=(str[i]-'0')*(int)pow(10,wei++);

}

}

for(jj=0;fuhao[jj]!='\0';jj++)//开始进行计算这时候原来有括号的式子

{ //已经简化为没有括号的式子

if(fuhao[jj]=='*'||fuhao[jj]=='/')//先乘除

{

if(fuhao[jj]=='*')//参与第jj个符号计算的数据是num[]中的第jj个和第jj+1

{

num[jj]*=num[jj+1];

}

else

{

num[jj]/=num[jj+1];

}

del(&fuhao[jj],&fuhao[jj+1]);

del2(num,jj+1);

jj=-1;

}

}

for(jj=0;fuhao[jj]!='\0';jj++)

{

if(fuhao[jj]=='+'||fuhao[jj]=='-')

{

if(fuhao[jj]=='+')

{

num[jj]+=num[jj+1];

}

else

{

num[jj]-=num[jj+1];

}

del(&fuhao[jj],&fuhao[jj+1]);

del2(num,jj+1);

jj=-1;

}

}

return num[0];

}

void del(char *i,char *j)

{

for(i;*j!='\0';j++)

{

*(i++)=*j;

}

*i=*j;

}

void del2(int num[],int i)

{

for(;i<100;i++)

{

num[i]=num[i+1];

}

}

void convert(char ss[],char *p,char *q)

{

int i=0;

char *pp;

for(pp=p;pp<=q;pp++)

{

ss[i++]=*pp;

}

}

刚开始偷了个懒,把number[]和num[] 设置成为int型,所以精度只能做到整数,其次还不能处理 小数和负数,

如果大家有兴趣就替小弟我改一下,提示一下要是想处理负数和小数在做字符串转换成数字的时候建议用atoi;

免的用什么pow10(),等我作业写完了自己在来改一下

小学科学作业计算器c语言,怎样用C实现一个简单科学计算器相关推荐

  1. c语言12之编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。

    题目: 设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除. 源代码: #include<stdio.h> ...

  2. java 做计算器 百度云_用Java做一个简单的计算器

    窗体 package Calc; import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * * 计算器程序6261 ...

  3. 用python的tkiner写计算器_Python(10)--利用tkinter模块实现一个简单的计算器功能

    #引入相关模块(math模块和tkinter模块) importmathimporttkinterclassMyCalculator:#初始化对象 def __init__(self):#设置主界面 ...

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

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

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

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

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

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

  7. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  8. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

  9. vue设置一个简单的计算器

    vue设置一个简单的计算器 <div id="app"><input type="text" v-model="n1"&g ...

最新文章

  1. JQuery Datatable用法
  2. 抢了人类编辑饭碗的AI算法,会完胜吗?
  3. 文献记录(part51)--识别聚类间远近关系的双几何体模型
  4. CodeForces - 1141CPolycarp Restores Permutation搜索+剪枝
  5. QT每日一练day20:事件处理机制
  6. FKGE:合格的知识图谱嵌入已经学会保护隐私啦!
  7. 微软开源深度学习优化库 DeepSpeed 连登 GitHub 趋势榜!
  8. ADO.NET Command对象简介
  9. vsftp服务日志不能显示中文临时解决(crontab五秒更新)
  10. 88se9230 linux raid,Gen10磁盘控制器Marvell 88SE9230阵列RAID设置方法教程图文
  11. PMP培训机构转个圈
  12. Java注释 及 标识符
  13. 华为设备推送syslog到日志服务器配置
  14. day10图书编辑删除 字段参数choise(重要)多对多三种创建方式 ajax语法结构
  15. A40i nfs挂载问题
  16. 直播平台杜绝违规内容之道
  17. 计算机系统未来发展方向论文,浅谈计算机未来发展趋势(期末论文)
  18. 如何将项目部署到服务器:从选择服务器到维护应用程序的全流程指南
  19. USB Mass Storage Class
  20. 微信自主出题,答题小程序开发,微信扫描二维码实现方法,扫二维码出试卷答题的软件!

热门文章

  1. ArrayList使用
  2. 【转】几款移动跨平台App开发框架比较
  3. React Native – 使用 JavaScript 开发原生应用
  4. asp.net简单的投票系统代码 转载牛腩兄弟的
  5. Windows Mobile开发的一些小技巧(持续更新)
  6. [转载] python中list与string的转换
  7. Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(上)
  8. ava集合---ArrayList的实现原理
  9. 《深入理解Spark:核心思想与源码分析》——SparkContext的初始化(叔篇)——TaskScheduler的启动...
  10. 汇编语言学习之汇编语言源程序的输入