# 简易计算器使用说明书
本计算器共可实现五种功能 :
- 同维度向量的运算
- 基于顺序表的多项式计算
- 基于链表的多项式计算
- 表达式求值
- 带变量的表达式求值
## 一、同维度向量的运算
可以进行两个同维度向量之间的加法运算,减法运算,夹角运算。
操作:进入计算机主页,按照页面提示,输入 0,进入向量计算模式,输入两个向量。注意:向量之间的元素必须用一个空格分隔,否则会出现错误并报错。输入向量之后,根据提示可以选择想要进行的运算。
## 二、基于顺序表、链表的多项式计算
可以进行多项式的加法运算,减法运算,乘法运算,以及求导运算。
进入计算器后按照提示,选择 1 或 2,进入多项式运算,之后选择你想要进行的运算,选择后按照要求输入计算的多项式系数与指数。
**注意**:只需要输入系数与指数,并且两个数之间只能有一个空格,否则会报错。输入之后,按回车键即可完成运算
## 三、表达式求值计算
可以进行简单表达式的四则混合运算求值。
进入计算器主页,按照提示,选择 3 进入表达式求值计算模式。输入表达式。**注意:要形式正确,括号匹配,避免不必要的空格**。输入完毕之后,按下回车键可以完成计算。扩展功能:本计算器也可以实现小数的运算,所以输入小数也是可以被允许的。
## 四、含单变量的表达式求值
进入计算器主页选择 4,进入单变量表达式求值模式。
输入表达式,**注意:不要有不必要的空格,只能是单变量函数输入完毕后按下回车键。** **这里实现了扩展扩展功能 3,我们可以对变量设定任意名称,可以用 c/c++ 的标识符。**
**功能实现说明**:(要求的三个扩展功能都已经实现)
### 1.对于解析字符串:
- 字符串的输入中我们使用
```c++
scanf("%[^\n]",A);
```
- 这样能够保证不受空格影响,并且输入换行符时,能够结束输入
```c++
while((c=(char)getchar()!='\n'&&c!=EOF));
```
- 这一条语句是防止换行符的输入影响后面的输入
```c++
sscanf(add,"%lf",&t.coef);
```
- 应用 sscanf 语句函数,类似于 python 中的 eval 函数,可以将字符串解析为想要的类型
### 2.如何使用浮点数计算
加入布尔变量 Decimal,用来判断是否是小数点之后的数,如果是每往后一位都要使用乘上 pow(10,-count)
```c++
if(DetectDecimal)
{//如果是小数点后面的数
++count;//小数点后几位
Pop(OPND,x);
Push(OPND,x+pow(10,-count)*(A[i]-'0'));//前面的数字乘10
}else
{
//如果是小数点前面的数
Pop(OPND,x);
Push(OPND,10*x+(A[i]-'0'));
}
}else
{//这种情况是前面是操作符,然后后面有数字
Push(OPND,A[i]-'0');
}
```
### 3.变量替换的实现
```
void Replace(char* A, char*var,char* value)
{
int len1 =strlen(var),len2 = strlen(value);
char rstr[200], * p, * start;
start = A;
while(1){
p = strstr(start,var);//(1)
if(p == NULL) break;
strcpy(rstr, p+len1); //(2)
strcpy(p, value); //(3)
strcpy(p+len2, rstr); //(4)
start = p+len2; //(5)
}
}
```
### 利用字符串函数实现变量的替换
**代码测试用例**:
**向量加法计算**:
- 1.**(1,1)+(-1,-1)**
**预期结果(0.000,0.000)**
2.****(1,1)+(1,1)**
**预期结果(2.000,2.000)**
3.****(0,0)+(1,1)**
**预期结果(1.000,1.000)**
**向量减法计算**
- 1.**(1,1)-(1,1)**
**预期结果(0.000,0.000)**
2.**(99999.9999,1111.111)-(8886,6.6)**
**预期结果(9113.9999,1104.511)**
**向量的夹角运算**
- 1.**(1,1) (1,1)**
**预期结果:1**
2.**(1,1)(-1,-1)**
**预期结果:-1**
3.**(1,0)(0,1)**
**预期结果:0**
**多项式加法测试用例**
- **A:1 1 B**:**1 1**
**预期结果:2.00x**
- **A: 1 1 1 2 1 3**
**B: 1 1 1 2 1 3**
**预期结果:2.00x+2.00x^2+2.00x^3**
**多项式减法测试用例**
- **A:1 1**
**B:1 1**
**预期结果:0**
- **A:2 2**
**B:1 2**
**预期结果:1.00x^2**
- **A:1 2**
**B:2 2**
**预期结果:-1.00x^2**
**多项式乘法测试用例**
- **A****:1 1**
**B: 0 0**
**预期结果: 0**
- **A: 1 1**
**B: 1 1 1 2 1 3 1 4**
**预期结果:1.00x^2+1.00x^3+1.00x^4+1.00x^5**
- **A: -1 0 1 1**
**B: 1 0 1 1**
**预期结果:-1.00 + 1.00x^2**
**多项式求导测试用例**
- **A: 1 0** **阶数:1预期结果:0**
- **A: 1 100** **阶数:1 预期结果:100.00x^99**
- **A: 1 3** **阶数:3 预期结果:6.00**
**表达式求值测试用例**
- **1+1\*3+4** **预期结果:8.00000**
- **2+3\*4** **预期结果:14.000000**
- **2.5\*2+1.12** **预期结果:6.120000**
- **(5+1.2)\*6+4/2** **预期结果:39.200000**
**带变量表达式的求值**
- **X1+1** **变量赋值1 预期结果:2.000000**
- **1+(y34+2.24)** **赋值2 预期结果:5.240000**
- **(k-4)/2+3\*6 赋值1预期结果:16.500000**
# 五、思考:
**工具的优点**:实现了全部的扩展功能,能完成各种操作,熟练的应用了 C 语言中头文件的使用,程序模块化处理,以后扩展功能时比较方便
**工具的缺点**:没有一个好看的 GUI,现在的功能还比较少,等待以后的添加
工具的应用场景与前景:个人认为这次实现的计算器,功能上算不上全但是对于以后的改进空间比较大,之后可以添加其他接口,比如矩阵预算,微积分运算等。

神仙别闹
- 粉丝: 2348
- 资源: 7314