这个计算器编写没有参考什么算法,都是自己想出来的,支持加减乘除,单个括号和嵌套括号,不能计算并列的括号。程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
/*全局变量*/
/*int n=0;//n计算num[255]实际存入的字符个数
int warn=0;
char num[255];//存放输入公式的字符串数组
char tnsarr[30];//存放数字字符的临时字符串数组
int tnsarr_i=0;//存放数字字符的临时字符串数组的的下标
float numarr[30];//存放数字的数组
int numarr_i=0;//存放数字的数组的下标
char jcarr[30];//存放运算符的字符串数组
int jcarr_i=0;//存放运算符的字符串数组的下标*/
int n=0;//n计算num[255]实际存入的字符个数
int warn=0;
float fn=0;//存放临时计算结果
char cutnum[];
int cutnum_i;
/*函数声明*/
void cut(char cutnum[],int cutnum_i);//判断公式中是否存在括号
void cutno(char cutno[],int cutno_i);//找出没有括号的那一层,四则运算
void cutyes(char cutyes[],int cutyes_i,int n1,int n2);//有括号,截取括号内公式
void Countno(char Countno[],int n);//当前公式没有括号,分离数字和运算符
void Countyes(char Countyes[],int n,int n1,int n2,float fn);当前公式有括号,分离数字和运算符
void CountC(float numarr[],int numarr_i,char jcarr[],int jcarr_i);//计算乘除法,返回值为代入公式的最终计算结果
void CountJ(float numarr[],int numarr_i,char jcarr[],int jcarr_i);//计算加减法,返回值为代入公式的最终计算结果
/*
void Count(void);
void CountC(void);
void CountJ(void);
float cut(char cutnum[],int cutnum_i);//截取括号中数据,cutnum:输入的字符串,m字符串长度
*/
/*主函数,保存输入的计算公式,字符串的形式*/
int main()
{
int n=0;//n计算num[255]实际存入的字符个数
char num[255];//存放输入公式的字符串数组
int warn=0;
int i=0;
printf("*******************************C语言简易计算器******************************\n");
printf("*******************************不支持小数点输入******************************\n");
printf("支持单层或嵌套括号运算如:2*(2+3-(6-5))/2,不支持并列括号如:2*(2+3)-(6-5)/2\n");
scanf("%s",&num);//接收输入的公式以字符串形式
//printf("********************C语言简易计算器********************\n");
for(i=0;;i++)
{
if(num[i]=='\0')
{
n=i;//n计算num[255]实际存入的字符个数
//printf("实际存入的字符个数%d\n",n);
break;
}
}
/*验证公式输入是否正确*/
for(i=0;i<n;i++)
{
if((num[i]>=48&&num[i]<=57)||num[i]=='*'||num[i]=='/'||num[i]=='+'||num[i]=='-'||num[i]=='('||num[i]==')')
{
warn=0;
}
else
{
warn++;
}
}
if(warn==0)
{
cut(num,n);//公式输入正确,判断公式中是否有括号
printf("公式计算结果:%f\n",fn);//输出结果,字符类型要对
}