C语言实现任意长度多项式计算(非递归,不带括号)
2017-11-24 16:36
483 查看
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> //执行计算过程的子函数 double calc(double * pNum, char* pCh, unsigned int a); int main() { double* pNum = NULL; //用于存储数字 char* pCh = NULL; //用于存储符号 AA: pNum = (double*)malloc(sizeof(double)); //分配一个double内存空间 pCh = (char*)malloc(sizeof(char)); //分配一个char型内存空间 scanf("%lf%c", pNum, pCh); unsigned int a = 2; //用于动态内存分配 while (*(pCh+a-2) != '=') //只要输入的符号不是‘=’ { pNum = (double*)realloc(pNum,a*sizeof(double)); //增加一个double型空间 pCh = (char*)realloc(pCh,a*sizeof(char)); //增加一个char型内存空间 scanf("%lf%c", pNum+a-1, pCh+a-1); a++; } //将最后的结果移到输入多项式的等号后面 for (unsigned int i = 0; i < a-1; i++) { printf(" "); } double value = calc(pNum, pCh, a - 1); //调用计算函数 printf("%lf\n\n",value); //输出计算结果 free(pNum); //释放内存 free(pCh); //释放内存 goto AA; //跳回,准备接收下一个多项式 system("pause"); return 0; } //用于计算多项式 double calc(double * pNum, char* pCh, unsigned int a) { unsigned i = 0; //先遍历多项式,计算出乘除 while (*(pCh + i) != '=') { if (*(pCh + i) == '*') { //计算并移位 *(pNum + i) = (*(pNum + i)) * (*(pNum + i + 1)); *(pCh + i) = *(pCh + i + 1); for (unsigned int j = i + 1; j < a - 1; j++) { pNum[j] = pNum[j + 1]; pCh[j] = pCh[j + 1]; } a--; i--; //用于调试的代码 //for (unsigned int i = 0; i < a; i++) //{ // printf("%d%c", pNum[i], pCh[i]); //} //printf("\n"); } else if (*(pCh + i) == '/') { *(pNum + i) = (*(pNum + i)) / (*(pNum + i + 1)); *(pCh + i) = *(pCh + i + 1); for (unsigned int j = i + 1; j < a - 1; j++) { pNum[j] = pNum[j + 1]; pCh[j] = pCh[j + 1]; } a--; i--; ////用于调试的代码 //for (unsigned int i = 0; i < a; i++) //{ // printf("%d%c", pNum[i], pCh[i]); //} //printf("\n"); } i++; } i = 0; //再遍历多项式计算加减 while (*(pCh + i) != '=') { if (*(pCh + i) == '+') { *(pNum + i) = (*(pNum + i)) + (*(pNum + i + 1)); *(pCh + i) = *(pCh + i + 1); for (unsigned int j = i + 1; j < a - 1; j++) { pNum[j] = pNum[j + 1]; pCh[j] = pCh[j + 1]; } a--; i--; ////用于调试的代码 //for (unsigned int i = 0; i < a; i++) //{ // printf("%d%c", pNum[i], pCh[i]); //} //printf("\n"); } else if (*(pCh + i) == '-') { *(pNum + i) = (*(pNum + i)) - (*(pNum + i + 1)); *(pCh + i) = *(pCh + i + 1); for (unsigned int j = i + 1; j < a - 1; j++) { pNum[j] = pNum[j + 1]; pCh[j] = pCh[j + 1]; } a--; i--; ////用于调试的代码 //for (unsigned int i = 0; i < a; i++) //{ // printf("%d%c", pNum[i], pCh[i]); //} //printf("\n"); } i++; } return *pNum; //计算的结果存在pNum的第一个内存地址 }
相关文章推荐
- 多项式计算-C语言递归实现
- 数据结构 使用递归任意进制转换(c语言实现)
- C语言---递归反向输出任意长度的字符串
- C语言实现 厄密多项式 (递归)
- c语言单链表实现多项式计算
- C语言---递归反向输出任意长度的字符串
- 用C语言编写函数,实现strlen计算字符串长度的功能
- 发个小程序玩,实现任意长度十进制整数加法。传说中的什么复试C语言题
- C语言实现链表的创建、计算链表长度及两个链表的合并
- C语言通过递归实现反向计算
- 求字符串长度之递归与非递归的C语言实现
- C语言实现括号匹配,中缀表达式转后缀表达式并计算的算法
- C语言 编写递归函数实现厄密多项式计算。
- 计算任意2个日期之间的天数(C语言实现)
- 【c语言】厄密多项式--用递归实现
- C语言实现Huffman树并计算带权路径长度
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- 用C语言编写函数,实现strlen计算字符串长度的功能
- 用c语言实现数学多项式的计算
- 计算某个日期起N天后的日期(C语言递归实现)