任务描述
请编写一个程序:把程序build后生成的可执行文件(假设文件名为mycal.exe)放到C盘根目录下,在命令行提示符下,转到c:\下 ,键入mycal 100+200 运行的结果为 300.00;键入mycal 100*200 运行的结果为20000.00 等。 程序中的运算符与C语言中的运算符在字符上保持一致。计算结果保留小数点后两位有效数字
编程要求
本程序的源文件包含两个,1个是main函数所在的源文件main.c,另一个是对一个字符串进行解析的函数的定义源文件myfun.c,你只需要在理解main.c中代码的基础上,在右侧代码区给定的地方完成myfun.c中的代码即可(你也可以删除已有代码,按照你的思路从零开始)。main.c的代码如下:
#include<stdio.h>
void processUserInputStr(char* s);
int main(int argc,char* argv[])
{
processUserInputStr(argv[1]);
return 0;
}
#include <string.h> #include <stdlib.h> //s:一个形如a[运算符]b的字符串,例如:4.5+9,6-9,4/5,8*7... //该函数经过处理,输出数的运算结果,例如若s为"20.3+1",则该函数在屏幕上输出21.30(保留小数点后面2位有效数字 //此函数内部操作的基本算法为: //第1步:找到运算符对应的位置索引 //第2步:根据运算符位置,将其前面的字符串复制到strA,后面的字符串复制到strB //第3步:将strA,strB转换为数值(使用函数atof,具体用法请百度)a,b //第4步:根据运算符,对a,b进行相应的运算 //第5步:输出运算结果result void processUserInputStr(char *s) { int len = strlen(s); //s中有效字符的个数 //strA,strB分别用于存放两个操作数对应的字符串 char strA[100], strB[100]; //a,b分别用于存放将字符串转换后的数,result用于保存运算结果 double a, b, result; char op;//用于存储s中的运算符对应的字符串 int k, posOp; //posOp:符号的位置索引 /**********begin**********/ for (k = 0; k < len; k++) { if (*(s + k) == '+') { posOp = k; op = *(s + k); for (k = 0; k < posOp; k++) { strA[k] = *(s + k); } for (k = 0; posOp < len; k++, posOp++) { strB[k] = *(s + posOp+1); } a = atof(strA); b = atof(strB); result = a + b; } else if (*(s + k) == '-') { posOp = k; op = *(s + k); for (k = 0; k < posOp; k++) { strA[k] = *(s + k); } for (k = 0; posOp < len; k++, posOp++) { strB[k] = *(s + posOp+1); } a = atof(strA); b = atof(strB); result = a - b; } else if (*(s + k) == '*') { posOp = k; op = *(s + k); for (k = 0; k < posOp; k++) { strA[k] = *(s + k); } for (k = 0; posOp < len; k++, posOp++) { strB[k] = *(s + posOp+1); } a = atof(strA); b = atof(strB); result = a * b; } else if (*(s + k) == '/') { posOp = k; op = *(s + k); for (k = 0; k < posOp; k++) { strA[k] = *(s + k); } for (k = 0; posOp < len; k++, posOp++) { strB[k] = *(s + posOp+1); } a = atof(strA); b = atof(strB); result = a / b; } } printf("%.2f",result); /**********end**********/ }