功能要求:
1.从键盘输入一段表达式(字符串),其中含有整数、加、减、乘、除。
2.计算表达式的值。
3.事先约定表达式无括号、无浮点数、无负数、无错误。
exp存放输入的表达式 opera存放表达式中的运算符 num存放表达式中的数字。
注意:该程序应兼容输入表达式(字符串)中有空格的情况,所以选择gets()而不是scanf()来获取字符串。(字符输入函数getchar 字符输出函数putchar 字符串输入函数gets 字符串输出函数puts,gets只以回车作为分隔符;scanf以空格作为分隔符)
函数transform将数字表达式中的数字字符转化为整数数字并按顺序提出;
传入参数:表达式、数字数组、用来表示数字数组元素个数的n。
#include<string.h>中strlen()函数 执行strlen(exp)次循环,当表达式中为空格时,跳过;当表达式中元素为数字时将数字字符转化为整数数字
"temp = temp * 10 + exp[i] - '0';
flag = 1;
i++;" 指向下一个元素,如果下一个元素仍为数字字符,则上一个字符*10作为十位上的数字,第二位字符作为个数上的数字,以此类推;如果下一个元素不是数字字符,执行i++,并将temp清零。继续执行最开始的循环。用flag作为是否扫描到数字字符的表征,每每上一步的while循环结束时,检查flag的数值,如果扫描到数组字符,则将其放入准备好的数字数组中。
函数getoperator用于提取运算符 ;步骤与上个函数类似。
函数calculate用于进行计算;
传入参数有:字符数组、数字数组以及数字数组的元素个数(用于限制循环运行的次数)
由于计算中各步结果皆有可能为浮点数,故定义一个浮点数数组,将数字数组中的原始数据原封不动的传入浮点数数组。
遍历运算符数组,扫描到“+”时,先不做处理;
扫描到“-”时,将其后数字由正值转化为负值,并将”-“改为”+“;
扫描到”*“时,将与”*“相邻的两个数字做乘法并存储到其中一个位置另一个位置归零。”*“改为”+“;
扫描到”/"时,做法与上步类似。
计算最终浮点数数组中各个元素之和。并返回结果。