#include<stdio.h> #include<stdlib.h> #include<string.h> int number(char ch); double get(char* str, int* v); double add(char* str); double muto(char* str, int* v); char* analy(char* str, int* v); double get(char* str, int* v) { double result = 0.0; int index = v; while ((str + index) == '(') { char* q = NULL; v = ++index; q = analy(str, v); if (q != NULL) { result = add(q); free(q); q = NULL; } return result; } while (number((str + index))) { result = result * 10 + (str[index] - '0'); index++; } if ((str + index) == '.') { double b = 1.0; while (number((str + ++index))) { b /= 10; result += b * ((str + index) - '0'); } } v = index; return result; } double add(char str) { double x = 0.0; int index = 0; x = muto(str, &index); while (1) { char ch = (str+index); index++; switch (ch) { case '\0': return x; case '+': x += muto(str,&index); break; case '-': x -= muto(str,&index); break; default: break; } } } double muto(char str, int v) { double x = 0.0; x = get(str, v); while (1) { if ((str + (v)) == '') { (v)++; x = get(str, v); } else if ((str + (v)) == '/') { (v)++; x /= get(str, v); } else { break; } } return x; } int number(char a) { int x = 0; if (a >= '0' && a <= '9') { x = 1; } return x; } char analy(char str, int v) { char q = NULL; int num = 0; int w = v; do { switch ((str + (v))) { case '(': num++; break; case ')': if (num==0) { ((v))++; q = malloc(sizeof(char) * (*v - w)); if (q != NULL) { strncpy(q, str + w, v - w - 1); return q; } else { return NULL; } } else { num--; } break; default: break; } } while ((str + (*v)++) != '\0'); return 0; } int main() { printf("请输入算式:\n"); char str[128] = {0}; scanf("%s",str); double res = add(str); printf("计算结果 :%f \n", res); } 请详细分析add函数的功能
时间: 2024-03-03 14:52:35 浏览: 74
add函数的功能是将输入的字符串表示的算式进行加法和减法的运算,并返回计算结果。其具体实现过程如下:
1. 首先调用muto函数,获取第一个数值x,以及之后的字符位置index。
2. 循环,判断当前字符,如果为结束符'\0',则返回x;如果为加号'+',则调用muto函数获取下一个数值,加到x上;如果为减号'-',则调用muto函数获取下一个数值,从x中减去。
3. 如果不是以上三种情况,则继续循环判断下一个字符,直到遇到结束符'\0'为止。
4. 返回计算结果x。
需要注意的是,muto函数和get函数是辅助函数,用于获取数值和进行乘法和除法的运算。analy函数是用于解析括号的辅助函数。整个算法的实现是基于递归的思想,即将一个算式拆分成多个小算式进行计算。
阅读全文