重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这可不是一个容易解决的问题,实际上你在做的就是一个控制台下的计算器程序。由于我之前也有过类似的思考(但没有完成),所以可以与你共同分享一下心得:
创新互联是专业的巴马网站建设公司,巴马接单;提供网站制作、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行巴马网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
这个程序要对输入的字符串信息进行语法分析,也就是说我们实际上就是在完成编译器的工作(语法分析、语义分析、执行指令)。
在语法分析阶段,要检查整个数学表达式是否合法。比如说括号的数量是否成对出现(数量匹配)、是否有非数字符号的录入、非数字符号是否是函数、函数之后是否紧随括号等等。
语义分析阶段,要分析整个数学表达式中的运算优先级顺序,并由此通过树分解出整个数学表达式。
指令执行阶段除了要根据树形结构计算结果之外,根据程序的功能可能还要记录既往的数学表达式以及其结果、剔除缓冲中超过上限的学校表达式等等。
如果题主有信心和耐心,可以参考一下Linux下的计算器程序“bc”的源代码,也是用C语言实现的。
在C语言中用strtok函数
#include string.h
char *strtok( char *str1, const char *str2 );
功能:函数返回字符串str1中紧接“标记”的部分的指针, 字符串str2是作为标记的分隔符。如果分隔标记没有找到,函数返回NULL。为了将字符串转换成标记,第一次调用str1 指向作为标记的分隔符。之后所以的调用str1 都应为NULL。
例子:
char str[] = "now # is the time for all # good men to come to the # aid of their country";
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is \"%s\"\n", result );
result = strtok( NULL, delims );
}
结果:
result is "now "
result is " is the time for all "
result is " good men to come to the "
result is " aid of their country"
C语言有以下几种取整方法:
1、直接赋值给整数变量。如:
int i = 2.5; 或 i = (int) 2.5;
这种方法采用的是舍去小数部分
2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。
3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:
floor(2.5) = 2
floor(-2.5) = -3
4、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:
ceil(2.5) = 3
ceil(-2.5) = -2
floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。